From fb0491a6cb9618eaff6a91d027c516970c25b960 Mon Sep 17 00:00:00 2001 From: Governikus Date: Mon, 30 Sep 2019 17:22:19 +0200 Subject: [PATCH] Add revision: v1.18.0 --- CMakeGraphVizOptions.cmake | 2 +- CMakeLists.txt | 9 +- LICENSE.officially.txt | 159 +- LICENSE.txt | 84 +- README.rst | 2 +- appveyor.yml | 21 +- cmake/Appcast.cmake | 6 +- cmake/CompilerFlags.cmake | 27 +- cmake/DefaultFiles.cmake | 3 - cmake/Helper.cmake | 68 +- cmake/Install.cmake | 38 +- cmake/Libraries.cmake | 7 +- cmake/Messages.cmake | 8 +- cmake/Packaging.cmake | 111 +- cmake/Tools.cmake | 338 +- cmake/android.toolchain.cmake | 3 +- cmake/iOS.toolchain.cmake | 238 +- docs/installation/README.de.rst | 2 +- docs/installation/conf.py.in | 2 +- docs/releasenotes/1.16.2.rst | 2 +- docs/releasenotes/1.18.0.rst | 21 + docs/releasenotes/_themes/appcast/layout.html | 5 + docs/releasenotes/announce.rst | 2 +- docs/releasenotes/appcast.rst | 4 +- docs/releasenotes/conf.py.in | 2 +- docs/releasenotes/general.rst | 2 +- docs/releasenotes/issues.rst | 33 +- docs/releasenotes/support.rst | 24 +- docs/releasenotes/versions.rst | 8 + docs/sdk/android.rst | 2 +- docs/sdk/conf.py.in | 2 +- docs/sdk/messages.rst | 2 +- libs/CMakeLists.txt | 136 +- libs/README.rst | 16 +- libs/patch.py | 4 +- libs/patches/openssl-Adjust-iOS-target.patch | 25 + .../openssl-android-shlib_variant.patch | 25 + ...d-Q_CORE_EXPORT-to-lcEventDispatcher.patch | 38 + ...qt-Add-work-around-for-freebsd-build.patch | 8 +- libs/patches/qt-Adjust-iOS-target.patch | 26 + ...h-fix-ambiguous-conversions-for-macO.patch | 253 ++ ...-Bluetooth-fix-ambiguous-conversions.patch | 97 + .../qt-Disable-qmltime-for-shared-build.patch | 32 + .../qt-Disable-unused-imageformats.patch | 15 +- .../qt-Enable-debug-output-for-OpenSSL.patch | 0 ...ild-with-no-feature-printer-on-macOS.patch | 159 + ...qt-Fix-build-with-no-feature-printer.patch | 54 + ...Labs-specific-plugins-from-the-build.patch | 25 + ...Remove-unused-plugins-from-the-build.patch | 37 + libs/patches/qt-disable-designer.patch | 52 + libs/qt-install.qs | 98 + libs/qt.cmake | 95 + patches/openssl-DSA-mod-inverse-fix.patch | 78 - patches/openssl-Ignore-disabled-ciphers.patch | 30 - ...lity-in-DSA-signature-generation-CVE.patch | 109 - ...lity-in-ECDSA-signature-generation-C.patch | 44 - patches/openssl-android-shlib_variant.patch | 11 - ...dd-IsoDep-to-the-techList-on-Android.patch | 25 - patches/qt-Android-Fix-crash.patch | 30 - .../qt-Android-fix-compile-with-NDK-r18.patch | 37 - ...rror-to-fix-QMetaObject-invokeMethod.patch | 262 -- ...-use-of-syscall-for-statx-2-and-rena.patch | 135 - ...gnalConnected-when-signals-have-been.patch | 185 - ...-Support-IPv6-addresses-with-zone-id.patch | 108 - ...Labs-specific-plugins-from-the-build.patch | 52 - ...oString-when-forming-the-Host-header.patch | 55 - ...r-provided-session-data-if-available.patch | 33 - .../qt-Work-Around-FreeBSD-v12-build.patch | 30 - ...igure-detect-fxc.exe-more-thoroughly.patch | 132 - ...qt-configure-refactor-directx-checks.patch | 442 -- patches/qt-disable-designer.patch | 36 - patches/qt-fix-macOS-no-printer.patch | 19 - resources/ausweisapp.qrc | 43 +- resources/ausweisapp_desktop.qrc | 20 +- resources/ausweisapp_mobile.qrc | 65 +- resources/config.json.in | 12 +- .../images/android/hdpi/background_npa.png | Bin 0 -> 1520 bytes .../images/android/hdpi/foreground_npa.png | Bin 0 -> 2462 bytes .../android/hdpi/foreground_npa_beta.png | Bin 0 -> 3684 bytes .../android/hdpi/foreground_npa_preview.png | Bin 0 -> 3718 bytes resources/images/android/hdpi/npa.png | Bin 9602 -> 2212 bytes resources/images/android/hdpi/npa_beta.png | Bin 14831 -> 2826 bytes resources/images/android/hdpi/npa_preview.png | Bin 14806 -> 2840 bytes .../images/android/ldpi/background_npa.png | Bin 0 -> 718 bytes .../images/android/ldpi/foreground_npa.png | Bin 0 -> 1790 bytes .../android/ldpi/foreground_npa_beta.png | Bin 0 -> 2165 bytes .../android/ldpi/foreground_npa_preview.png | Bin 0 -> 2159 bytes resources/images/android/ldpi/npa.png | Bin 4420 -> 1532 bytes resources/images/android/ldpi/npa_beta.png | Bin 5689 -> 1681 bytes resources/images/android/ldpi/npa_preview.png | Bin 5677 -> 1690 bytes .../images/android/mdpi/background_npa.png | Bin 0 -> 963 bytes .../images/android/mdpi/foreground_npa.png | Bin 0 -> 2039 bytes .../android/mdpi/foreground_npa_beta.png | Bin 0 -> 2622 bytes .../android/mdpi/foreground_npa_preview.png | Bin 0 -> 2702 bytes resources/images/android/mdpi/npa.png | Bin 6234 -> 1763 bytes resources/images/android/mdpi/npa_beta.png | Bin 8467 -> 2032 bytes resources/images/android/mdpi/npa_preview.png | Bin 8509 -> 2033 bytes resources/images/android/npa.svg | 23 + resources/images/android/npa_background.svg | 5 + resources/images/android/npa_beta.svg | 216 + resources/images/android/npa_preview.svg | 138 + .../{search.svg => android/search_icon.svg} | 0 .../images/android/xhdpi/background_npa.png | Bin 0 -> 2073 bytes .../images/android/xhdpi/foreground_npa.png | Bin 0 -> 2968 bytes .../android/xhdpi/foreground_npa_beta.png | Bin 0 -> 4821 bytes .../android/xhdpi/foreground_npa_preview.png | Bin 0 -> 4855 bytes resources/images/android/xhdpi/npa.png | Bin 13106 -> 2691 bytes resources/images/android/xhdpi/npa_beta.png | Bin 22172 -> 3642 bytes .../images/android/xhdpi/npa_preview.png | Bin 21895 -> 3702 bytes .../images/android/xxhdpi/background_npa.png | Bin 0 -> 2548 bytes .../images/android/xxhdpi/foreground_npa.png | Bin 0 -> 3966 bytes .../android/xxhdpi/foreground_npa_beta.png | Bin 0 -> 6933 bytes .../android/xxhdpi/foreground_npa_preview.png | Bin 0 -> 7058 bytes resources/images/android/xxhdpi/npa.png | Bin 20405 -> 3524 bytes resources/images/android/xxhdpi/npa_beta.png | Bin 37219 -> 5282 bytes .../images/android/xxhdpi/npa_preview.png | Bin 36960 -> 5231 bytes .../images/android/xxxhdpi/background_npa.png | Bin 0 -> 3409 bytes .../images/android/xxxhdpi/foreground_npa.png | Bin 0 -> 4972 bytes .../android/xxxhdpi/foreground_npa_beta.png | Bin 0 -> 9108 bytes .../xxxhdpi/foreground_npa_preview.png | Bin 0 -> 8693 bytes resources/images/android/xxxhdpi/npa.png | Bin 28198 -> 4626 bytes resources/images/android/xxxhdpi/npa_beta.png | Bin 53277 -> 7053 bytes .../images/android/xxxhdpi/npa_preview.png | Bin 52529 -> 7001 bytes resources/images/arrowLeft.svg | 5 + resources/images/arrowRight.svg | 13 +- resources/images/desktop/background.png | Bin 170322 -> 0 bytes resources/images/desktop/bell_green.svg | 9 + resources/images/desktop/bell_red.svg | 9 + resources/images/desktop/bell_white.svg | 9 + resources/images/desktop/id_card.png | Bin 0 -> 584984 bytes .../images/desktop/info_application_log.svg | 5 + resources/images/desktop/info_diagnosis.svg | 5 + resources/images/desktop/info_license.svg | 5 + resources/images/desktop/info_manual.svg | 5 + resources/images/desktop/info_questions.svg | 5 + .../images/desktop/info_rate_application.svg | 5 + .../images/desktop/info_report_error.svg | 5 + resources/images/desktop/info_setup.svg | 4 + resources/images/desktop/info_version.svg | 5 + resources/images/desktop/main_info.svg | 6 + resources/images/desktop/pin-letter-page1.png | Bin 0 -> 453516 bytes resources/images/desktop/pin-letter-page2.png | Bin 0 -> 340062 bytes .../AppIcon.appiconset/icon1024.png | Bin 23869 -> 32319 bytes .../AppIcon.appiconset/icon20.png | Bin 926 -> 941 bytes .../AppIcon.appiconset/icon20@2x.png | Bin 1727 -> 1832 bytes .../AppIcon.appiconset/icon20@3x.png | Bin 2280 -> 2420 bytes .../AppIcon.appiconset/icon60@2x.png | Bin 3597 -> 4160 bytes .../AppIcon.appiconset/icon60@3x.png | Bin 4876 -> 5681 bytes .../AppIcon.appiconset/icon76.png | Bin 2609 -> 2870 bytes .../AppIcon.appiconset/icon76@2x.png | Bin 4348 -> 4992 bytes .../AppIcon.appiconset/icon83.5@2x.png | Bin 4617 -> 5536 bytes .../AppIcon.appiconset/iconSmall.png | Bin 1422 -> 1408 bytes .../AppIcon.appiconset/iconSmall40.png | Bin 1726 -> 1832 bytes .../AppIcon.appiconset/iconSmall40@2x.png | Bin 2686 -> 2968 bytes .../AppIcon.appiconset/iconSmall40@3x.png | Bin 3597 -> 4160 bytes .../AppIcon.appiconset/iconSmall@2x.png | Bin 2224 -> 2373 bytes .../AppIcon.appiconset/iconSmall@3x.png | Bin 2857 -> 3162 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/launchImage.png | Bin 0 -> 9247 bytes .../LaunchImage.imageset/launchImage@2x.png | Bin 0 -> 19277 bytes .../LaunchImage.imageset/launchImage@3x.png | Bin 0 -> 30087 bytes .../AppIcon.appiconset/icon1024.png | Bin 42717 -> 53532 bytes .../AppIcon.appiconset/icon20.png | Bin 1153 -> 1179 bytes .../AppIcon.appiconset/icon20@2x.png | Bin 1930 -> 2001 bytes .../AppIcon.appiconset/icon20@3x.png | Bin 2646 -> 2801 bytes .../AppIcon.appiconset/icon60@2x.png | Bin 5080 -> 5550 bytes .../AppIcon.appiconset/icon60@3x.png | Bin 7555 -> 8205 bytes .../AppIcon.appiconset/icon76.png | Bin 3304 -> 3562 bytes .../AppIcon.appiconset/icon76@2x.png | Bin 6429 -> 7022 bytes .../AppIcon.appiconset/icon83.5@2x.png | Bin 6884 -> 7646 bytes .../AppIcon.appiconset/iconSmall.png | Bin 1523 -> 1565 bytes .../AppIcon.appiconset/iconSmall40.png | Bin 1930 -> 2001 bytes .../AppIcon.appiconset/iconSmall40@2x.png | Bin 3420 -> 3655 bytes .../AppIcon.appiconset/iconSmall40@3x.png | Bin 5080 -> 5550 bytes .../AppIcon.appiconset/iconSmall@2x.png | Bin 2577 -> 2714 bytes .../AppIcon.appiconset/iconSmall@3x.png | Bin 3670 -> 3915 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/launchImage.png | Bin 0 -> 72425 bytes .../LaunchImage.imageset/launchImage@2x.png | Bin 0 -> 160535 bytes .../LaunchImage.imageset/launchImage@3x.png | Bin 0 -> 266506 bytes resources/images/iOS/appIcons/npa.svg | 20 + resources/images/iOS/appIcons/npa_beta.svg | 213 + .../iOS/launchImages/Default-568h@2x.png | Bin 8608 -> 0 bytes .../iOS/launchImages/launchImage1024@2x.png | Bin 17252 -> 0 bytes .../iOS/launchImages/launchImage1024@3x.png | Bin 41445 -> 0 bytes .../iOS/launchImages/launchImage1112@2x.png | Bin 24985 -> 0 bytes .../iOS/launchImages/launchImage1112@3x.png | Bin 51368 -> 0 bytes .../iOS/launchImages/launchImage1366@2x.png | Bin 34328 -> 0 bytes .../iOS/launchImages/launchImage1366@3x.png | Bin 65669 -> 0 bytes .../iOS/launchImages/launchImage568@2x.png | Bin 8608 -> 0 bytes .../iOS/launchImages/launchImage568@3x.png | Bin 12957 -> 0 bytes .../iOS/launchImages/launchImage667@2x.png | Bin 9389 -> 0 bytes .../iOS/launchImages/launchImage667@3x.png | Bin 15573 -> 0 bytes .../iOS/launchImages/launchImage736@2x.png | Bin 12474 -> 0 bytes .../iOS/launchImages/launchImage736@3x.png | Bin 17640 -> 0 bytes resources/images/iOS/more/icon_mehr_npa.svg | 15 + .../iOS/more/icon_mehr_remotereader.svg | 14 - .../images/iOS/more/icon_mehr_report.svg | 11 + .../images/iOS/more/icon_mehr_verlauf.svg | 18 + resources/images/iOS/tabBar/Anbieter-off.png | Bin 1763 -> 0 bytes resources/images/iOS/tabBar/Anbieter-on.png | Bin 1559 -> 0 bytes resources/images/iOS/tabBar/Ausweisen-off.png | Bin 1437 -> 0 bytes resources/images/iOS/tabBar/Ausweisen-on.png | Bin 1346 -> 0 bytes resources/images/iOS/tabBar/More-off.svg | 16 - resources/images/iOS/tabBar/More-on.svg | 13 - resources/images/iOS/tabBar/Pin-off.png | Bin 998 -> 0 bytes resources/images/iOS/tabBar/Pin-on.png | Bin 1033 -> 0 bytes resources/images/iOS/tabBar/Verlauf-off.png | Bin 2178 -> 0 bytes resources/images/iOS/tabBar/Verlauf-on.png | Bin 1950 -> 0 bytes resources/images/iOS/tabBar/anbieter.svg | 10 + resources/images/iOS/tabBar/ausweisen.svg | 9 + resources/images/iOS/tabBar/more.svg | 5 + resources/images/iOS/tabBar/pin.svg | 5 + resources/images/iOS/tabBar/remoteleser.svg | 5 + resources/images/icon_remote_0.svg | 9 + resources/images/icon_remote_100.svg | 9 + resources/images/icon_remote_25.svg | 9 + resources/images/icon_remote_50.svg | 9 + resources/images/icon_remote_75.svg | 9 + resources/images/icon_remote_inactive.svg | 9 + resources/images/icon_save.svg | 1 + resources/images/info.svg | 5 + resources/images/info_filled.svg | 5 + resources/images/npa_docs.png | Bin 0 -> 2691 bytes resources/images/provider/+tablet/adresse.png | Bin 536 -> 0 bytes resources/images/provider/+tablet/mail.png | Bin 459 -> 0 bytes resources/images/provider/+tablet/telefon.png | Bin 457 -> 0 bytes resources/images/provider/+tablet/url.png | Bin 967 -> 0 bytes resources/images/provider/adresse.png | Bin 392 -> 0 bytes resources/images/provider/adresse.svg | 1 + resources/images/provider/mail.png | Bin 303 -> 0 bytes resources/images/provider/mail.svg | 1 + resources/images/provider/telefon.png | Bin 326 -> 0 bytes resources/images/provider/telefon.svg | 1 + resources/images/provider/url.png | Bin 640 -> 0 bytes resources/images/provider/url.svg | 1 + .../images/reader/default_card_position.png | Bin 0 -> 34926 bytes .../src/img_DefaultReader_card_position.svg | 7 + resources/images/search_cancel.svg | 5 + resources/images/search_icon.svg | 6 + resources/images/triangle.svg | 5 + resources/images/tutorial/button_de.png | Bin 14056 -> 28710 bytes resources/images/tutorial/button_en.png | Bin 14308 -> 26900 bytes ..._de.svg => reader_sac_menu_android_de.svg} | 2 +- ..._en.svg => reader_sac_menu_android_en.svg} | 2 +- .../generated/reader_sac_menu_ios_de.svg | 11 + .../generated/reader_sac_menu_ios_en.svg | 11 + .../generated/where_identify_now_de.svg | 2 +- .../generated/where_identify_now_en.svg | 2 +- ...ere_providerlist_screenshot_android_de.svg | 12 + ...ere_providerlist_screenshot_android_en.svg | 12 + .../where_providerlist_screenshot_de.svg | 4 +- .../where_providerlist_screenshot_en.svg | 4 +- resources/images/tutorial/phone_screen_de.jpg | Bin 189796 -> 63021 bytes resources/images/tutorial/phone_screen_en.jpg | Bin 65776 -> 65216 bytes .../tutorial/screenshot_cert_android_de.png | Bin 0 -> 46932 bytes .../tutorial/screenshot_cert_android_en.png | Bin 0 -> 44634 bytes .../images/tutorial/screenshot_cert_de.png | Bin 46612 -> 0 bytes .../images/tutorial/screenshot_cert_en.png | Bin 43715 -> 0 bytes .../tutorial/screenshot_cert_ios_de.png | Bin 0 -> 45733 bytes .../tutorial/screenshot_cert_ios_en.png | Bin 0 -> 43821 bytes ...> screenshot_choose_reader_android_de.png} | Bin ...> screenshot_choose_reader_android_en.png} | Bin .../screenshot_choose_reader_ios_de.png | Bin 0 -> 25933 bytes .../screenshot_choose_reader_ios_en.png | Bin 0 -> 23344 bytes ...reenshot_menu_providerlist_android_de.png} | Bin ...reenshot_menu_providerlist_android_en.png} | Bin ...enshot_pin_management_menu_android_de.png} | Bin ...enshot_pin_management_menu_android_en.png} | Bin .../screenshot_pin_management_menu_ios_de.png | Bin 0 -> 252251 bytes .../screenshot_pin_management_menu_ios_en.png | Bin 0 -> 196227 bytes ...=> screenshot_providerlist_android_de.png} | Bin ...=> screenshot_providerlist_android_en.png} | Bin .../screenshot_providerlist_ios_de.png | Bin 0 -> 114099 bytes .../screenshot_providerlist_ios_en.png | Bin 0 -> 112258 bytes .../screenshot_remoteservice_ios_de.png | Bin 0 -> 206872 bytes .../screenshot_remoteservice_ios_en.png | Bin 0 -> 195114 bytes ...png => screenshot_sac_menu_android_de.png} | Bin ...png => screenshot_sac_menu_android_en.png} | Bin ..._en.svg => reader_sac_menu_android_de.svg} | 2 +- ..._de.svg => reader_sac_menu_android_en.svg} | 2 +- .../tutorial/src/reader_sac_menu_ios_de.svg | 11 + .../tutorial/src/reader_sac_menu_ios_en.svg | 11 + .../tutorial/src/where_identify_now_de.svg | 2 +- .../tutorial/src/where_identify_now_en.svg | 2 +- ...re_providerlist_screenshot_android_de.svg} | 4 +- ...re_providerlist_screenshot_android_en.svg} | 4 +- resources/jenkins/clang-gcov.py | 7 - resources/jenkins/clang-gcov.sh | 2 - resources/jenkins/docker/alpine/Dockerfile | 2 +- resources/jenkins/docker/android/Dockerfile | 29 - resources/jenkins/docker/arch/Dockerfile | 55 - resources/jenkins/docker/generate.py | 28 + resources/jenkins/docker/generate.sh | 18 - resources/jenkins/docker/linux/Dockerfile | 9 +- resources/jenkins/docker/swarm/Dockerfile | 2 +- .../jenkins/dsl/Builds/Build_Android.groovy | 4 +- .../dsl/Builds/Build_Translation.groovy | 1 + .../jenkins/dsl/Builds/Build_iOS_IPA.groovy | 8 +- .../dsl/Releases/Release_Appcast.groovy | 5 + .../jenkins/dsl/Releases/Release_Docs.groovy | 7 +- .../jenkins/dsl/Releases/Release_iOS.groovy | 23 +- .../jenkins/dsl/Reviews/Review_Android.groovy | 6 +- .../dsl/Reviews/Review_Libs_Android.groovy | 2 +- .../dsl/Reviews/Review_Libs_FreeBSD.groovy | 2 +- .../dsl/Reviews/Review_Libs_Linux.groovy | 2 +- .../dsl/Reviews/Review_Libs_MacOS.groovy | 2 +- .../jenkins/dsl/Reviews/Review_Trigger.groovy | 4 +- .../jenkins/dsl/Reviews/Review_iOS_IPA.groovy | 8 +- resources/jenkins/dsl/common/Constants.groovy | 3 +- resources/jenkins/dsl/common/Release.groovy | 5 + resources/jenkins/dsl/install.py | 2 + resources/jenkins/lcov_cobertura.py | 414 -- .../android/AndroidManifest.xml.aar.in | 36 +- .../android/AndroidManifest.xml.apk.in | 55 +- resources/packaging/android/backup_rules.xml | 4 + .../packaging/android/build.gradle.append | 13 +- resources/packaging/android/lint.aar.xml | 29 + resources/packaging/android/lint.apk.xml | 43 + .../android/res/mipmap-anydpi-v26/npa.xml | 5 + .../packaging/android/res/values/strings.xml | 4 + .../{styles.xml => res/values/style.xml} | 5 +- .../packaging/ios/AusweisApp2.entitlements | 10 + .../packaging/ios/MacOSXBundleInfo.plist.in | 78 +- .../packaging/ios/de.lproj/InfoPlist.strings | 2 +- .../packaging/ios/launchscreen.storyboard | 54 + resources/packaging/macos/Info.plist | 2 +- .../macos/autostart_helper/Info.plist | 2 +- resources/qml/+desktop/main.qml | 364 +- resources/qml/+mobile/main.qml | 184 +- .../+desktop/ChangePinController.qml | 99 + .../ChangePinView/+desktop/ChangePinView.qml | 235 ++ .../+ios/ChangePinViewContent.qml | 64 - .../{ => +mobile}/ChangePinController.qml | 25 +- .../{ => +mobile}/ChangePinView.qml | 63 +- .../ChangePinViewContent.qml | 38 +- .../DeveloperView/DeveloperView.qml | 89 +- .../+desktop/EnterPasswordView.qml | 313 ++ .../+desktop/NumberField.qml | 82 + .../EnterPasswordView/+desktop/NumberPad.qml | 163 + .../+desktop/NumberPadButton.qml | 67 + .../+desktop/NumberPadTab.qml | 121 + .../+desktop/PasswordInfoView.qml | 146 + .../+mobile/EnterPasswordView.qml} | 60 +- .../+mobile/NumberField.qml} | 11 +- .../EnterPasswordView/+mobile/NumberPad.qml | 70 + .../+mobile/NumberPadButton.qml} | 26 +- .../qml/Governikus/EnterPasswordView/qmldir | 9 + .../qml/Governikus/EnterPinView/PinPad.qml | 46 - resources/qml/Governikus/EnterPinView/qmldir | 7 - .../FeedbackView/+desktop/LogView.qml | 179 + .../+mobile/+android/StoreFeedbackPopup.qml | 24 + .../+mobile/+ios/StoreFeedbackPopup.qml | 13 + .../FeedbackView/+mobile/Feedback.qml | 61 +- .../Governikus/FeedbackView/+mobile/Log.qml | 143 - .../+mobile/LogTitleBarControls.qml | 52 +- .../FeedbackView/+mobile/LogView.qml | 127 + .../+mobile/StoreFeedbackPopup.qml | 67 - resources/qml/Governikus/FeedbackView/qmldir | 2 +- .../Global/+desktop/+mac/BrandConstants.qml | 6 +- .../Global/+desktop/+win/BrandConstants.qml | 6 +- .../Global/+desktop/ConfirmationPopup.qml | 41 + .../Global/+desktop/ContinueButton.qml | 37 - .../Governikus/Global/+desktop/GButton.qml | 59 +- .../Governikus/Global/+desktop/GCheckBox.qml | 19 +- .../Governikus/Global/+desktop/GComboBox.qml | 61 + .../qml/Governikus/Global/+desktop/GText.qml | 5 - .../Governikus/Global/+desktop/GTextField.qml | 32 +- .../Global/+desktop/LabeledText.qml | 65 +- .../Global/+desktop/LocationButton.qml | 24 + .../Global/+desktop/NavigationButton.qml | 60 + .../qml/Governikus/Global/+desktop/Pane.qml | 72 +- .../Governikus/Global/+desktop/PaneTitle.qml | 32 + .../Global/+desktop/PlatformConstants.qml | 21 +- .../Global/+desktop/RoundedRectangle.qml | 99 + .../Global/+desktop/ScrollGradients.qml | 47 + .../Global/+desktop/ScrollablePane.qml | 123 + .../Governikus/Global/+desktop/SearchBar.qml | 80 + .../Governikus/Global/+desktop/TabbedPane.qml | 244 ++ .../TabbedPaneDelegateIconAndText.qml | 41 + ...TabbedPaneDelegateIconAndThreeLineText.qml | 68 + .../TabbedPaneDelegateOneLineText.qml | 23 + .../Global/+desktop/ToggleableOption.qml | 70 + .../+android/+phone/DeviceConstants.qml | 6 +- .../+android/+tablet/DeviceConstants.qml | 6 +- .../+mobile/+android/BrandConstants.qml | 19 +- .../+mobile/+android/ConfirmationPopup.qml | 44 + .../Global/+mobile/+android/GButton.qml | 44 +- .../Global/+mobile/+android/GCheckBox.qml | 19 +- .../Global/+mobile/+android/LabeledText.qml | 20 +- .../Global/+mobile/+android/Pane.qml | 8 +- .../+mobile/+android/SearchBar.qml | 19 +- .../+mobile/+ios/+phone/DeviceConstants.qml | 8 +- .../Global/+mobile/+ios/+phone/Pane.qml | 36 +- .../+mobile/+ios/+tablet/DeviceConstants.qml | 8 +- .../Global/+mobile/+ios/+tablet/Pane.qml | 36 +- .../Global/+mobile/+ios/BrandConstants.qml | 21 +- .../Global/+mobile/+ios/ConfirmationPopup.qml | 65 + .../Global/+mobile/+ios/GButton.qml | 34 +- .../Global/+mobile/+ios/GCheckBox.qml | 18 +- .../Global/+mobile/+ios/LabeledText.qml | 29 +- .../+mobile/+ios/SearchBar.qml | 86 +- .../Global/+mobile/ConfirmationPopup.qml | 87 - .../Governikus/Global/+mobile/GComboBox.qml | 48 +- .../Governikus/Global/+mobile/GFlickable.qml | 51 + .../Governikus/Global/+mobile/GGridView.qml | 51 + .../Governikus/Global/+mobile/GListView.qml | 51 + .../Global/+mobile/GRadioButton.qml | 22 +- .../Governikus/Global/+mobile/GScrollBar.qml | 45 + .../qml/Governikus/Global/+mobile/GSwitch.qml | 27 +- .../Governikus/Global/+mobile/GTextField.qml | 28 +- .../Governikus/Global/+mobile/ListItem.qml | 139 + .../Global/+mobile/LocationButton.qml | 44 +- .../Governikus/Global/+mobile/PaneTitle.qml | 19 + .../Global/+mobile/PlatformConstants.qml | 49 +- .../Global/+mobile/SwipeActionDelegate.qml | 110 + .../Global/BaseConfirmationPopup.qml | 124 + resources/qml/Governikus/Global/Constants.qml | 8 +- .../qml/Governikus/Global/GSeparator.qml | 16 + resources/qml/Governikus/Global/GText.qml | 31 + resources/qml/Governikus/Global/PaneTitle.qml | 11 - .../qml/Governikus/Global/StatusIcon.qml | 13 +- resources/qml/Governikus/Global/Utils.js | 34 +- resources/qml/Governikus/Global/qmldir | 19 +- .../+android/+phone/HistoryView.qml | 61 - .../+android/+tablet/HistoryView.qml | 67 - .../HistoryView/+android/HistoryItemImage.qml | 51 - .../+android/HistoryListViewDelegate.qml | 23 - .../HistoryRemovalTimePeriodControl.qml | 64 + .../HistoryView/+desktop/HistoryView.qml | 147 + .../+desktop/HistoryViewDetails.qml | 104 + .../HistoryView/+ios/+phone/HistoryView.qml | 101 - .../HistoryView/+ios/+tablet/HistoryView.qml | 101 - .../HistoryView/+ios/HistoryDetails.qml | 33 - .../HistoryView/+ios/HistoryItemImage.qml | 26 - .../+ios/HistoryListViewDelegate.qml | 133 - .../+android/HistoryListViewDelegate.qml | 36 + .../+mobile/+android/HistoryView.qml | 19 + .../+android/HistoryViewTitleBarControls.qml | 59 + .../+mobile/+ios/HistoryListViewDelegate.qml | 30 + .../HistoryView/+mobile/+ios/HistoryView.qml | 45 + .../HistoryView/+mobile/BaseHistoryView.qml | 68 + .../HistoryView/+mobile/HistoryListItem.qml | 29 + .../+mobile/HistoryViewConfirmationPopup.qml | 22 + .../+mobile/HistoryViewDetails.qml | 93 + .../HistoryListViewDelegateContent.qml | 135 - .../HistoryViewConfirmationPopup.qml | 92 - .../HistoryView/HistoryViewDetails.qml | 67 - .../HistoryViewTitleBarControls.qml | 45 - resources/qml/Governikus/HistoryView/qmldir | 7 +- .../+desktop/CertificateDescriptionPage.qml | 35 +- .../IdentifyView/+desktop/DataGroup.qml | 93 +- .../IdentifyView/+desktop/EditRights.qml | 177 +- .../+desktop/IdentifyController.qml | 85 +- .../IdentifyView/+desktop/IdentifyView.qml | 282 +- .../+desktop/SelfAuthenticationData.qml | 75 +- .../+mobile/+android/+phone/EditRights.qml | 70 +- .../+mobile/+android/+tablet/EditRights.qml | 58 +- .../+mobile/+android/DataGroup.qml | 41 +- .../+mobile/+ios/+phone/DataGroup.qml | 42 +- .../+mobile/+ios/+phone/EditRights.qml | 93 +- .../+mobile/+ios/+tablet/DataGroup.qml | 47 +- .../+mobile/+ios/+tablet/EditRights.qml | 88 +- .../+mobile/CertificateDescriptionPage.qml | 13 +- .../+mobile/IdentifyController.qml | 47 +- .../IdentifyView/+mobile/IdentifyView.qml | 96 +- .../+mobile/SelfAuthenticationData.qml | 37 +- .../+desktop/DiagnosisView.qml | 107 + .../+desktop/InformationView.qml | 370 ++ .../+desktop/InformationViewIcon.qml | 60 + .../+desktop/VersionInformation.qml | 59 + .../InformationView.qml} | 56 +- .../{ => +mobile}/VersionInformation.qml | 15 +- .../qml/Governikus/InformationView/qmldir | 6 +- .../Governikus/MainView/+desktop/MainView.qml | 61 +- .../qml/Governikus/MainView/+desktop/Tile.qml | 20 +- .../Governikus/MoreView/+mobile/MoreView.qml | 204 + .../MoreView/+mobile/MoreViewMenuItem.qml | 16 + .../qml/Governikus/MoreView/MoreView.qml | 174 - .../Governikus/MoreView/MoreViewMenuItem.qml | 59 - .../Navigation/+android/Navigation.qml | 34 +- .../Navigation/+android/NavigationItem.qml | 24 +- .../Navigation/+android/NavigationView.qml | 51 +- .../Governikus/Navigation/+ios/Navigation.qml | 45 +- .../Navigation/+ios/NavigationItem.qml | 35 +- .../Navigation/+ios/NavigationView.qml | 59 +- .../ProgressView/+desktop/ProgressView.qml | 81 +- .../ProgressView/+mobile/ProgressView.qml | 39 +- .../Provider/+desktop/ProviderContactInfo.qml | 72 + .../+desktop/ProviderContactInfoItem.qml | 62 + .../+desktop/ProviderDetailButtonBar.qml | 91 + .../+desktop/ProviderDetailHistory.qml | 78 + .../+desktop/ProviderDetailHistoryItem.qml | 82 + .../Provider/+desktop/ProviderDetailView.qml | 182 +- .../Provider/+desktop/ProviderInfoSection.qml | 41 +- .../Provider/+desktop/ProviderModelItem.qml | 111 + .../+mobile/+android/ProviderDetailTab.qml | 26 +- .../+mobile/+android/ProviderViewDelegate.qml | 126 - .../+mobile/+ios/ProviderDetailTab.qml | 22 +- .../+mobile/+ios/ProviderViewDelegate.qml | 86 - .../+mobile/+phone/ProviderDetailView.qml | 51 +- .../+mobile/+tablet/ProviderContactInfo.qml | 20 +- .../+tablet/ProviderContactInfoItem.qml | 27 +- .../+tablet/ProviderDetailButtonBar.qml | 9 +- .../+tablet/ProviderDetailDescription.qml | 34 +- .../+mobile/+tablet/ProviderDetailHistory.qml | 36 +- .../+tablet/ProviderDetailHistoryInfo.qml | 54 +- .../+tablet/ProviderDetailHistoryItem.qml | 111 +- .../+mobile/+tablet/ProviderDetailView.qml | 23 +- .../Provider/+mobile/ProviderContactTab.qml | 63 +- .../Provider/+mobile/ProviderHeader.qml | 72 +- .../Provider/+mobile/ProviderInfoSection.qml | 16 +- .../Provider/+mobile/ProviderModelItem.qml | 12 +- .../+desktop/AdditionalResultsItem.qml | 101 + .../ProviderView/+desktop/ProviderCard.qml | 135 + .../+desktop/ProviderOverview.qml | 174 + .../ProviderView/+desktop/ProviderView.qml | 102 +- .../ProviderView/+desktop/SearchBar.qml | 63 - .../+mobile/+android/+phone/ProviderView.qml | 107 +- .../+mobile/+android/+tablet/ProviderView.qml | 62 +- .../+mobile/+ios/+phone/ProviderView.qml | 102 +- .../+mobile/+ios/+tablet/ProviderView.qml | 65 +- .../+mobile/+phone/AdditionalResultsItem.qml | 59 +- .../+mobile/+phone/BaseProviderView.qml | 122 + .../+phone/ProviderListItemDelegate.qml | 22 + .../+phone/ProviderSectionDelegate.qml | 22 + .../+mobile/+tablet/AdditionalResultsItem.qml | 29 +- .../{ => +tablet}/CategoryCheckbox.qml | 37 +- .../+mobile/+tablet/ProviderCard.qml | 24 +- .../+mobile/+tablet/ProviderCardNameRow.qml | 19 +- .../+mobile/DimmableTextButton.qml | 33 - .../+mobile/ProviderDelegateModel.qml | 4 + .../+mobile/ProviderSectionDelegate.qml | 69 - resources/qml/Governikus/ProviderView/qmldir | 5 +- .../AvailableDevicesListDelegate.qml | 80 +- .../KnownDevicesListDelegate.qml | 113 +- .../RemoteServiceView/LinkQuality.qml | 35 + .../RemoteServiceController.qml | 41 +- .../RemoteServicePairingPopup.qml | 88 +- .../RemoteServiceSettings.qml | 11 +- .../RemoteServiceView/RemoteServiceView.qml | 99 +- .../RemoteServiceViewLocal.qml | 94 +- .../RemoteServiceViewRemote.qml | 113 +- .../RemoteServiceViewStartStop.qml | 96 +- .../RemoteServiceView/SectionSwitch.qml | 41 +- .../ResultView/+desktop/ResultView.qml | 97 +- .../ResultView/+mobile/ResultView.qml | 38 +- .../+desktop/SelfAuthenticationView.qml | 92 + .../+mobile/SelfAuthenticationView.qml} | 52 +- .../Governikus/SelfAuthenticationView/qmldir | 3 + .../+desktop/CardReaderDelegate.qml | 83 + .../SettingsView/+desktop/CardReaderView.qml | 104 + .../+desktop/DeveloperSettings.qml | 54 + .../SettingsView/+desktop/GeneralSettings.qml | 94 + .../+desktop/RemoteReaderDelegate.qml | 125 + .../+desktop/RemoteReaderView.qml | 138 + .../+desktop/SecurityAndPrivacySettings.qml | 95 + .../SettingsView/+desktop/SettingsView.qml | 144 + .../+desktop/TabbedReaderView.qml | 140 + resources/qml/Governikus/SettingsView/qmldir | 12 + .../Governikus/SplashScreen/SplashScreen.qml | 19 + .../Style/+desktop/PlatformColors.qml | 24 + .../Style/+desktop/PlatformDimensions.qml | 25 + .../Style/+desktop/PlatformTextStyles.qml | 8 + .../Style/+desktop/ProviderStyle.qml | 7 - .../Style/+mobile/+android/BrandColors.qml | 8 + .../+mobile/+android/BrandDimensions.qml | 19 + .../+mobile/+android/PlatformTextStyles.qml | 23 + .../Style/+mobile/+android/ProviderStyle.qml | 35 - .../Style/+mobile/+ios/BrandColors.qml | 8 + .../Style/+mobile/+ios/BrandDimensions.qml | 30 + .../Style/+mobile/+ios/PlatformTextStyles.qml | 23 + .../Style/+mobile/+ios/ProviderStyle.qml | 35 - .../Style/+mobile/PlatformColors.qml | 31 + .../Style/+mobile/PlatformDimensions.qml | 25 + resources/qml/Governikus/Style/Colors.qml | 8 + resources/qml/Governikus/Style/Dimensions.qml | 7 + .../Style/NpaBusyIndicatorStyle.qml | 15 +- resources/qml/Governikus/Style/Style.qml | 13 + resources/qml/Governikus/Style/TextStyle.qml | 13 + resources/qml/Governikus/Style/TextStyles.qml | 115 + resources/qml/Governikus/Style/qmldir | 12 +- .../TechnologyInfo/+ios/TechnologySwitch.qml | 35 - .../{ => +mobile}/TechnologyInfo.qml | 47 +- .../TechnologySwitch.qml | 21 +- .../{ => +mobile}/TechnologySwitchButton.qml | 33 +- .../TitleBar/+desktop/CancelAction.qml | 31 +- .../TitleBar/+desktop/Notifications.qml | 113 + .../Governikus/TitleBar/+desktop/TitleBar.qml | 88 +- .../TitleBar/+desktop/TitleBarAction.qml | 18 +- .../TitleBar/+desktop/TitleBarButton.qml | 63 +- .../TitleBar/+desktop/TitleBarText.qml | 10 +- .../TitleBar/+mobile/+android/Hamburger.qml | 28 +- .../TitleBar/+mobile/+android/TitleBar.qml | 161 +- .../TitleBar/+mobile/+ios/TitleBar.qml | 122 +- .../+mobile/+ios/TitleBarNavigation.qml | 27 + .../TitleBar/+mobile/BaseTitleBar.qml | 233 ++ .../TitleBar/+mobile/NavigationAction.qml | 10 + .../TitleBar/+mobile/TitleBarAction.qml | 151 +- .../TitleBar/+mobile/TitleBarText.qml | 12 - resources/qml/Governikus/TitleBar/qmldir | 6 +- .../SetupAssistantBinaryDecisionView.qml | 123 + .../+desktop/SetupAssistantButton.qml | 72 + .../+desktop/SetupAssistantCardReaderView.qml | 34 + .../+desktop/SetupAssistantView.qml | 206 + .../+mobile/TutorialCollapseAnimation.qml | 4 + .../TutorialView/+mobile/TutorialContent.qml | 7 +- .../+mobile/TutorialExpandAnimation.qml | 4 + .../TutorialView/+mobile/TutorialFooter.qml | 82 +- .../TutorialView/+mobile/TutorialHeader.qml | 22 +- .../TutorialView/+mobile/TutorialHow.qml | 301 +- .../TutorialView/+mobile/TutorialImage.qml | 6 + .../+mobile/TutorialImportant.qml | 166 +- .../+mobile/TutorialReaderMethodBluetooth.qml | 199 +- .../+mobile/TutorialReaderMethodFooter.qml | 13 +- .../+mobile/TutorialReaderMethodNfc.qml | 173 +- .../TutorialReaderMethodSacDesktop.qml | 303 +- .../+mobile/TutorialReaderMethodSacMobile.qml | 306 +- .../+mobile/TutorialSeperator.qml | 4 + .../TutorialView/+mobile/TutorialSpacer.qml | 11 +- .../+mobile/TutorialStatusBar.qml | 34 + .../TutorialView/+mobile/TutorialView.qml | 78 +- .../TutorialView/+mobile/TutorialWhat.qml | 146 +- .../TutorialView/+mobile/TutorialWhere.qml | 137 +- resources/qml/Governikus/TutorialView/qmldir | 6 + .../Governikus/View/+desktop/Controller.qml | 9 + .../Governikus/View/+desktop/FocusFrame.qml | 18 +- .../Governikus/View/+desktop/FocusPoint.qml | 29 + .../Governikus/View/+desktop/FramedImage.qml | 37 + .../Governikus/View/+desktop/SectionPage.qml | 38 +- .../View/+mobile/+android/ContentArea.qml | 15 +- .../View/+mobile/+ios/ContentArea.qml | 33 +- .../View/+mobile/ContentAreaLoader.qml | 9 + .../Governikus/View/+mobile/FocusFrame.qml | 12 + .../Governikus/View/+mobile/SectionPage.qml | 70 +- .../Governikus/View/+mobile/TabBarView.qml | 116 +- resources/qml/Governikus/View/qmldir | 3 + .../+mobile/WhiteListSurveyView.qml | 274 +- .../WhiteListClient/BulletPointDelegate.qml | 31 - .../qml/Governikus/WhiteListClient/qmldir | 2 - .../Workflow/+desktop/GeneralWorkflow.qml | 206 + .../Workflow/+desktop/ProgressCircle.qml | 9 +- .../Workflow/+desktop/TextCircle.qml | 12 +- .../Workflow/+mobile/BluetoothWorkflow.qml | 25 +- .../Workflow/+mobile/BusyImageIndicator.qml | 4 + .../Workflow/+mobile/CardReader.qml | 19 +- .../Workflow/+mobile/GeneralWorkflow.qml | 8 +- .../Workflow/+mobile/NfcProgressIndicator.qml | 6 +- .../Workflow/+mobile/NfcWorkflow.qml | 31 +- .../Workflow/+mobile/ProgressCircle.qml | 25 +- .../Workflow/+mobile/ProgressIndicator.qml | 6 +- .../Workflow/+mobile/RemoteWorkflow.qml | 30 +- .../Workflow/+mobile/TextCircle.qml | 14 +- .../Workflow/{+mobile => }/Workflow.qml | 4 + resources/qml/main.qml | 4 - resources/sonar-project.properties.in | 5 +- resources/statemachine.sh.in | 4 +- resources/translations/ausweisapp2_de.ts | 3575 ++++++++++++++--- resources/travis/setup.sh | 4 +- .../updatable-files/supported-providers.json | 41 +- .../updatable-files/supported-readers.json | 32 +- src/CMakeLists.txt | 32 +- src/CommandLineParser.cpp | 2 +- .../CustomSchemeActivationContext.h | 2 +- .../intent/IntentActivationContext.cpp | 3 +- .../intent/IntentActivationContext.h | 3 +- .../intent/IntentActivationHandler.cpp | 9 +- .../intent/IntentActivationHandler.h | 2 +- src/activation/intent/MainActivity.java | 93 +- .../internal/InternalActivationContext.h | 2 +- src/activation/webservice/Template.h | 2 +- .../WebserviceActivationContext.cpp | 17 + .../webservice/WebserviceActivationContext.h | 4 +- .../WebserviceActivationHandler.cpp | 19 +- src/card/CMakeLists.txt | 4 + src/card/base/Apdu.cpp | 6 + src/card/base/Apdu.h | 3 +- src/card/base/Card.cpp | 21 +- src/card/base/Card.h | 9 +- src/card/base/CardConnection.cpp | 8 + src/card/base/CardConnection.h | 14 +- src/card/base/CardConnectionWorker.cpp | 101 +- src/card/base/CardConnectionWorker.h | 20 +- src/card/base/CardInfo.cpp | 61 +- src/card/base/CardInfo.h | 9 +- src/card/base/CardOperationResult.h | 42 - src/card/base/CommandApdu.h | 8 +- src/card/base/CommandApduBuilder.cpp | 22 + src/card/base/CommandApduBuilder.h | 25 + src/card/base/Commands.cpp | 330 -- src/card/base/Commands.h | 190 - src/card/base/EABuilder.cpp | 33 + src/card/base/EABuilder.h | 27 + src/card/base/EstablishPaceChannel.cpp | 22 +- src/card/base/EstablishPaceChannelOutput.cpp | 28 +- src/card/base/EstablishPaceChannelOutput.h | 2 +- src/card/base/FileRef.cpp | 15 +- src/card/base/FileRef.h | 2 + src/card/base/GABuilder.cpp | 83 + src/card/base/GABuilder.h | 34 + src/card/base/GeneralAuthenticateResponse.cpp | 87 +- src/card/base/GeneralAuthenticateResponse.h | 79 +- src/card/base/GetChallengeBuilder.cpp | 26 + src/card/base/GetChallengeBuilder.h | 20 + src/card/base/InputAPDUInfo.cpp | 7 - src/card/base/InputAPDUInfo.h | 8 +- src/card/base/MSEBuilder.cpp | 92 + src/card/base/MSEBuilder.h | 55 + src/card/base/PSOBuilder.cpp | 47 + src/card/base/PSOBuilder.h | 41 + src/card/base/PersoSimWorkaround.h | 2 +- src/card/base/PinModify.h | 4 +- src/card/base/PinModifyOutput.cpp | 2 +- src/card/base/PinModifyOutput.h | 2 +- src/card/base/ReadBinaryBuilder.cpp | 25 + src/card/base/ReadBinaryBuilder.h | 26 + src/card/base/Reader.cpp | 23 +- src/card/base/Reader.h | 19 +- src/card/base/ReaderFilter.h | 4 +- src/card/base/ReaderInfo.h | 6 + src/card/base/ReaderManager.cpp | 54 +- src/card/base/ReaderManager.h | 16 +- src/card/base/ReaderManagerPlugIn.cpp | 16 +- src/card/base/ReaderManagerPlugIn.h | 10 +- src/card/base/ReaderManagerWorker.cpp | 60 +- src/card/base/ReaderManagerWorker.h | 6 +- src/card/base/ResetRetryCounterBuilder.cpp | 29 + src/card/base/ResetRetryCounterBuilder.h | 25 + src/card/base/ResponseApdu.cpp | 8 +- src/card/base/ResponseApdu.h | 6 +- src/card/base/SecureMessagingResponse.h | 5 +- src/card/base/SelectBuilder.cpp | 27 + src/card/base/SelectBuilder.h | 34 + src/card/base/SmartCardDefinitions.h | 1 + src/card/base/asn1/ASN1TemplateUtil.h | 2 +- src/card/base/asn1/ASN1Util.cpp | 16 +- src/card/base/asn1/AccessRoleAndRight.cpp | 47 +- src/card/base/asn1/AccessRoleAndRight.h | 2 +- .../base/asn1/AuthenticatedAuxiliaryData.h | 7 +- src/card/base/asn1/CVCertificate.cpp | 10 +- src/card/base/asn1/CVCertificate.h | 5 +- src/card/base/asn1/CVCertificateBody.h | 9 +- src/card/base/asn1/CVCertificateChain.h | 6 +- .../base/asn1/CVCertificateChainBuilder.h | 4 +- src/card/base/asn1/Chat.cpp | 18 +- src/card/base/asn1/Chat.h | 6 +- src/card/base/asn1/EFCardSecurity.h | 2 +- src/card/base/asn1/EcdsaPublicKey.cpp | 8 +- src/card/base/asn1/EcdsaPublicKey.h | 5 +- src/card/base/asn1/KnownOIDs.cpp | 11 + src/card/base/asn1/PaceInfo.h | 2 +- src/card/base/asn1/SecurityInfo.h | 2 +- src/card/base/asn1/SecurityInfos.h | 4 +- src/card/base/asn1/SignatureChecker.cpp | 4 +- src/card/base/asn1/SignatureChecker.h | 2 +- src/card/base/command/BaseCardCommand.h | 4 +- .../command/CreateCardConnectionCommand.cpp | 6 +- .../command/CreateCardConnectionCommand.h | 2 +- .../base/command/DestroyPaceChannelCommand.h | 2 +- .../command/DidAuthenticateEAC1Command.cpp | 14 +- .../base/command/DidAuthenticateEAC1Command.h | 3 +- .../command/DidAuthenticateEAC2Command.cpp | 15 +- .../base/command/DidAuthenticateEAC2Command.h | 4 +- .../command/EstablishPaceChannelCommand.cpp | 3 +- .../command/EstablishPaceChannelCommand.h | 4 +- src/card/base/command/SetEidPinCommand.h | 4 +- src/card/base/command/TransmitCommand.cpp | 2 +- src/card/base/command/TransmitCommand.h | 4 +- src/card/base/command/UnblockPinCommand.cpp | 5 +- src/card/base/command/UnblockPinCommand.h | 2 +- .../base/command/UpdateRetryCounterCommand.h | 2 +- src/card/base/pace/KeyAgreement.cpp | 90 +- src/card/base/pace/KeyAgreement.h | 26 +- src/card/base/pace/KeyDerivationFunction.h | 2 +- src/card/base/pace/PaceHandler.cpp | 4 +- src/card/base/pace/PaceHandler.h | 2 +- src/card/base/pace/SecureMessaging.cpp | 20 +- src/card/base/pace/SecureMessaging.h | 8 +- src/card/base/pace/ec/EcdhGenericMapping.h | 2 +- src/card/base/pace/ec/EcdhKeyAgreement.cpp | 57 +- src/card/base/pace/ec/EcdhKeyAgreement.h | 9 +- src/card/bluetooth/BluetoothCard.cpp | 8 +- src/card/bluetooth/BluetoothCard.h | 4 +- src/card/bluetooth/BluetoothReader.cpp | 22 +- src/card/bluetooth/BluetoothReader.h | 4 +- .../BluetoothReaderManagerPlugIn.cpp | 21 +- .../bluetooth/BluetoothReaderManagerPlugIn.h | 2 +- .../BluetoothReaderManagerPlugIn_p.h | 2 +- ...BluetoothReaderManagerPlugIn_p_android.cpp | 2 +- .../BluetoothReaderManagerPlugIn_p_ios.mm | 4 +- src/card/bluetooth/CyberJackWaveDevice.cpp | 2 +- .../messages/BluetoothMessageParser.cpp | 9 +- .../bluetooth/messages/BluetoothUtils.cpp | 2 +- .../parameter/BluetoothMessageParameter.cpp | 4 +- .../parameter/BluetoothMessageParameter.h | 8 +- .../BluetoothMessageParameterMaxMsgSize.cpp | 4 +- src/card/drivers/ReaderDetector.h | 2 +- src/card/drivers/ReaderDetector_linux.cpp | 6 +- src/card/drivers/ReaderDetector_osx.cpp | 7 +- src/card/drivers/ReaderDetector_win.cpp | 8 +- src/card/ios/CMakeLists.txt | 8 + src/card/ios/IosCard.h | 49 + src/card/ios/IosCard.mm | 182 + src/card/ios/IosCardPointer.h | 16 + src/card/ios/IosReader.h | 52 + src/card/ios/IosReader.mm | 166 + src/card/ios/IosReaderDelegate.h | 42 + src/card/ios/IosReaderDelegate.mm | 62 + src/card/ios/IosReaderDelegateImpl.h | 27 + src/card/ios/IosReaderDelegateImpl.mm | 125 + src/card/ios/IosReaderManagerPlugIn.h | 44 + src/card/ios/IosReaderManagerPlugIn.mm | 106 + src/card/ios/metadata.json | 4 + src/card/nfc/NfcCard.cpp | 6 +- src/card/nfc/NfcCard.h | 2 +- src/card/nfc/NfcReader.cpp | 5 +- src/card/nfc/NfcReaderManagerPlugIn.cpp | 18 +- src/card/nfc/NfcReaderManagerPlugIn.h | 1 - src/card/pcsc/PcscCard.cpp | 134 +- src/card/pcsc/PcscCard.h | 18 +- src/card/pcsc/PcscReader.cpp | 10 +- src/card/pcsc/PcscReaderFeature.cpp | 8 +- src/card/pcsc/PcscReaderFeature.h | 2 +- src/card/pcsc/PcscReaderManagerPlugIn.cpp | 47 +- src/card/pcsc/PcscReaderManagerPlugIn.h | 4 +- src/card/pcsc/PcscReaderPaceCapability.cpp | 5 +- src/card/pcsc/PcscReaderPaceCapability.h | 2 +- src/card/pcsc/PcscUtils.cpp | 2 +- src/card/pcsc/PcscUtils.h | 38 +- src/config.h.in | 40 +- src/configuration/CallCost.cpp | 2 +- src/configuration/CallCost.h | 4 +- src/configuration/ProviderConfiguration.h | 2 + .../ProviderConfigurationInfo.cpp | 27 + src/configuration/ProviderConfigurationInfo.h | 1 + src/configuration/ReaderConfiguration.cpp | 1 - src/configuration/ReaderConfigurationInfo.cpp | 1 + src/core/DiagnosisAntivirusDetection.h | 4 + src/core/DiagnosisConnectionTest.cpp | 4 +- src/core/DiagnosisConnectionTest.h | 4 + src/core/DiagnosisFirewallDetection.cpp | 16 +- src/core/DiagnosisFirewallDetection.h | 4 +- src/core/DiagnosisItem.cpp | 2 +- src/core/DiagnosisItem.h | 2 +- src/core/DiagnosisModel.cpp | 1187 +++--- src/core/DiagnosisModel.h | 127 +- src/core/DiagnosisTreeModel.cpp | 614 +++ src/core/DiagnosisTreeModel.h | 78 + src/core/SelfAuthenticationData.cpp | 17 +- src/core/SelfAuthenticationData.h | 4 +- src/core/SignalHandler_bsd_linux_osx.cpp | 5 +- src/core/TcToken.h | 4 +- src/core/context/AuthContext.cpp | 38 +- src/core/context/AuthContext.h | 22 +- src/core/context/ChangePinContext.cpp | 11 + src/core/context/ChangePinContext.h | 1 + src/core/context/RemoteServiceContext.cpp | 21 +- src/core/context/RemoteServiceContext.h | 7 +- src/core/context/WorkflowContext.cpp | 40 +- src/core/context/WorkflowContext.h | 13 +- src/core/controller/AppController.cpp | 41 +- src/core/controller/AppController.h | 8 +- src/core/controller/AuthController.cpp | 136 +- src/core/controller/AuthController.h | 2 +- src/core/controller/ChangePinController.cpp | 2 +- src/core/controller/ChangePinController.h | 2 +- src/core/controller/DiagnosisController.cpp | 17 +- src/core/controller/DiagnosisController.h | 4 +- .../DiagnosisController_generic.cpp | 4 +- .../controller/DiagnosisController_win.cpp | 8 +- src/core/controller/RemoteServiceController.h | 2 +- src/core/controller/SelfAuthController.cpp | 134 +- src/core/controller/SelfAuthController.h | 2 +- src/core/controller/WorkflowController.h | 4 +- src/core/paos/ElementDetector.h | 2 +- src/core/paos/PaosHandler.h | 2 +- src/core/paos/PaosMessage.h | 2 +- src/core/paos/RequestType.h | 2 +- src/core/paos/ResponseType.h | 2 +- .../paos/element/ConnectionHandleParser.h | 2 +- src/core/paos/element/Eac1InputType.h | 11 - src/core/paos/element/ElementParser.cpp | 2 +- src/core/paos/element/ElementParser.h | 8 +- src/core/paos/invoke/DisconnectResponse.h | 4 - src/core/paos/invoke/PaosCreator.h | 4 - src/core/paos/invoke/StartPaos.h | 2 +- src/core/paos/invoke/TransmitResponse.h | 4 - src/core/paos/retrieve/DidAuthenticateEac1.h | 5 - .../DidAuthenticateEacAdditionalParser.cpp | 6 +- src/core/paos/retrieve/DidList.h | 2 +- src/core/paos/retrieve/Disconnect.h | 2 +- src/core/paos/retrieve/InitializeFramework.h | 2 +- src/core/paos/retrieve/PaosParser.h | 2 +- src/core/paos/retrieve/StartPaosResponse.h | 2 +- src/core/paos/retrieve/Transmit.h | 2 +- src/core/states/AbstractState.cpp | 4 +- src/core/states/AbstractState.h | 5 +- src/core/states/CompositeStatePace.cpp | 20 +- src/core/states/CompositeStateSelectCard.cpp | 40 - .../states/CompositeStateTrustedChannel.cpp | 167 + ...tCard.h => CompositeStateTrustedChannel.h} | 10 +- src/core/states/FinalState.cpp | 2 +- src/core/states/FinalState.h | 12 +- ...nericState.h => GenericContextContainer.h} | 23 +- .../StateActivateStoreFeedbackDialog.cpp | 5 +- .../states/StateActivateStoreFeedbackDialog.h | 6 +- .../StateCertificateDescriptionCheck.cpp | 3 +- .../states/StateCertificateDescriptionCheck.h | 7 +- src/core/states/StateChangePin.cpp | 4 +- src/core/states/StateChangePin.h | 6 +- src/core/states/StateCheckCertificates.cpp | 3 +- src/core/states/StateCheckCertificates.h | 6 +- src/core/states/StateCheckError.cpp | 3 +- src/core/states/StateCheckError.h | 6 +- src/core/states/StateCheckRefreshAddress.cpp | 19 +- src/core/states/StateCheckRefreshAddress.h | 7 +- src/core/states/StateCleanUpReaderManager.cpp | 3 +- src/core/states/StateCleanUpReaderManager.h | 6 +- src/core/states/StateClearPacePasswords.cpp | 3 +- src/core/states/StateClearPacePasswords.h | 7 +- src/core/states/StateConnectCard.cpp | 50 +- src/core/states/StateConnectCard.h | 11 +- src/core/states/StateDestroyPace.cpp | 3 +- src/core/states/StateDestroyPace.h | 7 +- src/core/states/StateDidAuthenticateEac1.cpp | 11 +- src/core/states/StateDidAuthenticateEac1.h | 9 +- src/core/states/StateDidAuthenticateEac2.cpp | 11 +- src/core/states/StateDidAuthenticateEac2.h | 12 +- src/core/states/StateDidList.cpp | 3 +- src/core/states/StateDidList.h | 6 +- .../states/StateEACAdditionalInputType.cpp | 3 +- src/core/states/StateEACAdditionalInputType.h | 6 +- src/core/states/StateEditAccessRights.cpp | 34 +- src/core/states/StateEditAccessRights.h | 8 +- src/core/states/StateEnterNewPacePin.cpp | 3 +- src/core/states/StateEnterNewPacePin.h | 6 +- src/core/states/StateEnterPacePassword.cpp | 3 +- src/core/states/StateEnterPacePassword.h | 6 +- src/core/states/StateEstablishPaceChannel.cpp | 9 +- src/core/states/StateEstablishPaceChannel.h | 6 +- .../StateExtractCvcsFromEac1InputType.cpp | 3 +- .../StateExtractCvcsFromEac1InputType.h | 7 +- src/core/states/StateGenericSendReceive.cpp | 9 +- src/core/states/StateGenericSendReceive.h | 24 +- .../states/StateGetSelfAuthenticationData.cpp | 9 +- .../states/StateGetSelfAuthenticationData.h | 9 +- src/core/states/StateGetTcToken.cpp | 9 +- src/core/states/StateGetTcToken.h | 10 +- src/core/states/StateInitializeFramework.cpp | 3 +- src/core/states/StateInitializeFramework.h | 6 +- src/core/states/StateLoadTcTokenUrl.cpp | 7 +- src/core/states/StateLoadTcTokenUrl.h | 6 +- .../states/StateMaintainCardConnection.cpp | 3 +- src/core/states/StateMaintainCardConnection.h | 6 +- src/core/states/StateParseTcTokenUrl.cpp | 3 +- src/core/states/StateParseTcTokenUrl.h | 7 +- src/core/states/StatePreVerification.cpp | 7 +- src/core/states/StatePreVerification.h | 6 +- src/core/states/StatePrepareChangePin.cpp | 3 +- src/core/states/StatePrepareChangePin.h | 6 +- src/core/states/StatePreparePace.cpp | 4 +- src/core/states/StatePreparePace.h | 7 +- .../StateProcessCertificatesFromEac2.cpp | 3 +- .../states/StateProcessCertificatesFromEac2.h | 7 +- src/core/states/StateProcessing.cpp | 3 +- src/core/states/StateProcessing.h | 6 +- src/core/states/StateRedirectBrowser.cpp | 15 +- src/core/states/StateRedirectBrowser.h | 6 +- src/core/states/StateSelectPasswordId.cpp | 3 +- src/core/states/StateSelectPasswordId.h | 10 +- src/core/states/StateSelectReader.cpp | 61 +- src/core/states/StateSelectReader.h | 11 +- src/core/states/StateSendWhitelistSurvey.cpp | 17 +- src/core/states/StateSendWhitelistSurvey.h | 7 +- src/core/states/StateShowSelfInfo.cpp | 3 +- src/core/states/StateShowSelfInfo.h | 6 +- src/core/states/StateStartPaos.cpp | 3 +- src/core/states/StateStartPaos.h | 6 +- src/core/states/StateStartPaosResponse.cpp | 3 +- src/core/states/StateStartPaosResponse.h | 6 +- src/core/states/StateTransmit.cpp | 11 +- src/core/states/StateTransmit.h | 9 +- .../states/StateUnfortunateCardPosition.cpp | 6 +- .../states/StateUnfortunateCardPosition.h | 6 +- src/core/states/StateUpdateRetryCounter.cpp | 10 +- src/core/states/StateUpdateRetryCounter.h | 7 +- src/core/states/StateVerifyRetryCounter.cpp | 3 +- src/core/states/StateVerifyRetryCounter.h | 7 +- src/core/states/StateWriteHistory.cpp | 13 +- src/core/states/StateWriteHistory.h | 9 +- .../remote_service/StateChangePinRemote.cpp | 3 +- .../remote_service/StateChangePinRemote.h | 7 +- .../remote_service/StateChangePinResponse.cpp | 3 +- .../remote_service/StateChangePinResponse.h | 6 +- .../StateEnterNewPacePinRemote.cpp | 5 +- .../StateEnterNewPacePinRemote.h | 6 +- .../StateEnterPacePasswordRemote.cpp | 5 +- .../StateEnterPacePasswordRemote.h | 6 +- .../StateEstablishPaceChannelRemote.cpp | 3 +- .../StateEstablishPaceChannelRemote.h | 6 +- .../StateEstablishPaceChannelResponse.cpp | 3 +- .../StateEstablishPaceChannelResponse.h | 8 +- .../StatePrepareChangePinRemote.cpp | 3 +- .../StatePrepareChangePinRemote.h | 6 +- .../remote_service/StatePreparePaceRemote.cpp | 9 +- .../remote_service/StatePreparePaceRemote.h | 6 +- .../StateProcessRemoteMessages.cpp | 24 +- .../StateProcessRemoteMessages.h | 8 +- .../StateStartRemoteService.cpp | 3 +- .../remote_service/StateStartRemoteService.h | 8 +- .../remote_service/StateStopRemoteService.cpp | 3 +- .../remote_service/StateStopRemoteService.h | 8 +- src/export/PdfCreator.cpp | 4 +- src/export/PdfExporter.cpp | 24 +- src/external/http_parser/http_parser.cpp | 184 +- src/external/http_parser/http_parser.h | 10 +- src/file_provider/Downloader.cpp | 9 +- src/file_provider/UpdatableFile.cpp | 8 +- src/global/BuildHelper.cpp | 2 +- src/global/CardReturnCode.cpp | 1 + src/global/DeviceInfo.cpp | 2 +- src/global/DeviceInfo.h | 2 +- src/global/ECardApiResult.cpp | 43 +- src/global/EnumHelper.h | 28 +- src/global/Env.h | 82 +- src/global/FileDestination.h | 6 - src/global/GlobalStatus.cpp | 100 +- src/global/GlobalStatus.h | 11 +- src/global/Initializer.h | 2 +- src/global/LogCategories.cpp | 9 +- src/global/LogHandler.cpp | 14 +- src/global/LogHandler.h | 4 +- src/global/ScopeGuard.h | 35 +- src/global/VersionInfo.h | 2 +- src/global/VersionNumber.cpp | 6 +- src/global/VersionNumber.h | 2 +- src/main.cpp | 58 +- src/network/DatagramHandler.h | 2 +- src/network/DatagramHandlerImpl.cpp | 8 +- src/network/DatagramHandlerImpl.h | 4 +- src/network/HttpRequest.cpp | 10 +- src/network/HttpRequest.h | 10 +- src/network/HttpServer.h | 2 +- src/network/MulticastLock.cpp | 4 +- src/network/MulticastLock.h | 2 +- src/network/NetworkManager.cpp | 16 +- src/network/NetworkManager.h | 4 +- src/network/NetworkReplyError.cpp | 4 +- src/network/NetworkReplyTimeout.cpp | 6 +- src/network/TlsChecker.cpp | 23 +- src/network/TlsChecker.h | 2 +- src/remote_device/RemoteClient.h | 5 +- src/remote_device/RemoteClientImpl.cpp | 1 + src/remote_device/RemoteConnector.cpp | 3 - src/remote_device/RemoteConnector.h | 1 - src/remote_device/RemoteConnectorImpl.cpp | 8 +- src/remote_device/RemoteDeviceList.cpp | 52 + src/remote_device/RemoteDeviceList.h | 4 + src/remote_device/RemoteDispatcher.cpp | 2 +- src/remote_device/RemoteDispatcherClient.cpp | 2 +- src/remote_device/RemoteTlsServer.cpp | 12 +- src/remote_device/ServerMessageHandler.cpp | 6 +- src/remote_device/ServerMessageHandler.h | 3 +- src/remote_device/WebSocketChannel.cpp | 2 +- src/remote_device/messages/IfdStatus.h | 2 - src/remote_device/messages/IfdTransmit.cpp | 2 +- src/remote_device/messages/IfdTransmit.h | 2 +- src/remote_device/messages/IfdVersion.cpp | 1 + src/remote_device/plugin/RemoteCard.cpp | 19 +- src/remote_device/plugin/RemoteCard.h | 4 +- src/remote_device/plugin/RemoteReader.cpp | 9 +- .../plugin/RemoteReaderManagerPlugIn.cpp | 17 +- .../plugin/RemoteReaderManagerPlugIn.h | 2 +- src/secure_storage/SecureStorage.cpp | 6 + src/secure_storage/SecureStorage.h | 11 +- src/services/AppUpdateData.cpp | 4 +- src/services/AppUpdateData.h | 4 +- src/services/AppUpdater.cpp | 10 +- src/services/Service.cpp | 4 + src/settings/AppSettings.h | 1 - src/settings/GeneralSettings.cpp | 89 +- src/settings/GeneralSettings.h | 10 +- src/settings/HistorySettings.h | 1 - src/settings/RemoteServiceSettings.cpp | 1 + src/ui/CMakeLists.txt | 6 +- src/ui/aidl/CMakeLists.txt | 2 +- src/ui/aidl/UIPlugInAidl.cpp | 32 +- src/ui/aidl/UIPlugInAidl.h | 4 +- src/ui/aidl/metadata.json | 2 +- src/ui/base/UILoader.h | 2 +- src/ui/base/UIPlugIn.h | 1 + src/ui/cli/CMakeLists.txt | 12 - src/ui/cli/ConsoleReader.cpp | 126 - src/ui/cli/ConsoleReader.h | 74 - src/ui/cli/UIPlugInCli.cpp | 234 -- src/ui/cli/UIPlugInCli.h | 72 - src/ui/cli/metadata.json | 4 - src/ui/common/CMakeLists.txt | 2 +- src/ui/common/Email.cpp | 50 + src/ui/common/Email.h | 16 + src/ui/common/HelpAction.cpp | 3 +- src/ui/common/ReaderDriverModel.cpp | 298 ++ src/ui/{widget => common}/ReaderDriverModel.h | 28 +- .../common}/RemoteDeviceModel.cpp | 144 +- .../common}/RemoteDeviceModel.h | 33 +- src/ui/common/TrayIcon.cpp | 22 +- src/ui/common/TrayIcon.h | 3 + src/ui/{jsonapi => json}/CMakeLists.txt | 8 +- .../{jsonapi => json}/MessageDispatcher.cpp | 56 +- src/ui/{jsonapi => json}/MessageDispatcher.h | 18 +- .../UIPlugInJson.cpp} | 51 +- .../UIPlugInJsonApi.h => json/UIPlugInJson.h} | 8 +- .../{jsonapi => json}/messages/MsgContext.cpp | 2 - .../{jsonapi => json}/messages/MsgContext.h | 0 .../{jsonapi => json}/messages/MsgHandler.cpp | 8 +- .../{jsonapi => json}/messages/MsgHandler.h | 10 +- .../messages/MsgHandlerAccessRights.cpp | 0 .../messages/MsgHandlerAccessRights.h | 4 +- .../messages/MsgHandlerApiLevel.cpp | 0 .../messages/MsgHandlerApiLevel.h | 4 +- .../messages/MsgHandlerAuth.cpp | 0 .../messages/MsgHandlerAuth.h | 4 +- .../messages/MsgHandlerBadState.cpp | 0 .../messages/MsgHandlerBadState.h | 2 +- .../messages/MsgHandlerCertificate.cpp | 0 .../messages/MsgHandlerCertificate.h | 2 +- .../messages/MsgHandlerEnterCan.cpp | 0 .../messages/MsgHandlerEnterCan.h | 4 +- .../messages/MsgHandlerEnterNumber.cpp | 0 .../messages/MsgHandlerEnterNumber.h | 2 +- .../messages/MsgHandlerEnterPin.cpp | 0 .../messages/MsgHandlerEnterPin.h | 4 +- .../messages/MsgHandlerEnterPuk.cpp | 0 .../messages/MsgHandlerEnterPuk.h | 4 +- .../messages/MsgHandlerInfo.cpp | 0 .../messages/MsgHandlerInfo.h | 0 .../messages/MsgHandlerInsertCard.cpp | 0 .../messages/MsgHandlerInsertCard.h | 2 +- .../messages/MsgHandlerInternalError.cpp | 0 .../messages/MsgHandlerInternalError.h | 4 +- .../messages/MsgHandlerInvalid.cpp | 0 .../messages/MsgHandlerInvalid.h | 6 +- src/ui/json/messages/MsgHandlerLog.cpp | 17 + src/ui/json/messages/MsgHandlerLog.h | 22 + .../messages/MsgHandlerReader.cpp | 0 .../messages/MsgHandlerReader.h | 4 +- .../messages/MsgHandlerReaderList.cpp | 0 .../messages/MsgHandlerReaderList.h | 0 .../messages/MsgHandlerUnknownCommand.cpp | 0 .../messages/MsgHandlerUnknownCommand.h | 2 +- .../{jsonapi => json}/messages/MsgTypes.cpp | 0 src/ui/{jsonapi => json}/messages/MsgTypes.h | 2 + src/ui/json/metadata.json | 4 + src/ui/jsonapi/metadata.json | 4 - src/ui/qml/AppUpdateDataModel.cpp | 79 + src/ui/qml/AppUpdateDataModel.h | 53 + src/ui/qml/ApplicationModel.cpp | 287 +- src/ui/qml/ApplicationModel.h | 70 +- src/ui/qml/ApplicationModel_ios.mm | 98 + src/ui/qml/AuthModel.cpp | 26 +- src/ui/qml/AuthModel.h | 15 +- src/ui/qml/CMakeLists.txt | 7 +- src/ui/qml/CertificateDescriptionModel.cpp | 7 + src/ui/qml/CertificateDescriptionModel.h | 13 +- src/ui/qml/ChangePinModel.cpp | 12 +- src/ui/qml/ChangePinModel.h | 10 +- src/ui/qml/ConnectivityManager.cpp | 6 +- ...lculator_generic.cpp => DpiCalculator.cpp} | 21 +- src/ui/qml/DpiCalculator_android.cpp | 31 - src/ui/qml/DpiCalculator_ios.mm | 64 - src/ui/qml/HistoryModel.cpp | 148 +- src/ui/qml/HistoryModel.h | 51 +- src/ui/qml/HistoryProxyModel.cpp | 23 + src/ui/qml/HistoryProxyModel.h | 26 + src/ui/qml/LogModel.cpp | 144 +- src/ui/qml/LogModel.h | 29 +- src/ui/qml/LogModel_android.cpp | 7 +- src/ui/qml/LogModel_generic.cpp | 8 +- src/ui/qml/LogModel_ios.mm | 141 + src/ui/qml/NotificationModel.cpp | 100 + src/ui/qml/NotificationModel.h | 65 + src/ui/qml/NumberModel.cpp | 62 +- src/ui/qml/NumberModel.h | 22 +- src/ui/qml/PlatformHelper.cpp | 61 + src/ui/qml/PlatformHelper.h | 23 + src/ui/qml/ProviderCategoryFilterModel.cpp | 104 +- src/ui/qml/ProviderCategoryFilterModel.h | 3 +- src/ui/qml/ProviderModel.cpp | 13 + src/ui/qml/ProviderModel.h | 7 +- src/ui/qml/ProviderNameFilterModel.cpp | 60 + src/ui/qml/ProviderNameFilterModel.h | 37 + src/ui/qml/QmlExtension.h | 28 - src/ui/qml/QmlExtension_android.cpp | 107 - src/ui/qml/QmlExtension_generic.cpp | 58 - src/ui/qml/QmlExtension_ios.mm | 65 - src/ui/qml/ReaderScanEnabler.cpp | 61 + src/ui/qml/ReaderScanEnabler.h | 30 + src/ui/qml/RemoteServiceModel.cpp | 100 +- src/ui/qml/RemoteServiceModel.h | 39 +- src/ui/qml/SelfAuthModel.cpp | 11 +- src/ui/qml/SelfAuthModel.h | 22 +- src/ui/qml/SelfDiagnosisModel.cpp | 81 + src/ui/qml/SelfDiagnosisModel.h | 51 + src/ui/qml/SettingsModel.cpp | 287 +- src/ui/qml/SettingsModel.h | 69 +- src/ui/qml/StatusBarUtil.cpp | 69 - src/ui/qml/StatusBarUtil.h | 31 - src/ui/qml/UIPlugInQml.cpp | 317 +- src/ui/qml/UIPlugInQml.h | 39 +- src/ui/qml/UIPlugInQml_ios.mm | 32 + src/ui/qml/VersionInformationModel.cpp | 2 +- src/ui/qml/WorkflowModel.cpp | 62 +- src/ui/qml/WorkflowModel.h | 7 +- src/ui/websocket/CMakeLists.txt | 2 +- src/ui/websocket/UIPlugInWebSocket.cpp | 24 +- src/ui/websocket/UIPlugInWebSocket.h | 6 +- src/ui/widget/AboutDialog.cpp | 4 +- src/ui/widget/AboutDialog.ui | 2 +- src/ui/widget/AppQtGui.cpp | 44 +- src/ui/widget/AppQtGui.h | 6 +- src/ui/widget/AppQtMainWidget.cpp | 15 +- src/ui/widget/AppQtMainWidget.h | 2 + src/ui/widget/DeleteHistoryDialog.cpp | 4 +- src/ui/widget/DetailDialog.cpp | 2 +- src/ui/widget/DeveloperSettingsWidget.ui | 2 +- src/ui/widget/DiagnosisDialog.cpp | 4 +- src/ui/widget/DiagnosisDialog.h | 4 +- src/ui/widget/DiagnosisGui.cpp | 2 +- src/ui/widget/GeneralSettingsWidget.cpp | 3 +- src/ui/widget/GeneralSettingsWidget.h | 1 + src/ui/widget/GeneralSettingsWidget.ui | 46 + src/ui/widget/HistoryWidget.cpp | 13 +- src/ui/widget/LogFilesDialog.cpp | 2 +- src/ui/widget/PinSettingsWidget.cpp | 15 +- src/ui/widget/PinSettingsWidget.h | 3 +- src/ui/widget/PinSettingsWidget.ui | 52 - src/ui/widget/RandomPinDialog.cpp | 4 +- src/ui/widget/ReaderDeviceDialog.cpp | 2 +- src/ui/widget/ReaderDeviceGui.cpp | 10 +- src/ui/widget/ReaderDeviceWidget.cpp | 29 +- src/ui/widget/ReaderDriverModel.cpp | 171 - src/ui/widget/RemotePinInputDialog.cpp | 3 +- src/ui/widget/RemotePinInputDialog.h | 2 +- src/ui/widget/SettingsWidget.cpp | 1 + src/ui/widget/SettingsWidget.h | 1 + src/ui/widget/SetupAssistantGui.cpp | 2 +- src/ui/widget/SetupAssistantWizard.cpp | 16 +- src/ui/widget/UIPlugInWidgets.cpp | 1 + src/ui/widget/generic/BusyOverlay.cpp | 2 +- .../widget/generic/BusyOverlayContainer.cpp | 2 +- .../widget/generic/ExclusiveButtonGroup.cpp | 12 +- src/ui/widget/generic/GuiUtils.cpp | 17 + src/ui/widget/generic/GuiUtils.h | 1 + src/ui/widget/generic/PasswordEdit.cpp | 8 +- src/ui/widget/generic/TabButtonGroup.cpp | 4 +- .../widget/step/StepAuthenticationEac1Gui.cpp | 8 +- .../widget/step/StepAuthenticationEac1Gui.h | 2 - .../step/StepAuthenticationEac1Widget.cpp | 41 +- .../step/StepAuthenticationEac1Widget.h | 5 +- src/ui/widget/step/StepChooseCardGui.cpp | 47 +- src/ui/widget/step/StepChooseCardGui.h | 4 +- src/ui/widget/step/StepErrorGui.cpp | 40 +- src/ui/widget/step/StepErrorGui.h | 1 - src/ui/widget/step/StepGui.h | 2 +- src/ui/widget/workflow/GenericWorkflowGui.h | 3 + .../workflow/WorkflowAuthenticateQtGui.cpp | 6 + .../workflow/WorkflowChangePinQtGui.cpp | 52 +- .../widget/workflow/WorkflowChangePinQtGui.h | 3 +- src/ui/widget/workflow/WorkflowQtWidget.cpp | 4 +- .../widget/workflow/WorkflowSelfInfoQtGui.cpp | 11 + src/whitelist_client/Survey.cpp | 102 - src/whitelist_client/Survey.h | 43 - src/whitelist_client/SurveyHandler.cpp | 67 - src/whitelist_client/SurveyHandler.h | 26 - src/whitelist_client/SurveyModel.cpp | 160 + src/whitelist_client/SurveyModel.h | 58 + test/CMakeLists.txt | 8 +- test/helper/CMakeLists.txt | 2 +- test/helper/CliHelper.cpp | 171 - test/helper/CliHelper.h | 58 - test/helper/MockActivationContext.h | 8 +- test/helper/MockCard.cpp | 2 +- test/helper/MockCard.h | 2 +- test/helper/MockCardConnectionWorker.cpp | 20 +- test/helper/MockCardConnectionWorker.h | 5 +- test/helper/MockDataChannel.cpp | 2 +- test/helper/MockDownloader.cpp | 2 +- test/helper/MockNetworkManager.cpp | 29 +- test/helper/MockNetworkManager.h | 11 + test/helper/MockNetworkReply.h | 3 + test/helper/MockReader.cpp | 1 + test/helper/MockReader.h | 9 +- test/helper/MockRemoteDispatcher.cpp | 2 +- test/helper/MockRemoteServer.cpp | 8 +- test/helper/MockRemoteServer.h | 1 + test/helper/MockSocket.cpp | 7 + test/helper/MockSocket.h | 1 + test/helper/TestAuthContext.cpp | 26 +- test/helper/TestAuthContext.h | 4 + test/qml/QmlTestRunner.cpp | 5 + test/qml/desktop/CMakeLists.txt | 4 +- test/qml/desktop/test_Global.qml | 40 +- .../{generic => desktop}/test_MainView.qml | 4 + test/qml/desktop/test_SettingsView.qml | 26 + test/qml/desktop/test_TitleBar.qml | 4 + test/qml/desktop/test_TutorialView.qml | 18 + test/qml/desktop/test_View.qml | 34 + test/qml/generic/CMakeLists.txt | 12 +- .../test_ChangePinView.qml | 4 + test/qml/generic/test_EnterPasswordView.qml | 18 + test/qml/generic/test_FeedbackView.qml | 18 + test/qml/generic/test_Global.qml | 59 +- .../{mobile => generic}/test_HistoryView.qml | 4 + test/qml/generic/test_IdentifyView.qml | 4 + test/qml/generic/test_InformationView.qml | 18 + test/qml/generic/test_ProgressView.qml | 4 + test/qml/generic/test_Provider.qml | 12 + .../{mobile => generic}/test_ProviderView.qml | 4 + test/qml/generic/test_ResultView.qml | 4 + .../generic/test_SelfAuthenticationView.qml | 18 + test/qml/generic/test_Style.qml | 6 +- test/qml/generic/test_TitleBar.qml | 4 + test/qml/generic/test_UiPluginQml.qml | 4 + test/qml/generic/test_Utils.qml | 4 + test/qml/generic/test_View.qml | 18 + .../qml/{mobile => generic}/test_Workflow.qml | 4 + test/qml/mobile/CMakeLists.txt | 8 +- test/qml/mobile/test_DeveloperView.qml | 4 + test/qml/mobile/test_EnterPinView.qml | 14 - test/qml/mobile/test_FeedbackView.qml | 8 +- test/qml/mobile/test_Global.qml | 68 +- test/qml/mobile/test_InformationView.qml | 12 +- test/qml/mobile/test_MoreView.qml | 4 + test/qml/mobile/test_Navigation.qml | 4 + test/qml/mobile/test_Provider.qml | 20 +- test/qml/mobile/test_RemoteServiceView.qml | 4 + test/qml/mobile/test_SplashScreen.qml | 4 + test/qml/mobile/test_TechnologyInfo.qml | 4 + test/qml/mobile/test_TutorialView.qml | 4 + test/qml/mobile/test_View.qml | 12 + test/qml/mobile/test_WhiteListClientView.qml | 4 + test/qt/CMakeLists.txt | 123 +- .../webservice}/test_Template.cpp | 0 .../test_WebserviceActivationContext.cpp | 33 +- .../test_WebserviceActivationHandler.cpp | 0 test/qt/card/asn1/test_AccessRoleAndRight.cpp | 4 +- .../card/asn1/test_CertificateDescription.cpp | 4 +- test/qt/card/asn1/test_EcdsaPublicKey.cpp | 3 +- .../test_DidAuthenticateEAC2Command.cpp | 91 + test/qt/card/base/test_CardConnection.cpp | 2 +- .../card/base/test_CardConnectionWorker.cpp | 147 + test/qt/card/base/test_CardInfo.cpp | 14 +- test/qt/card/base/test_CommandApdu.cpp | 4 +- test/qt/card/base/test_Commands.cpp | 6 +- test/qt/card/base/test_PinModify.cpp | 4 +- test/qt/card/base/test_PinModifyOutput.cpp | 24 +- test/qt/card/base/test_Reader.cpp | 105 +- .../card/bluetooth/test_BluetoothMessage.cpp | 28 +- ...etoothMessageParameterCardReaderStatus.cpp | 4 +- ...st_BluetoothMessageParameterMaxMsgSize.cpp | 4 +- .../bluetooth/test_BluetoothMessageParser.cpp | 4 +- .../drivers/test_ReaderDetector.cpp | 0 test/qt/card/pace/test_EcUtil.cpp | 24 +- .../card/pace/test_KeyDerivationFunction.cpp | 8 +- test/qt/card/pace/test_PaceHandler.cpp | 123 + test/qt/card/pcsc/test_pcscReaderFeature.cpp | 7 +- .../pcsc/test_pcscReaderPaceCapability.cpp | 7 +- test/qt/card/test_EstablishPaceChannel.cpp | 4 +- .../card/test_EstablishPaceChannelOutput.cpp | 4 +- .../card/test_GeneralAuthenticateResponse.cpp | 64 +- test/qt/card/test_MSEBuilder.cpp | 6 +- test/qt/card/test_SecureMessaging.cpp | 26 +- test/qt/card/test_SecureMessagingResponse.cpp | 4 +- test/qt/cli/test_UIPlugInCli.cpp | 118 - .../test_ProviderConfigurationParser.cpp | 2 +- .../test_ReaderConfiguration.cpp | 29 +- .../test_ReaderConfigurationParser.cpp | 5 - test/qt/core/context/test_WorkflowContext.cpp | 180 +- .../qt/core/controller/test_AppController.cpp | 147 + .../test_DidAuthenticateResponseEAC2.cpp | 4 +- test/qt/core/paos/invoke/test_PaosCreator.cpp | 40 +- .../retrieve/test_DidAuthenticateEac1.cpp | 4 +- .../retrieve/test_DidAuthenticateEac2.cpp | 4 +- .../test_DidAuthenticateEacAdditional.cpp | 4 +- .../retrieve/test_InitializeFramework.cpp | 4 +- .../paos/retrieve/test_StartPAOSResponse.cpp | 4 +- test/qt/core/paos/retrieve/test_transmit.cpp | 4 +- test/qt/core/paos/test_RequestType.cpp | 4 +- test/qt/core/paos/test_paoshandler.cpp | 4 +- .../test_StateCertificateDescriptionCheck.cpp | 28 +- .../core/states/test_StateChangePinRemote.cpp | 56 +- .../states/test_StateCheckRefreshAddress.cpp | 110 +- test/qt/core/states/test_StateConnectCard.cpp | 63 +- test/qt/core/states/test_StateDestroyPace.cpp | 2 +- .../states/test_StateDidAuthenticateEac2.cpp | 125 + .../states/test_StateEstablishPaceChannel.cpp | 234 +- .../test_StateEstablishPaceChannelRemote.cpp | 166 +- ...test_StateEstablishPaceChannelResponse.cpp | 137 + ...test_StateExtractCvcsFromEac1InputType.cpp | 28 +- .../states/test_StateGenericSendReceive.cpp | 22 +- .../test_StateGetSelfAuthenticationData.cpp | 147 + .../states/test_StateInitializeFramework.cpp | 4 +- .../test_StateMaintainCardConnection.cpp | 200 + .../core/states/test_StatePreVerification.cpp | 8 +- test/qt/core/states/test_StatePreparePace.cpp | 155 + .../states/test_StatePreparePaceRemote.cpp | 127 + .../test_StateProcessCertificatesFromEac2.cpp | 19 +- .../test_StateProcessRemoteMessages.cpp | 4 +- .../states/test_StateSelectPasswordId.cpp | 15 +- .../qt/core/states/test_StateSelectReader.cpp | 60 +- .../states/test_StateSendWhitelistSurvey.cpp | 180 + .../states/test_StateStartPaosResponse.cpp | 4 +- .../states/test_StateStartRemoteService.cpp | 24 +- .../states/test_StateStopRemoteService.cpp | 35 +- .../states/test_StateVerifyRetryCounter.cpp | 133 + .../qt/core/states/test_StateWriteHistory.cpp | 93 + test/qt/core/test_CertificateChecker.cpp | 2 +- .../core/test_DiagnosisAntivirusDetection.cpp | 2 +- test/qt/core/test_DiagnosisConnectionTest.cpp | 31 + test/qt/core/test_DiagnosisModel.cpp | 270 +- test/qt/core/test_DiagnosisTreeModel.cpp | 296 ++ test/qt/file_provider/test_Downloader.cpp | 12 +- test/qt/file_provider/test_FileProvider.cpp | 2 +- test/qt/file_provider/test_UpdatableFile.cpp | 2 +- test/qt/global/test_CardReturnCode.cpp | 3 +- test/qt/global/test_ECardApiResult.cpp | 8 +- test/qt/global/test_EnumHelper.cpp | 3 +- test/qt/global/test_FileDestination.cpp | 13 +- test/qt/global/test_GlobalStatus.cpp | 10 +- test/qt/global/test_Initializer.cpp | 2 +- test/qt/global/test_LogHandler.cpp | 6 +- test/qt/global/test_ResourceLoader.cpp | 2 +- test/qt/global/test_ScopeGuard.cpp | 2 + test/qt/global/test_VersionInfo.cpp | 4 +- test/qt/global/test_VersionNumber.cpp | 147 +- test/qt/network/test_DatagramHandlerImpl.cpp | 14 +- test/qt/network/test_HttpRequest.cpp | 6 +- test/qt/network/test_NetworkManager.cpp | 4 +- test/qt/network/test_TlsChecker.cpp | 2 +- test/qt/qml/test_AuthModel.cpp | 75 - test/qt/qml/test_ChatModel.cpp | 146 - test/qt/qml/test_LogModel.cpp | 265 -- test/qt/qml/test_NumberModel.cpp | 356 -- .../qml/test_ProviderCategoryFilterModel.cpp | 78 - test/qt/qml/test_ProviderModel.cpp | 74 - test/qt/qml/test_RemoteServiceModel.cpp | 149 - test/qt/qml/test_SelfAuthModel.cpp | 106 - .../remote_device/test_RemoteClientImpl.cpp | 2 +- .../qt/remote_device/test_RemoteConnector.cpp | 10 +- .../test_RemoteDeviceDescriptor.cpp | 2 +- .../test_RemoteDeviceListImpl.cpp | 2 +- .../remote_device/test_RemoteDeviceModel.cpp | 173 +- test/qt/remote_device/test_RemoteDisp.cpp | 12 +- .../test_RemoteReaderManagerPlugin.cpp | 77 +- .../qt/remote_device/test_RemoteTlsServer.cpp | 8 +- .../test_RemoteWebSocketServer.cpp | 10 +- .../test_ServerMessageHandler.cpp | 146 +- .../test_SecureStorage.cpp | 91 +- .../test_TlsConfiguration.cpp | 0 test/qt/services/test_AppUpdatr.cpp | 8 +- test/qt/settings/test_GeneralSettings.cpp | 213 +- test/qt/settings/test_HistorySettings.cpp | 49 +- test/qt/{ => ui}/aidl/test_PskManager.cpp | 0 test/qt/{jsonapi => ui/json}/test_Message.cpp | 8 +- .../{jsonapi => ui/json}/test_MsgContext.cpp | 0 .../{jsonapi => ui/json}/test_MsgHandler.cpp | 0 .../json}/test_MsgHandlerAccessRights.cpp | 0 .../json}/test_MsgHandlerApiLevel.cpp | 0 .../json}/test_MsgHandlerAuth.cpp | 0 .../json}/test_MsgHandlerCertificate.cpp | 0 .../json}/test_MsgHandlerEnterCan.cpp | 0 .../json}/test_MsgHandlerEnterPin.cpp | 0 .../json}/test_MsgHandlerEnterPuk.cpp | 0 .../json}/test_MsgHandlerInsertCard.cpp | 0 .../json}/test_MsgHandlerInternalError.cpp | 0 .../json}/test_MsgHandlerReader.cpp | 0 .../json}/test_MsgHandlerReaderList.cpp | 0 test/qt/ui/json/test_UIPlugInJson.cpp | 81 + test/qt/ui/qml/test_AuthModel.cpp | 56 + .../qml/test_CertificateDescriptionModel.cpp | 79 + test/qt/{ => ui}/qml/test_ChangePinModel.cpp | 18 +- test/qt/ui/qml/test_ChatModel.cpp | 213 + .../{ => ui}/qml/test_ConnectivityManager.cpp | 0 test/qt/ui/qml/test_HistoryModel.cpp | 231 ++ test/qt/ui/qml/test_LogModel.cpp | 147 + test/qt/ui/qml/test_NotificationModel.cpp | 95 + test/qt/ui/qml/test_NumberModel.cpp | 424 ++ .../qml/test_ProviderCategoryFilterModel.cpp | 212 + test/qt/ui/qml/test_ProviderModel.cpp | 69 + .../ui/qml/test_ProviderNameFilterModel.cpp | 79 + .../qt/{ => ui}/qml/test_QmlFileStructure.cpp | 4 +- test/qt/ui/qml/test_RemoteServiceModel.cpp | 194 + test/qt/ui/qml/test_SelfAuthModel.cpp | 119 + test/qt/ui/qml/test_UIPlugInQml.cpp | 172 + test/qt/{ => ui}/qml/test_WorkflowModel.cpp | 0 .../websocket/test_UIPlugInWebSocket.cpp | 23 +- test/qt/{ => ui}/widget/test_HelpAction.cpp | 2 +- .../widget/test_ReaderDriverModel.cpp | 2 +- test/qt/whitelist_client/test_Survey.cpp | 68 - test/qt/whitelist_client/test_SurveyModel.cpp | 84 + uncrustify.cfg | 41 +- 1501 files changed, 37408 insertions(+), 18258 deletions(-) create mode 100644 docs/releasenotes/1.18.0.rst create mode 100644 libs/patches/openssl-Adjust-iOS-target.patch create mode 100644 libs/patches/openssl-android-shlib_variant.patch create mode 100644 libs/patches/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch rename {patches => libs/patches}/qt-Add-work-around-for-freebsd-build.patch (84%) create mode 100644 libs/patches/qt-Adjust-iOS-target.patch create mode 100644 libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions-for-macO.patch create mode 100644 libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions.patch create mode 100644 libs/patches/qt-Disable-qmltime-for-shared-build.patch rename {patches => libs/patches}/qt-Disable-unused-imageformats.patch (60%) rename {patches => libs/patches}/qt-Enable-debug-output-for-OpenSSL.patch (100%) create mode 100644 libs/patches/qt-Fix-build-with-no-feature-printer-on-macOS.patch create mode 100644 libs/patches/qt-Fix-build-with-no-feature-printer.patch create mode 100644 libs/patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch create mode 100644 libs/patches/qt-Remove-unused-plugins-from-the-build.patch create mode 100644 libs/patches/qt-disable-designer.patch create mode 100644 libs/qt-install.qs create mode 100644 libs/qt.cmake delete mode 100644 patches/openssl-DSA-mod-inverse-fix.patch delete mode 100644 patches/openssl-Ignore-disabled-ciphers.patch delete mode 100644 patches/openssl-Timing-vulnerability-in-DSA-signature-generation-CVE.patch delete mode 100644 patches/openssl-Timing-vulnerability-in-ECDSA-signature-generation-C.patch delete mode 100644 patches/openssl-android-shlib_variant.patch delete mode 100644 patches/qt-Add-IsoDep-to-the-techList-on-Android.patch delete mode 100644 patches/qt-Android-Fix-crash.patch delete mode 100644 patches/qt-Android-fix-compile-with-NDK-r18.patch delete mode 100644 patches/qt-Introduce-reportError-to-fix-QMetaObject-invokeMethod.patch delete mode 100644 patches/qt-Linux-Remove-our-use-of-syscall-for-statx-2-and-rena.patch delete mode 100644 patches/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch delete mode 100644 patches/qt-QUrl-Support-IPv6-addresses-with-zone-id.patch delete mode 100644 patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch delete mode 100644 patches/qt-Use-QUrl-toString-when-forming-the-Host-header.patch delete mode 100644 patches/qt-Use-user-provided-session-data-if-available.patch delete mode 100644 patches/qt-Work-Around-FreeBSD-v12-build.patch delete mode 100644 patches/qt-configure-detect-fxc.exe-more-thoroughly.patch delete mode 100644 patches/qt-configure-refactor-directx-checks.patch delete mode 100644 patches/qt-disable-designer.patch delete mode 100644 patches/qt-fix-macOS-no-printer.patch create mode 100644 resources/images/android/hdpi/background_npa.png create mode 100644 resources/images/android/hdpi/foreground_npa.png create mode 100644 resources/images/android/hdpi/foreground_npa_beta.png create mode 100644 resources/images/android/hdpi/foreground_npa_preview.png create mode 100644 resources/images/android/ldpi/background_npa.png create mode 100644 resources/images/android/ldpi/foreground_npa.png create mode 100644 resources/images/android/ldpi/foreground_npa_beta.png create mode 100644 resources/images/android/ldpi/foreground_npa_preview.png create mode 100644 resources/images/android/mdpi/background_npa.png create mode 100644 resources/images/android/mdpi/foreground_npa.png create mode 100644 resources/images/android/mdpi/foreground_npa_beta.png create mode 100644 resources/images/android/mdpi/foreground_npa_preview.png create mode 100644 resources/images/android/npa.svg create mode 100644 resources/images/android/npa_background.svg create mode 100644 resources/images/android/npa_beta.svg create mode 100644 resources/images/android/npa_preview.svg rename resources/images/{search.svg => android/search_icon.svg} (100%) create mode 100644 resources/images/android/xhdpi/background_npa.png create mode 100644 resources/images/android/xhdpi/foreground_npa.png create mode 100644 resources/images/android/xhdpi/foreground_npa_beta.png create mode 100644 resources/images/android/xhdpi/foreground_npa_preview.png create mode 100644 resources/images/android/xxhdpi/background_npa.png create mode 100644 resources/images/android/xxhdpi/foreground_npa.png create mode 100644 resources/images/android/xxhdpi/foreground_npa_beta.png create mode 100644 resources/images/android/xxhdpi/foreground_npa_preview.png create mode 100644 resources/images/android/xxxhdpi/background_npa.png create mode 100644 resources/images/android/xxxhdpi/foreground_npa.png create mode 100644 resources/images/android/xxxhdpi/foreground_npa_beta.png create mode 100644 resources/images/android/xxxhdpi/foreground_npa_preview.png create mode 100644 resources/images/arrowLeft.svg delete mode 100644 resources/images/desktop/background.png create mode 100644 resources/images/desktop/bell_green.svg create mode 100644 resources/images/desktop/bell_red.svg create mode 100644 resources/images/desktop/bell_white.svg create mode 100644 resources/images/desktop/id_card.png create mode 100644 resources/images/desktop/info_application_log.svg create mode 100644 resources/images/desktop/info_diagnosis.svg create mode 100644 resources/images/desktop/info_license.svg create mode 100644 resources/images/desktop/info_manual.svg create mode 100644 resources/images/desktop/info_questions.svg create mode 100644 resources/images/desktop/info_rate_application.svg create mode 100644 resources/images/desktop/info_report_error.svg create mode 100644 resources/images/desktop/info_setup.svg create mode 100644 resources/images/desktop/info_version.svg create mode 100644 resources/images/desktop/main_info.svg create mode 100644 resources/images/desktop/pin-letter-page1.png create mode 100644 resources/images/desktop/pin-letter-page2.png create mode 100644 resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/Contents.json create mode 100644 resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png create mode 100644 resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png create mode 100644 resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png create mode 100644 resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/Contents.json create mode 100755 resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage.png create mode 100755 resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@2x.png create mode 100755 resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@3x.png create mode 100644 resources/images/iOS/appIcons/npa.svg create mode 100644 resources/images/iOS/appIcons/npa_beta.svg delete mode 100644 resources/images/iOS/launchImages/Default-568h@2x.png delete mode 100644 resources/images/iOS/launchImages/launchImage1024@2x.png delete mode 100644 resources/images/iOS/launchImages/launchImage1024@3x.png delete mode 100644 resources/images/iOS/launchImages/launchImage1112@2x.png delete mode 100644 resources/images/iOS/launchImages/launchImage1112@3x.png delete mode 100644 resources/images/iOS/launchImages/launchImage1366@2x.png delete mode 100644 resources/images/iOS/launchImages/launchImage1366@3x.png delete mode 100644 resources/images/iOS/launchImages/launchImage568@2x.png delete mode 100644 resources/images/iOS/launchImages/launchImage568@3x.png delete mode 100644 resources/images/iOS/launchImages/launchImage667@2x.png delete mode 100644 resources/images/iOS/launchImages/launchImage667@3x.png delete mode 100644 resources/images/iOS/launchImages/launchImage736@2x.png delete mode 100644 resources/images/iOS/launchImages/launchImage736@3x.png create mode 100644 resources/images/iOS/more/icon_mehr_npa.svg delete mode 100644 resources/images/iOS/more/icon_mehr_remotereader.svg create mode 100644 resources/images/iOS/more/icon_mehr_report.svg create mode 100644 resources/images/iOS/more/icon_mehr_verlauf.svg delete mode 100644 resources/images/iOS/tabBar/Anbieter-off.png delete mode 100644 resources/images/iOS/tabBar/Anbieter-on.png delete mode 100644 resources/images/iOS/tabBar/Ausweisen-off.png delete mode 100644 resources/images/iOS/tabBar/Ausweisen-on.png delete mode 100644 resources/images/iOS/tabBar/More-off.svg delete mode 100644 resources/images/iOS/tabBar/More-on.svg delete mode 100644 resources/images/iOS/tabBar/Pin-off.png delete mode 100644 resources/images/iOS/tabBar/Pin-on.png delete mode 100644 resources/images/iOS/tabBar/Verlauf-off.png delete mode 100644 resources/images/iOS/tabBar/Verlauf-on.png create mode 100644 resources/images/iOS/tabBar/anbieter.svg create mode 100644 resources/images/iOS/tabBar/ausweisen.svg create mode 100644 resources/images/iOS/tabBar/more.svg create mode 100644 resources/images/iOS/tabBar/pin.svg create mode 100644 resources/images/iOS/tabBar/remoteleser.svg create mode 100755 resources/images/icon_remote_0.svg create mode 100755 resources/images/icon_remote_100.svg create mode 100755 resources/images/icon_remote_25.svg create mode 100755 resources/images/icon_remote_50.svg create mode 100755 resources/images/icon_remote_75.svg create mode 100755 resources/images/icon_remote_inactive.svg create mode 100644 resources/images/icon_save.svg create mode 100644 resources/images/info.svg create mode 100644 resources/images/info_filled.svg create mode 100644 resources/images/npa_docs.png delete mode 100644 resources/images/provider/+tablet/adresse.png delete mode 100644 resources/images/provider/+tablet/mail.png delete mode 100644 resources/images/provider/+tablet/telefon.png delete mode 100644 resources/images/provider/+tablet/url.png delete mode 100644 resources/images/provider/adresse.png create mode 100644 resources/images/provider/adresse.svg delete mode 100644 resources/images/provider/mail.png create mode 100644 resources/images/provider/mail.svg delete mode 100644 resources/images/provider/telefon.png create mode 100644 resources/images/provider/telefon.svg delete mode 100644 resources/images/provider/url.png create mode 100644 resources/images/provider/url.svg create mode 100644 resources/images/reader/default_card_position.png create mode 100644 resources/images/reader/src/img_DefaultReader_card_position.svg create mode 100644 resources/images/search_cancel.svg create mode 100644 resources/images/search_icon.svg create mode 100644 resources/images/triangle.svg rename resources/images/tutorial/generated/{reader_sac_menu_de.svg => reader_sac_menu_android_de.svg} (87%) rename resources/images/tutorial/generated/{reader_sac_menu_en.svg => reader_sac_menu_android_en.svg} (87%) create mode 100644 resources/images/tutorial/generated/reader_sac_menu_ios_de.svg create mode 100644 resources/images/tutorial/generated/reader_sac_menu_ios_en.svg create mode 100644 resources/images/tutorial/generated/where_providerlist_screenshot_android_de.svg create mode 100644 resources/images/tutorial/generated/where_providerlist_screenshot_android_en.svg create mode 100644 resources/images/tutorial/screenshot_cert_android_de.png create mode 100644 resources/images/tutorial/screenshot_cert_android_en.png delete mode 100644 resources/images/tutorial/screenshot_cert_de.png delete mode 100644 resources/images/tutorial/screenshot_cert_en.png create mode 100644 resources/images/tutorial/screenshot_cert_ios_de.png create mode 100644 resources/images/tutorial/screenshot_cert_ios_en.png rename resources/images/tutorial/{screenshot_choose_reader_de.png => screenshot_choose_reader_android_de.png} (100%) rename resources/images/tutorial/{screenshot_choose_reader_en.png => screenshot_choose_reader_android_en.png} (100%) create mode 100644 resources/images/tutorial/screenshot_choose_reader_ios_de.png create mode 100644 resources/images/tutorial/screenshot_choose_reader_ios_en.png rename resources/images/tutorial/{screenshot_menu_providerlist_de.png => screenshot_menu_providerlist_android_de.png} (100%) rename resources/images/tutorial/{screenshot_menu_providerlist_en.png => screenshot_menu_providerlist_android_en.png} (100%) rename resources/images/tutorial/{screenshot_pin_management_menu_de.png => screenshot_pin_management_menu_android_de.png} (100%) rename resources/images/tutorial/{screenshot_pin_management_menu_en.png => screenshot_pin_management_menu_android_en.png} (100%) create mode 100755 resources/images/tutorial/screenshot_pin_management_menu_ios_de.png create mode 100755 resources/images/tutorial/screenshot_pin_management_menu_ios_en.png rename resources/images/tutorial/{screenshot_providerlist_de.png => screenshot_providerlist_android_de.png} (100%) rename resources/images/tutorial/{screenshot_providerlist_en.png => screenshot_providerlist_android_en.png} (100%) create mode 100755 resources/images/tutorial/screenshot_providerlist_ios_de.png create mode 100755 resources/images/tutorial/screenshot_providerlist_ios_en.png create mode 100755 resources/images/tutorial/screenshot_remoteservice_ios_de.png create mode 100755 resources/images/tutorial/screenshot_remoteservice_ios_en.png rename resources/images/tutorial/{screenshot_sac_menu_de.png => screenshot_sac_menu_android_de.png} (100%) rename resources/images/tutorial/{screenshot_sac_menu_en.png => screenshot_sac_menu_android_en.png} (100%) rename resources/images/tutorial/src/{reader_sac_menu_en.svg => reader_sac_menu_android_de.svg} (86%) rename resources/images/tutorial/src/{reader_sac_menu_de.svg => reader_sac_menu_android_en.svg} (86%) create mode 100644 resources/images/tutorial/src/reader_sac_menu_ios_de.svg create mode 100644 resources/images/tutorial/src/reader_sac_menu_ios_en.svg rename resources/images/tutorial/src/{where_providerlist_screenshot_de.svg => where_providerlist_screenshot_android_de.svg} (80%) rename resources/images/tutorial/src/{where_providerlist_screenshot_en.svg => where_providerlist_screenshot_android_en.svg} (80%) delete mode 100755 resources/jenkins/clang-gcov.py delete mode 100755 resources/jenkins/clang-gcov.sh delete mode 100644 resources/jenkins/docker/android/Dockerfile delete mode 100644 resources/jenkins/docker/arch/Dockerfile create mode 100755 resources/jenkins/docker/generate.py delete mode 100755 resources/jenkins/docker/generate.sh delete mode 100755 resources/jenkins/lcov_cobertura.py create mode 100644 resources/packaging/android/backup_rules.xml create mode 100644 resources/packaging/android/lint.aar.xml create mode 100644 resources/packaging/android/lint.apk.xml create mode 100644 resources/packaging/android/res/mipmap-anydpi-v26/npa.xml create mode 100644 resources/packaging/android/res/values/strings.xml rename resources/packaging/android/{styles.xml => res/values/style.xml} (62%) create mode 100644 resources/packaging/ios/AusweisApp2.entitlements create mode 100644 resources/packaging/ios/launchscreen.storyboard create mode 100644 resources/qml/Governikus/ChangePinView/+desktop/ChangePinController.qml create mode 100644 resources/qml/Governikus/ChangePinView/+desktop/ChangePinView.qml delete mode 100644 resources/qml/Governikus/ChangePinView/+ios/ChangePinViewContent.qml rename resources/qml/Governikus/ChangePinView/{ => +mobile}/ChangePinController.qml (80%) rename resources/qml/Governikus/ChangePinView/{ => +mobile}/ChangePinView.qml (57%) rename resources/qml/Governikus/ChangePinView/{+android => +mobile}/ChangePinViewContent.qml (58%) create mode 100644 resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml create mode 100644 resources/qml/Governikus/EnterPasswordView/+desktop/NumberField.qml create mode 100644 resources/qml/Governikus/EnterPasswordView/+desktop/NumberPad.qml create mode 100644 resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadButton.qml create mode 100644 resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadTab.qml create mode 100644 resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml rename resources/qml/Governikus/{EnterPinView/EnterPinView.qml => EnterPasswordView/+mobile/EnterPasswordView.qml} (73%) rename resources/qml/Governikus/{EnterPinView/PinField.qml => EnterPasswordView/+mobile/NumberField.qml} (87%) create mode 100644 resources/qml/Governikus/EnterPasswordView/+mobile/NumberPad.qml rename resources/qml/Governikus/{EnterPinView/PinPadButton.qml => EnterPasswordView/+mobile/NumberPadButton.qml} (62%) create mode 100644 resources/qml/Governikus/EnterPasswordView/qmldir delete mode 100644 resources/qml/Governikus/EnterPinView/PinPad.qml delete mode 100644 resources/qml/Governikus/EnterPinView/qmldir create mode 100644 resources/qml/Governikus/FeedbackView/+desktop/LogView.qml create mode 100644 resources/qml/Governikus/FeedbackView/+mobile/+android/StoreFeedbackPopup.qml create mode 100644 resources/qml/Governikus/FeedbackView/+mobile/+ios/StoreFeedbackPopup.qml delete mode 100644 resources/qml/Governikus/FeedbackView/+mobile/Log.qml create mode 100644 resources/qml/Governikus/FeedbackView/+mobile/LogView.qml delete mode 100644 resources/qml/Governikus/FeedbackView/+mobile/StoreFeedbackPopup.qml create mode 100644 resources/qml/Governikus/Global/+desktop/ConfirmationPopup.qml delete mode 100644 resources/qml/Governikus/Global/+desktop/ContinueButton.qml create mode 100644 resources/qml/Governikus/Global/+desktop/GComboBox.qml delete mode 100644 resources/qml/Governikus/Global/+desktop/GText.qml create mode 100644 resources/qml/Governikus/Global/+desktop/LocationButton.qml create mode 100644 resources/qml/Governikus/Global/+desktop/NavigationButton.qml create mode 100644 resources/qml/Governikus/Global/+desktop/PaneTitle.qml create mode 100644 resources/qml/Governikus/Global/+desktop/RoundedRectangle.qml create mode 100644 resources/qml/Governikus/Global/+desktop/ScrollGradients.qml create mode 100644 resources/qml/Governikus/Global/+desktop/ScrollablePane.qml create mode 100644 resources/qml/Governikus/Global/+desktop/SearchBar.qml create mode 100644 resources/qml/Governikus/Global/+desktop/TabbedPane.qml create mode 100644 resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndText.qml create mode 100644 resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndThreeLineText.qml create mode 100644 resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateOneLineText.qml create mode 100644 resources/qml/Governikus/Global/+desktop/ToggleableOption.qml create mode 100644 resources/qml/Governikus/Global/+mobile/+android/ConfirmationPopup.qml rename resources/qml/Governikus/{ProviderView => Global}/+mobile/+android/SearchBar.qml (75%) create mode 100644 resources/qml/Governikus/Global/+mobile/+ios/ConfirmationPopup.qml rename resources/qml/Governikus/{ProviderView => Global}/+mobile/+ios/SearchBar.qml (61%) delete mode 100644 resources/qml/Governikus/Global/+mobile/ConfirmationPopup.qml create mode 100644 resources/qml/Governikus/Global/+mobile/GFlickable.qml create mode 100644 resources/qml/Governikus/Global/+mobile/GGridView.qml create mode 100644 resources/qml/Governikus/Global/+mobile/GListView.qml create mode 100644 resources/qml/Governikus/Global/+mobile/GScrollBar.qml create mode 100644 resources/qml/Governikus/Global/+mobile/ListItem.qml create mode 100644 resources/qml/Governikus/Global/+mobile/PaneTitle.qml create mode 100644 resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml create mode 100644 resources/qml/Governikus/Global/BaseConfirmationPopup.qml create mode 100644 resources/qml/Governikus/Global/GSeparator.qml create mode 100644 resources/qml/Governikus/Global/GText.qml delete mode 100644 resources/qml/Governikus/Global/PaneTitle.qml delete mode 100644 resources/qml/Governikus/HistoryView/+android/+phone/HistoryView.qml delete mode 100644 resources/qml/Governikus/HistoryView/+android/+tablet/HistoryView.qml delete mode 100644 resources/qml/Governikus/HistoryView/+android/HistoryItemImage.qml delete mode 100644 resources/qml/Governikus/HistoryView/+android/HistoryListViewDelegate.qml create mode 100644 resources/qml/Governikus/HistoryView/+desktop/HistoryRemovalTimePeriodControl.qml create mode 100644 resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml create mode 100644 resources/qml/Governikus/HistoryView/+desktop/HistoryViewDetails.qml delete mode 100644 resources/qml/Governikus/HistoryView/+ios/+phone/HistoryView.qml delete mode 100644 resources/qml/Governikus/HistoryView/+ios/+tablet/HistoryView.qml delete mode 100644 resources/qml/Governikus/HistoryView/+ios/HistoryDetails.qml delete mode 100644 resources/qml/Governikus/HistoryView/+ios/HistoryItemImage.qml delete mode 100644 resources/qml/Governikus/HistoryView/+ios/HistoryListViewDelegate.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/+android/HistoryListViewDelegate.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/+android/HistoryView.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/+android/HistoryViewTitleBarControls.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryListViewDelegate.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryView.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/HistoryListItem.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/HistoryViewConfirmationPopup.qml create mode 100644 resources/qml/Governikus/HistoryView/+mobile/HistoryViewDetails.qml delete mode 100644 resources/qml/Governikus/HistoryView/HistoryListViewDelegateContent.qml delete mode 100644 resources/qml/Governikus/HistoryView/HistoryViewConfirmationPopup.qml delete mode 100644 resources/qml/Governikus/HistoryView/HistoryViewDetails.qml delete mode 100644 resources/qml/Governikus/HistoryView/HistoryViewTitleBarControls.qml create mode 100644 resources/qml/Governikus/InformationView/+desktop/DiagnosisView.qml create mode 100644 resources/qml/Governikus/InformationView/+desktop/InformationView.qml create mode 100644 resources/qml/Governikus/InformationView/+desktop/InformationViewIcon.qml create mode 100644 resources/qml/Governikus/InformationView/+desktop/VersionInformation.qml rename resources/qml/Governikus/InformationView/{Information.qml => +mobile/InformationView.qml} (67%) rename resources/qml/Governikus/InformationView/{ => +mobile}/VersionInformation.qml (59%) create mode 100644 resources/qml/Governikus/MoreView/+mobile/MoreView.qml create mode 100644 resources/qml/Governikus/MoreView/+mobile/MoreViewMenuItem.qml delete mode 100644 resources/qml/Governikus/MoreView/MoreView.qml delete mode 100644 resources/qml/Governikus/MoreView/MoreViewMenuItem.qml create mode 100644 resources/qml/Governikus/Provider/+desktop/ProviderContactInfo.qml create mode 100644 resources/qml/Governikus/Provider/+desktop/ProviderContactInfoItem.qml create mode 100644 resources/qml/Governikus/Provider/+desktop/ProviderDetailButtonBar.qml create mode 100644 resources/qml/Governikus/Provider/+desktop/ProviderDetailHistory.qml create mode 100644 resources/qml/Governikus/Provider/+desktop/ProviderDetailHistoryItem.qml create mode 100644 resources/qml/Governikus/Provider/+desktop/ProviderModelItem.qml delete mode 100644 resources/qml/Governikus/Provider/+mobile/+android/ProviderViewDelegate.qml delete mode 100644 resources/qml/Governikus/Provider/+mobile/+ios/ProviderViewDelegate.qml create mode 100644 resources/qml/Governikus/ProviderView/+desktop/AdditionalResultsItem.qml create mode 100644 resources/qml/Governikus/ProviderView/+desktop/ProviderCard.qml create mode 100644 resources/qml/Governikus/ProviderView/+desktop/ProviderOverview.qml delete mode 100644 resources/qml/Governikus/ProviderView/+desktop/SearchBar.qml create mode 100644 resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml create mode 100644 resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderListItemDelegate.qml create mode 100644 resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderSectionDelegate.qml rename resources/qml/Governikus/ProviderView/+mobile/{ => +tablet}/CategoryCheckbox.qml (69%) delete mode 100644 resources/qml/Governikus/ProviderView/+mobile/DimmableTextButton.qml delete mode 100644 resources/qml/Governikus/ProviderView/+mobile/ProviderSectionDelegate.qml create mode 100644 resources/qml/Governikus/RemoteServiceView/LinkQuality.qml create mode 100644 resources/qml/Governikus/SelfAuthenticationView/+desktop/SelfAuthenticationView.qml rename resources/qml/Governikus/{MainView/+mobile/MainView.qml => SelfAuthenticationView/+mobile/SelfAuthenticationView.qml} (59%) create mode 100644 resources/qml/Governikus/SelfAuthenticationView/qmldir create mode 100644 resources/qml/Governikus/SettingsView/+desktop/CardReaderDelegate.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/CardReaderView.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/DeveloperSettings.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/GeneralSettings.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/RemoteReaderDelegate.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/RemoteReaderView.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/SecurityAndPrivacySettings.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/SettingsView.qml create mode 100644 resources/qml/Governikus/SettingsView/+desktop/TabbedReaderView.qml create mode 100644 resources/qml/Governikus/SettingsView/qmldir create mode 100644 resources/qml/Governikus/Style/+desktop/PlatformColors.qml create mode 100644 resources/qml/Governikus/Style/+desktop/PlatformDimensions.qml create mode 100644 resources/qml/Governikus/Style/+desktop/PlatformTextStyles.qml delete mode 100644 resources/qml/Governikus/Style/+desktop/ProviderStyle.qml create mode 100644 resources/qml/Governikus/Style/+mobile/+android/BrandColors.qml create mode 100644 resources/qml/Governikus/Style/+mobile/+android/BrandDimensions.qml create mode 100644 resources/qml/Governikus/Style/+mobile/+android/PlatformTextStyles.qml delete mode 100644 resources/qml/Governikus/Style/+mobile/+android/ProviderStyle.qml create mode 100644 resources/qml/Governikus/Style/+mobile/+ios/BrandColors.qml create mode 100644 resources/qml/Governikus/Style/+mobile/+ios/BrandDimensions.qml create mode 100644 resources/qml/Governikus/Style/+mobile/+ios/PlatformTextStyles.qml delete mode 100644 resources/qml/Governikus/Style/+mobile/+ios/ProviderStyle.qml create mode 100644 resources/qml/Governikus/Style/+mobile/PlatformColors.qml create mode 100644 resources/qml/Governikus/Style/+mobile/PlatformDimensions.qml create mode 100644 resources/qml/Governikus/Style/Colors.qml create mode 100644 resources/qml/Governikus/Style/Dimensions.qml create mode 100644 resources/qml/Governikus/Style/Style.qml create mode 100644 resources/qml/Governikus/Style/TextStyle.qml create mode 100644 resources/qml/Governikus/Style/TextStyles.qml delete mode 100644 resources/qml/Governikus/TechnologyInfo/+ios/TechnologySwitch.qml rename resources/qml/Governikus/TechnologyInfo/{ => +mobile}/TechnologyInfo.qml (79%) rename resources/qml/Governikus/TechnologyInfo/{+android => +mobile}/TechnologySwitch.qml (69%) rename resources/qml/Governikus/TechnologyInfo/{ => +mobile}/TechnologySwitchButton.qml (67%) create mode 100644 resources/qml/Governikus/TitleBar/+desktop/Notifications.qml create mode 100644 resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBarNavigation.qml create mode 100644 resources/qml/Governikus/TitleBar/+mobile/BaseTitleBar.qml create mode 100644 resources/qml/Governikus/TitleBar/+mobile/NavigationAction.qml delete mode 100644 resources/qml/Governikus/TitleBar/+mobile/TitleBarText.qml create mode 100644 resources/qml/Governikus/TutorialView/+desktop/SetupAssistantBinaryDecisionView.qml create mode 100644 resources/qml/Governikus/TutorialView/+desktop/SetupAssistantButton.qml create mode 100644 resources/qml/Governikus/TutorialView/+desktop/SetupAssistantCardReaderView.qml create mode 100644 resources/qml/Governikus/TutorialView/+desktop/SetupAssistantView.qml create mode 100644 resources/qml/Governikus/TutorialView/+mobile/TutorialStatusBar.qml create mode 100644 resources/qml/Governikus/View/+desktop/Controller.qml create mode 100644 resources/qml/Governikus/View/+desktop/FocusPoint.qml create mode 100644 resources/qml/Governikus/View/+desktop/FramedImage.qml create mode 100644 resources/qml/Governikus/View/+mobile/FocusFrame.qml delete mode 100644 resources/qml/Governikus/WhiteListClient/BulletPointDelegate.qml create mode 100644 resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml rename resources/qml/Governikus/Workflow/{+mobile => }/Workflow.qml (53%) delete mode 100644 resources/qml/main.qml delete mode 100644 src/card/base/CardOperationResult.h create mode 100644 src/card/base/CommandApduBuilder.cpp create mode 100644 src/card/base/CommandApduBuilder.h delete mode 100644 src/card/base/Commands.cpp delete mode 100644 src/card/base/Commands.h create mode 100644 src/card/base/EABuilder.cpp create mode 100644 src/card/base/EABuilder.h create mode 100644 src/card/base/GABuilder.cpp create mode 100644 src/card/base/GABuilder.h create mode 100644 src/card/base/GetChallengeBuilder.cpp create mode 100644 src/card/base/GetChallengeBuilder.h create mode 100644 src/card/base/MSEBuilder.cpp create mode 100644 src/card/base/MSEBuilder.h create mode 100644 src/card/base/PSOBuilder.cpp create mode 100644 src/card/base/PSOBuilder.h create mode 100644 src/card/base/ReadBinaryBuilder.cpp create mode 100644 src/card/base/ReadBinaryBuilder.h create mode 100644 src/card/base/ResetRetryCounterBuilder.cpp create mode 100644 src/card/base/ResetRetryCounterBuilder.h create mode 100644 src/card/base/SelectBuilder.cpp create mode 100644 src/card/base/SelectBuilder.h create mode 100644 src/card/ios/CMakeLists.txt create mode 100644 src/card/ios/IosCard.h create mode 100644 src/card/ios/IosCard.mm create mode 100644 src/card/ios/IosCardPointer.h create mode 100644 src/card/ios/IosReader.h create mode 100644 src/card/ios/IosReader.mm create mode 100644 src/card/ios/IosReaderDelegate.h create mode 100644 src/card/ios/IosReaderDelegate.mm create mode 100644 src/card/ios/IosReaderDelegateImpl.h create mode 100644 src/card/ios/IosReaderDelegateImpl.mm create mode 100644 src/card/ios/IosReaderManagerPlugIn.h create mode 100644 src/card/ios/IosReaderManagerPlugIn.mm create mode 100644 src/card/ios/metadata.json create mode 100644 src/core/DiagnosisTreeModel.cpp create mode 100644 src/core/DiagnosisTreeModel.h delete mode 100644 src/core/states/CompositeStateSelectCard.cpp create mode 100644 src/core/states/CompositeStateTrustedChannel.cpp rename src/core/states/{CompositeStateSelectCard.h => CompositeStateTrustedChannel.h} (51%) rename src/core/states/{AbstractGenericState.h => GenericContextContainer.h} (57%) delete mode 100644 src/ui/cli/CMakeLists.txt delete mode 100644 src/ui/cli/ConsoleReader.cpp delete mode 100644 src/ui/cli/ConsoleReader.h delete mode 100644 src/ui/cli/UIPlugInCli.cpp delete mode 100644 src/ui/cli/UIPlugInCli.h delete mode 100644 src/ui/cli/metadata.json create mode 100644 src/ui/common/Email.cpp create mode 100644 src/ui/common/Email.h create mode 100644 src/ui/common/ReaderDriverModel.cpp rename src/ui/{widget => common}/ReaderDriverModel.h (58%) rename src/{remote_device => ui/common}/RemoteDeviceModel.cpp (69%) rename src/{remote_device => ui/common}/RemoteDeviceModel.h (75%) rename src/ui/{jsonapi => json}/CMakeLists.txt (50%) rename src/ui/{jsonapi => json}/MessageDispatcher.cpp (81%) rename src/ui/{jsonapi => json}/MessageDispatcher.h (68%) rename src/ui/{jsonapi/UIPlugInJsonApi.cpp => json/UIPlugInJson.cpp} (56%) rename src/ui/{jsonapi/UIPlugInJsonApi.h => json/UIPlugInJson.h} (86%) rename src/ui/{jsonapi => json}/messages/MsgContext.cpp (97%) rename src/ui/{jsonapi => json}/messages/MsgContext.h (100%) rename src/ui/{jsonapi => json}/messages/MsgHandler.cpp (88%) rename src/ui/{jsonapi => json}/messages/MsgHandler.h (75%) rename src/ui/{jsonapi => json}/messages/MsgHandlerAccessRights.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerAccessRights.h (83%) rename src/ui/{jsonapi => json}/messages/MsgHandlerApiLevel.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerApiLevel.h (75%) rename src/ui/{jsonapi => json}/messages/MsgHandlerAuth.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerAuth.h (78%) rename src/ui/{jsonapi => json}/messages/MsgHandlerBadState.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerBadState.h (79%) rename src/ui/{jsonapi => json}/messages/MsgHandlerCertificate.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerCertificate.h (83%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterCan.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterCan.h (70%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterNumber.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterNumber.h (89%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterPin.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterPin.h (70%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterPuk.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerEnterPuk.h (70%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInfo.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInfo.h (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInsertCard.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInsertCard.h (84%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInternalError.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInternalError.h (67%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInvalid.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerInvalid.h (62%) create mode 100644 src/ui/json/messages/MsgHandlerLog.cpp create mode 100644 src/ui/json/messages/MsgHandlerLog.h rename src/ui/{jsonapi => json}/messages/MsgHandlerReader.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerReader.h (83%) rename src/ui/{jsonapi => json}/messages/MsgHandlerReaderList.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerReaderList.h (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerUnknownCommand.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgHandlerUnknownCommand.h (83%) rename src/ui/{jsonapi => json}/messages/MsgTypes.cpp (100%) rename src/ui/{jsonapi => json}/messages/MsgTypes.h (97%) create mode 100644 src/ui/json/metadata.json delete mode 100644 src/ui/jsonapi/metadata.json create mode 100644 src/ui/qml/AppUpdateDataModel.cpp create mode 100644 src/ui/qml/AppUpdateDataModel.h create mode 100644 src/ui/qml/ApplicationModel_ios.mm rename src/ui/qml/{DpiCalculator_generic.cpp => DpiCalculator.cpp} (50%) delete mode 100644 src/ui/qml/DpiCalculator_android.cpp delete mode 100644 src/ui/qml/DpiCalculator_ios.mm create mode 100644 src/ui/qml/HistoryProxyModel.cpp create mode 100644 src/ui/qml/HistoryProxyModel.h create mode 100644 src/ui/qml/LogModel_ios.mm create mode 100644 src/ui/qml/NotificationModel.cpp create mode 100644 src/ui/qml/NotificationModel.h create mode 100644 src/ui/qml/PlatformHelper.cpp create mode 100644 src/ui/qml/PlatformHelper.h create mode 100644 src/ui/qml/ProviderNameFilterModel.cpp create mode 100644 src/ui/qml/ProviderNameFilterModel.h delete mode 100644 src/ui/qml/QmlExtension.h delete mode 100644 src/ui/qml/QmlExtension_android.cpp delete mode 100644 src/ui/qml/QmlExtension_generic.cpp delete mode 100644 src/ui/qml/QmlExtension_ios.mm create mode 100644 src/ui/qml/ReaderScanEnabler.cpp create mode 100644 src/ui/qml/ReaderScanEnabler.h create mode 100644 src/ui/qml/SelfDiagnosisModel.cpp create mode 100644 src/ui/qml/SelfDiagnosisModel.h delete mode 100644 src/ui/qml/StatusBarUtil.cpp delete mode 100644 src/ui/qml/StatusBarUtil.h create mode 100644 src/ui/qml/UIPlugInQml_ios.mm delete mode 100644 src/ui/widget/ReaderDriverModel.cpp delete mode 100644 src/whitelist_client/Survey.cpp delete mode 100644 src/whitelist_client/Survey.h delete mode 100644 src/whitelist_client/SurveyHandler.cpp delete mode 100644 src/whitelist_client/SurveyHandler.h create mode 100644 src/whitelist_client/SurveyModel.cpp create mode 100644 src/whitelist_client/SurveyModel.h delete mode 100644 test/helper/CliHelper.cpp delete mode 100644 test/helper/CliHelper.h rename test/qml/{generic => desktop}/test_MainView.qml (74%) create mode 100644 test/qml/desktop/test_SettingsView.qml create mode 100644 test/qml/desktop/test_TutorialView.qml create mode 100644 test/qml/desktop/test_View.qml rename test/qml/{mobile => generic}/test_ChangePinView.qml (75%) create mode 100644 test/qml/generic/test_EnterPasswordView.qml create mode 100644 test/qml/generic/test_FeedbackView.qml rename test/qml/{mobile => generic}/test_HistoryView.qml (75%) create mode 100644 test/qml/generic/test_InformationView.qml rename test/qml/{mobile => generic}/test_ProviderView.qml (75%) create mode 100644 test/qml/generic/test_SelfAuthenticationView.qml create mode 100644 test/qml/generic/test_View.qml rename test/qml/{mobile => generic}/test_Workflow.qml (83%) delete mode 100644 test/qml/mobile/test_EnterPinView.qml rename test/qt/{activation_webservice => activation/webservice}/test_Template.cpp (100%) rename test/qt/{activation_webservice => activation/webservice}/test_WebserviceActivationContext.cpp (77%) rename test/qt/{activation_webservice => activation/webservice}/test_WebserviceActivationHandler.cpp (100%) create mode 100644 test/qt/card/base/command/test_DidAuthenticateEAC2Command.cpp create mode 100644 test/qt/card/base/test_CardConnectionWorker.cpp rename test/qt/{ => card}/drivers/test_ReaderDetector.cpp (100%) delete mode 100644 test/qt/cli/test_UIPlugInCli.cpp create mode 100644 test/qt/core/controller/test_AppController.cpp create mode 100644 test/qt/core/states/test_StateDidAuthenticateEac2.cpp create mode 100644 test/qt/core/states/test_StateEstablishPaceChannelResponse.cpp create mode 100644 test/qt/core/states/test_StateGetSelfAuthenticationData.cpp create mode 100644 test/qt/core/states/test_StateMaintainCardConnection.cpp create mode 100644 test/qt/core/states/test_StatePreparePace.cpp create mode 100644 test/qt/core/states/test_StatePreparePaceRemote.cpp create mode 100644 test/qt/core/states/test_StateSendWhitelistSurvey.cpp create mode 100644 test/qt/core/states/test_StateVerifyRetryCounter.cpp create mode 100644 test/qt/core/states/test_StateWriteHistory.cpp create mode 100644 test/qt/core/test_DiagnosisTreeModel.cpp delete mode 100644 test/qt/qml/test_AuthModel.cpp delete mode 100644 test/qt/qml/test_ChatModel.cpp delete mode 100644 test/qt/qml/test_LogModel.cpp delete mode 100644 test/qt/qml/test_NumberModel.cpp delete mode 100644 test/qt/qml/test_ProviderCategoryFilterModel.cpp delete mode 100644 test/qt/qml/test_ProviderModel.cpp delete mode 100644 test/qt/qml/test_RemoteServiceModel.cpp delete mode 100644 test/qt/qml/test_SelfAuthModel.cpp rename test/qt/{securestorage => secure_storage}/test_SecureStorage.cpp (73%) rename test/qt/{securestorage => secure_storage}/test_TlsConfiguration.cpp (100%) rename test/qt/{ => ui}/aidl/test_PskManager.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_Message.cpp (97%) rename test/qt/{jsonapi => ui/json}/test_MsgContext.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandler.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerAccessRights.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerApiLevel.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerAuth.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerCertificate.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerEnterCan.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerEnterPin.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerEnterPuk.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerInsertCard.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerInternalError.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerReader.cpp (100%) rename test/qt/{jsonapi => ui/json}/test_MsgHandlerReaderList.cpp (100%) create mode 100644 test/qt/ui/json/test_UIPlugInJson.cpp create mode 100644 test/qt/ui/qml/test_AuthModel.cpp create mode 100644 test/qt/ui/qml/test_CertificateDescriptionModel.cpp rename test/qt/{ => ui}/qml/test_ChangePinModel.cpp (68%) create mode 100644 test/qt/ui/qml/test_ChatModel.cpp rename test/qt/{ => ui}/qml/test_ConnectivityManager.cpp (100%) create mode 100644 test/qt/ui/qml/test_HistoryModel.cpp create mode 100644 test/qt/ui/qml/test_LogModel.cpp create mode 100644 test/qt/ui/qml/test_NotificationModel.cpp create mode 100644 test/qt/ui/qml/test_NumberModel.cpp create mode 100644 test/qt/ui/qml/test_ProviderCategoryFilterModel.cpp create mode 100644 test/qt/ui/qml/test_ProviderModel.cpp create mode 100644 test/qt/ui/qml/test_ProviderNameFilterModel.cpp rename test/qt/{ => ui}/qml/test_QmlFileStructure.cpp (92%) create mode 100644 test/qt/ui/qml/test_RemoteServiceModel.cpp create mode 100644 test/qt/ui/qml/test_SelfAuthModel.cpp create mode 100644 test/qt/ui/qml/test_UIPlugInQml.cpp rename test/qt/{ => ui}/qml/test_WorkflowModel.cpp (100%) rename test/qt/{ => ui}/websocket/test_UIPlugInWebSocket.cpp (88%) rename test/qt/{ => ui}/widget/test_HelpAction.cpp (99%) rename test/qt/{ => ui}/widget/test_ReaderDriverModel.cpp (99%) delete mode 100644 test/qt/whitelist_client/test_Survey.cpp create mode 100644 test/qt/whitelist_client/test_SurveyModel.cpp diff --git a/CMakeGraphVizOptions.cmake b/CMakeGraphVizOptions.cmake index 26b3ceb..acd5748 100644 --- a/CMakeGraphVizOptions.cmake +++ b/CMakeGraphVizOptions.cmake @@ -4,7 +4,7 @@ # cmake --build . --target architecture ######################################## -SET(GRAPHVIZ_IGNORE_TARGETS AusweisAppGlobal;AusweisAppExternal;AusweisAppUiCli;cvc;fuzz;OpenSsl;tlscheck;Test;Script) +SET(GRAPHVIZ_IGNORE_TARGETS AusweisAppGlobal;AusweisAppExternal;cvc;fuzz;OpenSsl;tlscheck;Test;Script) SET(GRAPHVIZ_EXTERNAL_LIBS OFF) SET(GRAPHVIZ_EXECUTABLES ON) SET(GRAPHVIZ_GENERATE_PER_TARGET OFF) diff --git a/CMakeLists.txt b/CMakeLists.txt index 581cccc..141bb3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0) +CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0) IF(POLICY CMP0020) CMAKE_POLICY(SET CMP0020 NEW) @@ -37,7 +37,7 @@ ELSE() ENDIF() -PROJECT(AusweisApp2 VERSION 1.16.2 LANGUAGES ${LANGUAGES}) +PROJECT(AusweisApp2 VERSION 1.18.0 LANGUAGES ${LANGUAGES}) # Set TWEAK if not defined in PROJECT_VERSION above to # have a valid tweak version without propagating it @@ -49,7 +49,8 @@ ENDIF() IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/dist" CACHE PATH "default install path" FORCE) ENDIF() -SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") +SET(CMAKE_DIR "${PROJECT_SOURCE_DIR}/cmake") +SET(CMAKE_MODULE_PATH "${CMAKE_DIR}") OPTION(BUILD_SHARED_LIBS "Enable build of shared libraries") INCLUDE(Helper) @@ -133,7 +134,7 @@ ADD_SUBDIRECTORY(src) IF("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG") INCLUDE(CTest) - CONFIGURE_FILE("${CMAKE_MODULE_PATH}/CTestCustom.cmake.in" "${CMAKE_BINARY_DIR}/CTestCustom.cmake" @ONLY) + CONFIGURE_FILE("${CMAKE_DIR}/CTestCustom.cmake.in" "${CMAKE_BINARY_DIR}/CTestCustom.cmake" @ONLY) CONFIGURE_FILE("${RESOURCES_DIR}/sonar-project.properties.in" "${CMAKE_BINARY_DIR}/sonar-project.properties" @ONLY) ENDIF() diff --git a/LICENSE.officially.txt b/LICENSE.officially.txt index fad0d6c..39ca56b 100644 --- a/LICENSE.officially.txt +++ b/LICENSE.officially.txt @@ -1,50 +1,7 @@ Nutzungsbedingungen -Allgemeines zur Installation +Bitte lesen Sie zunächst die Lizenzbestimmungen und deren Ergänzungen für die Überlassung und Nutzung der AusweisApp2 durch. Nachdem Sie diesen zugestimmt haben, können Sie die Installation fortsetzen. Datenschutzrechtliche Hinweise sind unter https://www.ausweisapp.bund.de/datenschutz/ abrufbar. -Bitte lesen Sie zunächst die Allgemeinen Geschäftsbedingungen so wie die Lizenzbedingungen für die Überlassung und Nutzung der AusweisApp2 durch. Nachdem Sie zugestimmt haben, können Sie die Installation fortsetzen. - - - Allgemeine Geschäftsbedingungen - -§ 1 Nutzungsbedingungen und Datenschutzhinweis -(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesministerium des Innern, für Bau und Heimat (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden. -(2) "Nutzer" im Sinne dieses Vertrages sind natürliche Personen. - -§ 2 Vertragsgegenstand und Unentgeltlichkeit -(1) Die AusweisApp2 wird regelmäßig hinsichtlich ihrer Konformität zu den Technischen Richtlinien des Bundesamtes für Sicherheit in der Informationstechnik [TR-03124-2] zertifiziert sowie hinsichtlich ihrer Nutzerfreundlichkeit [EN ISO 9241 Teil 110 Ergonomie Mensch-System-Integration zur Prüfung der Benutzbarkeit und Funktionalität und Trusted Design Guidelines zur Prüfung der Vertrauenswürdigkeit] und auf Barrierefreiheit [BITV 2.0] überprüft. -(2) Die AusweisApp2 wird in maschinenlesbarer Form unentgeltlich überlassen. Der Quellcode der AusweisApp2 wird ebenfalls unentgeltlich veröffentlicht. Eine Auflistung der verwendeten Open Source-Bestandteile der AusweisApp2 findet sich im Anhang. -(3) Die AusweisApp2 wird von der Governikus GmbH & Co. KG (Governikus) als Erfüllungsgehilfe des Bundes überlassen. - -§ 3 Verwendungszweck -Die AusweisApp2 und alle ihre Bestandteile dienen ausschließlich dazu, im Zusammenhang mit der Nutzung der Online-Ausweisfunktion des Personalausweises bzw. des elektronischen Aufenthaltstitels und der Übermittlung der damit verbundenen Daten gemäß den gesetzlichen Vorgaben verwendet zu werden. - -§ 4 Pflichten und Obliegenheiten des Nutzers -(1) Der Nutzer verpflichtet sich, die AusweisApp2 entsprechend des in § 3 genannten Verwendungszweckes zu nutzen. Es liegt in seinem Interesse, dass in Verbindung mit der AusweisApp2 genutzte Hard- und Software des Nutzers immer auf dem neuesten Stand der Sicherheitstechnik (System- und Firmware Update, Virenscanner, Firewall usw.) sind. -(2) Es liegt im eigenen Interesse des Nutzers aber auch des Bundes, dass stets nur die neueste Version der AusweisApp2 (siehe § 5) verwendet wird. - -§ 5 Pflege und Support -(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 421 204 95-995. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein zusätzlicher Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen. -(2) Verfügbare neue Versionen der AusweisApp2 können im Internet kostenfrei auf dem AusweisApp2-Portal unter der Adresse www.ausweisapp.bund.de sowie über allgemein zugängliche AppStore heruntergeladen werden. -(3) Eventuelle Mängel der AusweisApp2 werden grundsätzlich dadurch behoben, dass der Bund jeweils eine neue Version der AusweisApp2 zum Herunterladen zur Verfügung stellt (siehe § 5 Absatz 1). Eine Pflicht zur Bereitstellung von neuen Versionen ergibt sich daraus grundsätzlich nicht. - -§ 6 Hinweis auf gewerbliche und urheberrechtliche Schutzrechte -Die Zeichen AusweisApp2 und die entsprechenden Grafiken sowie das Signet zur Online-Ausweisfunktion sind für den Bund als Marken geschützt. - -§ 7 Datenschutzhinweis -(1) Mit dieser Software werden personenbezogene Daten im Sinne des § 3 Absatz 1 des Bundesdatenschutzgesetzes (BDSG) zum Zwecke der Verarbeitung grundsätzlich nicht erhoben. -(2) Personenbezogene Daten aus dem Ausweischip werden ausschließlich zum Zweck des elektronischen Identitätsnachweises im Umfang der erteilten Berechtigung nach Einwilligung des Nutzers mit seiner Ausweis-PIN-Eingabe und auf dem Transportweg zwischen dem Ausweischip und dem Diensteanbieter sicher verschlüsselt und auch für Governikus nicht lesbar übertragen. -(3) Neben den reinen Daten, die zur Identifizierung/ Authentisierung benötigt werden, erhebt die Software nur mit Einverständnis des Nutzers Daten über die Art und Version der Anwendungsumgebung (Betriebssystem, Lesegeräte usw.) des Nutzers. Diese Daten kann der Nutzer bei Bedarf an Governikus übermitteln, um die ordnungsgemäße Verarbeitung prüfen zu lassen und Fehlern im Verarbeitungsprozess vorzubeugen. Die Nutzung der Daten erfolgt dann im Rahmen des § 14 BDSG durch Governikus im Auftrag des Bundes und nur für den genannten Zweck. -(4) Die in der AusweisApp2 enthaltene Selbstauskunft über die im Chip gespeicherten Daten, ist ein Dienst der durch Governikus über das Internet erbracht wird. Die Ausweisdaten werden dabei nur zur Anzeige des Nutzers gebracht und nicht dauerhaft bei Governikus gespeichert oder für andere Zwecke verwendet. - -§ 8 Deutsches Recht -Auf diese Nutzungsbedingungen ist ausschließlich deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) anwendbar. - - -Anhang - -Eingearbeitete Open Source-Komponenten -Qt, OpenSSL und http_parser. @@ -344,6 +301,68 @@ Unbeschadet besonderer Vereinbarungen zwischen den Parteien gilt Folgendes: + Lizenzergänzungen + +§ 1 Nutzungsbedingungen +(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesamt für Sicherheit in der Informationstechnik (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden. +(2) "Nutzer" im Sinne dieses Vertrages sind natürliche Personen. + +§ 2 Vertragsgegenstand und Unentgeltlichkeit +(1) Die AusweisApp2 wird regelmäßig hinsichtlich ihrer Konformität zu den Technischen Richtlinien des Bundesamtes für Sicherheit in der Informationstechnik [TR-03124-2] zertifiziert sowie hinsichtlich ihrer Nutzerfreundlichkeit [EN ISO 9241 Teil 110 Ergonomie Mensch-System-Integration zur Prüfung der Benutzbarkeit und Funktionalität und Trusted Design Guidelines zur Prüfung der Vertrauenswürdigkeit] und auf Barrierefreiheit [BITV 2.0] überprüft. +(2) Die AusweisApp2 wird in maschinenlesbarer Form unentgeltlich überlassen. Der Quellcode der AusweisApp2 wird ebenfalls unentgeltlich veröffentlicht. Eine Auflistung der verwendeten Open Source-Bestandteile der AusweisApp2 findet sich im Anhang. +(3) Die AusweisApp2 wird von der Governikus GmbH & Co. KG (Governikus) als Erfüllungsgehilfe des Bundes überlassen. + +§ 3 Verwendungszweck +Die AusweisApp2 und alle ihre Bestandteile dienen ausschließlich dazu, im Zusammenhang mit der Nutzung der Online-Ausweisfunktion des Personalausweises bzw. des elektronischen Aufenthaltstitels und der Übermittlung der damit verbundenen Daten gemäß den gesetzlichen Vorgaben verwendet zu werden. + +§ 4 Pflichten und Obliegenheiten des Nutzers +(1) Der Nutzer verpflichtet sich, die AusweisApp2 entsprechend des in § 3 genannten Verwendungszweckes zu nutzen. Es liegt in seinem Interesse, dass in Verbindung mit der AusweisApp2 genutzte Hard- und Software des Nutzers immer auf dem neuesten Stand der Sicherheitstechnik (System- und Firmware Update, Virenscanner, Firewall usw.) sind. +(2) Es liegt im eigenen Interesse des Nutzers aber auch des Bundes, dass stets nur die neueste Version der AusweisApp2 (siehe § 5) verwendet wird. + +§ 5 Pflege und Support +(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 421 204 95-995. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen. +(2) Verfügbare neue Versionen der AusweisApp2 können im Internet kostenfrei auf dem AusweisApp2-Portal unter der Adresse www.ausweisapp.bund.de sowie über allgemein zugängliche AppStore heruntergeladen werden. +(3) Eventuelle Mängel der AusweisApp2 werden grundsätzlich dadurch behoben, dass der Bund jeweils eine neue Version der AusweisApp2 zum Herunterladen zur Verfügung stellt (siehe § 5 Absatz 1). Eine Pflicht zur Bereitstellung von neuen Versionen ergibt sich daraus nicht. + +§ 6 Hinweis auf gewerbliche und urheberrechtliche Schutzrechte +Die Zeichen AusweisApp2 und die entsprechenden Grafiken sowie das Signet zur Online-Ausweisfunktion sind für den Bund als Marken geschützt. + +§ 7 Deutsches Recht +Auf diese Nutzungsbedingungen ist ausschließlich deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) anwendbar. + + +Anhang + + Ergänzende Lizenzhinweise + +Die verwendeten Open-Source-Bibliotheken unterliegen den folgenden Nutzungsbedingungen: + +OpenSSL + Lizenz: OpenSSL license & SSLeay license + Version: 1.1.1c + Adresse: https://www.openssl.org/ + +Qt + Lizenz: LGPL v3 + Version: 5.12.4 + Adresse: https://www.qt.io/ + +http_parser + Lizenz: MIT + Version: 2.9.2 + Adresse: https://github.com/nodejs/http-parser/ + +Android Support Library V4 + Lizenz: Apache 2.0 + Version: 21.0.3 + Adresse: https://developer.android.com/topic/libraries/support-library/ + + +Die Lizenztexte lauten in ihrer originalen Fassung wie folgt: + + + + Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved. @@ -459,33 +478,6 @@ copied and put under another distribution licence - - Ergänzende Linzenzhinweise - -Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbedingungen: - -Qt - Lizenz: LGPL v3 - Version: 5.11.2 - Adresse: https://www.qt.io/ - -http_parser - Lizenz: MIT - Version: 2.8.1 - Adresse: https://github.com/nodejs/http-parser/ - -Android Support Library V4 - Lizenz: Apache 2.0 - Version: 21.0.3 - Adresse: https://developer.android.com/topic/libraries/support-library/ - - -Die Lizenztexte lauten in ihrer originalen Fassung wie folgt: - - - - - GNU LESSER GENERAL PUBLIC LICENSE The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. @@ -867,28 +859,3 @@ IN THE SOFTWARE. of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/LICENSE.txt b/LICENSE.txt index 13f65b5..a1de861 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -294,6 +294,38 @@ Unbeschadet besonderer Vereinbarungen zwischen den Parteien gilt Folgendes: +Anhang + + Ergänzende Lizenzhinweise + +Die verwendeten Open-Source-Bibliotheken unterliegen den folgenden Nutzungsbedingungen: + +OpenSSL + Lizenz: OpenSSL license & SSLeay license + Version: 1.1.1c + Adresse: https://www.openssl.org/ + +Qt + Lizenz: LGPL v3 + Version: 5.12.4 + Adresse: https://www.qt.io/ + +http_parser + Lizenz: MIT + Version: 2.9.2 + Adresse: https://github.com/nodejs/http-parser/ + +Android Support Library V4 + Lizenz: Apache 2.0 + Version: 21.0.3 + Adresse: https://developer.android.com/topic/libraries/support-library/ + + +Die Lizenztexte lauten in ihrer originalen Fassung wie folgt: + + + + Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved. @@ -409,33 +441,6 @@ copied and put under another distribution licence - - Ergänzende Linzenzhinweise - -Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbedingungen: - -Qt - Lizenz: LGPL v3 - Version: 5.11.2 - Adresse: https://www.qt.io/ - -http_parser - Lizenz: MIT - Version: 2.8.1 - Adresse: https://github.com/nodejs/http-parser/ - -Android Support Library V4 - Lizenz: Apache 2.0 - Version: 21.0.3 - Adresse: https://developer.android.com/topic/libraries/support-library/ - - -Die Lizenztexte lauten in ihrer originalen Fassung wie folgt: - - - - - GNU LESSER GENERAL PUBLIC LICENSE The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd. @@ -817,28 +822,3 @@ IN THE SOFTWARE. of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/README.rst b/README.rst index b5fe6d6..69b18bd 100644 --- a/README.rst +++ b/README.rst @@ -134,7 +134,7 @@ Für iOS wird die AusweisApp2 mittels XCode gebaut! $ cd build $ cmake -DCMAKE_PREFIX_PATH=/Users/governikus/Toolchain/dist -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/iOS.toolchain.cmake -DCMAKE_BUILD_TYPE=release ../AusweisApp2 -GXcode - $ xcodebuild -target install -configuration Release + $ xcodebuild -configuration Release $ xcodebuild -target ipa -configuration Release diff --git a/appveyor.yml b/appveyor.yml index d1a1bfa..04ac20e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,28 +3,21 @@ version: "{build}" environment: matrix: - PlatformToolset: mingw-w64 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - QTPath: C:\Qt\5.11\mingw53_32 - OPENSSLPath: C:\OpenSSL-v111-Win32 - - - PlatformToolset: v140 - platform: x64 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - QTPath: C:\Qt\5.11\msvc2015_64 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + QTPath: C:\Qt\5.12\mingw73_64 OPENSSLPath: C:\OpenSSL-v111-Win64 - ARCHI: amd64 - - PlatformToolset: v140 + - PlatformToolset: v141 platform: Win32 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - QTPath: C:\Qt\5.11\msvc2015 + QTPath: C:\Qt\5.12\msvc2017 OPENSSLPath: C:\OpenSSL-v111-Win32 ARCHI: x86 - PlatformToolset: v141 platform: x64 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - QTPath: C:\Qt\5.11\msvc2017_64 + QTPath: C:\Qt\5.12\msvc2017_64 OPENSSLPath: C:\OpenSSL-v111-Win64 ARCHI: amd64 @@ -33,8 +26,7 @@ configuration: #- Debug install: - - if "%PlatformToolset%"=="mingw-w64" set PATH=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin;%PATH:C:\Program Files\Git\usr\bin;=% - - if "%PlatformToolset%"=="v140" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %archi% + - if "%PlatformToolset%"=="mingw-w64" set PATH=C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64\bin;%PATH:C:\Program Files\Git\usr\bin;=% - if "%PlatformToolset%"=="v141" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %archi% build: @@ -47,7 +39,6 @@ before_build: $generator = switch ($env:PLATFORMTOOLSET) { "v141" {"Visual Studio 15 2017"} - "v140" {"Visual Studio 14 2015"} "mingw-w64" {"MinGW Makefiles"} } if ($env:PLATFORM -eq "x64") diff --git a/cmake/Appcast.cmake b/cmake/Appcast.cmake index e2f4b42..50547b5 100644 --- a/cmake/Appcast.cmake +++ b/cmake/Appcast.cmake @@ -10,7 +10,11 @@ IF(MAC OR LINUX OR WIN32) STRING(TIMESTAMP APPCAST_DATE "%Y-%m-%dT%H:%M:%S") FOREACH(filePath ${_files}) - FILE_SIZE(fileSize ${filePath}) + IF(CMAKE_VERSION VERSION_LESS "3.14") + FILE_SIZE(fileSize ${filePath}) + ELSE() + FILE(SIZE ${filePath} fileSize) + ENDIF() GET_FILENAME_COMPONENT(file ${filePath} NAME) IF(NOT DEFINED fileSize) diff --git a/cmake/CompilerFlags.cmake b/cmake/CompilerFlags.cmake index bfab901..cfad5f6 100644 --- a/cmake/CompilerFlags.cmake +++ b/cmake/CompilerFlags.cmake @@ -6,6 +6,10 @@ ADD_DEFINITIONS(-DQT_NO_FOREACH) ADD_DEFINITIONS(-DQT_NO_KEYWORDS) ADD_DEFINITIONS(-DQT_NO_EXCEPTIONS) +IF(NOT MSVC AND NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") + ADD_DEFINITIONS(-DQT_STRICT_ITERATORS) +ENDIF() + IF(CMAKE_VERSION VERSION_LESS "3.12") ADD_DEFINITIONS(-DQT_RESTRICTED_CAST_FROM_ASCII) ELSE() @@ -18,7 +22,7 @@ IF(QT_VENDOR STREQUAL "Governikus") ADD_DEFINITIONS(-DQT_DEPRECATED_WARNINGS) ENDIF() -SET(CMAKE_CXX_STANDARD 11) +SET(CMAKE_CXX_STANDARD 17) SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_CXX_EXTENSIONS OFF) @@ -34,22 +38,23 @@ IF(MSVC) ENDIF() ADD_FLAG(/Qspectre) ELSE() - ADD_DEFINITIONS(-DQT_STRICT_ITERATORS) - STRING(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") STRING(REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-qual -Wshadow") SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -g") IF(ANDROID AND CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a") - SET(USE_LD bfd) + SET(PREFER_LD bfd CACHE STRING "") ELSE() - SET(USE_LD gold) + SET(PREFER_LD gold CACHE STRING "") ENDIF() - ADD_FLAG(-fuse-ld=${USE_LD} VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -fuse-ld=${USE_LD}) - ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE LINK -flto) - ADD_FLAG(-fno-rtti VAR CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL) + ADD_FLAG(-fuse-ld=${PREFER_LD} VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS USE_SAME_FOR_LINKER USE_LINKER_ONLY) + ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE USE_SAME_FOR_LINKER) + + IF(NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") + ADD_FLAG(-fno-rtti VAR CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL) + ENDIF() ADD_FLAG(-fno-exceptions) ADD_FLAG(-fstack-protector-strong -fstack-protector) @@ -74,6 +79,8 @@ ELSE() ADD_FLAG(-Wunreachable-code-aggressive) ADD_FLAG(-Wnewline-eof) ADD_FLAG(-Wdate-time) + ADD_FLAG(-Wunused) + ADD_FLAG(-Wunused-template) ADD_FLAG(-Wno-gnu-zero-variadic-macro-arguments) # Qt (qDebug) is not compatible @@ -119,7 +126,7 @@ ELSE() ENDIF() IF(APPLE AND NOT IOS) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.11") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.12") ENDIF() @@ -131,5 +138,5 @@ INCLUDE(CompilerFlagsPersoSim) OPTION(COVERAGE "Enable code coverage") IF(COVERAGE) MESSAGE(STATUS "Enable code coverage instrumentation") - ADD_FLAG(--coverage LINK --coverage VAR CMAKE_CXX_FLAGS_DEBUG) + ADD_FLAG(--coverage VAR CMAKE_CXX_FLAGS_DEBUG USE_SAME_FOR_LINKER) ENDIF() diff --git a/cmake/DefaultFiles.cmake b/cmake/DefaultFiles.cmake index 03538c0..df01749 100644 --- a/cmake/DefaultFiles.cmake +++ b/cmake/DefaultFiles.cmake @@ -21,7 +21,4 @@ FUNCTION(CONFIGURE_DEFAULT_FILES _destination) # Copy secure storage file, so that the AusweisApp2 can be started from the build directory. CONFIGURE_FILE(${RESOURCES_DIR}/config.json.in ${_destination}/config.json @ONLY) - - # Copy qtlogging.ini file - CONFIGURE_FILE(${RESOURCES_DIR}/qtlogging.ini ${_destination}/qtlogging.ini COPYONLY) ENDFUNCTION() diff --git a/cmake/Helper.cmake b/cmake/Helper.cmake index 4792414..cf37bdf 100644 --- a/cmake/Helper.cmake +++ b/cmake/Helper.cmake @@ -3,7 +3,9 @@ INCLUDE(CheckCXXCompilerFlag) # Check if a compiler flag is supported by current compiler. # # Options -# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET) +# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET). +# USE_SAME_FOR_LINKER: Use flag value for linker, too. +# USE_LINKER_ONLY: Use flag for linker only. Only recognized for USE_SAME_FOR_LINKER. # # Parameter # NAME: Add a human readable name. This is for configure output only to @@ -15,7 +17,7 @@ INCLUDE(CheckCXXCompilerFlag) # If VAR parameter is a cmake TARGET the compiler flag will be added # to the COMPILE_FLAGS property of this TARGET only. FUNCTION(ADD_FLAG) - SET(options NOQUOTES) + SET(options NOQUOTES USE_SAME_FOR_LINKER USE_LINKER_ONLY) SET(oneValueArgs NAME) SET(multiValueArgs LINK VAR) cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) @@ -36,7 +38,30 @@ FUNCTION(ADD_FLAG) STRING(REPLACE "-" "_" flagname ${flagname}) STRING(REPLACE " " "_" flagname ${flagname}) - CHECK_CXX_COMPILER_FLAG(${flag} ${flagname}) + # GCC will ignore unknown warning options when used in the -Wno- form. It will complain + # about it though, if something else goes wrong. To check if this is a warning which can be + # disabled, we remove the negation for the test only: + STRING(REPLACE "-Wno-" "-W" flagtest ${flag}) + + # This enforces warnings like "-Wunused-command-line-argument" to fail + # the check. + SET(errorflag "") + IF(NOT MSVC) + SET(errorflag "-Werror") + ENDIF() + + IF(_PARAM_USE_SAME_FOR_LINKER) + IF(CMAKE_VERSION VERSION_LESS "3.14") + SET(CMAKE_REQUIRED_LIBRARIES ${_PARAM_LINK} ${flagtest}) + ELSE() + SET(CMAKE_REQUIRED_LINK_OPTIONS ${_PARAM_LINK} ${flagtest}) + ENDIF() + IF(_PARAM_USE_LINKER_ONLY) + SET(flagtest "") + ENDIF() + ENDIF() + + CHECK_CXX_COMPILER_FLAG("${flagtest} ${errorflag}" ${flagname}) IF(${flagname}) FOREACH(var ${_PARAM_VAR}) IF (${var} MATCHES "^AusweisApp") @@ -267,25 +292,27 @@ IF((WIN32 AND NOT WINDOWS_STORE) OR LINUX OR MAC OR CYGWIN OR BSD) ENDIF() -FUNCTION(FILE_SIZE _outSize _file) - IF(LINUX) - SET(SIZE_COMMAND stat -c "%s" "${_file}") - ELSEIF(MAC) - SET(SIZE_COMMAND stat -f "%z" "${_file}") - ELSE() - RETURN() - ENDIF() +IF(CMAKE_VERSION VERSION_LESS "3.14") # Use FILE(SIZE) + FUNCTION(FILE_SIZE _outSize _file) + IF(LINUX) + SET(SIZE_COMMAND stat -c "%s" "${_file}") + ELSEIF(MAC) + SET(SIZE_COMMAND stat -f "%z" "${_file}") + ELSE() + RETURN() + ENDIF() - EXECUTE_PROCESS(COMMAND ${SIZE_COMMAND} - OUTPUT_VARIABLE SIZE_OUTPUT - RESULT_VARIABLE SIZE_RESULT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) + EXECUTE_PROCESS(COMMAND ${SIZE_COMMAND} + OUTPUT_VARIABLE SIZE_OUTPUT + RESULT_VARIABLE SIZE_RESULT + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) - IF(${SIZE_RESULT} EQUAL 0) - SET(${_outSize} ${SIZE_OUTPUT} PARENT_SCOPE) - ENDIF() -ENDFUNCTION() + IF(${SIZE_RESULT} EQUAL 0) + SET(${_outSize} ${SIZE_OUTPUT} PARENT_SCOPE) + ENDIF() + ENDFUNCTION() +ENDIF() IF(NOT COMMAND FIND_HOST_PACKAGE) MACRO(FIND_HOST_PACKAGE) @@ -350,6 +377,7 @@ IF(WIN32) IF(WIN_TIMESTAMP) IF(NOT WIN_TIMESTAMP_URL) + # http://rfc3161timestamp.globalsign.com/advanced SET(WIN_TIMESTAMP_URL http://timestamp.digicert.com) ENDIF() SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /tr ${WIN_TIMESTAMP_URL} /td ${WIN_SIGN_HASHALGO}) diff --git a/cmake/Install.cmake b/cmake/Install.cmake index 1d08808..33e8f8f 100644 --- a/cmake/Install.cmake +++ b/cmake/Install.cmake @@ -40,17 +40,19 @@ SET(DEPENDENCY_CHECK " IF(WIN32) - IF(MSVC) + IF(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .) - IF(NOT CMAKE_VERSION VERSION_LESS "3.6") - SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) - ENDIF() + SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE) INCLUDE(InstallRequiredSystemLibraries) ENDIF() IF(TARGET Qt5::Qml) + FETCH_TARGET_LOCATION(libEgl "Qt5::Gui_EGL") + FETCH_TARGET_LOCATION(libGLES "Qt5::Gui_GLESv2") FETCH_TARGET_LOCATION(libQuickControls2 "Qt5::QuickControls2") INSTALL(FILES ${libQuickControls2} DESTINATION . COMPONENT Runtime) + INSTALL(FILES ${libEgl} DESTINATION . COMPONENT Runtime) + INSTALL(FILES ${libGLES} DESTINATION . COMPONENT Runtime) ENDIF() FETCH_TARGET_LOCATION(libSvg "Qt5::Svg") FETCH_TARGET_LOCATION(pluginSvg "Qt5::QSvgPlugin") @@ -148,7 +150,6 @@ ELSEIF(APPLE AND NOT IOS) LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtNetwork.framework") LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework") LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework") - LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework") # remove if disabled in Qt LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWebSockets.framework") LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtConcurrent.framework") IF(TARGET Qt5::Qml) @@ -156,6 +157,9 @@ ELSEIF(APPLE AND NOT IOS) LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework") LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickControls2.framework") LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickTemplates2.framework") + IF(NOT "${Qt5Core_VERSION}" VERSION_LESS "5.12") + LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickShapes.framework") + ENDIF() ENDIF() IF(TARGET Qt5::Bluetooth) LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtBluetooth.framework") @@ -164,9 +168,9 @@ ELSEIF(APPLE AND NOT IOS) FETCH_TARGET_LOCATION(opensslCryptoName "OpenSSL::Crypto" NAME) FETCH_TARGET_LOCATION(opensslSslName "OpenSSL::SSL" NAME) IF(CMAKE_VERSION VERSION_LESS "3.13") - SET(OPENSSL_LIB_LOCATION "/Contents/MacOS") + SET(OPENSSL_LIB_LOCATION "/Contents/MacOS") ELSE() - SET(OPENSSL_LIB_LOCATION "/Contents/Frameworks") + SET(OPENSSL_LIB_LOCATION "/Contents/Frameworks") ENDIF() LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslCryptoName}") LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslSslName}") @@ -206,14 +210,18 @@ ELSEIF(ANDROID) ENDIF() LIST(APPEND JAVA_FILES "${_java_file}") ENDFOREACH() + + INSTALL(FILES ${PACKAGING_DIR}/android/res/values/strings.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime) ELSE() SET(ANDROID_MANIFEST AndroidManifest.xml.apk.in) FOREACH(entry ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi) - INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/drawable-${entry} COMPONENT Runtime RENAME npa.png) + INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/background_npa.png DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa_background.png) + INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/foreground_${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa_foreground.png) + INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa.png) ENDFOREACH() - INSTALL(FILES ${PACKAGING_DIR}/android/styles.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime) + INSTALL(DIRECTORY ${PACKAGING_DIR}/android/res DESTINATION ${ANDROID_PACKAGE_SRC_DIR} COMPONENT Runtime) FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java") ENDIF() @@ -228,7 +236,10 @@ ELSEIF(ANDROID) SET(ANDROID_VERSION_NAME ${PROJECT_VERSION}) ENDIF() CONFIGURE_FILE(${PACKAGING_DIR}/android/${ANDROID_MANIFEST} ${ANDROID_PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY) - CONFIGURE_FILE(${PACKAGING_DIR}/android/fileprovider.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/fileprovider.xml COPYONLY) + CONFIGURE_FILE(${PACKAGING_DIR}/android/backup_rules.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/backup_rules.xml COPYONLY) + IF(NOT ANDROID_BUILD_AAR) + CONFIGURE_FILE(${PACKAGING_DIR}/android/fileprovider.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/fileprovider.xml COPYONLY) + ENDIF() SET(ANDROID_APP_BINARY "${CMAKE_INSTALL_PREFIX}/${ANDROID_DEST}/libAusweisApp2.so") SET(SYMBOL_FOLDER "${CMAKE_BINARY_DIR}/debug.symbols/${CMAKE_ANDROID_ARCH_ABI}") @@ -295,7 +306,7 @@ ENDIF() IF(WIN32) IF(SIGNTOOL_CMD) - CONFIGURE_FILE(${CMAKE_MODULE_PATH}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY) + CONFIGURE_FILE(${CMAKE_DIR}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY) INSTALL(CODE " EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" -DSIGN_EXT=*.exe -P \"${CMAKE_BINARY_DIR}/SignFiles.cmake\" WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DEFAULT_FILE_DESTINATION}\") @@ -316,11 +327,6 @@ IF(NOT ANDROID_BUILD_AAR) INSTALL(FILES ${RCC} DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime) ENDIF() -IF(NOT ANDROID AND NOT IOS) - # qtlogging.ini - INSTALL(FILES ${RESOURCES_DIR}/qtlogging.ini DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime) -ENDIF() - # qt qml plugins IF(DESKTOP AND TARGET Qt5::Qml) FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt) diff --git a/cmake/Libraries.cmake b/cmake/Libraries.cmake index f0e816e..fed98dc 100644 --- a/cmake/Libraries.cmake +++ b/cmake/Libraries.cmake @@ -13,7 +13,7 @@ FIND_PACKAGE(Qt5Svg ${MIN_QT_VERSION} REQUIRED) FIND_PACKAGE(Qt5LinguistTools ${MIN_QT_VERSION} REQUIRED) FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED) -IF(NOT DESKTOP AND NOT ANDROID_BUILD_AAR OR "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG") +IF(NOT ANDROID_BUILD_AAR) FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED) FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED) FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED) @@ -78,7 +78,7 @@ ENDIF() IF(MINGW) SET(PCSC_LIBRARIES -lwinscard) SET(WIN_DEFAULT_LIBS "-lAdvapi32" "-lKernel32" "-lOle32" "-lSetupapi" "-lVersion" "-lws2_32") -ELSEIF(MSVC) +ELSEIF(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") SET(PCSC_LIBRARIES winscard.lib) SET(WIN_DEFAULT_LIBS setupapi.lib version.lib Ws2_32.lib) ELSEIF(ANDROID) @@ -86,6 +86,7 @@ ELSEIF(ANDROID) ELSEIF(IOS) FIND_LIBRARY(IOS_ASSETSLIBRARY AssetsLibrary) FIND_LIBRARY(IOS_UIKIT UIKit) + FIND_LIBRARY(IOS_STOREKIT StoreKit) FIND_LIBRARY(IOS_MOBILECORESERVICES MobileCoreServices) FIND_LIBRARY(IOS_COREBLUETOOTH CoreBluetooth) FIND_LIBRARY(IOS_COREFOUNDATION CoreFoundation) @@ -98,6 +99,8 @@ ELSEIF(IOS) FIND_LIBRARY(IOS_SYSTEMCONFIGURATION SystemConfiguration) FIND_LIBRARY(IOS_AUDIOTOOLBOX AudioToolbox) FIND_LIBRARY(IOS_IMAGEIO ImageIO) + FIND_LIBRARY(IOS_CORENFC CoreNFC) + FIND_LIBRARY(IOS_MESSAGEUI MessageUI) ELSEIF(MAC) FIND_PATH(PCSC_INCLUDE_DIRS WinSCard.h) FIND_LIBRARY(PCSC_LIBRARIES NAMES PCSC WinSCard) diff --git a/cmake/Messages.cmake b/cmake/Messages.cmake index dfc993a..bbacf96 100644 --- a/cmake/Messages.cmake +++ b/cmake/Messages.cmake @@ -9,7 +9,11 @@ MESSAGE(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}") MESSAGE(STATUS "CMAKE_SYSROOT: ${CMAKE_SYSROOT}") MESSAGE(STATUS "CMAKE_SYSROOT_LINK: ${CMAKE_SYSROOT_LINK}") MESSAGE(STATUS "CMAKE_SYSROOT_COMPILE: ${CMAKE_SYSROOT_COMPILE}") +IF(APPLE) + MESSAGE(STATUS "CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT}") +ENDIF() MESSAGE(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") +MESSAGE(STATUS "CMAKE_CXX_SIMULATE_ID: ${CMAKE_CXX_SIMULATE_ID}") IF(ANDROID) MESSAGE(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}") @@ -25,10 +29,6 @@ IF(ANDROID) MESSAGE(STATUS "ANDROID_NDK_REVISION: ${ANDROID_NDK_REVISION}") MESSAGE(STATUS "ANDROID_SDK_REVISION: ${ANDROID_SDK_REVISION}") - -ELSEIF(IOS) - MESSAGE(STATUS "CMAKE_IOS_SDK_ROOT: ${CMAKE_IOS_SDK_ROOT}") - MESSAGE(STATUS "CMAKE_IOS_DEVELOPER_ROOT: ${CMAKE_IOS_DEVELOPER_ROOT}") ENDIF() diff --git a/cmake/Packaging.cmake b/cmake/Packaging.cmake index 0b602c0..c5b3a70 100644 --- a/cmake/Packaging.cmake +++ b/cmake/Packaging.cmake @@ -96,20 +96,28 @@ IF(WIN32) IF(SIGNTOOL_CMD) MESSAGE(STATUS "MSI can be signed with 'make package.sign'") - ADD_CUSTOM_TARGET(package.sign COMMAND ${SIGNTOOL_CMD} ${SIGNTOOL_PARAMS} ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi) + SET(MSI ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi) + ADD_CUSTOM_TARGET(package.sign COMMAND ${SIGNTOOL_CMD} ${SIGNTOOL_PARAMS} ${MSI} + COMMAND ${SIGNTOOL_CMD} verify /v /pa ${MSI}) ENDIF() ELSEIF(IOS) FILE(WRITE ${PROJECT_BINARY_DIR}/ipa.cmake " - SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\") + FUNCTION(FIND_BUNDLE _name _out_bundle _out_parent_dir) + SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\") - FOREACH(dir \${BUNDLE_DIRS}) - SET(tmpBundleDir ${PROJECT_BINARY_DIR}/src/\${dir}/${PROJECT_NAME}.app) - IF(EXISTS \"\${tmpBundleDir}\") - SET(BundleDir \"\${tmpBundleDir}\") - BREAK() - ENDIF() - ENDFOREACH() + FOREACH(dir \${BUNDLE_DIRS}) + SET(tmpDir ${PROJECT_BINARY_DIR}/src/\${dir}) + SET(tmpBundleDir \${tmpDir}/\${_name}) + IF(EXISTS \"\${tmpBundleDir}\") + SET(\${_out_bundle} \"\${tmpBundleDir}\" PARENT_SCOPE) + SET(\${_out_parent_dir} \"\${tmpDir}\" PARENT_SCOPE) + BREAK() + ENDIF() + ENDFOREACH() + ENDFUNCTION() + + FIND_BUNDLE(${PROJECT_NAME}.app BundleDir ParentDir) IF(BundleDir) MESSAGE(STATUS \"Use bundle: \${BundleDir}\") @@ -117,9 +125,15 @@ ELSEIF(IOS) MESSAGE(FATAL_ERROR \"Bundle directory does not exist\") ENDIF() - EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory \${BundleDir} Payload/AusweisApp2.app) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory \${BundleDir} Payload/${PROJECT_NAME}.app) EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar cf \"${CPACK_PACKAGE_FILE_NAME}.ipa\" --format=zip Payload) EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E remove_directory Payload) + + FIND_BUNDLE(${PROJECT_NAME}.app.dSYM dSYM ParentDir) + IF(dSYM) + MESSAGE(STATUS \"Use dSYM: \${dSYM}\") + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar cf \"\${CMAKE_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.dSYM.zip\" --format=zip ${PROJECT_NAME}.app.dSYM WORKING_DIRECTORY \${ParentDir}) + ENDIF() ") ADD_CUSTOM_TARGET(ipa COMMAND ${CMAKE_COMMAND} -DCONFIG=$ -P ${CMAKE_BINARY_DIR}/ipa.cmake) @@ -164,26 +178,27 @@ ELSEIF(ANDROID) ENDIF() MESSAGE(STATUS "Using androiddeployqt: ${androiddeployqt}") - OPTION(ANDROID_USE_GRADLE "Use gradle for androiddeployqt" ON) + FILE(READ "${QT_HOST_PREFIX}/src/android/templates/build.gradle" BUILD_GRADLE) - IF(ANDROID_USE_GRADLE) - FILE(READ "${QT_HOST_PREFIX}/src/android/templates/build.gradle" BUILD_GRADLE) + IF(ANDROID_BUILD_AAR) + STRING(REPLACE "apply plugin: 'com.android.application'" "apply plugin: 'com.android.library'" BUILD_GRADLE "${BUILD_GRADLE}") + ENDIF() - IF(ANDROID_BUILD_AAR) - STRING(REPLACE "apply plugin: 'com.android.application'" "apply plugin: 'com.android.library'" BUILD_GRADLE "${BUILD_GRADLE}") - ENDIF() - - FILE(WRITE "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}") - - FILE(READ "${PACKAGING_DIR}/android/build.gradle.append" BUILD_GRADLE) - FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}") + FILE(WRITE "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}") + FILE(READ "${PACKAGING_DIR}/android/build.gradle.append" BUILD_GRADLE) + FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}") + OPTION(ANDROID_LINT "Lint Android package" ON) + IF(NOT ANDROID_LINT) + FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "tasks.lint.enabled = false") ENDIF() IF(ANDROID_BUILD_AAR) SET(ANDROID_FILE_EXT aar) CONFIGURE_FILE(${PACKAGING_DIR}/android/pom.xml.in ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.pom @ONLY) + CONFIGURE_FILE("${PACKAGING_DIR}/android/lint.aar.xml" "${CMAKE_INSTALL_PREFIX}/lint.xml" COPYONLY) ELSE() SET(ANDROID_FILE_EXT apk) + CONFIGURE_FILE("${PACKAGING_DIR}/android/lint.apk.xml" "${CMAKE_INSTALL_PREFIX}/lint.xml" COPYONLY) ENDIF() MESSAGE(STATUS "Prepare ${ANDROID_FILE_EXT} file generation") @@ -195,64 +210,40 @@ ELSEIF(ANDROID) ELSEIF(APK_SIGN_KEYSTORE AND APK_SIGN_KEYSTORE_ALIAS AND APK_SIGN_KEYSTORE_PSW) MESSAGE(STATUS "Release build will be signed using: ${APK_SIGN_KEYSTORE} | Alias: ${APK_SIGN_KEYSTORE_ALIAS}") SET(DEPLOY_CMD_SIGN --sign ${APK_SIGN_KEYSTORE} ${APK_SIGN_KEYSTORE_ALIAS} --storepass ${APK_SIGN_KEYSTORE_PSW} --digestalg SHA-256 --sigalg SHA256WithRSA) - IF(ANDROID_USE_GRADLE) - SET(ANDROID_FILE dist-release-signed.apk) - ELSE() - SET(ANDROID_FILE QtApp-release-signed.apk) - ENDIF() + SET(ANDROID_FILE dist-release-signed.apk) ELSE() - IF(ANDROID_USE_GRADLE) - SET(ANDROID_FILE dist-release-unsigned.apk) - ELSE() - SET(ANDROID_FILE QtApp-release-unsigned.apk) - ENDIF() - + SET(ANDROID_FILE dist-release-unsigned.apk) MESSAGE(WARNING "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!") ENDIF() ELSE() - IF(ANDROID_USE_GRADLE) - SET(ANDROID_FILE dist-debug.${ANDROID_FILE_EXT}) + SET(ANDROID_FILE dist-debug.${ANDROID_FILE_EXT}) + ENDIF() + + SET(DEPLOY_CMD ${androiddeployqt} --verbose --gradle --input ${ANDROID_DEPLOYMENT_SETTINGS} --output ${CMAKE_INSTALL_PREFIX} ${DEPLOY_CMD_SIGN}) + SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/build/outputs/${ANDROID_FILE_EXT}) + + IF("${Qt5Core_VERSION}" VERSION_GREATER_EQUAL "5.12.0" AND NOT ANDROID_BUILD_AAR) + IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG") + SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/debug) ELSE() - SET(ANDROID_FILE QtApp-debug.apk) + SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/release) ENDIF() ENDIF() - SET(DEPLOY_CMD ${androiddeployqt} --verbose --input ${ANDROID_DEPLOYMENT_SETTINGS} --output ${CMAKE_INSTALL_PREFIX} ${DEPLOY_CMD_SIGN}) - - IF(ANDROID_USE_GRADLE) - SET(DEPLOY_CMD ${DEPLOY_CMD} --gradle) - SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/build/outputs/${ANDROID_FILE_EXT}) - - IF("${Qt5Core_VERSION}" VERSION_GREATER_EQUAL "5.12.0" AND NOT ANDROID_BUILD_AAR) - IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG") - SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/debug) - ELSE() - SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/release) - ENDIF() - ENDIF() - - SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/${ANDROID_FILE}) - ELSE() - IF(ANDROID_BUILD_AAR) - MESSAGE(FATAL_ERROR "Use gradle to build an AAR") - ENDIF() - SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/bin/${ANDROID_FILE}) - ENDIF() + SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/${ANDROID_FILE}) SET(DESTINATION_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.${ANDROID_FILE_EXT}) # Add DEPENDS install someday - # http://public.kitware.com/Bug/view.php?id=8438 + # https://gitlab.kitware.com/cmake/cmake/issues/8438 ADD_CUSTOM_TARGET(${ANDROID_FILE_EXT} COMMAND ${DEPLOY_CMD} COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_ANDROID_FILE} ${DESTINATION_ANDROID_FILE}) - IF(ANDROID_USE_GRADLE) - ADD_CUSTOM_COMMAND(TARGET ${ANDROID_FILE_EXT} POST_BUILD + ADD_CUSTOM_COMMAND(TARGET ${ANDROID_FILE_EXT} POST_BUILD COMMAND ${CMAKE_INSTALL_PREFIX}/gradlew sourcesJar lint COMMAND ${CMAKE_COMMAND} -E copy build/libs/dist-sources.jar ${CPACK_PACKAGE_FILE_NAME}-sources.jar WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}) - ENDIF() IF(NOT ANDROID_BUILD_AAR) FIND_PROGRAM(apksigner apksigner HINTS ${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_REVISION} CMAKE_FIND_ROOT_PATH_BOTH) diff --git a/cmake/Tools.cmake b/cmake/Tools.cmake index a43c7c4..7d5be15 100644 --- a/cmake/Tools.cmake +++ b/cmake/Tools.cmake @@ -1,44 +1,4 @@ IF(COVERAGE) - - # LCov (http://ltp.sourceforge.net/coverage/lcov.php) - FIND_PROGRAM(LCOV_BIN lcov CMAKE_FIND_ROOT_PATH_BOTH) - IF(LCOV_BIN) - SET(LCOV_FILE "${PROJECT_BINARY_DIR}/coverage.info") - SET(LCOV_GLOBAL_CMD ${LCOV_BIN} -q -o ${LCOV_FILE}) - SET(LCOV_CMD ${LCOV_GLOBAL_CMD} -c -d ${PROJECT_BINARY_DIR} -b ${PROJECT_SOURCE_DIR}) - SET(LCOV_RM_CMD ${LCOV_GLOBAL_CMD} -r ${LCOV_FILE} "*/test/*" "*/include/*" "*/src/external/*" "moc_*" "*.moc" "qrc_*" "ui_*") - - IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - IF(WIN32) - SET(CLANG_GCOV py) - ELSE() - SET(CLANG_GCOV sh) - ENDIF() - SET(LCOV_CMD ${LCOV_CMD} --gcov-tool ${RESOURCES_DIR}/jenkins/clang-gcov.${CLANG_GCOV}) - ENDIF() - - ADD_CUSTOM_COMMAND(OUTPUT ${LCOV_FILE} COMMAND ${LCOV_CMD} COMMAND ${LCOV_RM_CMD}) - ADD_CUSTOM_TARGET(lcov COMMAND ${LCOV_BIN} -l ${LCOV_FILE} DEPENDS ${LCOV_FILE}) - - FIND_PROGRAM(GENHTML_BIN genhtml CMAKE_FIND_ROOT_PATH_BOTH) - IF(GENHTML_BIN) - SET(REPORT_DIR "${PROJECT_BINARY_DIR}/coverage.report") - SET(GENHTML_CMD ${GENHTML_BIN} -q -p ${PROJECT_SOURCE_DIR} --num-spaces=4 -o ${REPORT_DIR} ${LCOV_FILE}) - FIND_PROGRAM(FILT_BIN c++filt CMAKE_FIND_ROOT_PATH_BOTH) - IF(FILT_BIN) - SET(GENHTML_CMD ${GENHTML_CMD} --demangle-cpp) - ENDIF() - - ADD_CUSTOM_COMMAND(OUTPUT ${REPORT_DIR} COMMAND ${GENHTML_CMD} DEPENDS ${LCOV_FILE}) - ADD_CUSTOM_TARGET(lcov.report DEPENDS ${REPORT_DIR}) - ENDIF() - - SET(LCOV_XML "${PROJECT_BINARY_DIR}/coverage.xml") - SET(LCOV_COBERTURA_CMD ${RESOURCES_DIR}/jenkins/lcov_cobertura.py ${LCOV_FILE} -b ${PROJECT_SOURCE_DIR} -o ${LCOV_XML}) - ADD_CUSTOM_COMMAND(OUTPUT ${LCOV_XML} COMMAND ${LCOV_COBERTURA_CMD} DEPENDS ${LCOV_FILE}) - ADD_CUSTOM_TARGET(lcov.xml DEPENDS ${LCOV_XML}) - ENDIF() - # gcovr (http://gcovr.com/) FIND_PROGRAM(GCOVR_BIN gcovr CMAKE_FIND_ROOT_PATH_BOTH) IF(GCOVR_BIN) @@ -48,7 +8,6 @@ IF(COVERAGE) ADD_CUSTOM_COMMAND(OUTPUT ${GCOVR_FILE} COMMAND ${GCOVR_CMD} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) ADD_CUSTOM_TARGET(gcovr DEPENDS ${GCOVR_FILE}) ENDIF() - ENDIF() # CppCheck (http://cppcheck.sourceforge.net) @@ -118,32 +77,34 @@ ENDIF() FIND_PROGRAM(UNCRUSTIFY uncrustify CMAKE_FIND_ROOT_PATH_BOTH) IF(UNCRUSTIFY) - FILE(GLOB_RECURSE FILES_JAVA ${PROJECT_SOURCE_DIR}/*.java) - FILE(GLOB_RECURSE FILES_CPP ${PROJECT_SOURCE_DIR}/*.cpp) - FILE(GLOB_RECURSE FILES_H ${PROJECT_SOURCE_DIR}/*.h) - FILE(GLOB_RECURSE FILES_MM ${PROJECT_SOURCE_DIR}/*.mm) - FILE(GLOB_RECURSE FILES_M ${PROJECT_SOURCE_DIR}/*.m) - SET(FILES ${FILES_JAVA} ${FILES_CPP} ${FILES_H} ${FILES_MM} ${FILES_M}) - SET(FORMATTING_FILE ${PROJECT_BINARY_DIR}/formatting.files) - - FILE(WRITE ${FORMATTING_FILE} "") - FOREACH(file ${FILES}) - IF(NOT "${file}" MATCHES "/external/") - FILE(APPEND ${FORMATTING_FILE} ${file}) - FILE(APPEND ${FORMATTING_FILE} "\n") - ENDIF() - ENDFOREACH() - - SET(UNCRUSTIFY_CFG ${PROJECT_SOURCE_DIR}/uncrustify.cfg) - SET(UNCRUSTIFY_CMD ${UNCRUSTIFY} -c ${UNCRUSTIFY_CFG} --replace --no-backup -q -F ${FORMATTING_FILE}) - EXECUTE_PROCESS(COMMAND ${UNCRUSTIFY} --version OUTPUT_VARIABLE UNCRUSTIFY_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) STRING(REPLACE "uncrustify " "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION}) + STRING(REPLACE "Uncrustify-" "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION}) - SET(UNCRUSTIFY_NEEDED_VERSION "0.68") + SET(UNCRUSTIFY_NEEDED_VERSION "0.69") IF("${UNCRUSTIFY_VERSION}" STRLESS "${UNCRUSTIFY_NEEDED_VERSION}") MESSAGE(WARNING "Uncrustify seems to be too old. Use at least ${UNCRUSTIFY_NEEDED_VERSION}... you are using: ${UNCRUSTIFY_VERSION}") ELSE() + MESSAGE(STATUS "Found uncrustify ${UNCRUSTIFY_VERSION}") + FILE(GLOB_RECURSE FILES_JAVA ${PROJECT_SOURCE_DIR}/*.java) + FILE(GLOB_RECURSE FILES_CPP ${PROJECT_SOURCE_DIR}/*.cpp) + FILE(GLOB_RECURSE FILES_H ${PROJECT_SOURCE_DIR}/*.h) + FILE(GLOB_RECURSE FILES_H_IN ${PROJECT_SOURCE_DIR}/*.h.in) + FILE(GLOB_RECURSE FILES_MM ${PROJECT_SOURCE_DIR}/*.mm) + FILE(GLOB_RECURSE FILES_M ${PROJECT_SOURCE_DIR}/*.m) + SET(FILES ${FILES_JAVA} ${FILES_CPP} ${FILES_H_IN} ${FILES_H} ${FILES_MM} ${FILES_M}) + SET(FORMATTING_FILE ${PROJECT_BINARY_DIR}/formatting.files) + + FILE(WRITE ${FORMATTING_FILE} "") + FOREACH(file ${FILES}) + IF(NOT "${file}" MATCHES "/external/") + FILE(APPEND ${FORMATTING_FILE} ${file}) + FILE(APPEND ${FORMATTING_FILE} "\n") + ENDIF() + ENDFOREACH() + + SET(UNCRUSTIFY_CFG ${PROJECT_SOURCE_DIR}/uncrustify.cfg) + SET(UNCRUSTIFY_CMD ${UNCRUSTIFY} -c ${UNCRUSTIFY_CFG} --replace --no-backup -q -F ${FORMATTING_FILE}) ADD_CUSTOM_TARGET(format COMMAND ${UNCRUSTIFY_CMD} SOURCES ${UNCRUSTIFY_CFG} ${FILES}) ENDIF() ENDIF() @@ -172,108 +133,138 @@ ENDFUNCTION() FIND_PROGRAM(CONVERT convert CMAKE_FIND_ROOT_PATH_BOTH) IF(CONVERT) - IF(IOS) - SET(CONVERT_CMD convert -alpha off) - SET(BACKGROUND_COLOR "#5489c2") - ELSE() - SET(CONVERT_CMD convert) - SET(BACKGROUND_COLOR "transparent") - ENDIF() + SET(BACKGROUND_COLOR "#dcebf6") + + ADD_CUSTOM_TARGET(npaicons.docs + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa.svg npa_docs.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) ADD_CUSTOM_TARGET(npaicons.win - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico + COMMAND ${CONVERT} -background transparent -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(npaicons.android.preview - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png + ADD_CUSTOM_TARGET(npaicons.android.background + COMMAND ${CONVERT} -background transparent -resize 81x81 android/npa_background.svg android/ldpi/background_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 108x108 android/npa_background.svg android/mdpi/background_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 162x162 android/npa_background.svg android/hdpi/background_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 216x216 android/npa_background.svg android/xhdpi/background_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 324x324 android/npa_background.svg android/xxhdpi/background_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 432x432 android/npa_background.svg android/xxxhdpi/background_npa.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(npaicons.android.beta - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png + ADD_CUSTOM_TARGET(npaicons.android.foreground.preview + COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa_preview.svg android/ldpi/foreground_npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 108x108 android/npa_preview.svg android/mdpi/foreground_npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa_preview.svg android/hdpi/foreground_npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa_preview.svg android/xhdpi/foreground_npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa_preview.svg android/xxhdpi/foreground_npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa_preview.svg android/xxxhdpi/foreground_npa_preview.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(npaicons.android - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa.svg android/ldpi/npa.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa.svg android/mdpi/npa.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa.svg android/hdpi/npa.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa.svg android/xhdpi/npa.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa.svg android/xxhdpi/npa.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa.svg android/xxxhdpi/npa.png + ADD_CUSTOM_TARGET(npaicons.android.legacy.preview + COMMAND ${CONVERT} -background transparent -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) + ADD_CUSTOM_TARGET(npaicons.android.foreground.beta + COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa_beta.svg android/ldpi/foreground_npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 78x78 android/npa_beta.svg android/mdpi/foreground_npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa_beta.svg android/hdpi/foreground_npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa_beta.svg android/xhdpi/foreground_npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa_beta.svg android/xxhdpi/foreground_npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa_beta.svg android/xxxhdpi/foreground_npa_beta.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) + + ADD_CUSTOM_TARGET(npaicons.android.legacy.beta + COMMAND ${CONVERT} -background transparent -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) + + + ADD_CUSTOM_TARGET(npaicons.android.foreground + COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa.svg android/ldpi/foreground_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 108x108 android/npa.svg android/mdpi/foreground_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa.svg android/hdpi/foreground_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa.svg android/xhdpi/foreground_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa.svg android/xxhdpi/foreground_npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa.svg android/xxxhdpi/foreground_npa.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) + + ADD_CUSTOM_TARGET(npaicons.android.legacy + COMMAND ${CONVERT} -background transparent -resize 36x36 npa.svg android/ldpi/npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa.svg android/mdpi/npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa.svg android/hdpi/npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa.svg android/xhdpi/npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa.svg android/xxhdpi/npa.png + COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa.svg android/xxxhdpi/npa.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) + + ADD_CUSTOM_TARGET(npaicons.playstore + COMMAND ${CONVERT} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 1120 -resize 336x336 -gravity center -extent 512x512 ${RESOURCES_DIR}/images/npa.svg playstore.png + COMMAND ${CONVERT} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 1120 -resize 336x336 -gravity center -extent 512x512 ${RESOURCES_DIR}/images/npa_preview.svg playstore_preview.png + ) + ADD_CUSTOM_TARGET(npaicons.ios.beta - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 20x20 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 60x60 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 20x20 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 60x60 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 29x29 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 58x58 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 87x87 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 80x80 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 180x180 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 76x76 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 152x152 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 167x167 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 1024x1024 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png + COMMAND ${CONVERT} -background none -resize 256x256 npa_beta.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png + COMMAND ${CONVERT} -background none -resize 512x512 npa_beta.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png + COMMAND ${CONVERT} -background none -resize 768x768 npa_beta.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) ADD_CUSTOM_TARGET(npaicons.ios - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 20x20 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 60x60 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 20x20 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 60x60 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 29x29 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 58x58 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 87x87 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 80x80 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 180x180 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 76x76 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 152x152 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 167x167 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png + COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 1024x1024 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png + COMMAND ${CONVERT} -background none -resize 256x256 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png + COMMAND ${CONVERT} -background none -resize 512x512 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png + COMMAND ${CONVERT} -background none -resize 768x768 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - SET(BACKGROUND_COLOR "rgb\(220,235,246\)") - - ADD_CUSTOM_TARGET(npaicons.iphone - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/Default-568h@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/launchImage568@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 480x480 -gravity center -extent 960x1704 npa.svg iOS/launchImages/launchImage568@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 353x353 -gravity center -extent 705x1334 npa.svg iOS/launchImages/launchImage667@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 563x563 -gravity center -extent 1125x2001 npa.svg iOS/launchImages/launchImage667@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 414x414 -gravity center -extent 828x1472 npa.svg iOS/launchImages/launchImage736@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 621x621 -gravity center -extent 1242x2208 npa.svg iOS/launchImages/launchImage736@3x.png - WORKING_DIRECTORY ${RESOURCES_DIR}/images) - - ADD_CUSTOM_TARGET(npaicons.ipad - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 768x768 -gravity center -extent 2048x1536 npa.svg iOS/launchImages/launchImage1024@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1152x1152 -gravity center -extent 3072x2304 npa.svg iOS/launchImages/launchImage1024@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 834x834 -gravity center -extent 2224x1668 npa.svg iOS/launchImages/launchImage1112@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1251x1251 -gravity center -extent 3336x2502 npa.svg iOS/launchImages/launchImage1112@3x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 -gravity center -extent 2732x2048 npa.svg iOS/launchImages/launchImage1366@2x.png - COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1536x1536 -gravity center -extent 4098x3072 npa.svg iOS/launchImages/launchImage1366@3x.png - WORKING_DIRECTORY ${RESOURCES_DIR}/images) - - ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.win npaicons.ios npaicons.ios.beta npaicons.iphone npaicons.ipad npaicons.android npaicons.android.beta npaicons.android.preview) + ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.docs npaicons.win npaicons.ios npaicons.ios.beta npaicons.playstore npaicons.android.background npaicons.android.foreground npaicons.android.foreground.beta npaicons.android.foreground.preview npaicons.android.legacy npaicons.android.legacy.beta npaicons.android.legacy.preview) ENDIF() FIND_PROGRAM(PNGQUANT pngquant CMAKE_FIND_ROOT_PATH_BOTH) IF(PNGQUANT) -SET(PNGQUANT_CMD pngquant -f -o) + SET(PNGQUANT_CMD pngquant -f -o) + + ADD_CUSTOM_TARGET(pngquant.npaicons.docs + COMMAND ${PNGQUANT_CMD} npa_docs.png -- npa_docs.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) + ADD_CUSTOM_TARGET(pngquant.ios.beta COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png @@ -290,6 +281,9 @@ SET(PNGQUANT_CMD pngquant -f -o) COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png + COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png + COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png + COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) ADD_CUSTOM_TARGET(pngquant.ios @@ -308,28 +302,30 @@ SET(PNGQUANT_CMD pngquant -f -o) COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/Default-568h@2x.png -- iOS/launchImages/Default-568h@2x.png + COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png + COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png + COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(pngquant.iphone - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@2x.png -- iOS/launchImages/launchImage568@2x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@3x.png -- iOS/launchImages/launchImage568@3x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@2x.png -- iOS/launchImages/launchImage667@2x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@3x.png -- iOS/launchImages/launchImage667@3x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@2x.png -- iOS/launchImages/launchImage736@2x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@3x.png -- iOS/launchImages/launchImage736@3x.png + ADD_CUSTOM_TARGET(pngquant.android.background + COMMAND ${PNGQUANT_CMD} android/ldpi/background_npa.png -- android/ldpi/background_npa.png + COMMAND ${PNGQUANT_CMD} android/mdpi/background_npa.png -- android/mdpi/background_npa.png + COMMAND ${PNGQUANT_CMD} android/hdpi/background_npa.png -- android/hdpi/background_npa.png + COMMAND ${PNGQUANT_CMD} android/xhdpi/background_npa.png -- android/xhdpi/background_npa.png + COMMAND ${PNGQUANT_CMD} android/xxhdpi/background_npa.png -- android/xxhdpi/background_npa.png + COMMAND ${PNGQUANT_CMD} android/xxxhdpi/background_npa.png -- android/xxxhdpi/background_npa.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(pngquant.ipad - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@2x.png -- iOS/launchImages/launchImage1024@2x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@3x.png -- iOS/launchImages/launchImage1024@3x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@2x.png -- iOS/launchImages/launchImage1112@2x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@3x.png -- iOS/launchImages/launchImage1112@3x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@2x.png -- iOS/launchImages/launchImage1366@2x.png - COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@3x.png -- iOS/launchImages/launchImage1366@3x.png + ADD_CUSTOM_TARGET(pngquant.android.foreground.preview + COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa_preview.png -- android/ldpi/foreground_npa_preview.png + COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa_preview.png -- android/mdpi/foreground_npa_preview.png + COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa_preview.png -- android/hdpi/foreground_npa_preview.png + COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa_preview.png -- android/xhdpi/foreground_npa_preview.png + COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa_preview.png -- android/xxhdpi/foreground_npa_preview.png + COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa_preview.png -- android/xxxhdpi/foreground_npa_preview.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(pngquant.android.preview + ADD_CUSTOM_TARGET(pngquant.android.legacy.preview COMMAND ${PNGQUANT_CMD} android/ldpi/npa_preview.png -- android/ldpi/npa_preview.png COMMAND ${PNGQUANT_CMD} android/mdpi/npa_preview.png -- android/mdpi/npa_preview.png COMMAND ${PNGQUANT_CMD} android/hdpi/npa_preview.png -- android/hdpi/npa_preview.png @@ -338,7 +334,16 @@ SET(PNGQUANT_CMD pngquant -f -o) COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_preview.png -- android/xxxhdpi/npa_preview.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(pngquant.android.beta + ADD_CUSTOM_TARGET(pngquant.android.foreground.beta + COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa_beta.png -- android/ldpi/foreground_npa_beta.png + COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa_beta.png -- android/mdpi/foreground_npa_beta.png + COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa_beta.png -- android/hdpi/foreground_npa_beta.png + COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa_beta.png -- android/xhdpi/foreground_npa_beta.png + COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa_beta.png -- android/xxhdpi/foreground_npa_beta.png + COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa_beta.png -- android/xxxhdpi/foreground_npa_beta.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) + + ADD_CUSTOM_TARGET(pngquant.android.legacy.beta COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png @@ -347,7 +352,16 @@ SET(PNGQUANT_CMD pngquant -f -o) COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(pngquant.android + ADD_CUSTOM_TARGET(pngquant.android.foreground + COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa.png -- android/ldpi/foreground_npa.png + COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa.png -- android/mdpi/foreground_npa.png + COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa.png -- android/hdpi/foreground_npa.png + COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa.png -- android/xhdpi/foreground_npa.png + COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa.png -- android/xxhdpi/foreground_npa.png + COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa.png -- android/xxxhdpi/foreground_npa.png + WORKING_DIRECTORY ${RESOURCES_DIR}/images) + + ADD_CUSTOM_TARGET(pngquant.android.legacy COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png @@ -356,7 +370,7 @@ SET(PNGQUANT_CMD pngquant -f -o) COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png WORKING_DIRECTORY ${RESOURCES_DIR}/images) - ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.ios pngquant.ios.beta pngquant.iphone pngquant.ipad pngquant.android pngquant.android.beta pngquant.android.preview) + ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.npaicons.docs pngquant.ios pngquant.ios.beta pngquant.android.background pngquant.android.foreground pngquant.android.foreground.beta pngquant.android.foreground.preview pngquant.android.legacy pngquant.android.legacy.beta pngquant.android.legacy.preview) ENDIF() IF(NOT JAVA_EXECUTABLE) diff --git a/cmake/android.toolchain.cmake b/cmake/android.toolchain.cmake index 4515882..9b86823 100644 --- a/cmake/android.toolchain.cmake +++ b/cmake/android.toolchain.cmake @@ -54,6 +54,7 @@ ENDIF() OPTION(ANDROID_BUILD_AAR "Build AAR file instead of APK" OFF) -SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE string "android find search path root") +SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "android find search path root") SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) diff --git a/cmake/iOS.toolchain.cmake b/cmake/iOS.toolchain.cmake index e1968f1..38c5232 100644 --- a/cmake/iOS.toolchain.cmake +++ b/cmake/iOS.toolchain.cmake @@ -1,217 +1,35 @@ -# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake -# files which are included with CMake 2.8.4 -# It has been altered for iOS development +CMAKE_MINIMUM_REQUIRED(VERSION 3.14) -# Options: -# -# IOS_PLATFORM = OS (default) or SIMULATOR or SIMULATOR64 -# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders -# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch. -# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch. -# -# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder -# By default this location is automatcially chosen based on the IOS_PLATFORM value above. -# If set manually, it will override the default location and force the user of a particular Developer Platform -# -# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder -# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value. -# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. -# If set manually, this will force the use of a specific SDK version +SET(CMAKE_SYSTEM_NAME iOS) +SET(CMAKE_OSX_ARCHITECTURES "arm64") +SET(CMAKE_OSX_DEPLOYMENT_TARGET 13.0) -# Macros: -# -# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE) -# A convenience macro for setting xcode specific properties on targets -# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1") -# -# find_host_package (PROGRAM ARGS) -# A macro used to find executable programs on the host system, not within the iOS environment. -# Thanks to the android-cmake project for providing the command +SET(UNIX True) +SET(APPLE True) +SET(IOS True) -# Standard settings -set (CMAKE_SYSTEM_NAME Darwin) -set (CMAKE_SYSTEM_VERSION 1) -set (UNIX True) -set (APPLE True) -set (IOS True) +SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -find_program(xcrun_bin xcrun CMAKE_FIND_ROOT_PATH_BOTH) -if(NOT xcrun_bin) - message(FATAL_ERROR "Cannot find xcrun") -endif() +SET(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES") +SET(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode") -function(XCRUN _out _find) - execute_process(COMMAND ${xcrun_bin} --sdk iphoneos -f ${_find} OUTPUT_VARIABLE tmp_out OUTPUT_STRIP_TRAILING_WHITESPACE) - set(${_out} "${tmp_out}" PARENT_SCOPE) -endfunction() +SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root") +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) -# https://cmake.org/Bug/view.php?id=15329 -set(CMAKE_MACOSX_BUNDLE YES) -set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") - -# Required as of cmake 2.8.10 -set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE) - -# Determine the cmake host system version so we know where to find the iOS SDKs -find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin) -if (CMAKE_UNAME) - exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION) - string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}") -endif (CMAKE_UNAME) - -XCRUN(CMAKE_C_COMPILER clang) -XCRUN(CMAKE_CXX_COMPILER clang++) -XCRUN(CMAKE_AR ar) -set(CMAKE_AR ${CMAKE_AR} CACHE FILEPATH "" FORCE) - -# All iOS/Darwin specific settings - some may be redundant -set (CMAKE_SHARED_LIBRARY_PREFIX "lib") -set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") -set (CMAKE_SHARED_MODULE_PREFIX "lib") -set (CMAKE_SHARED_MODULE_SUFFIX ".so") -set (CMAKE_MODULE_EXISTS 1) -set (CMAKE_DL_LIBS "") - -set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") -set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") -set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") -set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") - -# Hidden visibilty is required for cxx on iOS -set (CMAKE_C_FLAGS_INIT "") -set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden") - -set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") -set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") - -set (CMAKE_PLATFORM_HAS_INSTALLNAME 1) -set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names") -set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names") -set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") -set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") -set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") - -# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree -# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache -# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) -# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex -if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) - find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool) -endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) - -# Setup iOS platform unless specified manually with IOS_PLATFORM -if (NOT DEFINED IOS_PLATFORM) - set (IOS_PLATFORM "OS") -endif (NOT DEFINED IOS_PLATFORM) -set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform") - -# Setup building for arm64 or not -if (NOT DEFINED BUILD_ARM64) - set (BUILD_ARM64 true) -endif (NOT DEFINED BUILD_ARM64) -set (BUILD_ARM64 ${BUILD_ARM64} CACHE STRING "Build arm64 arch or not") - -# Check the platform selection and setup for developer root -if (${IOS_PLATFORM} STREQUAL "OS") - set (IOS_PLATFORM_LOCATION "iPhoneOS.platform") - - # This causes the installers to properly locate the output libraries - set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos") -elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") - set (SIMULATOR true) - set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") - - # This causes the installers to properly locate the output libraries - set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator") -elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64") - set (SIMULATOR true) - set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") - - # This causes the installers to properly locate the output libraries - set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator") -else (${IOS_PLATFORM} STREQUAL "OS") - message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR") -endif (${IOS_PLATFORM} STREQUAL "OS") - -# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT -# Note Xcode 4.3 changed the installation location, choose the most recent one available -exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR) -set (XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer") -set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer") -if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) - if (EXISTS ${XCODE_POST_43_ROOT}) - set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT}) - elseif(EXISTS ${XCODE_PRE_43_ROOT}) - set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT}) - endif (EXISTS ${XCODE_POST_43_ROOT}) -endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) -set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform") - -# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT -if (NOT DEFINED CMAKE_IOS_SDK_ROOT) - file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*") - if (_CMAKE_IOS_SDKS) - list (SORT _CMAKE_IOS_SDKS) - list (REVERSE _CMAKE_IOS_SDKS) - list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT) - else (_CMAKE_IOS_SDKS) - message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") - endif (_CMAKE_IOS_SDKS) - message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}") -endif (NOT DEFINED CMAKE_IOS_SDK_ROOT) -set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK") - -# Set the sysroot default to the most recent SDK -set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support") - -# set the architecture for iOS -if (${IOS_PLATFORM} STREQUAL "OS") - set (IOS_ARCH arm64) -elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") - set (IOS_ARCH i386) -elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64") - set (IOS_ARCH x86_64) -endif (${IOS_PLATFORM} STREQUAL "OS") - -set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string "Build architecture for iOS") - -# Set the find root to the iOS developer roots and to user defined paths -set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE string "iOS find search path root") - -# default to searching for frameworks first -set (CMAKE_FIND_FRAMEWORK FIRST) - -# set up the default search directories for frameworks -set (CMAKE_SYSTEM_FRAMEWORK_PATH - ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks - ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks - ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks -) - -# only search the iOS sdks, not the remainder of the host filesystem -set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) -set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - - -# This little macro lets you set any XCode specific property -macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE) - set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE}) -endmacro (set_xcode_property) - - -# This macro lets you find executable programs on the host system -macro (find_host_package) - set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) - set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) - set (IOS FALSE) - - find_package(${ARGN}) - - set (IOS TRUE) - set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) - set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) - set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -endmacro (find_host_package) +# work-around: cmake will fail if this is missing! +macro(find_host_package) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) + set(IOS FALSE) + find_package(${ARGN}) + set(IOS TRUE) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) +endmacro(find_host_package) diff --git a/docs/installation/README.de.rst b/docs/installation/README.de.rst index 9207e70..54d01b1 100644 --- a/docs/installation/README.de.rst +++ b/docs/installation/README.de.rst @@ -233,7 +233,7 @@ CA-Zertifikate im Windows-Truststore werden daher ignoriert. "eID-SDK", TCP, 24727, "eingehend", "Nein", "Verwendung der SDK-Schnittstelle", "Nur erreichbar von localhost [#TR-03124]_" "SaK1", UDP, 24727, "eingehend", "Ja", "Smartphone als Kartenleser, Erkennung [#TR-03112]_", "Broadcasts" "SaK2", TCP, , "ausgehend", "Ja", "Smartphone als Kartenleser, Verwendung [#TR-03112]_", "Verbindung im lokalen Subnetz" - "Update", TCP, 443, "ausgehend", "Ja", "Updates [#govurl]_ zu Dienstanbietern und Kartenlesegeräten sowie Informationen zu neuen AusweisApp2-Versionen [#updatecheck]_ .", "Die Zertifikate der TLS-Verbindung werden mit in der AusweisApp2 mitgelieferten CA-Zertifikaten validiert. Im Betriebssystem hinterlegte CA-Zertifikate werden ignoriert." + "Update", TCP, 443, "ausgehend", "Ja", "Updates [#govurl]_ zu Dienstanbietern und Kartenlesern sowie Informationen zu neuen AusweisApp2-Versionen [#updatecheck]_ .", "Die Zertifikate der TLS-Verbindung werden mit in der AusweisApp2 mitgelieferten CA-Zertifikaten validiert. Im Betriebssystem hinterlegte CA-Zertifikate werden ignoriert." .. [#TR-03124] Siehe TR-03124 des BSI .. [#TR-03112] Siehe TR-03112-6 des BSI diff --git a/docs/installation/conf.py.in b/docs/installation/conf.py.in index e6308d8..a36922f 100644 --- a/docs/installation/conf.py.in +++ b/docs/installation/conf.py.in @@ -152,7 +152,7 @@ latex_documents = [ # The name of an image file (relative to this directory) to place at the top of # the title page. -latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png' +latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png' # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. diff --git a/docs/releasenotes/1.16.2.rst b/docs/releasenotes/1.16.2.rst index 6e1f39e..c7c2fc7 100644 --- a/docs/releasenotes/1.16.2.rst +++ b/docs/releasenotes/1.16.2.rst @@ -1,7 +1,7 @@ AusweisApp2 1.16.2 ^^^^^^^^^^^^^^^^^^ -**Releasedatum:** 15. April 2019 +**Releasedatum:** 15. Mai 2019 diff --git a/docs/releasenotes/1.18.0.rst b/docs/releasenotes/1.18.0.rst new file mode 100644 index 0000000..19db2dd --- /dev/null +++ b/docs/releasenotes/1.18.0.rst @@ -0,0 +1,21 @@ +AusweisApp2 1.18.0 +^^^^^^^^^^^^^^^^^^ + +**Releasedatum:** 24. September 2019 + + + +Anwender +"""""""" + - Aktivierung der NFC-Funktion für iOS 13. + + - Kleinere Fehlerbehebungen. + + +Entwickler +"""""""""" + - Aktualisierung von OpenSSL auf die Version 1.1.1c. + + - Aktualisierung von Qt auf die Version 5.12.4. + + - Ein Compiler mit C++17-Support ist erforderlich. diff --git a/docs/releasenotes/_themes/appcast/layout.html b/docs/releasenotes/_themes/appcast/layout.html index 4d7b89d..d5ca210 100644 --- a/docs/releasenotes/_themes/appcast/layout.html +++ b/docs/releasenotes/_themes/appcast/layout.html @@ -3,6 +3,11 @@ AusweisApp2 Release Notes +
diff --git a/docs/releasenotes/announce.rst b/docs/releasenotes/announce.rst index 8bd7a82..6c7be64 100644 --- a/docs/releasenotes/announce.rst +++ b/docs/releasenotes/announce.rst @@ -1,7 +1,7 @@ Abkündigungen ============= -Mit der Version 1.18.0 der AusweisApp2 wird die Unterstützung +Mit der Version 1.20.0 der AusweisApp2 wird die Unterstützung folgender Systeme eingestellt. - OS X 10.11 diff --git a/docs/releasenotes/appcast.rst b/docs/releasenotes/appcast.rst index 31532dc..e655b2b 100644 --- a/docs/releasenotes/appcast.rst +++ b/docs/releasenotes/appcast.rst @@ -4,8 +4,6 @@ Release Notes .. toctree:: :maxdepth: 1 - 1.16.2 - 1.16.1 - 1.16.0 + 1.18.0 announce issues diff --git a/docs/releasenotes/conf.py.in b/docs/releasenotes/conf.py.in index b8b889b..10c2a0e 100644 --- a/docs/releasenotes/conf.py.in +++ b/docs/releasenotes/conf.py.in @@ -151,7 +151,7 @@ latex_documents = [ # The name of an image file (relative to this directory) to place at the top of # the title page. -latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png' +latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png' # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. diff --git a/docs/releasenotes/general.rst b/docs/releasenotes/general.rst index b656bf6..8d9c533 100644 --- a/docs/releasenotes/general.rst +++ b/docs/releasenotes/general.rst @@ -5,7 +5,7 @@ Die AusweisApp2 ist eine Software, die Sie auf Ihrem Computer installieren, um s Ihrem Personalausweis bzw. Ihrem elektronischen Aufenthaltstitel online auszuweisen. Für die Nutzung der Online-Ausweisfunktion benötigen die Nutzerinnen und Nutzer eine -Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenlesegerät oder Smartphone, +Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenleser oder Smartphone, Personalausweis und eID-Diensteanbieter hergestellt werden kann. Sie ermöglicht den verschlüsselten Datenaustausch zwischen Personalausweis und eID-Dienst. diff --git a/docs/releasenotes/issues.rst b/docs/releasenotes/issues.rst index a8d5b80..06c7e18 100644 --- a/docs/releasenotes/issues.rst +++ b/docs/releasenotes/issues.rst @@ -1,8 +1,20 @@ Bekannte Fehler =============== +.. important:: + Auf Windows wird beim Update einer Version der AusweisApp2 älter + als Version 1.16.0 auf eine aktuelle Version der AusweisApp2 die + ältere Version nicht erkannt und auch nicht entfernt. Bitte gehen + Sie in die Systemsteuerung Ihres Endgeräts und deinstallieren Sie + die ältere Version manuell. Danach kann die bereits installierte, + aktuelle Version aufgerufen werden. + Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2. + - Mit der NFC-Schnittstelle des iPhone 7 und iPhone 7 Plus werden viele + Ausweise nicht erkannt (hauptsächlich NFC-A) und es kommt zu Abbrüchen der + Authentisierung. + - Auf Windows 10 Plattformen mit aktivierter Benutzerkontensteuerung kann es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der Online-Ausweisfunktion kommen. @@ -19,8 +31,8 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2. leichten Irritationen bei der angegebenen Bedienung kommen. - Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung - oder eine PIN-Änderung mit Komfort-Kartenlesegerät durchgeführt wird, - kann es unter Windows und macOS zu einem Absturz kommen. + oder eine PIN-Änderung mit Komfort-Kartenleser durchgeführt wird, kann es + unter Windows und macOS zu einem Absturz kommen. - Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle auf Android. @@ -31,6 +43,17 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2. - Unter macOS wird der Hinweis bei falscher PIN-Bestätigung während der PIN-Änderung nur sehr kurz angezeigt. - - Bei der Nutzung eines entfernten Kartenlesegeräts mit aktiviertem - Tastaturmodus kann bei einer Authentisierung nicht in die PIN-Änderung - gewechselt werden, wenn nur eine 5-stellige PIN vorhanden ist. + - Bei der Nutzung eines entfernten Kartenlesers mit aktiviertem Tastaturmodus + kann bei einer Authentisierung nicht in die PIN-Änderung gewechselt werden, + wenn nur eine 5-stellige PIN vorhanden ist. + + - Unter Windows wird bei der neuen grafischen Oberfläche der + "Datei speichern unter"-Dialog nicht automatisch bei Beginn einer + Authentisierung geschlossen. + + - Unter macOS können per Tastatur mit den Standardsystemeinstellungen nur + Textfelder angesprungen werden. Mit Änderung der Tastaturnavigationsoption + unter "Systemeinstellungen/Tastatur/Kurzbefehle" auf "Alle Steuerungen" kann + das Verhalten von macOS geändert werden, sodass auch alle anderen + Komponenten in der App fokussiert werden können. + diff --git a/docs/releasenotes/support.rst b/docs/releasenotes/support.rst index 9a41d43..ce5296d 100644 --- a/docs/releasenotes/support.rst +++ b/docs/releasenotes/support.rst @@ -8,8 +8,6 @@ der AusweisApp2 unterstützt. Betriebssysteme """"""""""""""" - - OS X 10.11 - - macOS 10.12 - macOS 10.13 @@ -60,9 +58,9 @@ getestet. -Kartenlesegeräte -~~~~~~~~~~~~~~~~ -Alle Kartenlesegeräte, die die Onlineausweisfunktionalität unterstützen und nach +Kartenleser +~~~~~~~~~~~ +Alle Kartenleser, die die Onlineausweisfunktionalität unterstützen und nach BSI TR-03119 zertifiziert sind. Details hierzu befinden sich auf der Homepage des BSI unter "Nach Technischen Richtlinien zertifizierte Produkte". @@ -93,7 +91,7 @@ Aktuelle Informationen zu Kartenlesern finden Sie auf unserer Webseite: https://www.ausweisapp.bund.de/fragen-und-antworten/voraussetzungen/ Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität -unterstützen, können als Kartenlesegerät verwendet werden. +unterstützen, können als Kartenleser verwendet werden. Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone zu installieren und zu starten. @@ -122,17 +120,17 @@ folgenden Browser zu verwenden. -Kartenlesegeräte -~~~~~~~~~~~~~~~~ +Kartenleser +~~~~~~~~~~~ Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität unterstützen. Details hierzu befinden sich auf der Homepage: https://www.ausweisapp.bund.de/mobile-geraete/ -Ebenfalls ist es möglich ein weiteres Smartphone als Kartenlesegerät zu -verwenden. Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen -Smartphone zu installieren und zu starten. +Ebenfalls ist es möglich ein weiteres Smartphone als Kartenleser zu verwenden. +Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone zu +installieren und zu starten. -Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesegeräts möglich. -Folgendes Bluetooth-Kartenlesegerät wird von der AusweiApp2 unterstützt: +Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesers möglich. +Folgender Bluetooth-Kartenleser wird von der AusweiApp2 unterstützt: - cyberJack wave diff --git a/docs/releasenotes/versions.rst b/docs/releasenotes/versions.rst index c1056bd..2d4f6d3 100644 --- a/docs/releasenotes/versions.rst +++ b/docs/releasenotes/versions.rst @@ -1,6 +1,14 @@ Versionen ========= +Versionszweig 1.18 +------------------ +.. toctree:: + :maxdepth: 1 + + 1.18.0 + + Versionszweig 1.16 ------------------ .. toctree:: diff --git a/docs/sdk/android.rst b/docs/sdk/android.rst index 7592c5d..a824e89 100644 --- a/docs/sdk/android.rst +++ b/docs/sdk/android.rst @@ -659,7 +659,7 @@ in the listing below. Implementation """""""""""""" -As it is common on the Android platform, information is send to applications +As it is common on the Android platform, information is sent to applications encapsulated in instances of the **Intent** class. In order to process newly discovered NFC tags, Intents which are given to the application need to be checked for the parcelable NFC extra as shown in the code listing below. diff --git a/docs/sdk/conf.py.in b/docs/sdk/conf.py.in index 44ac321..2b8291d 100644 --- a/docs/sdk/conf.py.in +++ b/docs/sdk/conf.py.in @@ -149,7 +149,7 @@ latex_documents = [ # The name of an image file (relative to this directory) to place at the top of # the title page. -latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png' +latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png' # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. diff --git a/docs/sdk/messages.rst b/docs/sdk/messages.rst index da71caa..3c37806 100644 --- a/docs/sdk/messages.rst +++ b/docs/sdk/messages.rst @@ -235,7 +235,7 @@ a result and an url parameter to indicate the end of an authentication. "minor": "http://www.bsi.bund.de/ecard/api/1.1/resultminor/al/common#internalError", "language": "en", "description": "An internal error has occurred during processing.", - "message": "The ID card has been removed. The process is aborted." + "message": "The connection to the ID card has been lost. The process was aborted." }, "url": "https://test.governikus-eid.de/gov_autent/async?refID=_abcdefgh" } diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt index 89c0f8e..e0428ff 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0) +CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0) IF(POLICY CMP0010) CMAKE_POLICY(SET CMP0010 NEW) @@ -82,13 +82,12 @@ ELSE() SET(PATCH_CMD ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/patch.py --debug -v) MESSAGE(STATUS "Cannot find 'patch' command... using patch.py") ENDIF() +SET(PATCH_CMD ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PROJECT_SOURCE_DIR}/patches) IF(NOT DESTINATION_DIR) SET(DESTINATION_DIR ${PROJECT_BINARY_DIR}/dist) ENDIF() -SET(PATCHES_DIR ${PROJECT_SOURCE_DIR}/../patches) - IF(NOT PACKAGES_DIR) SET(PACKAGES_DIR $ENV{PACKAGES_DIR}) IF(NOT PACKAGES_DIR) @@ -103,11 +102,11 @@ INCLUDE(Messages) ################################## Versions -SET(QT 5.11.2) -SET(QT_HASH c6104b840b6caee596fa9a35bc5f57f67ed5a99d6a36497b6fe66f990a53ca81) +SET(QT 5.12.4) +SET(QT_HASH 85da5e0ee498759990180d5b8192efaa6060a313c5018b772f57d446bdd425e1) -SET(OPENSSL 1.1.1) -SET(OPENSSL_HASH 2836875a0f89c03d0fdf483941512613a50cfb421d6fd94b9f41d7279d586a3d) +SET(OPENSSL 1.1.1c) +SET(OPENSSL_HASH f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90) ################################## Files SET(QT_FILE qt-everywhere-src-${QT}.tar.xz) @@ -117,7 +116,7 @@ SET(OPENSSL_FILE openssl-${OPENSSL}.tar.gz) IF("${QT}" MATCHES "alpha|beta|rc") SET(QT_DEST_DIR development_releases) ELSE() - SET(QT_DEST_DIR official_releases) + SET(QT_DEST_DIR archive) # official_releases ENDIF() STRING(SUBSTRING ${QT} 0 4 QT_SUBVERSION) @@ -131,7 +130,8 @@ SET(ENABLED_TARGETS) ######################################################################### LIST(APPEND ENABLED_TARGETS openssl) -SET(OPENSSL_CONFIGURE_FLAGS no-camellia no-bf no-aria no-seed no-poly1305 no-srp no-gost no-ocsp no-idea no-mdc2 no-rc2 no-rc4 no-rc5 no-srtp no-hw no-sm2 no-sm3 no-sm4) +SET(OPENSSL_CONFIGURE_FLAGS no-camellia no-bf no-aria no-seed no-poly1305 no-srp no-gost no-idea no-mdc2 no-rc2 no-rc4 no-rc5 no-srtp no-hw no-sm2 no-sm3 no-sm4) +SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-ocsp no-ct no-dgram) SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-cast no-chacha no-blake2 no-rmd160 no-scrypt no-siphash no-whirlpool no-md4 no-des) SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-tls1 no-tls1-method no-tls1_1 no-tls1_1-method no-tls1_3 no-ssl3 no-ssl3-method no-dtls no-dtls1-method no-dtls1_2-method) SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-deprecated no-engine no-async no-dso no-comp no-ts no-makedepend no-tests shared) @@ -139,6 +139,7 @@ SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-deprecated no-engine n IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG") SET(OPENSSL_CONFIGURE_FLAGS --debug ${OPENSSL_CONFIGURE_FLAGS}) ELSE() + SET(OPENSSL_CONFIGURE_FLAGS no-ui-console no-filenames ${OPENSSL_CONFIGURE_FLAGS}) ADD_FLAG(-Os NOQUOTES VAR OPENSSL_COMPILER_FLAGS) ENDIF() @@ -146,14 +147,20 @@ ADD_FLAG(-fstack-protector-strong -fstack-protector NOQUOTES VAR OPENSSL_COMPILE IF(IOS) SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ios64-cross) - SET(OPENSSL_ENV export CROSS_TOP=${CMAKE_IOS_DEVELOPER_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&) + STRING(REGEX REPLACE "/SDKs/.*" "" CROSS_TOP_DEV_ROOT "${CMAKE_OSX_SYSROOT}") + SET(OPENSSL_ENV export CROSS_TOP=${CROSS_TOP_DEV_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&) ELSEIF(APPLE) SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} darwin64-x86_64-cc) - SET(OPENSSL_COMPILER_FLAGS ${OPENSSL_COMPILER_FLAGS} -mmacosx-version-min=10.11) + SET(OPENSSL_COMPILER_FLAGS ${OPENSSL_COMPILER_FLAGS} -mmacosx-version-min=10.12) ELSEIF(MINGW) SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} mingw) ELSEIF(MSVC) - SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-asm VC-WIN32) + SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-asm) + IF(CMAKE_SIZEOF_VOID_P EQUAL 8) + SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} VC-WIN64A) + ELSE() + SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} VC-WIN32) + ENDIF() ELSEIF(ANDROID) IF(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a") SET(OPENSSL_ARCH android-arm) @@ -180,10 +187,10 @@ ELSEIF(ANDROID) ELSEIF(BSD) SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} BSD-x86_64) ELSEIF(LINUX) - IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686") - SET(OPENSSL_ARCH linux-generic32) - ELSE() + IF(CMAKE_SIZEOF_VOID_P EQUAL 8) SET(OPENSSL_ARCH linux-x86_64) + ELSE() + SET(OPENSSL_ARCH linux-generic32) ENDIF() SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ${OPENSSL_ARCH}) ELSE() @@ -195,11 +202,8 @@ ExternalProject_Add(openssl URL_HASH SHA256=${OPENSSL_HASH} DOWNLOAD_DIR ${PACKAGES_DIR} - PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-android-shlib_variant.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Ignore-disabled-ciphers.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-DSA-mod-inverse-fix.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Timing-vulnerability-in-DSA-signature-generation-CVE.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Timing-vulnerability-in-ECDSA-signature-generation-C.patch + PATCH_COMMAND ${PATCH_CMD}/openssl-android-shlib_variant.patch && + ${PATCH_CMD}/openssl-Adjust-iOS-target.patch CONFIGURE_COMMAND ${OPENSSL_ENV} ${PERL_EXECUTABLE} Configure --prefix=${DESTINATION_DIR} ${OPENSSL_CONFIGURE_FLAGS} "${OPENSSL_COMPILER_FLAGS}" BUILD_COMMAND ${OPENSSL_ENV} ${MAKE} ${MAKE_JOBS} BUILD_IN_SOURCE 1 @@ -235,32 +239,45 @@ LIST(APPEND ENABLED_TARGETS qt) IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG") SET(QT_CONFIGURE_FLAGS -debug -qml-debug) - SET(QT_PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Enable-debug-output-for-OpenSSL.patch &&) + SET(QT_PATCH_COMMAND ${PATCH_CMD}/qt-Enable-debug-output-for-OpenSSL.patch &&) ELSE() SET(QT_CONFIGURE_FLAGS -release -optimize-size -no-qml-debug) SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} $<$:-force-debug-info>) ENDIF() -SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license -c++std c++11 -qt-zlib -no-mtdev -qt-libpng -qt-libjpeg -no-dbus -no-harfbuzz -qt-pcre -system-proxies -no-compile-examples -nomake examples -nomake tests -no-sql-sqlite -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib) +SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license) +SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -nomake examples -nomake tests -no-mtdev -no-dbus -no-harfbuzz -no-compile-examples -no-sql-sqlite) +SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -qt-zlib -qt-libpng -qt-libjpeg -qt-pcre) +SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -system-proxies -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib) -IF(NOT ANDROID) - LIST(APPEND NO_FEATURES bearermanagement) +IF(CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "ccache") + SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -ccache) ENDIF() -LIST(APPEND NO_FEATURES ftp paint_debug lcdnumber mdiarea) + +LIST(APPEND NO_FEATURES dtls winrt_bt ftp paint_debug lcdnumber mdiarea) LIST(APPEND NO_FEATURES calendarwidget colordialog cups dial fontcombobox fontdialog) LIST(APPEND NO_FEATURES imageformat_bmp imageformat_ppm imageformat_xbm) -LIST(APPEND NO_FEATURES sharedmemory textodfwriter filesystemwatcher) +LIST(APPEND NO_FEATURES sharedmemory textodfwriter bearermanagement) LIST(APPEND NO_FEATURES undocommand undogroup undostack undoview) LIST(APPEND NO_FEATURES printer printdialog printpreviewdialog printpreviewwidget) -LIST(APPEND NO_FEATURES splashscreen syntaxhighlighter dom sql) +LIST(APPEND NO_FEATURES splashscreen syntaxhighlighter dom sql qdoc) FOREACH(feature ${NO_FEATURES}) SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -no-feature-${feature}) ENDFOREACH() -SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-directfb -no-linuxfb) -SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtwebglplugin -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing -skip qtwayland -skip qtremoteobjects -skip qtspeech -skip qtwebview -skip multimedia -skip qtquickcontrols) +LIST(APPEND SKIP_MODULES qtwebglplugin qtscxml qtxmlpatterns qtwebchannel) +LIST(APPEND SKIP_MODULES qtwebengine qtscript qtactiveqt qtlocation qtserialbus) +LIST(APPEND SKIP_MODULES qtserialport qtgamepad qtvirtualkeyboard qtcanvas3d qtcharts) +LIST(APPEND SKIP_MODULES qtdatavis3d qt3d qtpurchasing qtwayland qtremoteobjects) +LIST(APPEND SKIP_MODULES qtspeech qtwebview multimedia qtquickcontrols) +FOREACH(module ${SKIP_MODULES}) + SET(QT_CONFIGURE_FLAGS_SKIP_MODULES ${QT_CONFIGURE_FLAGS_SKIP_MODULES} -skip ${module}) +ENDFOREACH() + + +SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-directfb -no-linuxfb) SET(QT_CONFIGURE ./configure) IF(IOS) SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -sdk iphoneos -xplatform macx-ios-clang) @@ -282,6 +299,8 @@ ELSEIF(WIN32) SET(QT_PLATFORM win32-msvc2015) ELSEIF(MSVC_TOOLSET_VERSION STREQUAL "141") SET(QT_PLATFORM win32-msvc2017) + ELSEIF(MSVC_TOOLSET_VERSION STREQUAL "142") + SET(QT_PLATFORM win32-msvc2019) ELSE() MESSAGE(FATAL_ERROR "Version of MSVC not supported") ENDIF() @@ -295,6 +314,8 @@ ELSEIF(WIN32) SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -opengl dynamic -no-icu -no-sql-odbc -platform ${QT_PLATFORM}) SET(QT_CONFIGURE configure.bat) ELSEIF(ANDROID) + FIND_PACKAGE(Java COMPONENTS Development REQUIRED) + IF(CMAKE_COMPILER_IS_GNUCXX) SET(ANDROID_XPLATFORM android-g++) ELSE() @@ -310,8 +331,12 @@ ELSEIF(ANDROID) ENDIF() SET(QT_ENV export OPENSSL_LIBS=-lcrypto-gov\ -lssl-gov &&) -ELSE() +ELSEIF(BSD) + SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER}) +ELSEIF(LINUX) SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -no-libproxy) +ELSE() + MESSAGE(FATAL_ERROR "Unsupported system") ENDIF() IF(IOS OR ANDROID) @@ -325,23 +350,18 @@ ExternalProject_Add(qt DOWNLOAD_DIR ${PACKAGES_DIR} PATCH_COMMAND ${QT_PATCH_COMMAND} - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Disable-unused-imageformats.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-IsoDep-to-the-techList-on-Android.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-reportError-to-fix-QMetaObject-invokeMethod.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-work-around-for-freebsd-build.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-configure-refactor-directx-checks.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-configure-detect-fxc.exe-more-thoroughly.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-disable-designer.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-fix-macOS-no-printer.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-QUrl-toString-when-forming-the-Host-header.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QUrl-Support-IPv6-addresses-with-zone-id.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-fix-compile-with-NDK-r18.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-Fix-crash.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-user-provided-session-data-if-available.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Work-Around-FreeBSD-v12-build.patch && - ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Linux-Remove-our-use-of-syscall-for-statx-2-and-rena.patch && + ${PATCH_CMD}/qt-Disable-unused-imageformats.patch && + ${PATCH_CMD}/qt-Add-work-around-for-freebsd-build.patch && + ${PATCH_CMD}/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch && + ${PATCH_CMD}/qt-Remove-unused-plugins-from-the-build.patch && + ${PATCH_CMD}/qt-disable-designer.patch && + ${PATCH_CMD}/qt-Disable-qmltime-for-shared-build.patch && + ${PATCH_CMD}/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch && + ${PATCH_CMD}/qt-Fix-build-with-no-feature-printer.patch && + ${PATCH_CMD}/qt-Fix-build-with-no-feature-printer-on-macOS.patch && + ${PATCH_CMD}/qt-Core-IO-Bluetooth-fix-ambiguous-conversions.patch && + ${PATCH_CMD}/qt-Core-IO-Bluetooth-fix-ambiguous-conversions-for-macO.patch && + ${PATCH_CMD}/qt-Adjust-iOS-target.patch && ${CMAKE_COMMAND} -E touch qtbase/.gitignore CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES} BUILD_COMMAND ${MAKE} ${MAKE_JOBS} @@ -356,7 +376,11 @@ FOREACH(var ${ENABLED_TARGETS}) EXTERNALPROJECT_GET_PROPERTY(${var} INSTALL_DIR) LIST(APPEND CLEAN_TARGETS ${INSTALL_DIR}) ENDFOREACH() -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}") +IF(CMAKE_VERSION VERSION_LESS "3.15") + SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}") +ELSE() + SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}") +ENDIF() OPTION(COMPRESS_DEPENDS "Disable DEPENDS for compress target" ON) IF(COMPRESS_DEPENDS) @@ -377,9 +401,7 @@ IF(DVCS_FOUND) ENDIF() ENDIF() -IF(IOS) - SET(SYSTEM_NAME iOS) -ELSEIF(ANDROID) +IF(ANDROID) SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}_${CMAKE_ANDROID_ARCH_ABI}) ELSE() SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}) @@ -392,8 +414,14 @@ IF(WIN32) ENDIF() ENDIF() -SET(COMPRESSION cfJ) -SET(COMPRESSION_FILENDING tar.xz) +IF(CMAKE_VERSION VERSION_LESS "3.15") + SET(COMPRESSION cfJ) + SET(COMPRESSION_FILENDING tar.xz) +ELSE() + SET(COMPRESSION cf) + SET(COMPRESSION_OPTION --zstd) + SET(COMPRESSION_FILENDING tar.zstd) +ENDIF() ADD_CUSTOM_TARGET(compress.pre ${compressed_filename} COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/doc" COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/share" @@ -403,6 +431,6 @@ ADD_CUSTOM_TARGET(compress.pre ${compressed_filename} SET(compressed_filename Toolchain_${SYSTEM_NAME}_${stamp}.${COMPRESSION_FILENDING}) ADD_CUSTOM_COMMAND(OUTPUT ${compressed_filename} - COMMAND ${CMAKE_COMMAND} -E tar "${COMPRESSION}" "${compressed_filename}" "${DESTINATION_DIR}" + COMMAND ${CMAKE_COMMAND} -E tar "${COMPRESSION}" "${compressed_filename}" ${COMPRESSION_OPTION} "${DESTINATION_DIR}" DEPENDS compress.pre) ADD_CUSTOM_TARGET(compress DEPENDS ${compressed_filename}) diff --git a/libs/README.rst b/libs/README.rst index ef17004..8185201 100644 --- a/libs/README.rst +++ b/libs/README.rst @@ -4,15 +4,13 @@ Libraries Um die AusweisApp2 zu bauen ist eine Toolchain erforderlich, die die Abhängigkeiten und die Compilertools beinhaltet. -Unterstützte Compiler: +Unterstützte C++17 Compiler: -- MinGW 32 / 64 >= 4.9 +- MinGW / GCC >= 7.3 -- GCC >= 4.9 +- Clang >= 5.0 -- Clang >= 3.4 - -- MSVC >= 2015 +- MSVC >= 2017 Notwendige Bibliotheken: @@ -32,7 +30,7 @@ Notwendige Bibliotheken: Notwendige Tools: -- CMake >= 3.5.0 (>= 3.7.1 für Android) +- CMake >= 3.8.0 (3.14.0 >= für iOS) - http://www.cmake.org @@ -102,7 +100,7 @@ MinGW - http://sourceforge.net/projects/mingw-w64/ - Dabei wurde das folgende Paket getestet: - https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download + https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/threads-posix/dwarf/i686-7.3.0-release-posix-dwarf-rt_v5-rev0.7z/download MSYS2 @@ -147,7 +145,7 @@ Vorbereitung :: - Für das Windows SDK 10.0.15063.0 und neuer: + Für das Windows SDK 10.0.15063.0 und neuer (getestet: 10.0.17763.0): WindowsSdkVerBinPath = C:\Program Files (x86)\Windows Kits\10\bin\%VERSION% Für alle älteren Versionen: WindowsSdkDir = C:\Program Files (x86)\Windows Kits\10 diff --git a/libs/patch.py b/libs/patch.py index 4e355f2..f2e957b 100644 --- a/libs/patch.py +++ b/libs/patch.py @@ -368,7 +368,7 @@ class PatchSet(object): header.append(fe.line) fe.next() if fe.is_empty: - if p == None: + if p is None: debug("no patch data found") # error is shown later self.errors += 1 else: @@ -956,7 +956,6 @@ class PatchSet(object): if exists(backupname): warning("can't backup original file to %s - aborting" % backupname) else: - import shutil shutil.move(filename, backupname) if self.write_hunks(backupname, filename, p.hunks): info("successfully patched %d/%d:\t %s" % (i+1, total, filename)) @@ -1020,7 +1019,6 @@ class PatchSet(object): lineno = 1 line = fp.readline() - hno = None try: for hno, h in enumerate(hunks): # skip to first line of the hunk diff --git a/libs/patches/openssl-Adjust-iOS-target.patch b/libs/patches/openssl-Adjust-iOS-target.patch new file mode 100644 index 0000000..94dce17 --- /dev/null +++ b/libs/patches/openssl-Adjust-iOS-target.patch @@ -0,0 +1,25 @@ +From 0628b87d65feb0209303e91bf7529628c4dd80f4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= +Date: Fri, 1 Feb 2019 13:27:04 +0100 +Subject: [PATCH] Adjust iOS target + +--- + Configurations/15-ios.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git x/Configurations/15-ios.conf y/Configurations/15-ios.conf +index 1bb9f48d06..fb0ece9aff 100644 +--- x/Configurations/15-ios.conf ++++ y/Configurations/15-ios.conf +@@ -24,7 +24,7 @@ my %targets = ( + "ios64-xcrun" => { + inherit_from => [ "ios-common", asm("aarch64_asm") ], + CC => "xcrun -sdk iphoneos cc", +- cflags => add("-arch arm64 -mios-version-min=7.0.0 -fno-common"), ++ cflags => add("-arch arm64 -mios-version-min=13.0 -fno-common -fembed-bitcode"), + bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", + perlasm_scheme => "ios64", + }, +-- +2.20.1 + diff --git a/libs/patches/openssl-android-shlib_variant.patch b/libs/patches/openssl-android-shlib_variant.patch new file mode 100644 index 0000000..b91afe2 --- /dev/null +++ b/libs/patches/openssl-android-shlib_variant.patch @@ -0,0 +1,25 @@ +From f63dce0a614ad26176dfbf4069264a4ec36c11b1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= +Date: Tue, 20 Nov 2018 16:05:20 +0100 +Subject: [PATCH] android shlib_variant + +--- + Configurations/15-android.conf | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git x/Configurations/15-android.conf y/Configurations/15-android.conf +index 7b496a4529..559e11e27f 100644 +--- x/Configurations/15-android.conf ++++ y/Configurations/15-android.conf +@@ -170,6 +170,8 @@ my %targets = ( + bn_ops => sub { android_ndk()->{bn_ops} }, + bin_cflags => "-pie", + enable => [ ], ++ shlib_variant => '-gov', ++ shared_extension => '.so', + }, + "android-arm" => { + ################################################################ +-- +2.20.1 + diff --git a/libs/patches/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch b/libs/patches/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch new file mode 100644 index 0000000..4d14b1d --- /dev/null +++ b/libs/patches/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch @@ -0,0 +1,38 @@ +From 81839e57d5f3d86d6663f58d5d6b7b0605a6986e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= +Date: Tue, 30 Jul 2019 12:49:14 +0200 +Subject: [PATCH] Add Q_CORE_EXPORT to lcEventDispatcher* + +Undefined symbols for architecture arm64: + "lcEventDispatcher()", referenced from: + _qt_main_wrapper in libqios.a(qioseventdispatcher.o) + +[QIOSApplicationStateTracker applicationDidFinishLaunching:] in libqios.a(qioseventdispatcher.o) + user_main_trampoline() in libqios.a(qioseventdispatcher.o) + +[QIOSApplicationStateTracker applicationWillTerminate] in libqios.a(qioseventdispatcher.o) + QIOSJumpingEventDispatcher::interruptEventLoopExec() in libqios.a(qioseventdispatcher.o) +ld: symbol(s) not found for architecture arm64 + +Change-Id: I43677cf3bce0588753731d81d533f85b0ea1e223 +Fixes: QTBUG-75457 +--- + src/corelib/kernel/qeventdispatcher_cf.mm | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git x/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm y/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm +index b7b379e2c1..ac711d74ee 100644 +--- x/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm ++++ y/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm +@@ -148,8 +148,8 @@ static CFStringRef runLoopMode(NSDictionary *dictionary) + + QT_BEGIN_NAMESPACE + +-Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher"); +-Q_LOGGING_CATEGORY(lcEventDispatcherTimers, "qt.eventdispatcher.timers"); ++Q_CORE_EXPORT Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher"); ++Q_CORE_EXPORT Q_LOGGING_CATEGORY(lcEventDispatcherTimers, "qt.eventdispatcher.timers"); + + class RunLoopDebugger : public QObject + { +-- +2.22.0 + diff --git a/patches/qt-Add-work-around-for-freebsd-build.patch b/libs/patches/qt-Add-work-around-for-freebsd-build.patch similarity index 84% rename from patches/qt-Add-work-around-for-freebsd-build.patch rename to libs/patches/qt-Add-work-around-for-freebsd-build.patch index 80c02d2..4ca4eef 100644 --- a/patches/qt-Add-work-around-for-freebsd-build.patch +++ b/libs/patches/qt-Add-work-around-for-freebsd-build.patch @@ -1,7 +1,7 @@ -From 9e482ce286ad39677e64392e0ca18afc4cf5396c Mon Sep 17 00:00:00 2001 +From c06988f6a5816e8ebbcebfcf7e9799cd5b90a91d Mon Sep 17 00:00:00 2001 From: Lars Schmertmann Date: Fri, 13 Apr 2018 08:22:18 +0200 -Subject: [PATCH] Add work-around for freebsd build +Subject: Add work-around for freebsd build Change-Id: I14e66e072f9667479815693e3dbbac71385797e7 Task-number: QTBUG-65425 @@ -10,7 +10,7 @@ Task-number: QTBUG-65425 1 file changed, 1 insertion(+), 1 deletion(-) diff --git x/qtbase/qmake/Makefile.unix y/qtbase/qmake/Makefile.unix -index 426387f0c2..b785127ed2 100644 +index 0f69b6b487..26ac96c473 100644 --- x/qtbase/qmake/Makefile.unix +++ y/qtbase/qmake/Makefile.unix @@ -269,7 +269,7 @@ qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp @@ -23,5 +23,5 @@ index 426387f0c2..b785127ed2 100644 qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp $(CXX) -c -o $@ $(CXXFLAGS) $< -- -2.17.0 +2.21.0 diff --git a/libs/patches/qt-Adjust-iOS-target.patch b/libs/patches/qt-Adjust-iOS-target.patch new file mode 100644 index 0000000..cf9f193 --- /dev/null +++ b/libs/patches/qt-Adjust-iOS-target.patch @@ -0,0 +1,26 @@ +From 86b0caf2e167953ef1e50f32edb96e1e64eeba7e Mon Sep 17 00:00:00 2001 +From: Lars Schmertmann +Date: Fri, 19 Jul 2019 15:19:08 +0200 +Subject: Adjust iOS target + +Change-Id: I6c7f0616d52b0d118ffd8c031f3f51212b8ed821 +--- + mkspecs/macx-ios-clang/qmake.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git x/qtbase/mkspecs/macx-ios-clang/qmake.conf y/qtbase/mkspecs/macx-ios-clang/qmake.conf +index 88e96ef32e..b3372a8232 100644 +--- x/qtbase/mkspecs/macx-ios-clang/qmake.conf ++++ y/qtbase/mkspecs/macx-ios-clang/qmake.conf +@@ -2,7 +2,7 @@ + # qmake configuration for macx-ios-clang + # + +-QMAKE_IOS_DEPLOYMENT_TARGET = 11.0 ++QMAKE_IOS_DEPLOYMENT_TARGET = 13.0 + + # Universal target (iPhone and iPad) + QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1,2 +-- +2.22.0 + diff --git a/libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions-for-macO.patch b/libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions-for-macO.patch new file mode 100644 index 0000000..bd6bd8a --- /dev/null +++ b/libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions-for-macO.patch @@ -0,0 +1,253 @@ +From daf0e91b5be5a136d93b0e66efc3681f28a2ffde Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= +Date: Fri, 19 Jul 2019 11:06:59 +0200 +Subject: [PATCH] Core/IO/Bluetooth - fix ambiguous conversions for macOS + +This is a sibling of QTBUG-76847 on macOS instead of iOS. +--- + .../qbluetoothdevicediscoveryagent_osx.mm | 6 ++--- + src/bluetooth/qbluetoothlocaldevice_osx.mm | 2 +- + src/bluetooth/qbluetoothserver_osx.mm | 6 ++--- + src/bluetooth/qbluetoothserviceinfo_osx.mm | 2 +- + src/bluetooth/qbluetoothsocket_osx.mm | 26 +++++++++---------- + src/bluetooth/qbluetoothtransferreply_osx.mm | 10 +++---- + 6 files changed, 26 insertions(+), 26 deletions(-) + +diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm +index 4657da82..bdc3c85e 100644 +--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm ++++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm +@@ -181,7 +181,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(con + + QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate() + { +- if (inquiryLE && agentState != NonActive) { ++ if (inquiryLE.data() && agentState != NonActive) { + // We want the LE scan to stop as soon as possible. + if (dispatch_queue_t leQueue = OSXBluetooth::qt_LE_queue()) { + // Local variable to be retained ... +@@ -195,7 +195,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate() + + bool QBluetoothDeviceDiscoveryAgentPrivate::isValid() const + { +- return hostController && [hostController powerState] == kBluetoothHCIPowerStateON; ++ return hostController.data() && [hostController powerState] == kBluetoothHCIPowerStateON; + } + + bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const +@@ -292,7 +292,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::startLE() + + // Check queue and create scanner: + inquiryLE.reset([[LEDeviceInquiryObjC alloc] initWithNotifier:notifier.data()]); +- if (inquiryLE) ++ if (inquiryLE.data()) + notifier.take(); // Whatever happens next, inquiryLE is already the owner ... + + dispatch_queue_t leQueue(qt_LE_queue()); +diff --git x/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm +index 52b7bba8..e7dd9906 100644 +--- x/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm ++++ y/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm +@@ -149,7 +149,7 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice + + bool QBluetoothLocalDevicePrivate::isValid() const + { +- return hostController; ++ return hostController.data(); + } + + void QBluetoothLocalDevicePrivate::requestPairing(const QBluetoothAddress &address, Pairing pairing) +diff --git x/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm +index eefaf4da..5d3b8fc4 100644 +--- x/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm ++++ y/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm +@@ -142,7 +142,7 @@ void QBluetoothServerPrivate::stopListener() + + void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel) + { +- Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)"); ++ Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)"); + Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)"); + Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)"); + +@@ -154,7 +154,7 @@ void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel) + + void QBluetoothServerPrivate::openNotify(IOBluetoothL2CAPChannel *channel) + { +- Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)"); ++ Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)"); + Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)"); + Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)"); + +@@ -293,7 +293,7 @@ bool QBluetoothServer::listen(const QBluetoothAddress &address, quint16 port) + + OSXBluetooth::qt_test_iobluetooth_runloop(); + +- if (d_ptr->listener) { ++ if (d_ptr->listener.data()) { + qCWarning(QT_BT_OSX) << "already in listen mode, close server first"; + return false; + } +diff --git x/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm +index 34de4695..7ce4c645 100644 +--- x/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm ++++ y/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm +@@ -152,7 +152,7 @@ bool QBluetoothServiceInfoPrivate::unregisterService() + if (!registered) + return false; + +- Q_ASSERT_X(serviceRecord, Q_FUNC_INFO, "service registered, but serviceRecord is nil"); ++ Q_ASSERT_X(serviceRecord.data(), Q_FUNC_INFO, "service registered, but serviceRecord is nil"); + + [serviceRecord removeServiceRecord]; + serviceRecord.reset(nil); +diff --git x/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm +index 7f630146..2a856092 100644 +--- x/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm ++++ y/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm +@@ -101,13 +101,13 @@ void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address, + + if (socketType == QBluetoothServiceInfo::RfcommProtocol) { + rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this]); +- if (rfcommChannel) ++ if (rfcommChannel.data()) + status = [rfcommChannel connectAsyncToDevice:address withChannelID:port]; + else + status = kIOReturnNoMemory; + } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { + l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this]); +- if (l2capChannel) ++ if (l2capChannel.data()) + status = [l2capChannel connectAsyncToDevice:address withPSM:port]; + else + status = kIOReturnNoMemory; +@@ -181,10 +181,10 @@ QString QBluetoothSocketPrivate::peerName() const + + NSString *nsName = nil; + if (socketType == QBluetoothServiceInfo::RfcommProtocol) { +- if (rfcommChannel) ++ if (rfcommChannel.data()) + nsName = [rfcommChannel peerName]; + } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { +- if (l2capChannel) ++ if (l2capChannel.data()) + nsName = [l2capChannel peerName]; + } + +@@ -198,10 +198,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const + { + BluetoothDeviceAddress addr = {}; + if (socketType == QBluetoothServiceInfo::RfcommProtocol) { +- if (rfcommChannel) ++ if (rfcommChannel.data()) + addr = [rfcommChannel peerAddress]; + } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { +- if (l2capChannel) ++ if (l2capChannel.data()) + addr = [l2capChannel peerAddress]; + } + +@@ -211,10 +211,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const + quint16 QBluetoothSocketPrivate::peerPort() const + { + if (socketType == QBluetoothServiceInfo::RfcommProtocol) { +- if (rfcommChannel) ++ if (rfcommChannel.data()) + return [rfcommChannel getChannelID]; + } else if (socketType == QBluetoothServiceInfo::L2capProtocol) { +- if (l2capChannel) ++ if (l2capChannel.data()) + return [l2capChannel getPSM]; + } + +@@ -231,7 +231,7 @@ void QBluetoothSocketPrivate::_q_writeNotify() + Q_ASSERT_X(socketType == QBluetoothServiceInfo::L2capProtocol + || socketType == QBluetoothServiceInfo::RfcommProtocol, + Q_FUNC_INFO, "invalid socket type"); +- Q_ASSERT_X(l2capChannel || rfcommChannel, Q_FUNC_INFO, ++ Q_ASSERT_X(l2capChannel.data() || rfcommChannel.data(), Q_FUNC_INFO, + "invalid socket (no open channel)"); + Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)"); + +@@ -275,13 +275,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothRFCOMMChannel *channel) + + openMode = QIODevice::ReadWrite; + rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this channel:channel]); +- if (rfcommChannel) {// We do not handle errors, up to an external user. ++ if (rfcommChannel.data()) {// We do not handle errors, up to an external user. + q_ptr->setOpenMode(QIODevice::ReadWrite); + state = QBluetoothSocket::ConnectedState; + socketType = QBluetoothServiceInfo::RfcommProtocol; + } + +- return rfcommChannel; ++ return rfcommChannel.data(); + } + + bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel) +@@ -299,13 +299,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel) + + openMode = QIODevice::ReadWrite; + l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this channel:channel]); +- if (l2capChannel) {// We do not handle errors, up to an external user. ++ if (l2capChannel.data()) {// We do not handle errors, up to an external user. + q_ptr->setOpenMode(QIODevice::ReadWrite); + state = QBluetoothSocket::ConnectedState; + socketType = QBluetoothServiceInfo::L2capProtocol; + } + +- return l2capChannel; ++ return l2capChannel.data(); + } + + +diff --git x/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm +index 65c8f82d..40a747f8 100644 +--- x/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm ++++ y/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm +@@ -136,13 +136,13 @@ QBluetoothTransferReplyOSXPrivate::~QBluetoothTransferReplyOSXPrivate() + // The OBEX session will be closed then. If + // somehow IOBluetooth/OBEX still has a reference to our + // session, it will not call any of delegate's callbacks. +- if (session) ++ if (session.data()) + [session closeSession]; + } + + bool QBluetoothTransferReplyOSXPrivate::isActive() const + { +- return agent || (session && [session hasActiveRequest]); ++ return agent.data() || (session.data() && [session hasActiveRequest]); + } + + bool QBluetoothTransferReplyOSXPrivate::startOPP(const QBluetoothAddress &device) +@@ -218,7 +218,7 @@ void QBluetoothTransferReplyOSXPrivate::sendConnect(const QBluetoothAddress &dev + void QBluetoothTransferReplyOSXPrivate::sendPut() + { + Q_ASSERT_X(inputStream, Q_FUNC_INFO, "invalid input stream (null)"); +- Q_ASSERT_X(session, Q_FUNC_INFO, "invalid OBEX session (nil)"); ++ Q_ASSERT_X(session.data(), Q_FUNC_INFO, "invalid OBEX session (nil)"); + Q_ASSERT_X([session isConnected], Q_FUNC_INFO, "not connected"); + Q_ASSERT_X(![session hasActiveRequest], Q_FUNC_INFO, + "session already has an active request"); +@@ -268,7 +268,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB + Q_UNUSED(errorCode) + Q_UNUSED(response) + +- if (session) { ++ if (session.data()) { + setReplyError(QBluetoothTransferReply::SessionError, + QCoreApplication::translate(TRANSFER_REPLY, TR_CONNECT_FAILED)); + } else { +@@ -283,7 +283,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB + void QBluetoothTransferReplyOSXPrivate::OBEXConnectSuccess() + { + // Now that OBEX connect succeeded, we can send an OBEX put request. +- if (!session) { ++ if (!session.data()) { + // We're still in OBEXConnect(), it'll take care of next steps. + return; + } +-- +2.22.0 + diff --git a/libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions.patch b/libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions.patch new file mode 100644 index 0000000..a2279c7 --- /dev/null +++ b/libs/patches/qt-Core-IO-Bluetooth-fix-ambiguous-conversions.patch @@ -0,0 +1,97 @@ +From cd287186955f1c654a1f35197f0515ffc222e734 Mon Sep 17 00:00:00 2001 +From: Timur Pocheptsov +Date: Wed, 3 Jul 2019 15:26:31 +0200 +Subject: [PATCH] Core/IO/Bluetooth - fix ambiguous conversions + +... somewhat prospective fix (I do not have the new iOS yet), so far build +never failed with my current SDK. + +Fixes: QTBUG-76847 +Change-Id: Iab75c3cd47144cd83b679b1dbf82339e29c07bd1 +--- + src/bluetooth/osx/osxbtperipheralmanager.mm | 4 ++-- + src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm | 6 +++--- + src/bluetooth/qlowenergycontroller_osx.mm | 6 +++--- + 3 files changed, 8 insertions(+), 8 deletions(-) + +diff --git x/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm y/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm +index 1998340a..39f9808c 100644 +--- x/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm ++++ y/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm +@@ -340,7 +340,7 @@ bool qt_validate_value_range(const QLowEnergyCharacteristicData &data) + - (void)startAdvertising + { + state = PeripheralState::waitingForPowerOn; +- if (manager) ++ if (manager.data()) + [manager setDelegate:nil]; + manager.reset([[CBPeripheralManager alloc] initWithDelegate:self + queue:OSXBluetooth::qt_LE_queue()]); +@@ -405,7 +405,7 @@ bool qt_validate_value_range(const QLowEnergyCharacteristicData &data) + + - (void) addServicesToPeripheral + { +- Q_ASSERT(manager); ++ Q_ASSERT(manager.data()); + + if (nextServiceToAdd < services.size()) + [manager addService:services[nextServiceToAdd++]]; +diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm +index c50d546d..557785b4 100644 +--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm ++++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm +@@ -132,7 +132,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(con + + QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate() + { +- if (inquiryLE) { ++ if (inquiryLE.data()) { + // We want the LE scan to stop as soon as possible. + if (dispatch_queue_t leQueue = OSXBluetooth::qt_LE_queue()) { + // Local variable to be retained ... +@@ -151,7 +151,7 @@ bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const + if (stopPending) + return false; + +- return inquiryLE; ++ return !!inquiryLE.data(); + } + + void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods /*methods*/) +@@ -178,7 +178,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent + this, &QBluetoothDeviceDiscoveryAgentPrivate::LEdeviceFound); + + inquiryLE.reset([[LEDeviceInquiryObjC alloc] initWithNotifier:notifier.data()]); +- if (inquiryLE) ++ if (inquiryLE.data()) + notifier.take(); // Whatever happens next, inquiryLE is already the owner ... + + dispatch_queue_t leQueue(qt_LE_queue()); +diff --git x/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm y/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm +index 8bcdc22e..9aaee855 100644 +--- x/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm ++++ y/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm +@@ -165,7 +165,7 @@ QLowEnergyControllerPrivateOSX::QLowEnergyControllerPrivateOSX(QLowEnergyControl + #endif + } else { + centralManager.reset([[ObjCCentralManager alloc] initWith:notifier.data()]); +- if (!centralManager) { ++ if (!centralManager.data()) { + qCWarning(QT_BT_OSX) << "failed to initialize central manager"; + return; + } +@@ -200,9 +200,9 @@ QLowEnergyControllerPrivateOSX::~QLowEnergyControllerPrivateOSX() + bool QLowEnergyControllerPrivateOSX::isValid() const + { + #ifdef Q_OS_TVOS +- return centralManager; ++ return centralManager.data(); + #else +- return centralManager || peripheralManager; ++ return centralManager.data() || peripheralManager.data(); + #endif + } + +-- +2.22.0 + diff --git a/libs/patches/qt-Disable-qmltime-for-shared-build.patch b/libs/patches/qt-Disable-qmltime-for-shared-build.patch new file mode 100644 index 0000000..cd2f6ae --- /dev/null +++ b/libs/patches/qt-Disable-qmltime-for-shared-build.patch @@ -0,0 +1,32 @@ +From 9040ffde6a172f634249af58cd7f1bd3fcc33a00 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= +Date: Tue, 30 Jul 2019 10:42:57 +0200 +Subject: [PATCH] Disable qmltime for shared build + +=== BUILD TARGET qmltime OF PROJECT qmltime WITH CONFIGURATION Release === +Code Signing Error: Signing for "qmltime" requires a development team. Select a development team in the Signing & Capabilities editor. +Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 13.0' +** BUILD FAILED ** + +Fixes: QTBUG-67135 +--- + tools/tools.pro | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git x/qtdeclarative/tools/tools.pro y/qtdeclarative/tools/tools.pro +index d3ec38071..d431ee835 100644 +--- x/qtdeclarative/tools/tools.pro ++++ y/qtdeclarative/tools/tools.pro +@@ -20,8 +20,7 @@ qtConfig(thread):!android|android_app { + qtHaveModule(quick) { + !static: { + SUBDIRS += \ +- qmlscene \ +- qmltime ++ qmlscene + + qtConfig(regularexpression):qtConfig(process) { + SUBDIRS += \ +-- +2.22.0 + diff --git a/patches/qt-Disable-unused-imageformats.patch b/libs/patches/qt-Disable-unused-imageformats.patch similarity index 60% rename from patches/qt-Disable-unused-imageformats.patch rename to libs/patches/qt-Disable-unused-imageformats.patch index 4b88c99..24dae83 100644 --- a/patches/qt-Disable-unused-imageformats.patch +++ b/libs/patches/qt-Disable-unused-imageformats.patch @@ -1,17 +1,18 @@ -From e1c05843ae1609075807d5a789fc4e6cd8154520 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= -Date: Mon, 25 Sep 2017 14:10:56 +0200 -Subject: [PATCH] Disable unused imageformats +From 2674afcd19c8ce6a23a3c69bb9d41d82838adf86 Mon Sep 17 00:00:00 2001 +From: Lars Schmertmann +Date: Tue, 18 Jun 2019 07:47:39 +0200 +Subject: Disable unused imageformats +Change-Id: Iace4d751b615d1e54d94e9f8ab774ef39b111a79 --- src/plugins/imageformats/imageformats.pro | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git x/qtimageformats/src/plugins/imageformats/imageformats.pro y/qtimageformats/src/plugins/imageformats/imageformats.pro -index d6c59ee..f1fb6d0 100644 +index be1e20a..06feab3 100644 --- x/qtimageformats/src/plugins/imageformats/imageformats.pro +++ y/qtimageformats/src/plugins/imageformats/imageformats.pro -@@ -18,8 +18,7 @@ config_jasper { +@@ -22,8 +22,7 @@ qtConfig(jasper) { SUBDIRS += macjp2 } @@ -22,5 +23,5 @@ index d6c59ee..f1fb6d0 100644 webp -} -- -2.16.2 +2.21.0 diff --git a/patches/qt-Enable-debug-output-for-OpenSSL.patch b/libs/patches/qt-Enable-debug-output-for-OpenSSL.patch similarity index 100% rename from patches/qt-Enable-debug-output-for-OpenSSL.patch rename to libs/patches/qt-Enable-debug-output-for-OpenSSL.patch diff --git a/libs/patches/qt-Fix-build-with-no-feature-printer-on-macOS.patch b/libs/patches/qt-Fix-build-with-no-feature-printer-on-macOS.patch new file mode 100644 index 0000000..bfe757e --- /dev/null +++ b/libs/patches/qt-Fix-build-with-no-feature-printer-on-macOS.patch @@ -0,0 +1,159 @@ +From fdb01d0c01261008f9055339db55c6e9693f18c8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= +Date: Tue, 23 Jul 2019 12:44:45 +0200 +Subject: [PATCH 2/2] Fix build with -no-feature-printer on macOS + +Fixes: QTBUG-62675 +Change-Id: I3bfcd6d78c3124769ff8662941472333c795fdbe +--- + src/plugins/platforms/cocoa/cocoa.pro | 42 +++++++++++-------- + .../platforms/cocoa/qcocoanativeinterface.mm | 6 +-- + .../platforms/cocoa/qpaintengine_mac.mm | 4 ++ + 3 files changed, 32 insertions(+), 20 deletions(-) + +diff --git x/qtbase/src/plugins/platforms/cocoa/cocoa.pro y/qtbase/src/plugins/platforms/cocoa/cocoa.pro +index 083b7c1655..4249bae2b1 100644 +--- x/qtbase/src/plugins/platforms/cocoa/cocoa.pro ++++ y/qtbase/src/plugins/platforms/cocoa/cocoa.pro +@@ -20,8 +20,6 @@ SOURCES += main.mm \ + qcocoamenuloader.mm \ + qcocoahelpers.mm \ + qmultitouch_mac.mm \ +- qcocoaaccessibilityelement.mm \ +- qcocoaaccessibility.mm \ + qcocoacursor.mm \ + qcocoaclipboard.mm \ + qcocoadrag.mm \ +@@ -55,8 +53,6 @@ HEADERS += qcocoaintegration.h \ + qcocoamenuloader.h \ + qcocoahelpers.h \ + qmultitouch_mac_p.h \ +- qcocoaaccessibilityelement.h \ +- qcocoaaccessibility.h \ + qcocoacursor.h \ + qcocoaclipboard.h \ + qcocoadrag.h \ +@@ -81,15 +77,24 @@ qtConfig(vulkan) { + HEADERS += qcocoavulkaninstance.h + } + ++qtConfig(accessibility) { ++ SOURCES += qcocoaaccessibilityelement.mm \ ++ qcocoaaccessibility.mm ++ HEADERS += qcocoaaccessibilityelement.h \ ++ qcocoaaccessibility.h ++} ++ + RESOURCES += qcocoaresources.qrc + + LIBS += -framework AppKit -framework CoreServices -framework Carbon -framework IOKit -framework QuartzCore -framework CoreVideo -framework Metal -framework IOSurface -lcups + + QT += \ + core-private gui-private \ +- accessibility_support-private clipboard_support-private theme_support-private \ ++ clipboard_support-private theme_support-private \ + fontdatabase_support-private graphics_support-private + ++qtConfig(accessibility): QT += accessibility_support-private ++ + qtConfig(vulkan): QT += vulkan_support-private + + CONFIG += no_app_extension_api_only +@@ -97,17 +102,19 @@ CONFIG += no_app_extension_api_only + qtHaveModule(widgets) { + QT_FOR_CONFIG += widgets + +- SOURCES += \ +- qpaintengine_mac.mm \ +- qprintengine_mac.mm \ +- qcocoaprintersupport.mm \ +- qcocoaprintdevice.mm \ +- +- HEADERS += \ +- qpaintengine_mac_p.h \ +- qprintengine_mac_p.h \ +- qcocoaprintersupport.h \ +- qcocoaprintdevice.h \ ++ SOURCES += qpaintengine_mac.mm ++ HEADERS += qpaintengine_mac_p.h ++ ++ qtHaveModule(printsupport) { ++ SOURCES += \ ++ qprintengine_mac.mm \ ++ qcocoaprintersupport.mm \ ++ qcocoaprintdevice.mm ++ HEADERS += \ ++ qcocoaprintersupport.h \ ++ qcocoaprintdevice.h \ ++ qprintengine_mac_p.h ++ } + + qtConfig(colordialog) { + SOURCES += qcocoacolordialoghelper.mm +@@ -124,7 +131,8 @@ qtHaveModule(widgets) { + HEADERS += qcocoafontdialoghelper.h + } + +- QT += widgets-private printsupport-private ++ QT += widgets-private ++ qtHaveModule(printsupport): QT += printsupport-private + } + + OTHER_FILES += cocoa.json +diff --git x/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm y/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +index 7979e430ac..8c0bd1d158 100644 +--- x/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm ++++ y/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +@@ -59,7 +59,7 @@ + #include "qguiapplication.h" + #include + +-#ifndef QT_NO_WIDGETS ++#if !defined(QT_NO_WIDGETS) && defined(QT_PRINTSUPPORT_LIB) + #include "qcocoaprintersupport.h" + #include "qprintengine_mac_p.h" + #include +@@ -153,7 +153,7 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter + + QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport() + { +-#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) ++#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB) + return new QCocoaPrinterSupport(); + #else + qFatal("Printing is not supported when Qt is configured with -no-widgets"); +@@ -163,7 +163,7 @@ QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport() + + void *QCocoaNativeInterface::NSPrintInfoForPrintEngine(QPrintEngine *printEngine) + { +-#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) ++#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB) + QMacPrintEnginePrivate *macPrintEnginePriv = static_cast(printEngine)->d_func(); + if (macPrintEnginePriv->state == QPrinter::Idle && !macPrintEnginePriv->isPrintSessionInitialized()) + macPrintEnginePriv->initialize(); +diff --git x/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm y/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm +index 3677877538..00b2267f0d 100644 +--- x/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm ++++ y/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm +@@ -38,14 +38,18 @@ + ****************************************************************************/ + + #include "qpaintengine_mac_p.h" ++#if defined(QT_PRINTSUPPORT_LIB) + #include "qprintengine_mac_p.h" ++#endif + + #include + #include + #include + #include + #include ++#if defined(QT_PRINTSUPPORT_LIB) + #include ++#endif + #include + #include + #include +-- +2.22.0 + diff --git a/libs/patches/qt-Fix-build-with-no-feature-printer.patch b/libs/patches/qt-Fix-build-with-no-feature-printer.patch new file mode 100644 index 0000000..1bb8cfa --- /dev/null +++ b/libs/patches/qt-Fix-build-with-no-feature-printer.patch @@ -0,0 +1,54 @@ +From d8ac3ad8e4dfc26c6b2f4bb696d4ec8cc23d8cbf Mon Sep 17 00:00:00 2001 +From: Kai Koehne +Date: Tue, 9 Jul 2019 17:19:26 +0200 +Subject: [PATCH 1/2] Fix build with -no-feature-printer +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Skip printsupport subdirectory if printer feature is disabled. Also +removed android-embedded condition for the plugin: Such a +configuration should just disable the printer feature. + +Fixes: QTBUG-76941 +Change-Id: Ifca7d2311a575c1589ad6a87a775bd016591ee2c +Reviewed-by: Jörg Bornemann +--- + src/src.pro | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git x/qtbase/src/src.pro y/qtbase/src/src.pro +index 1c76a2e46f..b704ccd7ab 100644 +--- x/qtbase/src/src.pro ++++ y/qtbase/src/src.pro +@@ -1,8 +1,10 @@ + TEMPLATE = subdirs + +-QT_FOR_CONFIG += core-private gui-private ++QT_FOR_CONFIG += core-private gui-private printsupport ++ + include($$OUT_PWD/corelib/qtcore-config.pri) + include($$OUT_PWD/gui/qtgui-config.pri) ++include($$OUT_PWD/printsupport/qtprintsupport-config.pri) + + force_bootstrap|!qtConfig(commandlineparser): \ + CONFIG += force_dbus_bootstrap +@@ -221,11 +223,13 @@ qtConfig(gui) { + src_testlib.depends += src_gui # if QtGui is enabled, QtTest requires QtGui's headers + qtConfig(widgets) { + SUBDIRS += src_tools_uic src_widgets +- !android-embedded: SUBDIRS += src_printsupport + TOOLS += src_tools_uic + src_plugins.depends += src_widgets +- !android-embedded: src_plugins.depends += src_printsupport + src_testlib.depends += src_widgets # if QtWidgets is enabled, QtTest requires QtWidgets's headers ++ qtConfig(printer) { ++ SUBDIRS += src_printsupport ++ src_plugins.depends += src_printsupport ++ } + qtConfig(opengl) { + SUBDIRS += src_opengl + src_plugins.depends += src_opengl +-- +2.22.0 + diff --git a/libs/patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch b/libs/patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch new file mode 100644 index 0000000..1c35598 --- /dev/null +++ b/libs/patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch @@ -0,0 +1,25 @@ +From c69fef8cde15345cb53748456a2e7136258f42a4 Mon Sep 17 00:00:00 2001 +From: Lars Schmertmann +Date: Mon, 16 Apr 2018 08:34:42 +0200 +Subject: Remove Qt Labs specific plugins from the build + +Change-Id: I8f1444d4be2806e983979ceff73223c7452da5c2 +--- + src/imports/imports.pro | 1 - + 1 file changed, 1 deletion(-) + +diff --git x/qtquickcontrols2/src/imports/imports.pro y/qtquickcontrols2/src/imports/imports.pro +index e32bded7..2345616e 100644 +--- x/qtquickcontrols2/src/imports/imports.pro ++++ y/qtquickcontrols2/src/imports/imports.pro +@@ -1,7 +1,6 @@ + TEMPLATE = subdirs + SUBDIRS += \ + controls \ +- calendar \ + platform \ + templates + +-- +2.21.0 + diff --git a/libs/patches/qt-Remove-unused-plugins-from-the-build.patch b/libs/patches/qt-Remove-unused-plugins-from-the-build.patch new file mode 100644 index 0000000..b7495fa --- /dev/null +++ b/libs/patches/qt-Remove-unused-plugins-from-the-build.patch @@ -0,0 +1,37 @@ +From 0aa601d4cfdded1bd1c9924244795c4bb3d1b227 Mon Sep 17 00:00:00 2001 +From: Lars Schmertmann +Date: Mon, 16 Apr 2018 08:53:54 +0200 +Subject: Remove unused plugins from the build + +Change-Id: I780168aa4481c4bc6c9570effd80d34ce097d08a +--- + src/imports/imports.pro | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git x/qtdeclarative/src/imports/imports.pro y/qtdeclarative/src/imports/imports.pro +index 24e93fec1..aced2e417 100644 +--- x/qtdeclarative/src/imports/imports.pro ++++ y/qtdeclarative/src/imports/imports.pro +@@ -3,10 +3,8 @@ TEMPLATE = subdirs + SUBDIRS += \ + builtins \ + qtqml \ +- models \ +- labsmodels ++ models + +-qtConfig(thread): SUBDIRS += folderlistmodel + qtHaveModule(sql): SUBDIRS += localstorage + qtConfig(settings): SUBDIRS += settings + qtConfig(statemachine): SUBDIRS += statemachine +@@ -21,7 +19,6 @@ qtHaveModule(quick) { + wavefrontmesh + + qtHaveModule(testlib): SUBDIRS += testlib +- qtConfig(systemsemaphore): SUBDIRS += sharedimage + qtConfig(quick-particles): \ + SUBDIRS += particles + +-- +2.21.0 + diff --git a/libs/patches/qt-disable-designer.patch b/libs/patches/qt-disable-designer.patch new file mode 100644 index 0000000..dcec905 --- /dev/null +++ b/libs/patches/qt-disable-designer.patch @@ -0,0 +1,52 @@ +From 0b9dc418d21a54b748637f4853dbe340c2dbc33e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= +Date: Tue, 16 Oct 2018 17:55:29 +0200 +Subject: [PATCH] disable designer + +--- + src/linguist/linguist.pro | 9 --------- + src/src.pro | 7 ------- + 2 files changed, 16 deletions(-) + +diff --git x/qttools/src/linguist/linguist.pro y/qttools/src/linguist/linguist.pro +index 3f54c396..61903c08 100644 +--- x/qttools/src/linguist/linguist.pro ++++ y/qttools/src/linguist/linguist.pro +@@ -3,16 +3,7 @@ SUBDIRS = \ + lrelease \ + lupdate \ + lconvert +-!no-png:qtHaveModule(widgets) { +- QT_FOR_CONFIG += widgets +- qtConfig(process):qtConfig(pushbutton):qtConfig(toolbutton) { +- SUBDIRS += linguist +- } +-} + +-qtNomakeTools( \ +- linguist \ +-) + + equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe" + +diff --git x/qttools/src/src.pro y/qttools/src/src.pro +index 7a1af007..a9d4ac4b 100644 +--- x/qttools/src/src.pro ++++ y/qttools/src/src.pro +@@ -5,13 +5,6 @@ qtHaveModule(widgets) { + message("Some graphics-related tools are unavailable without PNG support") + } else { + QT_FOR_CONFIG += widgets +- qtConfig(pushbutton):qtConfig(toolbutton) { +- SUBDIRS = assistant \ +- designer \ +- pixeltool +- +- linguist.depends = designer +- } + qtHaveModule(quick):qtConfig(thread):qtConfig(toolbutton): SUBDIRS += distancefieldgenerator + } + } +-- +2.19.1 + diff --git a/libs/qt-install.qs b/libs/qt-install.qs new file mode 100644 index 0000000..bd00e2b --- /dev/null +++ b/libs/qt-install.qs @@ -0,0 +1,98 @@ +function Controller() +{ + installer.setMessageBoxAutomaticAnswer("OverwriteTargetDirectory", QMessageBox.Yes); + installer.setMessageBoxAutomaticAnswer("TargetDirectoryInUse", QMessageBox.Ok); + installer.setMessageBoxAutomaticAnswer("cancelInstallation", QMessageBox.Yes); +} + +Controller.prototype.WelcomePageCallback = function() +{ + console.log("Welcome"); + var widget = gui.currentPageWidget(); + gui.clickButton(buttons.NextButton); + widget.completeChanged.connect(function() + { + gui.clickButton(buttons.NextButton); + }); +} + +Controller.prototype.CredentialsPageCallback = function() +{ + console.log("Credentials"); + gui.clickButton(buttons.NextButton); +} + +Controller.prototype.IntroductionPageCallback = function() +{ + console.log("Introduction"); + gui.clickButton(buttons.NextButton); +} + +Controller.prototype.TargetDirectoryPageCallback = function() +{ + console.log("TargetDirectory: " + installer.value("TargetDir")); + gui.clickButton(buttons.NextButton); +} + +Controller.prototype.ComponentSelectionPageCallback = function() +{ + var packages = installer.value("Packages") + console.log("ComponentSelection: " + packages); + var widget = gui.currentPageWidget(); + widget.deselectAll(); + + packages = packages.split(","); + var components = installer.components(); + for (var i in packages) + { + pkg = packages[i]; + for (var j in components) + { + if (components[j].name === pkg) + { + widget.selectComponent(pkg); + break; + } + } + } + + gui.clickButton(buttons.NextButton); +} + +Controller.prototype.LicenseAgreementPageCallback = function() +{ + console.log("LicenseAgreement"); + var widget = gui.currentPageWidget(); + widget.AcceptLicenseRadioButton.setChecked(true); + gui.clickButton(buttons.NextButton); +} + +Controller.prototype.ReadyForInstallationPageCallback = function() +{ + console.log("ReadyForInstallation"); + gui.clickButton(buttons.CommitButton); +} + +Controller.prototype.PerformInstallationPageCallback = function() +{ + console.log("PerformInstallation"); + installer.installationFinished.connect(function() + { + gui.clickButton(buttons.NextButton); + }); +} + +Controller.prototype.FinishedPageCallback = function() +{ + console.log("Finished"); + var widget = gui.currentPageWidget(); + if (widget.LaunchQtCreatorCheckBoxForm) + { + widget.LaunchQtCreatorCheckBoxForm.launchQtCreatorCheckBox.setChecked(false); + } + else if (widget.RunItCheckBox) + { + widget.RunItCheckBox.setChecked(false); + } + gui.clickButton(buttons.FinishButton); +} diff --git a/libs/qt.cmake b/libs/qt.cmake new file mode 100644 index 0000000..e65cc78 --- /dev/null +++ b/libs/qt.cmake @@ -0,0 +1,95 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.11.0) + +########################################### +# Usage: cmake -DVERSION=5.10.0 -P qt.cmake +########################################### + +IF(NOT PACKAGES_DIR) + SET(PACKAGES_DIR $ENV{PACKAGES_DIR}) + IF(NOT PACKAGES_DIR) + SET(PACKAGES_DIR ${CMAKE_BINARY_DIR}) + ENDIF() +ENDIF() +MESSAGE(STATUS "Use PACKAGES_DIR: ${PACKAGES_DIR}") + +IF(NOT VERSION) + MESSAGE(FATAL_ERROR "Please provide Qt version (-DVERSION=5.10.0)") +ENDIF() + +FUNCTION(READ_FILE _filename _regex _out) + FILE(STRINGS "${CMAKE_BINARY_DIR}/${_filename}" content REGEX "${_regex}") + STRING(REGEX MATCH "${_regex}" _unused "${content}") + SET(${_out} ${CMAKE_MATCH_1} PARENT_SCOPE) +ENDFUNCTION() + +FUNCTION(FETCH_XML _url _out_url) + SET(_filename Updates.xml) + FILE(DOWNLOAD "${_url}/${_filename}" "${CMAKE_BINARY_DIR}/${_filename}") + + READ_FILE("${_filename}" "(.+)" archive) + READ_FILE("${_filename}" "(.+)" name) + READ_FILE("${_filename}" "([-|\.|0-9]+)<\/Version>" version) + + SET(${_out_url} "${_url}/${name}/${version}${archive}" PARENT_SCOPE) +ENDFUNCTION() + +FUNCTION(FETCH_HASH _url _hash_algo _out_hash) + STRING(TOLOWER "${_hash_algo}" suffix) + + GET_FILENAME_COMPONENT(filename "${_url}" NAME) + FILE(DOWNLOAD "${_url}.${suffix}" "${CMAKE_BINARY_DIR}/${filename}.${suffix}") + FILE(STRINGS ${CMAKE_BINARY_DIR}/${filename}.${suffix} content) + STRING(REGEX MATCH "^[a-z|0-9]+" hash "${content}") + + IF(NOT hash) + MESSAGE(FATAL_ERROR "Cannot fetch hash: ${_url}.${suffix}") + ENDIF() + SET(${_out_hash} ${hash} PARENT_SCOPE) +ENDFUNCTION() + +INCLUDE(FetchContent) +SET(FETCHCONTENT_QUIET FALSE) +SET(HASH_ALGO SHA256) +SET(QT_SDK_URL https://download.qt.io/online/qtsdkrepository) + + + +############################ OpenSSL +SET(OPENSSL_URL ${QT_SDK_URL}/linux_x64/desktop/tools_openssl_x64) +FETCH_XML("${OPENSSL_URL}" OPENSSL_URL) +FETCH_HASH("${OPENSSL_URL}" ${HASH_ALGO} OPENSSL_HASH) + +FetchContent_Populate(openssl + URL ${OPENSSL_URL} + URL_HASH SHA256=${OPENSSL_HASH} + DOWNLOAD_DIR ${PACKAGES_DIR} +) +FetchContent_GetProperties(openssl) + +FILE(COPY "${openssl_SOURCE_DIR}/OpenSSL/binary/" DESTINATION b/${VERSION}/gcc_64) + + + +############################ Qt +STRING(SUBSTRING ${VERSION} 0 4 SUBVERSION) +SET(QT_FILE qt-opensource-linux-x64-${VERSION}.run) +SET(QT_URL https://download.qt.io/archive/qt/${SUBVERSION}/${VERSION}/${QT_FILE}) + +FETCH_HASH("${QT_URL}" ${HASH_ALGO} QT_HASH) + +FetchContent_Populate(qt + URL ${QT_URL} + URL_HASH SHA256=${QT_HASH} + DOWNLOAD_DIR ${PACKAGES_DIR} + DOWNLOAD_NO_EXTRACT TRUE +) + + +SET(ENV{XDG_DATA_HOME} ${CMAKE_BINARY_DIR}) +SET(ENV{XDG_DATA_DIRS} ${CMAKE_BINARY_DIR}) +SET(ENV{HOME} ${CMAKE_BINARY_DIR}) +STRING(REPLACE "." "" PKGVERSION "${VERSION}") +GET_FILENAME_COMPONENT(source_dir "${CMAKE_SCRIPT_MODE_FILE}" DIRECTORY) +EXECUTE_PROCESS(COMMAND chmod +x ${PACKAGES_DIR}/${QT_FILE}) +EXECUTE_PROCESS(COMMAND ${PACKAGES_DIR}/${QT_FILE} --script ${source_dir}/qt-install.qs -v --platform minimal TargetDir=b Packages=qt.qt5.${PKGVERSION}.gcc_64) +EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink b/${VERSION}/gcc_64 dist) diff --git a/patches/openssl-DSA-mod-inverse-fix.patch b/patches/openssl-DSA-mod-inverse-fix.patch deleted file mode 100644 index b1e511a..0000000 --- a/patches/openssl-DSA-mod-inverse-fix.patch +++ /dev/null @@ -1,78 +0,0 @@ -From f1b12b8713a739f27d74e6911580b2e70aea2fa4 Mon Sep 17 00:00:00 2001 -From: Pauli -Date: Mon, 29 Oct 2018 06:50:51 +1000 -Subject: [PATCH 1/3] DSA mod inverse fix - -There is a side channel attack against the division used to calculate one of -the modulo inverses in the DSA algorithm. This change takes advantage of the -primality of the modulo and Fermat's little theorem to calculate the inverse -without leaking information. - -Thanks to Samuel Weiser for finding and reporting this. - -Reviewed-by: Matthias St. Pierre -Reviewed-by: Bernd Edlinger -(Merged from https://github.com/openssl/openssl/pull/7487) - -(cherry picked from commit 415c33563528667868c3c653a612e6fc8736fd79) ---- - crypto/dsa/dsa_ossl.c | 32 +++++++++++++++++++++++++++++++- - 1 file changed, 31 insertions(+), 1 deletion(-) - -diff --git x/crypto/dsa/dsa_ossl.c y/crypto/dsa/dsa_ossl.c -index ac1f65a51a..ca20811200 100644 ---- x/crypto/dsa/dsa_ossl.c -+++ y/crypto/dsa/dsa_ossl.c -@@ -23,6 +23,8 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); - static int dsa_init(DSA *dsa); - static int dsa_finish(DSA *dsa); -+static BIGNUM *dsa_mod_inverse_fermat(const BIGNUM *k, const BIGNUM *q, -+ BN_CTX *ctx); - - static DSA_METHOD openssl_dsa_meth = { - "OpenSSL DSA method", -@@ -259,7 +261,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, - goto err; - - /* Compute part of 's = inv(k) (m + xr) mod q' */ -- if ((kinv = BN_mod_inverse(NULL, k, dsa->q, ctx)) == NULL) -+ if ((kinv = dsa_mod_inverse_fermat(k, dsa->q, ctx)) == NULL) - goto err; - - BN_clear_free(*kinvp); -@@ -393,3 +395,31 @@ static int dsa_finish(DSA *dsa) - BN_MONT_CTX_free(dsa->method_mont_p); - return 1; - } -+ -+/* -+ * Compute the inverse of k modulo q. -+ * Since q is prime, Fermat's Little Theorem applies, which reduces this to -+ * mod-exp operation. Both the exponent and modulus are public information -+ * so a mod-exp that doesn't leak the base is sufficient. A newly allocated -+ * BIGNUM is returned which the caller must free. -+ */ -+static BIGNUM *dsa_mod_inverse_fermat(const BIGNUM *k, const BIGNUM *q, -+ BN_CTX *ctx) -+{ -+ BIGNUM *res = NULL; -+ BIGNUM *r, *e; -+ -+ if ((r = BN_new()) == NULL) -+ return NULL; -+ -+ BN_CTX_start(ctx); -+ if ((e = BN_CTX_get(ctx)) != NULL -+ && BN_set_word(r, 2) -+ && BN_sub(e, q, r) -+ && BN_mod_exp_mont(r, k, e, q, ctx, NULL)) -+ res = r; -+ else -+ BN_free(r); -+ BN_CTX_end(ctx); -+ return res; -+} --- -2.19.1 - diff --git a/patches/openssl-Ignore-disabled-ciphers.patch b/patches/openssl-Ignore-disabled-ciphers.patch deleted file mode 100644 index aab52cf..0000000 --- a/patches/openssl-Ignore-disabled-ciphers.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 2bcd8e6e1fe62ef5667c1bb8ad1bfe54a0aeaa99 Mon Sep 17 00:00:00 2001 -From: Matt Caswell -Date: Wed, 24 Oct 2018 10:11:00 +0100 -Subject: [PATCH] Ignore disabled ciphers when deciding if we are using ECC - -use_ecc() was always returning 1 because there are default (TLSv1.3) -ciphersuites that use ECC - even if those ciphersuites are disabled by -other options. - -Fixes #7471 ---- - ssl/statem/extensions_clnt.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git x/ssl/statem/extensions_clnt.c y/ssl/statem/extensions_clnt.c -index 4b5e6fe2b87..dcadc2a3231 100644 ---- x/ssl/statem/extensions_clnt.c -+++ y/ssl/statem/extensions_clnt.c -@@ -128,6 +128,10 @@ static int use_ecc(SSL *s) - for (i = 0; i < end; i++) { - const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i); - -+ /* Skip disabled ciphers */ -+ if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0)) -+ continue; -+ - alg_k = c->algorithm_mkey; - alg_a = c->algorithm_auth; - if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK)) - diff --git a/patches/openssl-Timing-vulnerability-in-DSA-signature-generation-CVE.patch b/patches/openssl-Timing-vulnerability-in-DSA-signature-generation-CVE.patch deleted file mode 100644 index a5d7611..0000000 --- a/patches/openssl-Timing-vulnerability-in-DSA-signature-generation-CVE.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 8abfe72e8c1de1b95f50aa0d9134803b4d00070f Mon Sep 17 00:00:00 2001 -From: Pauli -Date: Wed, 24 Oct 2018 07:42:46 +1000 -Subject: [PATCH 2/3] Timing vulnerability in DSA signature generation - (CVE-2018-0734). - -Avoid a timing attack that leaks information via a side channel that -triggers when a BN is resized. Increasing the size of the BNs -prior to doing anything with them suppresses the attack. - -Thanks due to Samuel Weiser for finding and locating this. - -Reviewed-by: Bernd Edlinger -(Merged from https://github.com/openssl/openssl/pull/7486) - -(cherry picked from commit a9cfb8c2aa7254a4aa6a1716909e3f8cb78049b6) ---- - crypto/dsa/dsa_ossl.c | 28 +++++++++++++++------------- - 1 file changed, 15 insertions(+), 13 deletions(-) - -diff --git x/crypto/dsa/dsa_ossl.c y/crypto/dsa/dsa_ossl.c -index ca20811200..2dd2d7489a 100644 ---- x/crypto/dsa/dsa_ossl.c -+++ y/crypto/dsa/dsa_ossl.c -@@ -9,6 +9,7 @@ - - #include - #include "internal/cryptlib.h" -+#include "internal/bn_int.h" - #include - #include - #include "dsa_locl.h" -@@ -180,9 +181,9 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, - { - BN_CTX *ctx = NULL; - BIGNUM *k, *kinv = NULL, *r = *rp; -- BIGNUM *l, *m; -+ BIGNUM *l; - int ret = 0; -- int q_bits; -+ int q_bits, q_words; - - if (!dsa->p || !dsa->q || !dsa->g) { - DSAerr(DSA_F_DSA_SIGN_SETUP, DSA_R_MISSING_PARAMETERS); -@@ -191,8 +192,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, - - k = BN_new(); - l = BN_new(); -- m = BN_new(); -- if (k == NULL || l == NULL || m == NULL) -+ if (k == NULL || l == NULL) - goto err; - - if (ctx_in == NULL) { -@@ -203,9 +203,9 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, - - /* Preallocate space */ - q_bits = BN_num_bits(dsa->q); -- if (!BN_set_bit(k, q_bits) -- || !BN_set_bit(l, q_bits) -- || !BN_set_bit(m, q_bits)) -+ q_words = bn_get_top(dsa->q); -+ if (!bn_wexpand(k, q_words + 2) -+ || !bn_wexpand(l, q_words + 2)) - goto err; - - /* Get random k */ -@@ -240,14 +240,17 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, - * small timing information leakage. We then choose the sum that is - * one bit longer than the modulus. - * -- * TODO: revisit the BN_copy aiming for a memory access agnostic -- * conditional copy. -+ * There are some concerns about the efficacy of doing this. More -+ * specificly refer to the discussion starting with: -+ * https://github.com/openssl/openssl/pull/7486#discussion_r228323705 -+ * The fix is to rework BN so these gymnastics aren't required. - */ - if (!BN_add(l, k, dsa->q) -- || !BN_add(m, l, dsa->q) -- || !BN_copy(k, BN_num_bits(l) > q_bits ? l : m)) -+ || !BN_add(k, l, dsa->q)) - goto err; - -+ BN_consttime_swap(BN_is_bit_set(l, q_bits), k, l, q_words + 2); -+ - if ((dsa)->meth->bn_mod_exp != NULL) { - if (!dsa->meth->bn_mod_exp(dsa, r, dsa->g, k, dsa->p, ctx, - dsa->method_mont_p)) -@@ -260,7 +263,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, - if (!BN_mod(r, r, dsa->q, ctx)) - goto err; - -- /* Compute part of 's = inv(k) (m + xr) mod q' */ -+ /* Compute part of 's = inv(k) (m + xr) mod q' */ - if ((kinv = dsa_mod_inverse_fermat(k, dsa->q, ctx)) == NULL) - goto err; - -@@ -275,7 +278,6 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, - BN_CTX_free(ctx); - BN_clear_free(k); - BN_clear_free(l); -- BN_clear_free(m); - return ret; - } - --- -2.19.1 - diff --git a/patches/openssl-Timing-vulnerability-in-ECDSA-signature-generation-C.patch b/patches/openssl-Timing-vulnerability-in-ECDSA-signature-generation-C.patch deleted file mode 100644 index 807236d..0000000 --- a/patches/openssl-Timing-vulnerability-in-ECDSA-signature-generation-C.patch +++ /dev/null @@ -1,44 +0,0 @@ -From b1d6d55ece1c26fa2829e2b819b038d7b6d692b4 Mon Sep 17 00:00:00 2001 -From: Pauli -Date: Fri, 26 Oct 2018 10:54:58 +1000 -Subject: [PATCH 3/3] Timing vulnerability in ECDSA signature generation - (CVE-2018-0735) - -Preallocate an extra limb for some of the big numbers to avoid a reallocation -that can potentially provide a side channel. - -Reviewed-by: Bernd Edlinger -(Merged from https://github.com/openssl/openssl/pull/7486) - -(cherry picked from commit 99540ec79491f59ed8b46b4edf130e17dc907f52) ---- - crypto/ec/ec_mult.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git x/crypto/ec/ec_mult.c y/crypto/ec/ec_mult.c -index 7e1b3650e7..0e0a5e1394 100644 ---- x/crypto/ec/ec_mult.c -+++ y/crypto/ec/ec_mult.c -@@ -206,8 +206,8 @@ int ec_scalar_mul_ladder(const EC_GROUP *group, EC_POINT *r, - */ - cardinality_bits = BN_num_bits(cardinality); - group_top = bn_get_top(cardinality); -- if ((bn_wexpand(k, group_top + 1) == NULL) -- || (bn_wexpand(lambda, group_top + 1) == NULL)) { -+ if ((bn_wexpand(k, group_top + 2) == NULL) -+ || (bn_wexpand(lambda, group_top + 2) == NULL)) { - ECerr(EC_F_EC_SCALAR_MUL_LADDER, ERR_R_BN_LIB); - goto err; - } -@@ -244,7 +244,7 @@ int ec_scalar_mul_ladder(const EC_GROUP *group, EC_POINT *r, - * k := scalar + 2*cardinality - */ - kbit = BN_is_bit_set(lambda, cardinality_bits); -- BN_consttime_swap(kbit, k, lambda, group_top + 1); -+ BN_consttime_swap(kbit, k, lambda, group_top + 2); - - group_top = bn_get_top(group->field); - if ((bn_wexpand(s->X, group_top) == NULL) --- -2.19.1 - diff --git a/patches/openssl-android-shlib_variant.patch b/patches/openssl-android-shlib_variant.patch deleted file mode 100644 index 2c8c7db..0000000 --- a/patches/openssl-android-shlib_variant.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- x/Configurations/15-android.conf -+++ y/Configurations/15-android.conf -@@ -136,6 +136,8 @@ - bn_ops => sub { android_ndk()->{bn_ops} }, - bin_cflags => "-pie", - enable => [ ], -+ shlib_variant => '-gov', -+ shared_extension => '.so', - }, - "android-arm" => { - ################################################################ diff --git a/patches/qt-Add-IsoDep-to-the-techList-on-Android.patch b/patches/qt-Add-IsoDep-to-the-techList-on-Android.patch deleted file mode 100644 index 4446aa2..0000000 --- a/patches/qt-Add-IsoDep-to-the-techList-on-Android.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 1d9b03157657e398a99f3f183bb7399b8905eb55 Mon Sep 17 00:00:00 2001 -From: Lars Schmertmann -Date: Wed, 22 Nov 2017 07:35:56 +0100 -Subject: Add IsoDep to the techList on Android - -Change-Id: I26c183c1344cd0d9323fcedde82347487eebdffb ---- - src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java | 1 + - 1 file changed, 1 insertion(+) - -diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java -index 345b87d3..a1ae5c37 100644 ---- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java -+++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java -@@ -127,6 +127,7 @@ public class QtNfc - filters[2] = new IntentFilter(); - filters[2].addAction(NfcAdapter.ACTION_TECH_DISCOVERED); - String[][] techList = new String[][]{ -+ {"android.nfc.tech.IsoDep"}, - {"android.nfc.tech.Ndef"}, - {"android.nfc.tech.NdefFormatable"} - }; --- -2.18.0 - diff --git a/patches/qt-Android-Fix-crash.patch b/patches/qt-Android-Fix-crash.patch deleted file mode 100644 index e9b4415..0000000 --- a/patches/qt-Android-Fix-crash.patch +++ /dev/null @@ -1,30 +0,0 @@ -From ca8779363fd30a1b8fd80ce4ebacc4741b041c76 Mon Sep 17 00:00:00 2001 -From: BogDan Vatra -Date: Tue, 20 Mar 2018 10:36:43 +0200 -Subject: [PATCH] Android: Fix crash - -Android doesn't like nor use RTLD_NODELETE - -Tasnk-number: QTBUG-64654 -Change-Id: I2d884bbf22a681cca592942eba84ba97327ba974 -Reviewed-by: Eskil Abrahamsen Blomfeldt ---- - src/corelib/plugin/qlibrary_unix.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git x/qtbase/src/corelib/plugin/qlibrary_unix.cpp y/qtbase/src/corelib/plugin/qlibrary_unix.cpp -index 23b9ad6434..296af9da7a 100644 ---- x/qtbase/src/corelib/plugin/qlibrary_unix.cpp -+++ y/qtbase/src/corelib/plugin/qlibrary_unix.cpp -@@ -155,7 +155,7 @@ bool QLibraryPrivate::load_sys() - // Do not unload the library during dlclose(). Consequently, the - // library's specific static variables are not reinitialized if the - // library is reloaded with dlopen() at a later time. --#ifdef RTLD_NODELETE -+#if defined(RTLD_NODELETE) && !defined(Q_OS_ANDROID) - if (loadHints & QLibrary::PreventUnloadHint) { - dlFlags |= RTLD_NODELETE; - } --- -2.19.1 - diff --git a/patches/qt-Android-fix-compile-with-NDK-r18.patch b/patches/qt-Android-fix-compile-with-NDK-r18.patch deleted file mode 100644 index 4fcd09e..0000000 --- a/patches/qt-Android-fix-compile-with-NDK-r18.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 48789f354ffe99aa28c08f55240e0b0a4deaa377 Mon Sep 17 00:00:00 2001 -From: BogDan Vatra -Date: Mon, 1 Oct 2018 15:46:46 +0300 -Subject: [PATCH] Android: fix compile with NDK r18+ - -In NDK r18, libc++.so was renamed to libc++.so.XX where XX is the Android -API level. - -[ChangeLog][Android] Fixed build issue with NDK r18+. - -Task-number: QTBUG-70631 -Task-number: QTBUG-70779 -Change-Id: Id0d2955648197e3054e3c69263b5a90d57964f6c ---- - mkspecs/android-clang/qmake.conf | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git x/qtbase/mkspecs/android-clang/qmake.conf y/qtbase/mkspecs/android-clang/qmake.conf -index b665000d00..1f5e690329 100644 ---- x/qtbase/mkspecs/android-clang/qmake.conf -+++ y/qtbase/mkspecs/android-clang/qmake.conf -@@ -40,7 +40,11 @@ QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \ - ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$$ANDROID_TARGET_ARCH - - ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so --ANDROID_CXX_STL_LIBS = -lc++ -+ -+exists($$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so): \ -+ ANDROID_CXX_STL_LIBS = -lc++ -+else: \ -+ ANDROID_CXX_STL_LIBS = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so.$$replace(ANDROID_PLATFORM, "android-", "") - - QMAKE_CFLAGS_OPTIMIZE_SIZE = -Oz - --- -2.19.0 - diff --git a/patches/qt-Introduce-reportError-to-fix-QMetaObject-invokeMethod.patch b/patches/qt-Introduce-reportError-to-fix-QMetaObject-invokeMethod.patch deleted file mode 100644 index 9967f2d..0000000 --- a/patches/qt-Introduce-reportError-to-fix-QMetaObject-invokeMethod.patch +++ /dev/null @@ -1,262 +0,0 @@ -From 9f00179a95ef729fa7871b4d408c76bc50e4eb4e Mon Sep 17 00:00:00 2001 -From: Lars Schmertmann -Date: Wed, 20 Jun 2018 11:56:19 +0200 -Subject: Introduce reportError to fix "QMetaObject::invokeMethod: No such method" - -Task-number: QTBUG-67958 -Change-Id: Ia5a21cb19f0318844ac436adcc3f0fff9a3185b5 -Reviewed-by: Alex Blasche ---- - src/nfc/qnearfieldtagtype1.cpp | 8 ++---- - src/nfc/qnearfieldtarget.cpp | 13 ++++++++++ - src/nfc/qnearfieldtarget.h | 2 ++ - src/nfc/qnearfieldtarget_android.cpp | 36 +++++++-------------------- - src/nfc/qnearfieldtarget_emulator.cpp | 20 ++++----------- - src/nfc/qnearfieldtarget_neard_p.h | 8 ++---- - 6 files changed, 33 insertions(+), 54 deletions(-) - -diff --git x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp -index 34f2c8b8..7f27fbe9 100644 ---- x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp -+++ y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp -@@ -440,9 +440,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::readNdefMessages() - if (d->m_readNdefMessageState == QNearFieldTagType1Private::NotReadingNdefMessage) { - d->progressToNextNdefReadMessageState(); - } else { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, NdefReadError), -- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId)); -+ reportError(QNearFieldTarget::NdefReadError, d->m_readNdefRequestId); - } - - return d->m_readNdefRequestId; -@@ -462,9 +460,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::writeNdefMessages(const QListm_ndefWriteMessages = messages; - d->progressToNextNdefWriteMessageState(); - } else { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, NdefWriteError), -- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId)); -+ reportError(QNearFieldTarget::NdefWriteError, d->m_readNdefRequestId); - } - - return d->m_writeNdefRequestId; -diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp -index e642824b..e9a6fa11 100644 ---- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp -+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp -@@ -530,4 +530,17 @@ bool QNearFieldTarget::handleResponse(const QNearFieldTarget::RequestId &id, - return true; - } - -+/*! -+ \since 5.12 -+ -+ Reports the \a error for the request \a id by appending the signal emission to the event queue. -+*/ -+void QNearFieldTarget::reportError(QNearFieldTarget::Error error, -+ const QNearFieldTarget::RequestId &id) -+{ -+ QMetaObject::invokeMethod(this, [this, error, id]() { -+ Q_EMIT this->error(error, id); -+ }, Qt::QueuedConnection); -+} -+ - QT_END_NAMESPACE -diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h -index e51960f7..868b52d5 100644 ---- x/qtconnectivity/src/nfc/qnearfieldtarget.h -+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h -@@ -153,6 +153,8 @@ protected: - Q_INVOKABLE virtual bool handleResponse(const QNearFieldTarget::RequestId &id, - const QByteArray &response); - -+ void reportError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id); -+ - Q_SIGNALS: - void disconnected(); - -diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp -index e656996e..78da6ac2 100644 ---- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp -+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp -@@ -147,25 +147,19 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages() - // Making sure that target is still in range - QNearFieldTarget::RequestId requestId(new QNearFieldTarget::RequestIdPrivate); - if (!m_intent.isValid()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId); - return requestId; - } - - // Getting Ndef technology object - if (!setTagTechnology({NDEFTECHNOLOGY})) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::UnsupportedError, requestId); - return requestId; - } - - // Connect - if (!connect()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId); - return requestId; - } - -@@ -174,9 +168,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages() - if (catchJavaExceptions()) - ndefMessage = QAndroidJniObject(); - if (!ndefMessage.isValid()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefReadError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::NdefReadError, requestId); - return requestId; - } - -@@ -249,9 +241,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma - // Connecting - QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate()); - if (!connect()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId); - return requestId; - } - -@@ -263,9 +253,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma - // Writing - QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba); - if (catchJavaExceptions()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::CommandError, requestId); - return requestId; - } - QByteArray result = jbyteArrayToQByteArray(myNewVal.object()); -@@ -315,9 +303,7 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QListSetByteArrayRegion(jba.object(), 0, ba.size(), reinterpret_cast(ba.data())); - QAndroidJniObject jmessage = QAndroidJniObject("android/nfc/NdefMessage", "([B)V", jba.object()); - if (catchJavaExceptions()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::UnknownError, requestId); - return requestId; - } - - // Writing - m_tagTech.callMethod(writeMethod, "(Landroid/nfc/NdefMessage;)V", jmessage.object()); - if (catchJavaExceptions()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefWriteError), -- Q_ARG(QNearFieldTarget::RequestId&, requestId)); -+ reportError(QNearFieldTarget::NdefWriteError, requestId); - return requestId; - } - -diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp -index 29b1f74d..030718cc 100644 ---- x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp -+++ y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp -@@ -82,9 +82,7 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command) - - // tag not in proximity - if (!tagMap.value(m_tag)) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError), -- Q_ARG(QNearFieldTarget::RequestId, id)); -+ reportError(QNearFieldTarget::TargetOutOfRangeError, id); - return id; - } - -@@ -93,17 +91,13 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command) - QByteArray response = m_tag->processCommand(command + char(crc & 0xff) + char(crc >> 8)); - - if (response.isEmpty()) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, NoResponseError), -- Q_ARG(QNearFieldTarget::RequestId, id)); -+ reportError(QNearFieldTarget::NoResponseError, id); - return id; - } - - // check crc - if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError), -- Q_ARG(QNearFieldTarget::RequestId, id)); -+ reportError(QNearFieldTarget::ChecksumMismatchError, id); - return id; - } - -@@ -152,9 +146,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command) - - // tag not in proximity - if (!tagMap.value(m_tag)) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError), -- Q_ARG(QNearFieldTarget::RequestId, id)); -+ reportError(QNearFieldTarget::TargetOutOfRangeError, id); - return id; - } - -@@ -168,9 +160,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command) - if (response.length() > 1) { - // check crc - if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError), -- Q_ARG(QNearFieldTarget::RequestId, id)); -+ reportError(QNearFieldTarget::ChecksumMismatchError, id); - return id; - } - -diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h -index 053df141..625cee67 100644 ---- x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h -+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h -@@ -359,9 +359,7 @@ private: - Q_EMIT this->requestCompleted(this->m_currentReadRequestId); - }, Qt::QueuedConnection); - } else { -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError), -- Q_ARG(QNearFieldTarget::RequestId, m_currentReadRequestId)); -+ this->reportError(QNearFieldTarget::UnknownError, m_currentReadRequestId); - } - - m_readRequested = false; -@@ -389,9 +387,7 @@ private: - reply.waitForFinished(); - if (reply.isError()) { - qCWarning(QT_NFC_NEARD) << "Error writing to NFC tag" << reply.error(); -- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection, -- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError), -- Q_ARG(QNearFieldTarget::RequestId, m_currentWriteRequestId)); -+ this->reportError(QNearFieldTarget::UnknownError, m_currentWriteRequestId); - } - - QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection); --- -2.19.1 - diff --git a/patches/qt-Linux-Remove-our-use-of-syscall-for-statx-2-and-rena.patch b/patches/qt-Linux-Remove-our-use-of-syscall-for-statx-2-and-rena.patch deleted file mode 100644 index 3b4a6cf..0000000 --- a/patches/qt-Linux-Remove-our-use-of-syscall-for-statx-2-and-rena.patch +++ /dev/null @@ -1,135 +0,0 @@ -From f65d3fbf6cc8a50a2b6b1b5632b9b9cf189054f0 Mon Sep 17 00:00:00 2001 -From: Thiago Macieira -Date: Wed, 19 Sep 2018 00:05:54 -0500 -Subject: [PATCH] Linux: Remove our use of syscall() for statx(2) and - renameat2(2) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Those system calls are present in glibc 2.28. Instead of using -syscall(3) to place the system calls directly, let's use only the glibc -functions. That also means we no longer accept ENOSYS from either -function, if they were detected in glibc. - -Change-Id: I44e7d800c68141bdaae0fffd1555b4b8fe63786b -Reviewed-by: Oswald Buddenhagen -Reviewed-by: Lars Knoll -Reviewed-by: Jüri Valdmann ---- - src/corelib/global/minimum-linux_p.h | 7 +++- - src/corelib/io/qfilesystemengine_unix.cpp | 45 ++--------------------- - 2 files changed, 9 insertions(+), 43 deletions(-) - -diff --git x/qtbase/src/corelib/global/minimum-linux_p.h y/qtbase/src/corelib/global/minimum-linux_p.h -index bad2488b4d..9c074e13ba 100644 ---- x/qtbase/src/corelib/global/minimum-linux_p.h -+++ y/qtbase/src/corelib/global/minimum-linux_p.h -@@ -75,9 +75,14 @@ QT_BEGIN_NAMESPACE - * - accept4 2.6.28 - * - renameat2 3.16 QT_CONFIG(renameat2) - * - getrandom 3.17 QT_CONFIG(getentropy) -+ * - statx 4.11 QT_CONFIG(statx) - */ - --#if QT_CONFIG(getentropy) -+#if QT_CONFIG(statx) -+# define MINLINUX_MAJOR 4 -+# define MINLINUX_MINOR 11 -+# define MINLINUX_PATCH 0 -+#elif QT_CONFIG(getentropy) - # define MINLINUX_MAJOR 3 - # define MINLINUX_MINOR 17 - # define MINLINUX_PATCH 0 -diff --git x/qtbase/src/corelib/io/qfilesystemengine_unix.cpp y/qtbase/src/corelib/io/qfilesystemengine_unix.cpp -index deb4a9f220..40e8f82a80 100644 ---- x/qtbase/src/corelib/io/qfilesystemengine_unix.cpp -+++ y/qtbase/src/corelib/io/qfilesystemengine_unix.cpp -@@ -1,6 +1,6 @@ - /**************************************************************************** - ** --** Copyright (C) 2017 Intel Corporation. -+** Copyright (C) 2018 Intel Corporation. - ** Copyright (C) 2016 The Qt Company Ltd. - ** Copyright (C) 2013 Samuel Gaist - ** Contact: https://www.qt.io/licensing/ -@@ -88,7 +88,6 @@ extern "C" NSString *NSTemporaryDirectory(); - - #if defined(Q_OS_LINUX) - # include --# include - # include - # include - -@@ -96,28 +95,6 @@ extern "C" NSString *NSTemporaryDirectory(); - #ifndef FICLONE - # define FICLONE _IOW(0x94, 9, int) - #endif -- --# if defined(Q_OS_ANDROID) --// renameat2() and statx() are disabled on Android because quite a few systems --// come with sandboxes that kill applications that make system calls outside a --// whitelist and several Android vendors can't be bothered to update the list. --# undef SYS_renameat2 --# undef SYS_statx --# undef STATX_BASIC_STATS --# else --# if !QT_CONFIG(renameat2) && defined(SYS_renameat2) --static int renameat2(int oldfd, const char *oldpath, int newfd, const char *newpath, unsigned flags) --{ return syscall(SYS_renameat2, oldfd, oldpath, newfd, newpath, flags); } --# endif -- --# if !QT_CONFIG(statx) && defined(SYS_statx) --# include --static int statx(int dirfd, const char *pathname, int flag, unsigned mask, struct statx *statxbuf) --{ return syscall(SYS_statx, dirfd, pathname, flag, mask, statxbuf); } --# elif !QT_CONFIG(statx) && !defined(SYS_statx) --# undef STATX_BASIC_STATS --# endif --# endif // !Q_OS_ANDROID - #endif - - #ifndef STATX_ALL -@@ -331,22 +308,8 @@ mtime(const T &statBuffer, int) - #ifdef STATX_BASIC_STATS - static int qt_real_statx(int fd, const char *pathname, int flags, struct statx *statxBuffer) - { --#ifdef Q_ATOMIC_INT8_IS_SUPPORTED -- static QBasicAtomicInteger statxTested = Q_BASIC_ATOMIC_INITIALIZER(0); --#else -- static QBasicAtomicInt statxTested = Q_BASIC_ATOMIC_INITIALIZER(0); --#endif -- -- if (statxTested.load() == -1) -- return -ENOSYS; -- - unsigned mask = STATX_BASIC_STATS | STATX_BTIME; - int ret = statx(fd, pathname, flags, mask, statxBuffer); -- if (ret == -1 && errno == ENOSYS) { -- statxTested.store(-1); -- return -ENOSYS; -- } -- statxTested.store(1); - return ret == -1 ? -errno : 0; - } - -@@ -1282,14 +1245,12 @@ bool QFileSystemEngine::renameFile(const QFileSystemEntry &source, const QFileSy - if (Q_UNLIKELY(srcPath.isEmpty() || tgtPath.isEmpty())) - return emptyFileEntryWarning(), false; - --#if defined(RENAME_NOREPLACE) && (QT_CONFIG(renameat2) || defined(SYS_renameat2)) -+#if defined(RENAME_NOREPLACE) && QT_CONFIG(renameat2) - if (renameat2(AT_FDCWD, srcPath, AT_FDCWD, tgtPath, RENAME_NOREPLACE) == 0) - return true; - -- // If we're using syscall(), check for ENOSYS; -- // if renameat2 came from libc, we don't accept ENOSYS. - // We can also get EINVAL for some non-local filesystems. -- if ((QT_CONFIG(renameat2) || errno != ENOSYS) && errno != EINVAL) { -+ if (errno != EINVAL) { - error = QSystemError(errno, QSystemError::StandardLibraryError); - return false; - } --- -2.20.1 - diff --git a/patches/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch b/patches/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch deleted file mode 100644 index f80031e..0000000 --- a/patches/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 78ab3263caae535a3bd31fa35c733ae2a28ca8ba Mon Sep 17 00:00:00 2001 -From: Kari Oikarinen -Date: Wed, 26 Sep 2018 10:29:14 +0300 -Subject: [PATCH] QObject: Fix isSignalConnected() when signals have been - disconnected -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The bitmap cache for the first 64 signals being connected was only set when the -connection is added. It was never unset when the connection was removed. - -Internal use of the connectedSignals bitmap is not hurt by it occasionally -saying a signal is connected even though it is not, since the purpose of those -checks is avoiding expensive operations that are not necessary if nothing is -connected to the signal. - -However, the public API using this cache meant that it also never spotted -signals being disconnected. This was not documented. Fix the behavior by only -using the cache if it is up to date. If it is not, use a slower path that gives -the correct answer. - -To avoid making disconnections and QObject destructions slower, the cache is -only updated to unset disconnected signals when new signal connections are -added. No extra work is done in the common case where signals are only -removed in the end of the QObject's lifetime. - -Fixes: QTBUG-32340 -Change-Id: Ieb6e498060157153cec60d9c8f1c33056993fda1 -Reviewed-by: Ville Voutilainen -Reviewed-by: Thiago Macieira -Reviewed-by: Olivier Goffart (Woboq GmbH) -Reviewed-by: Jędrzej Nowacki ---- - src/corelib/kernel/qobject.cpp | 34 ++++++++---- - .../corelib/kernel/qobject/tst_qobject.cpp | 53 +++++++++++++++++++ - 2 files changed, 76 insertions(+), 11 deletions(-) - -diff --git x/qtbase/src/corelib/kernel/qobject.cpp y/qtbase/src/corelib/kernel/qobject.cpp -index c6fe787e03..4532eacf0c 100644 ---- x/qtbase/src/corelib/kernel/qobject.cpp -+++ y/qtbase/src/corelib/kernel/qobject.cpp -@@ -418,6 +418,7 @@ void QObjectPrivate::cleanConnectionLists() - { - if (connectionLists->dirty && !connectionLists->inUse) { - // remove broken connections -+ bool allConnected = false; - for (int signal = -1; signal < connectionLists->count(); ++signal) { - QObjectPrivate::ConnectionList &connectionList = - (*connectionLists)[signal]; -@@ -429,11 +430,13 @@ void QObjectPrivate::cleanConnectionLists() - - QObjectPrivate::Connection **prev = &connectionList.first; - QObjectPrivate::Connection *c = *prev; -+ bool connected = false; // whether the signal is still connected somewhere - while (c) { - if (c->receiver) { - last = c; - prev = &c->nextConnectionList; - c = *prev; -+ connected = true; - } else { - QObjectPrivate::Connection *next = c->nextConnectionList; - *prev = next; -@@ -445,6 +448,14 @@ void QObjectPrivate::cleanConnectionLists() - // Correct the connection list's last pointer. - // As conectionList.last could equal last, this could be a noop - connectionList.last = last; -+ -+ if (!allConnected && !connected && signal >= 0 -+ && size_t(signal) < sizeof(connectedSignals) * 8) { -+ // This signal is no longer connected -+ connectedSignals[signal >> 5] &= ~(1 << (signal & 0x1f)); -+ } else if (signal == -1) { -+ allConnected = connected; -+ } - } - connectionLists->dirty = false; - } -@@ -2503,19 +2514,20 @@ bool QObject::isSignalConnected(const QMetaMethod &signal) const - - signalIndex += QMetaObjectPrivate::signalOffset(signal.mobj); - -- if (signalIndex < sizeof(d->connectedSignals) * 8) -+ QMutexLocker locker(signalSlotLock(this)); -+ if (!d->connectionLists) -+ return false; -+ -+ if (signalIndex < sizeof(d->connectedSignals) * 8 && !d->connectionLists->dirty) - return d->isSignalConnected(signalIndex); - -- QMutexLocker locker(signalSlotLock(this)); -- if (d->connectionLists) { -- if (signalIndex < uint(d->connectionLists->count())) { -- const QObjectPrivate::Connection *c = -- d->connectionLists->at(signalIndex).first; -- while (c) { -- if (c->receiver) -- return true; -- c = c->nextConnectionList; -- } -+ if (signalIndex < uint(d->connectionLists->count())) { -+ const QObjectPrivate::Connection *c = -+ d->connectionLists->at(signalIndex).first; -+ while (c) { -+ if (c->receiver) -+ return true; -+ c = c->nextConnectionList; - } - } - return false; -diff --git x/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp y/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp -index ec57522f48..20ce905265 100644 ---- x/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp -+++ y/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp -@@ -104,6 +104,7 @@ private slots: - void deleteQObjectWhenDeletingEvent(); - void overloads(); - void isSignalConnected(); -+ void isSignalConnectedAfterDisconnection(); - void qMetaObjectConnect(); - void qMetaObjectDisconnectOne(); - void sameName(); -@@ -3843,6 +3844,58 @@ void tst_QObject::isSignalConnected() - QVERIFY(!o.isSignalConnected(QMetaMethod())); - } - -+void tst_QObject::isSignalConnectedAfterDisconnection() -+{ -+ ManySignals o; -+ const QMetaObject *meta = o.metaObject(); -+ -+ const QMetaMethod sig00 = meta->method(meta->indexOfSignal("sig00()")); -+ QVERIFY(!o.isSignalConnected(sig00)); -+ QObject::connect(&o, &ManySignals::sig00, qt_noop); -+ QVERIFY(o.isSignalConnected(sig00)); -+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig00, 0, 0)); -+ QVERIFY(!o.isSignalConnected(sig00)); -+ -+ const QMetaMethod sig69 = meta->method(meta->indexOfSignal("sig69()")); -+ QVERIFY(!o.isSignalConnected(sig69)); -+ QObject::connect(&o, &ManySignals::sig69, qt_noop); -+ QVERIFY(o.isSignalConnected(sig69)); -+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig69, 0, 0)); -+ QVERIFY(!o.isSignalConnected(sig69)); -+ -+ { -+ ManySignals o2; -+ QObject::connect(&o, &ManySignals::sig00, &o2, &ManySignals::sig00); -+ QVERIFY(o.isSignalConnected(sig00)); -+ // o2 is destructed -+ } -+ QVERIFY(!o.isSignalConnected(sig00)); -+ -+ const QMetaMethod sig01 = meta->method(meta->indexOfSignal("sig01()")); -+ QObject::connect(&o, &ManySignals::sig00, qt_noop); -+ QObject::connect(&o, &ManySignals::sig01, qt_noop); -+ QObject::connect(&o, &ManySignals::sig69, qt_noop); -+ QVERIFY(o.isSignalConnected(sig00)); -+ QVERIFY(o.isSignalConnected(sig01)); -+ QVERIFY(o.isSignalConnected(sig69)); -+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig69, 0, 0)); -+ QVERIFY(o.isSignalConnected(sig00)); -+ QVERIFY(o.isSignalConnected(sig01)); -+ QVERIFY(!o.isSignalConnected(sig69)); -+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig00, 0, 0)); -+ QVERIFY(!o.isSignalConnected(sig00)); -+ QVERIFY(o.isSignalConnected(sig01)); -+ QVERIFY(!o.isSignalConnected(sig69)); -+ QObject::connect(&o, &ManySignals::sig69, qt_noop); -+ QVERIFY(!o.isSignalConnected(sig00)); -+ QVERIFY(o.isSignalConnected(sig01)); -+ QVERIFY(o.isSignalConnected(sig69)); -+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig01, 0, 0)); -+ QVERIFY(!o.isSignalConnected(sig00)); -+ QVERIFY(!o.isSignalConnected(sig01)); -+ QVERIFY(o.isSignalConnected(sig69)); -+} -+ - void tst_QObject::qMetaObjectConnect() - { - SenderObject *s = new SenderObject; --- -2.19.1 - diff --git a/patches/qt-QUrl-Support-IPv6-addresses-with-zone-id.patch b/patches/qt-QUrl-Support-IPv6-addresses-with-zone-id.patch deleted file mode 100644 index bd5616f..0000000 --- a/patches/qt-QUrl-Support-IPv6-addresses-with-zone-id.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 2e492dc6a6cf9e73a04f65e133ea4e97324a68da Mon Sep 17 00:00:00 2001 -From: Robbert Proost -Date: Thu, 18 Jan 2018 09:52:49 +0100 -Subject: [PATCH] QUrl: Support IPv6 addresses with zone id - -Task-number: QTBUG-25550 -Change-Id: I37ec02b655abe2779aa11945e20550ce00e43723 ---- - src/corelib/io/qurl.cpp | 63 ++++++++++++++++--------- - tests/auto/corelib/io/qurl/tst_qurl.cpp | 52 ++++++++++++++++++++ - 2 files changed, 92 insertions(+), 23 deletions(-) - -diff --git x/qtbase/src/corelib/io/qurl.cpp y/qtbase/src/corelib/io/qurl.cpp -index 4587b9fcd6..e2a66c8459 100644 ---- x/qtbase/src/corelib/io/qurl.cpp -+++ y/qtbase/src/corelib/io/qurl.cpp -@@ -1203,16 +1203,18 @@ inline void QUrlPrivate::setQuery(const QString &value, int from, int iend) - - inline void QUrlPrivate::appendHost(QString &appendTo, QUrl::FormattingOptions options) const - { -- // EncodeUnicode is the only flag that matters -- if ((options & QUrl::FullyDecoded) == QUrl::FullyDecoded) -- options = 0; -- else -- options &= QUrl::EncodeUnicode; - if (host.isEmpty()) - return; - if (host.at(0).unicode() == '[') { -- // IPv6Address and IPvFuture address never require any transformation -- appendTo += host; -+ // IPv6 addresses might contain a zone-id which needs to be recoded -+ QString hostInCorrectFormat; -+ if (options != 0) -+ qt_urlRecode(hostInCorrectFormat, host.constBegin(), host.constEnd(), options, 0); -+ -+ if (hostInCorrectFormat.isEmpty()) -+ hostInCorrectFormat = host; -+ -+ appendTo += hostInCorrectFormat; - } else { - // this is either an IPv4Address or a reg-name - // if it is a reg-name, it is already stored in Unicode form -@@ -1278,31 +1280,46 @@ static const QChar *parseIpFuture(QString &host, const QChar *begin, const QChar - // ONLY the IPv6 address is parsed here, WITHOUT the brackets - static const QChar *parseIp6(QString &host, const QChar *begin, const QChar *end, QUrl::ParsingMode mode) - { -- QIPAddressUtils::IPv6Address address; -- const QChar *ret = QIPAddressUtils::parseIp6(address, begin, end); -- if (ret) { -- // this struct is kept in automatic storage because it's only 4 bytes -+ QString decoded; -+ if (mode == QUrl::TolerantMode) { - const ushort decodeColon[] = { decode(':'), 0 }; -+ if (qt_urlRecode(decoded, begin, end, QUrl::ComponentFormattingOption::PrettyDecoded, decodeColon) == 0) { -+ decoded = QString(begin, end-begin); -+ } -+ } -+ else { -+ decoded = QString(begin, end-begin); -+ } - -- // IPv6 failed parsing, check if it was a percent-encoded character in -- // the middle and try again -- QString decoded; -- if (mode == QUrl::TolerantMode && qt_urlRecode(decoded, begin, end, 0, decodeColon)) { -- // recurse -- // if the parsing fails again, the qt_urlRecode above will return 0 -- ret = parseIp6(host, decoded.constBegin(), decoded.constEnd(), mode); -+ const QLatin1String zoneIdIdentifier("%25"); -+ QIPAddressUtils::IPv6Address address; -+ QString zoneId; -+ -+ const QChar *endBeforeZoneId = decoded.constEnd(); -+ -+ int zoneIdPosition = decoded.indexOf(zoneIdIdentifier); -+ if ((zoneIdPosition != -1) && (decoded.lastIndexOf(zoneIdIdentifier) == zoneIdPosition)) { -+ zoneId = decoded.mid(zoneIdPosition + zoneIdIdentifier.size()); -+ endBeforeZoneId = decoded.constBegin() + zoneIdPosition; - -- // we can't return ret, otherwise it would be dangling -- return ret ? end : 0; -+ if (zoneId.isEmpty() == true) { -+ return end; - } -+ } - -- // no transformation, nothing to re-parse -- return ret; -+ const QChar *ret = QIPAddressUtils::parseIp6(address, decoded.constBegin(), endBeforeZoneId); -+ if (ret) { -+ return begin + (ret - decoded.constBegin()); - } - -- host.reserve(host.size() + (end - begin)); -+ host.reserve(host.size() + (decoded.constEnd() - decoded.constBegin())); - host += QLatin1Char('['); - QIPAddressUtils::toString(host, address); -+ -+ if (zoneId.isEmpty() == false) { -+ host += zoneIdIdentifier; -+ host += zoneId; -+ } - host += QLatin1Char(']'); - return 0; - } --- -2.18.0 - diff --git a/patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch b/patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch deleted file mode 100644 index 0c7dea9..0000000 --- a/patches/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 2e80dec588c21cfeb086912cf6c6a011c6b6b896 Mon Sep 17 00:00:00 2001 -From f3e9a6e63740d922577d331f6cbe57fd43888472 Mon Sep 17 00:00:00 2001 -From: Lars Schmertmann -Date: Mon, 16 Apr 2018 08:34:42 +0200 -Subject: Remove Qt Labs specific plugins from the build ---- - qtquickcontrols2/src/imports/imports.pro | 2 -- - qtdeclarative/src/imports/imports.pro | 4 ---- - 2 file changed, 6 deletions(-) - -diff --git x/qtquickcontrols2/src/imports/imports.pro y/qtquickcontrols2/src/imports/imports.pro -index e32bded7..944c9292 100644 ---- x/qtquickcontrols2/src/imports/imports.pro -+++ y/qtquickcontrols2/src/imports/imports.pro -@@ -1,8 +1,6 @@ - TEMPLATE = subdirs - SUBDIRS += \ - controls \ -- calendar \ -- platform \ - templates - - SUBDIRS += \ -diff --git x/qtdeclarative/src/imports/imports.pro y/qtdeclarative/src/imports/imports.pro -index 5d7e43488..33390bc42 100644 ---- x/qtdeclarative/src/imports/imports.pro -+++ y/qtdeclarative/src/imports/imports.pro -@@ -5,7 +5,6 @@ - SUBDIRS += \ - builtins \ - qtqml \ -- folderlistmodel \ - models - - qtHaveModule(sql): SUBDIRS += localstorage -@@ -14,13 +13,11 @@ - - qtHaveModule(quick) { - SUBDIRS += \ -- handlers \ - layouts \ - qtquick2 \ - window - - qtHaveModule(testlib): SUBDIRS += testlib -- qtConfig(systemsemaphore): SUBDIRS += sharedimage - qtConfig(quick-particles): \ - SUBDIRS += particles - --- -2.16.2 - diff --git a/patches/qt-Use-QUrl-toString-when-forming-the-Host-header.patch b/patches/qt-Use-QUrl-toString-when-forming-the-Host-header.patch deleted file mode 100644 index f9b4ab3..0000000 --- a/patches/qt-Use-QUrl-toString-when-forming-the-Host-header.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 4ab766863d88a491f91fa81731dbde75d0122d89 Mon Sep 17 00:00:00 2001 -From: Timur Pocheptsov -Date: Mon, 14 May 2018 12:41:23 +0200 -Subject: [PATCH] Use QUrl::toString() when forming the 'Host' header -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This allows to correctly use IPv6 literals and also -deals (correctly) with a port (if it's set at all). - -Task-number: QTBUG-68245 -Change-Id: I6d29543887c4ab58d70f0970a6f0a1b822c301df -Reviewed-by: Thiago Macieira -Reviewed-by: Mårten Nordheim ---- - src/websockets/qwebsocket_p.cpp | 22 ++++++++++++---------- - 1 file changed, 12 insertions(+), 10 deletions(-) - -diff --git x/qtwebsockets/src/websockets/qwebsocket_p.cpp y/qtwebsockets/src/websockets/qwebsocket_p.cpp -index d233b66..9b27ad2 100644 ---- x/qtwebsockets/src/websockets/qwebsocket_p.cpp -+++ y/qtwebsockets/src/websockets/qwebsocket_p.cpp -@@ -1108,16 +1108,18 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS - headers << qMakePair(QString::fromLatin1(key), - QString::fromLatin1(m_request.rawHeader(key))); - -- const QString handshake = -- createHandShakeRequest(m_resourceName, -- m_request.url().host() -- % QStringLiteral(":") -- % QString::number(m_request.url().port(port)), -- origin(), -- QString(), -- QString(), -- m_key, -- headers); -+ const auto format = QUrl::RemoveScheme | QUrl::RemoveUserInfo -+ | QUrl::RemovePath | QUrl::RemoveQuery -+ | QUrl::RemoveFragment | QUrl::RemovePort; -+ const QString host = m_request.url().toString(format).mid(2); -+ const QString handshake = createHandShakeRequest(m_resourceName, -+ host % QStringLiteral(":") -+ % QString::number(m_request.url().port(port)), -+ origin(), -+ QString(), -+ QString(), -+ m_key, -+ headers); - if (handshake.isEmpty()) { - m_pSocket->abort(); - Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError); --- -2.19.0 - diff --git a/patches/qt-Use-user-provided-session-data-if-available.patch b/patches/qt-Use-user-provided-session-data-if-available.patch deleted file mode 100644 index 30b05fb..0000000 --- a/patches/qt-Use-user-provided-session-data-if-available.patch +++ /dev/null @@ -1,33 +0,0 @@ -From bbd5c6feea8632c8321d3cd7a16a262d90f856e8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= -Date: Thu, 22 Nov 2018 11:44:39 +0100 -Subject: [PATCH] Use user provided session data if available - -If a user uses persistent sessions and provide the session to -Qt again with setSessionTicket it should be used with a higher -priority. -This is also a work-around for QTBUG-71967. - -Change-Id: I7351b669b6de2863136d6106dc4f73fa5c7b8c51 ---- - src/network/ssl/qsslcontext_openssl.cpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git x/qtbase/src/network/ssl/qsslcontext_openssl.cpp y/qtbase/src/network/ssl/qsslcontext_openssl.cpp -index 41b759364b..24dbc9ecbc 100644 ---- x/qtbase/src/network/ssl/qsslcontext_openssl.cpp -+++ y/qtbase/src/network/ssl/qsslcontext_openssl.cpp -@@ -134,8 +134,9 @@ SSL* QSslContext::createSsl() - SSL* ssl = q_SSL_new(ctx); - q_SSL_clear(ssl); - -- if (!session && !sessionASN1().isEmpty() -+ if (!m_sessionASN1.isEmpty() - && !sslConfiguration.testSslOption(QSsl::SslOptionDisableSessionPersistence)) { -+ q_SSL_SESSION_free(session); - const unsigned char *data = reinterpret_cast(m_sessionASN1.constData()); - session = q_d2i_SSL_SESSION(0, &data, m_sessionASN1.size()); // refcount is 1 already, set by function above - } --- -2.19.1 - diff --git a/patches/qt-Work-Around-FreeBSD-v12-build.patch b/patches/qt-Work-Around-FreeBSD-v12-build.patch deleted file mode 100644 index 46be5b2..0000000 --- a/patches/qt-Work-Around-FreeBSD-v12-build.patch +++ /dev/null @@ -1,30 +0,0 @@ -From ec00fb42be3206956fd9ac7518018b47652f2bb8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= -Date: Fri, 28 Dec 2018 16:12:16 +0100 -Subject: [PATCH] Work-Around FreeBSD v12 build - -https://bugreports.qt.io/browse/QTBUG-72775 - -Change-Id: Ib39e8e488c2abd0321e91acd15614085c7e2156b ---- - src/network/kernel/qnetworkinterface_unix.cpp | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git x/qtbase/src/network/kernel/qnetworkinterface_unix.cpp y/qtbase/src/network/kernel/qnetworkinterface_unix.cpp -index d69fc47667..eebca77189 100644 ---- x/qtbase/src/network/kernel/qnetworkinterface_unix.cpp -+++ y/qtbase/src/network/kernel/qnetworkinterface_unix.cpp -@@ -463,8 +463,10 @@ static QNetworkInterface::InterfaceType probeIfType(int socket, int iftype, stru - case IFM_ETHER: - return QNetworkInterface::Ethernet; - -+#ifndef Q_OS_FREEBSD - case IFM_FDDI: - return QNetworkInterface::Fddi; -+#endif - - case IFM_IEEE80211: - return QNetworkInterface::Ieee80211; --- -2.20.1 - diff --git a/patches/qt-configure-detect-fxc.exe-more-thoroughly.patch b/patches/qt-configure-detect-fxc.exe-more-thoroughly.patch deleted file mode 100644 index 831bd65..0000000 --- a/patches/qt-configure-detect-fxc.exe-more-thoroughly.patch +++ /dev/null @@ -1,132 +0,0 @@ -From d64ee0c6be7e9ce672382709d8ea38e30d1d5e0d Mon Sep 17 00:00:00 2001 -From: Oliver Wolff -Date: Tue, 12 Dec 2017 20:02:55 +0100 -Subject: configure: detect fxc.exe more thoroughly - -When building ANGLE, we need the shader compiler (fxc.exe), which is not -shipped with MinGW. Previously, we required an installed DirectX SDK. -For Windows versions >= 8, the DX SDK is also part of the Windows Kit, -so we also allow the user to specify the location of the Windows Kit. -We also detect fxc on 64-bit hosts now, and in newer SDK versions which -version the binary directory. - -The detected binary is now exported by configure, so the ANGLE project -file does not need to duplicate the logic anymore. - -Task-number: QTBUG-52487 -Change-Id: I41a17992909041dd84291b69498195cc8b8fab8a ---- - src/angle/src/common/common.pri | 16 +--------------- - src/gui/configure.json | 11 +++-------- - src/gui/configure.pri | 31 +++++++++++++++++++++++++++---- - 3 files changed, 31 insertions(+), 27 deletions(-) - -diff --git x/qtbase/src/angle/src/common/common.pri y/qtbase/src/angle/src/common/common.pri -index c1fad14951..2c0af02b58 100644 ---- x/qtbase/src/angle/src/common/common.pri -+++ y/qtbase/src/angle/src/common/common.pri -@@ -21,20 +21,6 @@ lib_replace.replace = \$\$\$\$[QT_INSTALL_LIBS] - lib_replace.CONFIG = path - QMAKE_PRL_INSTALL_REPLACE += lib_replace - --# DirectX is included in the Windows 8 Kit, but everything else requires the DX SDK. --winrt|msvc { -- FXC = fxc.exe --} else { -- DX_DIR = $$(DXSDK_DIR) -- isEmpty(DX_DIR) { -- error("Cannot determine DirectX SDK location. Please set DXSDK_DIR environment variable.") -- } -- -- equals(QMAKE_TARGET.arch, x86_64) { -- FXC = \"$${DX_DIR}Utilities\\bin\\x64\\fxc.exe\" -- } else { -- FXC = \"$${DX_DIR}Utilities\\bin\\x86\\fxc.exe\" -- } --} -+FXC = $$shell_quote($$shell_path($$QMAKE_FXC_LOCATION)) - - static: DEFINES *= LIBGLESV2_EXPORT_H_ ANGLE_EXPORT= -diff --git x/qtbase/src/gui/configure.json y/qtbase/src/gui/configure.json -index 4145ceddf6..2a96bc5a75 100644 ---- x/qtbase/src/gui/configure.json -+++ y/qtbase/src/gui/configure.json -@@ -702,10 +702,6 @@ - } - }, - -- "testTypeAliases": { -- "files": [ "fxc" ] -- }, -- - "tests": { - "angle_d3d11_qdtd": { - "label": "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT", -@@ -721,9 +717,7 @@ - "fxc": { - "label": "Direct3D Shader Compiler", - "type": "fxc", -- "files": [ -- "fxc.exe" -- ] -+ "log": "value" - }, - "egl-x11": { - "label": "EGL on X11", -@@ -976,7 +970,8 @@ - "condition": "features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))", - "output": [ - "publicFeature", -- { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" } -+ { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" }, -+ { "type": "varAssign", "name": "QMAKE_FXC_LOCATION", "value": "tests.fxc.value" } - ] - }, - "angle_d3d11_qdtd": { -diff --git x/qtbase/src/gui/configure.pri y/qtbase/src/gui/configure.pri -index f53a93063c..bc27a756a3 100644 ---- x/qtbase/src/gui/configure.pri -+++ y/qtbase/src/gui/configure.pri -@@ -20,12 +20,35 @@ defineTest(qtConfLibrary_freetype) { - # DXSDK_DIR variable. Starting with Windows Kit 8, it is included in - # the Windows SDK. - defineTest(qtConfTest_fxc) { -- dxdir = $$getenv("DXSDK_DIR") -- !isEmpty(dxdir) { -- EXTRA_PATH += $$dxdir/Utilities/bin/x86 -+ !mingw { -+ fxc = $$qtConfFindInPath("fxc.exe") -+ } else { -+ equals(QMAKE_HOST.arch, x86_64): \ -+ fns = x64/fxc.exe -+ else: \ -+ fns = x86/fxc.exe -+ dxdir = $$(DXSDK_DIR) -+ !isEmpty(dxdir) { -+ fxc = $$dxdir/Utilities/bin/$$fns -+ } else { -+ winkitbindir = $$(WindowsSdkVerBinPath) -+ !isEmpty(winkitbindir) { -+ fxc = $$winkitbindir/$$fns -+ } else { -+ winkitdir = $$(WindowsSdkDir) -+ !isEmpty(winkitdir): \ -+ fxc = $$winkitdir/bin/$$fns -+ } -+ } - } - -- qtConfTest_files($${1}): return(true) -+ !isEmpty(fxc):exists($$fxc) { -+ $${1}.value = $$clean_path($$fxc) -+ export($${1}.value) -+ $${1}.cache += value -+ export($${1}.cache) -+ return(true) -+ } - return(false) - } - --- -2.17.0 - diff --git a/patches/qt-configure-refactor-directx-checks.patch b/patches/qt-configure-refactor-directx-checks.patch deleted file mode 100644 index 0de8fb3..0000000 --- a/patches/qt-configure-refactor-directx-checks.patch +++ /dev/null @@ -1,442 +0,0 @@ -From 6b73c48ac35de82b95b74f8dd614fe282209cd61 Mon Sep 17 00:00:00 2001 -From: Oswald Buddenhagen -Date: Tue, 12 Dec 2017 12:21:16 +0100 -Subject: configure: refactor directx checks - -properly atomize the libraries and express their dependencies, and -adjust the project files accordingly. - -note that we don't try to use any additional paths, as all SDKs we -currently support have built-in directx 11 support: -- msvc2013 comes with win sdk 8.1; that is also used for win7 targets -- mingw-64 5.3 (though this one is missing fxc, which is why the code - path for using an external sdk for that remains) - -Change-Id: Ib44e389ef46567308293c2bbcad20a96e8ef70c7 ---- - src/angle/src/common/gles_common.pri | 6 +- - src/angle/src/libEGL/libEGL.pro | 5 +- - src/gui/configure.json | 176 ++++++++++++++---- - src/gui/configure.pri | 19 +- - .../fontdatabases/windows/windows.pri | 9 +- - .../fontdatabases/winrt/winrt.pri | 4 +- - src/plugins/platforms/direct2d/direct2d.pro | 3 +- - src/plugins/platforms/platforms.pro | 6 +- - src/plugins/platforms/windows/windows.pri | 2 + - src/plugins/platforms/winrt/winrt.pro | 3 +- - 10 files changed, 168 insertions(+), 65 deletions(-) - -diff --git x/qtbase/src/angle/src/common/gles_common.pri y/qtbase/src/angle/src/common/gles_common.pri -index 82d38a62e6..927949d758 100644 ---- x/qtbase/src/angle/src/common/gles_common.pri -+++ y/qtbase/src/angle/src/common/gles_common.pri -@@ -5,11 +5,11 @@ INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE - - # Remember to adapt src/gui/configure.* if the Direct X version changes. - !winrt: \ -- LIBS_PRIVATE += -ld3d9 -+ QMAKE_USE_PRIVATE += d3d9 - winrt: \ -- LIBS_PRIVATE += -ld3dcompiler -ldxgi -ld3d11 -+ QMAKE_USE_PRIVATE += d3dcompiler d3d11 dxgi - --LIBS_PRIVATE += -ldxguid -+QMAKE_USE_PRIVATE += dxguid - - STATICLIBS = translator preprocessor - for(libname, STATICLIBS) { -diff --git x/qtbase/src/angle/src/libEGL/libEGL.pro y/qtbase/src/angle/src/libEGL/libEGL.pro -index 9e9c639002..ad2117f2fc 100644 ---- x/qtbase/src/angle/src/libEGL/libEGL.pro -+++ y/qtbase/src/angle/src/libEGL/libEGL.pro -@@ -1,9 +1,10 @@ - include(../common/common.pri) - DEF_FILE_TARGET = $${TARGET} - TARGET = $$qtLibraryTarget($${LIBEGL_NAME}) --winrt: LIBS_PRIVATE += -ld3d11 -+winrt: QMAKE_USE_PRIVATE += d3d11 -+QMAKE_USE_PRIVATE += dxguid - --LIBS_PRIVATE += -ldxguid -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME}) -+LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME}) - - DEFINES += GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI= LIBEGL_IMPLEMENTATION - -diff --git x/qtbase/src/gui/configure.json y/qtbase/src/gui/configure.json -index 219385a108..4145ceddf6 100644 ---- x/qtbase/src/gui/configure.json -+++ y/qtbase/src/gui/configure.json -@@ -65,21 +65,79 @@ - "-lbcm_host" - ] - }, -- "direct2d": { -- "label": "Direct 2D", -- "export": "", -+ "dxguid": { -+ "label": "DirectX GUID", -+ "sources": [ -+ "-ldxguid" -+ ] -+ }, -+ "dxgi": { -+ "label": "DirectX GI", -+ "headers": [ "dxgi.h" ], -+ "sources": [ -+ "-ldxgi" -+ ] -+ }, -+ "dxgi1_2": { -+ "label": "DirectX GI 1.2", - "test": { -- "include": [ "d3d11_1.h", "d2d1_1.h", "d2d1_1helper.h", "dxgi1_2.h", "wrl.h", "dwrite.h" ], -- "tail": "using Microsoft::WRL::ComPtr;", - "main": [ -- "ComPtr d2dFactory;", -- "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, d2dFactory.ReleaseAndGetAddressOf());", -- "ComPtr surface;", -+ "// fails with mingw-w64 5.4.0 - declaration is missing from header", -+ "IDXGISurface1 *surface;", - "(void) surface;" - ] - }, -+ "headers": [ "dxgi1_2.h" ], -+ "sources": [ -+ "-ldxgi" -+ ] -+ }, -+ "d3d9": { -+ "label": "Direct3D 9", -+ "headers": "d3d9.h", -+ "sources": [ -+ "-ld3d9" -+ ] -+ }, -+ "d3d11": { -+ "label": "Direct3D 11", -+ "headers": "d3d11.h", -+ "sources": [ -+ "-ld3d11" -+ ] -+ }, -+ "d3d11_1": { -+ "label": "Direct3D 11.1", -+ "headers": "d3d11_1.h", -+ "sources": [ -+ "-ld3d11" -+ ] -+ }, -+ "d3dcompiler": { -+ "label": "Direct3D Shader Compiler Library", -+ "headers": "d3dcompiler.h", -+ "sources": [ -+ "-ld3dcompiler" -+ ] -+ }, -+ "d2d1": { -+ "label": "Direct2D 1", -+ "headers": [ "d2d1.h", "d2d1helper.h" ], -+ "sources": [ -+ "-ld2d1" -+ ] -+ }, -+ "d2d1_1": { -+ "label": "Direct2D 1.1", -+ "test": { -+ "main": [ -+ "ID2D1Factory1 *d2dFactory;", -+ "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2dFactory);" -+ ] -+ }, -+ "headers": [ "d2d1_1.h", "d2d1_1helper.h" ], - "sources": [ -- "-ld2d1 -ldwrite -ld3d11" -+ "-ld2d1" - ] - }, - "directfb": { -@@ -96,9 +154,8 @@ - { "type": "pkgConfig", "args": "directfb" } - ] - }, -- "directwrite": { -+ "dwrite": { - "label": "DirectWrite", -- "export": "", - "test": { - "include": [ "dwrite.h", "d2d1.h" ], - "main": [ -@@ -107,6 +164,29 @@ - " (IUnknown **)(&factory));" - ] - }, -+ "headers": "dwrite.h", -+ "sources": [ -+ "-ldwrite" -+ ] -+ }, -+ "dwrite_1": { -+ "label": "DirectWrite 1", -+ "headers": "dwrite_1.h", -+ "sources": [ -+ "-ldwrite" -+ ] -+ }, -+ "dwrite_2": { -+ "label": "DirectWrite 2", -+ "test": { -+ "main": [ -+ "IUnknown *factory = 0;", -+ "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));", -+ "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),", -+ " &factory);" -+ ] -+ }, -+ "headers": "dwrite_2.h", - "sources": [ - "-ldwrite" - ] -@@ -623,7 +703,7 @@ - }, - - "testTypeAliases": { -- "files": [ "directX" ] -+ "files": [ "fxc" ] - }, - - "tests": { -@@ -638,26 +718,10 @@ - ] - } - }, -- "directwrite2": { -- "label": "DirectWrite 2", -- "type": "compile", -- "test": { -- "include": [ "dwrite_2.h", "d2d1.h" ], -- "main": [ -- "IUnknown *factory = 0;", -- "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));", -- "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),", -- " &factory);" -- ] -- }, -- "use": "directwrite" -- }, -- "directx": { -- "label": "DirectX SDK", -- "type": "directX", -+ "fxc": { -+ "label": "Direct3D Shader Compiler", -+ "type": "fxc", - "files": [ -- "d3dcompiler.h", -- "d3d11.lib", - "fxc.exe" - ] - }, -@@ -909,7 +973,7 @@ - "angle": { - "label": "ANGLE", - "autoDetect": "features.opengles2 || features.opengl-dynamic", -- "condition": "config.win32 && tests.directx", -+ "condition": "features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))", - "output": [ - "publicFeature", - { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" } -@@ -936,19 +1000,59 @@ - "directwrite": { - "label": "DirectWrite", - "emitIf": "config.win32", -- "condition": "libs.directwrite", -+ "condition": "libs.dwrite", -+ "output": [ "privateFeature" ] -+ }, -+ "directwrite1": { -+ "label": "DirectWrite 1", -+ "emitIf": "config.win32", -+ "condition": "libs.dwrite_1", - "output": [ "privateFeature" ] - }, - "directwrite2": { - "label": "DirectWrite 2", - "emitIf": "config.win32", -- "condition": "features.directwrite && tests.directwrite2", -+ "condition": "features.directwrite1 && libs.dwrite_2", -+ "output": [ "privateFeature" ] -+ }, -+ "dxguid": { -+ "label": "DirectX GUID", -+ "condition": "config.win32 && libs.dxguid", -+ "output": [ "privateFeature" ] -+ }, -+ "direct3d9": { -+ "label": "Direct 3D 9", -+ "condition": "config.win32 && !config.winrt && libs.d3d9", -+ "output": [ "privateFeature" ] -+ }, -+ "dxgi": { -+ "label": "DirectX GI", -+ "condition": "config.win32 && libs.dxgi", -+ "output": [ "privateFeature" ] -+ }, -+ "dxgi1_2": { -+ "label": "DirectX GI 1.2", -+ "condition": "features.dxgi && libs.dxgi1_2", -+ "output": [ "privateFeature" ] -+ }, -+ "direct3d11": { -+ "label": "Direct 3D 11", -+ "condition": "features.dxgi && libs.d3d11", -+ "output": [ "privateFeature" ] -+ }, -+ "direct3d11_1": { -+ "label": "Direct 3D 11.1", -+ "condition": "features.direct3d11 && features.dxgi1_2 && libs.d3d11_1", - "output": [ "privateFeature" ] - }, - "direct2d": { - "label": "Direct 2D", -- "section": "Platform plugins", -- "condition": "config.win32 && !config.winrt && libs.direct2d", -+ "condition": "config.win32 && !config.winrt && features.direct3d11 && libs.d2d1", -+ "output": [ "privateFeature" ] -+ }, -+ "direct2d1_1": { -+ "label": "Direct 2D 1.1", -+ "condition": "features.direct2d && libs.d2d1_1", - "output": [ "privateFeature" ] - }, - "evdev": { -diff --git x/qtbase/src/gui/configure.pri y/qtbase/src/gui/configure.pri -index fcd2d1f73e..f53a93063c 100644 ---- x/qtbase/src/gui/configure.pri -+++ y/qtbase/src/gui/configure.pri -@@ -15,29 +15,16 @@ defineTest(qtConfLibrary_freetype) { - return(true) - } - --# Check for Direct X SDK (include, lib, and direct shader compiler 'fxc'). -+# Check for Direct X shader compiler 'fxc'. - # Up to Direct X SDK June 2010 and for MinGW, this is pointed to by the - # DXSDK_DIR variable. Starting with Windows Kit 8, it is included in --# the Windows SDK. Checking for the header is not sufficient, since it --# is also present in MinGW. --defineTest(qtConfTest_directX) { -+# the Windows SDK. -+defineTest(qtConfTest_fxc) { - dxdir = $$getenv("DXSDK_DIR") - !isEmpty(dxdir) { -- EXTRA_INCLUDEPATH += $$dxdir/include -- equals(QT_ARCH, x86_64): \ -- EXTRA_LIBDIR += $$dxdir/lib/x64 -- else: \ -- EXTRA_LIBDIR += $$dxdir/lib/x86 - EXTRA_PATH += $$dxdir/Utilities/bin/x86 - } - -- $$qtConfEvaluate("features.sse2") { -- ky = $$size($${1}.files._KEYS_) -- $${1}.files._KEYS_ += $$ky -- # Not present on MinGW-32 -- $${1}.files.$${ky} = "intrin.h" -- } -- - qtConfTest_files($${1}): return(true) - return(false) - } -diff --git x/qtbase/src/platformsupport/fontdatabases/windows/windows.pri y/qtbase/src/platformsupport/fontdatabases/windows/windows.pri -index 0e64084cf1..9c529f55ea 100644 ---- x/qtbase/src/platformsupport/fontdatabases/windows/windows.pri -+++ y/qtbase/src/platformsupport/fontdatabases/windows/windows.pri -@@ -15,9 +15,14 @@ qtConfig(freetype) { - HEADERS += $$PWD/qwindowsfontdatabase_ft_p.h - } - --qtConfig(directwrite) { -- qtConfig(directwrite2): \ -+qtConfig(directwrite):qtConfig(direct2d) { -+ qtConfig(directwrite2) { -+ QMAKE_USE_PRIVATE += dwrite_2 - DEFINES *= QT_USE_DIRECTWRITE2 -+ } else { -+ QMAKE_USE_PRIVATE += dwrite -+ } -+ QMAKE_USE_PRIVATE += d2d1 - - SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp - HEADERS += $$PWD/qwindowsfontenginedirectwrite_p.h -diff --git x/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri y/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri -index 291ada220f..7617df2e7a 100644 ---- x/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri -+++ y/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri -@@ -8,4 +8,6 @@ HEADERS += \ - - DEFINES += __WRL_NO_DEFAULT_LIB__ - --LIBS += -lws2_32 -ldwrite -+LIBS += -lws2_32 -+ -+QMAKE_USE_PRIVATE += dwrite_1 -diff --git x/qtbase/src/plugins/platforms/direct2d/direct2d.pro y/qtbase/src/plugins/platforms/direct2d/direct2d.pro -index 3bfd02bdc8..9764272632 100644 ---- x/qtbase/src/plugins/platforms/direct2d/direct2d.pro -+++ y/qtbase/src/plugins/platforms/direct2d/direct2d.pro -@@ -8,7 +8,8 @@ QT += \ - qtConfig(accessibility): QT += accessibility_support-private - qtConfig(vulkan): QT += vulkan_support-private - --LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lversion -lgdi32 -+LIBS += -ldwmapi -lversion -lgdi32 -+QMAKE_USE_PRIVATE += dwrite_1 d2d1_1 d3d11_1 dxgi1_2 - - include(../windows/windows.pri) - -diff --git x/qtbase/src/plugins/platforms/platforms.pro y/qtbase/src/plugins/platforms/platforms.pro -index e61887618f..b70d8d5996 100644 ---- x/qtbase/src/plugins/platforms/platforms.pro -+++ y/qtbase/src/plugins/platforms/platforms.pro -@@ -14,10 +14,10 @@ qtConfig(xcb) { - uikit:!watchos: SUBDIRS += ios - osx: SUBDIRS += cocoa - --win32:!winrt: SUBDIRS += windows --winrt: SUBDIRS += winrt -+win32:!winrt:qtConfig(direct3d9): SUBDIRS += windows -+winrt:qtConfig(direct3d11): SUBDIRS += winrt - --qtConfig(direct2d) { -+qtConfig(direct3d11_1):qtConfig(direct2d1_1):qtConfig(directwrite1) { - SUBDIRS += direct2d - } - -diff --git x/qtbase/src/plugins/platforms/windows/windows.pri y/qtbase/src/plugins/platforms/windows/windows.pri -index f4c396f7c5..2f244d8b71 100644 ---- x/qtbase/src/plugins/platforms/windows/windows.pri -+++ y/qtbase/src/plugins/platforms/windows/windows.pri -@@ -9,6 +9,8 @@ mingw: LIBS *= -luuid - # For the dialog helpers: - LIBS += -lshlwapi -lshell32 -ladvapi32 - -+QMAKE_USE_PRIVATE += d3d9/nolink -+ - DEFINES *= QT_NO_CAST_FROM_ASCII - - SOURCES += \ -diff --git x/qtbase/src/plugins/platforms/winrt/winrt.pro y/qtbase/src/plugins/platforms/winrt/winrt.pro -index 042b270cff..fc70eba979 100644 ---- x/qtbase/src/plugins/platforms/winrt/winrt.pro -+++ y/qtbase/src/plugins/platforms/winrt/winrt.pro -@@ -8,7 +8,8 @@ QT += \ - - DEFINES *= QT_NO_CAST_FROM_ASCII __WRL_NO_DEFAULT_LIB__ - --LIBS += -lws2_32 -ld3d11 -+LIBS += -lws2_32 -+QMAKE_USE_PRIVATE += d3d11 - - SOURCES = \ - main.cpp \ --- -2.17.0 - diff --git a/patches/qt-disable-designer.patch b/patches/qt-disable-designer.patch deleted file mode 100644 index 4e303ad..0000000 --- a/patches/qt-disable-designer.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git x/qttools/src/linguist/linguist.pro y/qttools/src/linguist/linguist.pro -index 103336da..2fe9656d 100644 ---- x/qttools/src/linguist/linguist.pro -+++ y/qttools/src/linguist/linguist.pro -@@ -3,11 +3,6 @@ SUBDIRS = \ - lrelease \ - lupdate \ - lconvert --!no-png:qtHaveModule(widgets):qtConfig(process): SUBDIRS += linguist -- --qtNomakeTools( \ -- linguist \ --) - - equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe" - -diff --git x/qttools/src/src.pro y/qttools/src/src.pro -index 41064a5d..fcef4dd8 100644 ---- x/qttools/src/src.pro -+++ y/qttools/src/src.pro -@@ -3,12 +3,6 @@ TEMPLATE = subdirs - qtHaveModule(widgets) { - no-png { - message("Some graphics-related tools are unavailable without PNG support") -- } else { -- SUBDIRS = assistant \ -- pixeltool \ -- designer -- -- linguist.depends = designer - } - } - --- -2.14.3 - diff --git a/patches/qt-fix-macOS-no-printer.patch b/patches/qt-fix-macOS-no-printer.patch deleted file mode 100644 index f336acb..0000000 --- a/patches/qt-fix-macOS-no-printer.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- x/qtbase/src/plugins/platforms/cocoa/qprintengine_mac_p.h -+++ y/qtbase/src/plugins/platforms/cocoa/qprintengine_mac_p.h -@@ -52,6 +52,7 @@ - // - - #include -+#include - - #ifndef QT_NO_PRINTER - ---- x/qtbase/src/plugins/plugins.pro -+++ y/qtbase/src/plugins/plugins.pro -@@ -9,6 +9,3 @@ - !android:qtConfig(library): SUBDIRS *= generic - } - qtHaveModule(widgets): SUBDIRS += styles -- --!winrt:qtHaveModule(printsupport): \ -- SUBDIRS += printsupport diff --git a/resources/ausweisapp.qrc b/resources/ausweisapp.qrc index a845aba..1448405 100644 --- a/resources/ausweisapp.qrc +++ b/resources/ausweisapp.qrc @@ -15,19 +15,9 @@ images/icon_ok.png images/icon_cancelled.png images/Icon_Checked.svg - images/search.svg images/cancel.svg - images/iOS/tabBar/Anbieter-off.png - images/iOS/tabBar/Anbieter-on.png - images/iOS/tabBar/Ausweisen-off.png - images/iOS/tabBar/Ausweisen-on.png - images/iOS/tabBar/Pin-off.png - images/iOS/tabBar/Pin-on.png - images/iOS/tabBar/Verlauf-off.png - images/iOS/tabBar/Verlauf-on.png + images/check.svg images/icon_Pin.svg - images/iOS/tabBar/More-off.svg - images/iOS/tabBar/More-on.svg images/status_error.svg images/status_info.svg images/status_ok.svg @@ -38,18 +28,20 @@ images/ausweis.png images/provider/information.svg images/provider/purpose.svg - images/provider/adresse.png - images/provider/+tablet/adresse.png - images/provider/mail.png - images/provider/+tablet/mail.png - images/provider/telefon.png - images/provider/+tablet/telefon.png - images/provider/url.png - images/provider/+tablet/url.png + images/provider/adresse.svg + images/provider/mail.svg + images/provider/telefon.svg + images/provider/url.svg images/provider/gradient-citizen.png images/provider/gradient-insurance.png images/provider/gradient-finance.png images/provider/gradient-other.png + images/provider/categoryIcons/general.svg + images/provider/categoryIcons/citizen.svg + images/provider/categoryIcons/finance.svg + images/provider/categoryIcons/insurance.svg + images/provider/categoryIcons/other.svg + images/provider/categoryIcons/+android/general_bg.svg images/provider/categoryIcons/+android/general.svg images/provider/categoryIcons/+android/citizen.svg images/provider/categoryIcons/+android/finance.svg @@ -73,7 +65,14 @@ updatable-files/supported-providers.json images/icon_nfc.svg images/icon_remote.svg + images/icon_remote_inactive.svg + images/icon_remote_0.svg + images/icon_remote_25.svg + images/icon_remote_50.svg + images/icon_remote_75.svg + images/icon_remote_100.svg images/icon_bluetooth.svg + images/phone_to_pc.svg images/phone_nfc.svg images/phone_remote.svg images/phone_bluetooth.svg @@ -82,5 +81,11 @@ images/siteWithLogo.png images/icon_pair.svg images/icon_settings.svg + images/trash_icon_white.svg + images/trash_icon.svg + images/icon_save.svg + images/info.svg + images/info_filled.svg + images/triangle.svg diff --git a/resources/ausweisapp_desktop.qrc b/resources/ausweisapp_desktop.qrc index 8a439b1..9fbe502 100644 --- a/resources/ausweisapp_desktop.qrc +++ b/resources/ausweisapp_desktop.qrc @@ -13,16 +13,33 @@ images/start_nPA_eAT.png images/busy_animation.gif images/html_message_section.jpg - images/desktop/background.png + images/search_icon.svg + images/search_cancel.svg + images/desktop/bell_white.svg + images/desktop/bell_green.svg + images/desktop/bell_red.svg + images/desktop/id_card.png + images/desktop/pin-letter-page1.png + images/desktop/pin-letter-page2.png images/desktop/help_icon.svg images/desktop/main_history.svg images/desktop/main_identify.svg + images/desktop/main_info.svg images/desktop/main_pin.svg images/desktop/main_provider.svg images/desktop/sandglass.svg images/desktop/settings_icon.svg images/desktop/titlebar_arrow.svg images/desktop/continue_arrow.svg + images/desktop/info_questions.svg + images/desktop/info_application_log.svg + images/desktop/info_diagnosis.svg + images/desktop/info_license.svg + images/desktop/info_manual.svg + images/desktop/info_rate_application.svg + images/desktop/info_report_error.svg + images/desktop/info_setup.svg + images/desktop/info_version.svg images/randompin/btn_normal_0.png images/randompin/btn_normal_1.png images/randompin/btn_normal_2.png @@ -37,6 +54,7 @@ images/randompin/btn_ok.png images/randompin/btn_cancel.png images/randompin/btn_clear.png + images/reader/default_card_position.png images/reader/default_more_reader.png images/reader/default_no_card.png images/reader/default_no_reader.png diff --git a/resources/ausweisapp_mobile.qrc b/resources/ausweisapp_mobile.qrc index 6b29817..11659c3 100644 --- a/resources/ausweisapp_mobile.qrc +++ b/resources/ausweisapp_mobile.qrc @@ -2,7 +2,7 @@ qtquickcontrols2.conf images/zahnraeder.svg - images/check.svg + images/arrowLeft.svg images/arrowRight.svg images/share.svg images/android/navigation/ausweisen.svg @@ -15,16 +15,19 @@ images/android/navigation/support.svg images/android/navigation/bewerten.svg images/android/navigation/tutorial.svg + images/android/search_icon.svg images/iOS/search_icon.svg images/iOS/search_cancel.svg + images/iOS/more/icon_mehr_npa.svg images/iOS/more/icon_mehr_favorit.svg images/iOS/more/icon_mehr_fragen.svg images/iOS/more/icon_mehr_info.svg images/iOS/more/icon_mehr_license.svg - images/iOS/more/icon_mehr_remotereader.svg + images/iOS/more/icon_mehr_verlauf.svg images/iOS/more/icon_mehr_upload.svg images/iOS/more/icon_mehr_log.svg images/iOS/more/icon_mehr_tutorial.svg + images/iOS/more/icon_mehr_report.svg images/tutorial/main_menu_what_caret.svg images/tutorial/main_menu_where_caret.svg images/tutorial/main_menu_how_caret.svg @@ -80,27 +83,37 @@ images/tutorial/user-tine@3x.png images/tutorial/providericons.png images/tutorial/play_movie.png - images/tutorial/screenshot_cert_de.png - images/tutorial/screenshot_cert_en.png - images/tutorial/screenshot_providerlist_de.png - images/tutorial/screenshot_providerlist_en.png - images/tutorial/screenshot_menu_providerlist_de.png - images/tutorial/screenshot_menu_providerlist_en.png + images/tutorial/screenshot_cert_android_de.png + images/tutorial/screenshot_cert_android_en.png + images/tutorial/screenshot_cert_ios_de.png + images/tutorial/screenshot_cert_ios_en.png + images/tutorial/screenshot_providerlist_android_de.png + images/tutorial/screenshot_providerlist_android_en.png + images/tutorial/screenshot_providerlist_ios_de.png + images/tutorial/screenshot_providerlist_ios_en.png + images/tutorial/screenshot_remoteservice_ios_en.png + images/tutorial/screenshot_remoteservice_ios_de.png + images/tutorial/screenshot_menu_providerlist_android_de.png + images/tutorial/screenshot_menu_providerlist_android_en.png images/tutorial/screenshot_pairing_de.png images/tutorial/screenshot_pairing_en.png - images/tutorial/screenshot_sac_menu_de.png - images/tutorial/screenshot_sac_menu_en.png - images/tutorial/screenshot_choose_reader_de.png - images/tutorial/screenshot_choose_reader_en.png - images/tutorial/screenshot_pin_management_menu_en.png - images/tutorial/screenshot_pin_management_menu_de.png + images/tutorial/screenshot_sac_menu_android_de.png + images/tutorial/screenshot_sac_menu_android_en.png + images/tutorial/screenshot_choose_reader_android_de.png + images/tutorial/screenshot_choose_reader_android_en.png + images/tutorial/screenshot_choose_reader_ios_de.png + images/tutorial/screenshot_choose_reader_ios_en.png + images/tutorial/screenshot_pin_management_menu_android_en.png + images/tutorial/screenshot_pin_management_menu_android_de.png + images/tutorial/screenshot_pin_management_menu_ios_en.png + images/tutorial/screenshot_pin_management_menu_ios_de.png images/tutorial/section_seperator_what.svg images/tutorial/section_seperator_where.svg images/tutorial/section_seperator_how.svg images/tutorial/section_seperator_important.svg images/tutorial/generated/where_overview_question.svg - images/tutorial/generated/where_providerlist_screenshot_de.svg - images/tutorial/generated/where_providerlist_screenshot_en.svg + images/tutorial/generated/where_providerlist_screenshot_android_de.svg + images/tutorial/generated/where_providerlist_screenshot_android_en.svg images/tutorial/generated/where_identify_now_de.svg images/tutorial/generated/where_identify_now_en.svg images/tutorial/generated/where_userdata_example_de.svg @@ -129,18 +142,14 @@ images/tutorial/generated/reader_sac_provider_on_laptop.svg images/tutorial/generated/reader_sac_npa_on_laptop.svg images/tutorial/generated/reader_sac_aa2_ok.svg - images/tutorial/generated/reader_sac_menu_de.svg - images/tutorial/generated/reader_sac_menu_en.svg + images/tutorial/generated/reader_sac_menu_android_de.svg + images/tutorial/generated/reader_sac_menu_android_en.svg + images/tutorial/generated/reader_sac_menu_ios_de.svg + images/tutorial/generated/reader_sac_menu_ios_en.svg images/tutorial/generated/reader_sac_no_nfc_devices.svg images/tutorial/generated/reader_sac_no_nfc_provider.svg images/tutorial/generated/reader_bluetooth_card_inserted.svg images/tutorial/generated/reader_bluetooth_connection.svg - images/provider/categoryIcons/general.svg - images/provider/categoryIcons/citizen.svg - images/provider/categoryIcons/finance.svg - images/provider/categoryIcons/insurance.svg - images/provider/categoryIcons/other.svg - images/provider/categoryIcons/+android/general_bg.svg images/provider/categoryIcons/+android/general_button.svg images/provider/categoryIcons/+android/citizen_bg.svg images/provider/categoryIcons/+android/citizen_button.svg @@ -150,10 +159,12 @@ images/provider/categoryIcons/+android/insurance_button.svg images/provider/categoryIcons/+android/other_bg.svg images/provider/categoryIcons/+android/other_button.svg - images/phone_to_pc.svg images/android/navigation/remotesettings.svg - images/trash_icon.svg images/trash_icon_all.svg - images/trash_icon_white.svg + images/iOS/tabBar/anbieter.svg + images/iOS/tabBar/ausweisen.svg + images/iOS/tabBar/more.svg + images/iOS/tabBar/pin.svg + images/iOS/tabBar/remoteleser.svg diff --git a/resources/config.json.in b/resources/config.json.in index a816277..a9856fe 100644 --- a/resources/config.json.in +++ b/resources/config.json.in @@ -22,6 +22,7 @@ "DETESTeID00002_DETESTeID00004", "DETESTeID00001_DETESTeID00002", "DETESTeID00001", + "DECVCAeIDCTL0402_DECVCAeIDCTL0403", "DECVCAeIDCTL0401_DECVCAeIDCTL0402", "DECVCAeIDCT00001_DECVCAeIDCTL0401", "DECVCAeIDCT00001_DECVCAeIDCT00001" @@ -32,9 +33,10 @@ "7F218201B67F4E82016E5F290100420E44455445535465494430303030327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37405C035A0611B6C58F0B5261FDD009DECAB7DC7A79482D5248CCA119059B7D82B2157CF0C4A499BCF441EFDD35E294A58C0AF19A34A0762159533285ACF170A505", "7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104096EB58BFD86252238EC2652185C43C3A56C320681A21E37A8E69DDC387C0C5F5513856EFE2FDC656E604893212E29449B365E304605AC5413E75BE31E641F128701015F200E44455445535465494430303030327F4C12060904007F0007030102025305FE0F01FFFF5F25060100000902015F24060103000902015F3740141120A0FDFC011A52F3F72B387A3DC7ACA88B4868D5AE9741780B6FF8A0B49E5F55169A2D298EF5CF95935DCA0C3DF3E9D42DC45F74F2066317154961E6C746", "7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104184BB519FC2A8F52DC0DC73112FACFE914F2A49B678DD5799A2B1DFE95E1A66359014E22FA8D66438413CEBA6CF0E215576B673376BF617AF4DFE9761D2290148701015F200E44455445535465494430303030317F4C12060904007F0007030102025305FE0F01FFFF5F25060100000801035F24060103000801035F37409F25EBFAF4B91E4C60A1683754C5DC076A3179753EF97D9F8CB01FE1DCD3B8C83E7A26602AB1F344BE5706006D79A9FF6A9716404DC83B9F30E1213B393128A2", - "7F218201BA7F4E8201725F290100421044454356434165494443544C303430317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641043EE15015916563E31459045924DE804C1D93A77652AA25D0B753730DBA3233886A9A9B28A06AF84CC5A40F78E9167CA40B8098724A3A0332283D0A52C5453FE08701015F201044454356434165494443544C303430327F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F374068261CEB4DC915301371C9B273377F33CEB25AFA07E70EDB3498ACF0327DC13B9AF99A9D694A6D048F0DB6FF1774E882CA8F41C8A0B96FDDF6F6DDABFD55CB43", - "7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641042C037C6CF8C0B62E36E220B7D411404AF248A2C83C569A49FAB02FC232D2395B3A5FF80DDB01D0DFAFCEF55E54ACCBA4C56E528F0746BEF1108E7D9B0122EBA78701015F201044454356434165494443544C303430317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37404FB2F9F17D38656EEC2846CBB1711E07D739E6A584D487B3AFBA5C723C73A10236995E6A19499DE941DFE3CC044E2AACB6B5869C0E46C9585AEF892E2236F62E", - "7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104206160B85B82B2BE249DCD7B15FD1AD46CA03F39FE675C07535806E57CE24349392BBB9F73B364672F12243F18083DCC49ACA613767F0873AEB60715FC605A288701015F2010444543564341654944435430303030317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37402B62927D46BF675DB387FC4A425FF3B604B20DD5ED6FFCDAFA9DA1DD920DC996245B358167C66A721DF39C6897864E4D648746339A97D22D08659885F92BDE21" + "7F218201BA7F4E8201725F290100421044454356434165494443544C303430327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641040DC10C2E105D1CFC84CCDAB7AC0A37F161234D9F5549D83FD29E1D3B3A1455DC5F5464FE69E7B1F18F57AD6A0BBB3B2F673A356B3AC8AB525A96A78E71EC20B38701015F201044454356434165494443544C303430337F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F37407D738AA07BBC24E4969ABC424CC75B1BBE9F4A8AEB497544516F32D2284A6F785BFC630BE9C6D96C6DE8FFF377FE68A3950DE140953DEFAFADA92A201774C0BB", + "7F218201BA7F4E8201725F290100421044454356434165494443544C303430317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641044EDF23187A2E4535AB7AA3C29AD43E3ACFB7C38230CCC7B705829E60DE14946D7A0257527E1488D9EBB967D5734FCBCFBA3A1085798AFA7883FDAF88605A46008701015F201044454356434165494443544C303430327F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F3740A2CC27745E141CE871645178F5D8B55B9ECAA690A7975EF7AB518145D9CE9FA31C326F923EDDC6AD58CF0E644CDF86FC2EAF4D059B0598C2CEB6C713D825CD69", + "7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641048A50D5902E9E63D103974E9FBE1D7E61BA186585E2A12A4643FFA57DFF0613FE213A7C3793C8C5C6C095224DDCA409AFE92998E3F372D826AD008FC6A0981DE18701015F201044454356434165494443544C303430317F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F3740767C88881693C2AA936EC55FC0104EFF92FAD1AB9B1CF26ECCFA49AE98E9F9EA5BDD60AFFA6FFC6526AFE47BB6897E67241F2170A51F635EBC8AA8414748562C", + "7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641041A47FE0DA706867F877AB071E8867778EDB6E7C12B13FA13ED93D54C86A44E3BA9F93D1B978B54841202B14A924BBA1A56C76B9E596614C66A9D2CBCDC8B29B18701015F2010444543564341654944435430303030317F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F37407CDC52ADB660CC0EB56841EF9D5773DDE84A5581853CCF3DCF24D555C2FDE8F31D2128B5D6A0A528BF07CFDA005DBCACFFCDB14755BB132E47CFA0E34233A290" ], "_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded", @@ -151,18 +153,20 @@ "minStaticKeySizes": { "Rsa": 2000, "Dsa": 2000, + "Dh": 2000, "Ec": 224 }, "minEphemeralKeySizes": { "Rsa": 2000, "Dsa": 2000, + "Dh": 2000, "Ec": 224 }, "selfAuthentication": { - "_comment_1": "TCTokenURL for self authentication (AusweisAuskunft)", + "_comment_1": "TCTokenURL for self-authentication (AusweisAuskunft)", "url": "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json", "testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json" }, diff --git a/resources/images/android/hdpi/background_npa.png b/resources/images/android/hdpi/background_npa.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff0210dcae2a38e70976ae321bbb5c7b0956dba GIT binary patch literal 1520 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 Y{t1yfO)5cW4E$I!H?e^;jXh%i1)k{LS^xk5 literal 0 HcmV?d00001 diff --git a/resources/images/android/hdpi/foreground_npa_beta.png b/resources/images/android/hdpi/foreground_npa_beta.png new file mode 100644 index 0000000000000000000000000000000000000000..e755bb9f19c6041ac149547b754bc6125294f947 GIT binary patch literal 3684 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 literal 0 HcmV?d00001 diff --git a/resources/images/android/hdpi/foreground_npa_preview.png b/resources/images/android/hdpi/foreground_npa_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..ece6b8ec9df7c13a283f2c21214ac54f127b2f99 GIT binary patch literal 3718 zcmZ`*cQl;cyB#HjAo3wf5YY)fg6LuN7Qtv^5M?lk7A0b|QKOFNG6*3F!C>_0#vn#U zCgBrA8(p;MHSXm8e(U?^uKTX{J?D9zv(MT4?6cmrPNJ!a9wR*$Jpce;G|<;JC--mu zd{?Q+?SaIy7`dZ%2R;M>0CmV~=T2A1IYofEo+bcI;9esqbbk8a002Oc91E^dmUo z#+mTCA7r}BKF@?U5~69=4lQbr7KfmPq4}T5;Ph@ck9x&W%rv5LhP+@_-xIrxPYzi_ zWF#bG&?*%d(>&*p-S1W_>zIRg${qffl#H}N_LE!3Y&>}ghEa`coru6pgw;(u=MG0; zemLiU4t}RhW``AhAvf({_^s&5ddfg0La?N8puBUuQMKGAIO_^%Ed=F&${FdKd!m!`ihX+<6@uniM)7h z>zsSRh{x+MWF?_BllEvac-<74_i^@6{Kt8+2^PtH9`y=7O&XpJDv)ZStUj;!E(qDN z#4ZQ&xwzCyU!I@GG|xg_4%ns-fU5=C85m%g`~9-A-i>N!J3Aj~XgY4(XaE2%j*nX@ zDG4ADve!Mf6MVkEzm3C9MMkFex{Y~yjt2w~A&{fR#UU*%^6rwl9eeKF!BA80e*HRZ zY}_XyalE>Ey0I~rk+IR*I-QU(sG@=u5$WXM=;r1=oSWMlA78Dk+`;3Q%F5O;n2FF( zQhxq7XXgwo+$tU8@#b4xD-m3wyxG~gSX6W{Ihoi#>R1I#@=B^`=h*gtJ<<0Vi$KgEMAs+7+TWa@#$#92y<8lRP5HWgRd@YlBUW;bKv+!fj6kh4$?t*&PmSV zpj^CV*d4E&L5T`Ifd;mjUIuY*&(h80ScXXOZ8LWeLn94Q zagn03_EOun!6^|zB`e%n+dbpozIO8Q{TZ}+_fV>3cf6}mCAY9cU}bDv1{?b~NQjemRx#Gun)f@O~RZ zVaN{dE3e}!nJ?JrJe35K&XfPQhE zqY7_$cw^5EuB6zVoaK(^P5h1yVw|>SwXsko46hZeS;^a3?sTvrAEQ)=q4>nJs%Ri< zjV-C=fLn4r-6Cw9-+IN?qiRp`v(~mHm^M7P20u8Q-*#f1V)wbuaKzYgYY9yIZMu|u za6h2o2=&``IaK$P@m(nLn~!i$)xK!vlVIB&Tf)?G(l+|m1;Zm}{f(+JI%9QDb%7Oc z+500L2SLwqY#_I{k7~c1v=5Gtqmvd0Ld7JP(g>$DY#k4lR=wk4x7U70W%nJ?>{CE5Z!kgL8^sWSUeTyx!#hotTEi z`Z3jyNZ&0jm5i*2EHFAY9_MRvC;jaKJz?5b>>74xzD`u1YVub3i+7z(RaVp@DlQHK zKb_N32os2G(KC6B9Q}Rqdg{8bI{bKl0;_T-kFQU5Mu;1`@dW(2PhmA_4XaAXxqb9) z>e04Z3kbo&#&(@|rjj{!PBA_%Bz_`9$|dNY@I`*V5lei|wVh|F*BfKRIe^R@lrs2nqv>m1`1(!%mIdCIzT>@Fa>@pL*5!r;K3i*kJYDuuRoAXQZ8X@)Q zh7Yy~g#*CqKXmI54K*T@AgNPa%DpDZEI}WKoekSNXugC8s`vE^-!B>o@Mj63_k-%m zB{iBuCrzoubxhIkDA+Bd`K#@u^u&Vzqb`!g+G01mFSy-pmDBCKtW)FY6zbQU1DHkJ-vYIHhTzvIJ zYF$>i2UbQJ;Jcd_5ejl27F+%rT9K@F#Q{c31U+erjQ=B$H3Ctg-1c z+NQsyl%`3;n%md}n*(y)fyuM}TpE+#(amnSBvR_NOmMT_^!-WFt+8{_Lw(RQw}6Vq zUDHvkD%717jC(AetP#M%v~a~lPH~rd03m_2W>^EoNjL50xg7fo3fY(OJ^p4i2o}MmPyf&G{`w2j;r*Vugb)-M(eIl zL}8wC&j@7&9wHM{rw7eNx(Tv;e9RBh%N?x2AZm@5hAH?^4YLFrNTS;4kV zbubj_xE5%Rd)T5lxD-_8tn>=Ztflm1-vpp+WZK+KRb0TEpiVES1KaAkC$3zSyGrNT zZ>rNkcgW%YcU%1a14tYblXGTOB}bf(LIa;;3+D&_EUE6|pAyv>ZDR<{2teGW_MSR9x&GRQC`;S$HFC4d$Gj1LP76>|rb;gcQDjM# zdoMx>6=uK+8{HAAf$YM!hW@3jrRK~-H$rfQv`0Q&!;`#VjmveKZ)ir4sFxGl64%qE zE1KE7@2wb>R0};cc!*cM3|)EARd*}4@DxMHEO_YI>&wuSVRnek6n{Y4Cdh&wQ39eB z2}4mfHk4UVy$8E0bvO~F$GEiZppX3@H3bP zI$3fs=AT?LS$7-9cHdcjZT|3Lo&70|^VfCVHI05OyO~cN!hu)H=%hV0>lThZc>>;g zo0W?rnb5G)&&xMjAoVL3Y^nO7{rG zlgfF_7_kyDeoe@;Oj4M=^MMM5#E;#4NKB5hY!+#;Y#3=wt zy#GZWF`Ch1hC8L=$h7`}WK2Cu*px2NOSB97ns-z>A@L?TH8-LA-7^cgb;23)_u2Hq z0O}^=rP)7U7#?9%2y{03FvSDPk^bf1nR>I~7a`x?B@0%763+MnnmDc%DSq-X)JnTgh(-8#zNu(rO-SC-CfO(^N9*a$mQVk2BSdwgy4q9$II}*oRoEl$;_k|DMZY* zJedn*Og-!JT=>wu> zWKLOL((hGN3~-!KC-JrgjYso1A95FE4?eu;<8R*jJ;PrwP~|!pF#PbMRmf-hV&MJF z+BbKg>jWU{W%qEq(m!&GO2Q^*S7gc9l>BTD)t{tQ)V+N0FPc)v-Cq5oG5@5A6EB)# zlJ9UnyW0J2%ZJAKPteC>i~&81Cm!uGy(Y8lTg;^oNjR0D_B z$l=+ELews4Nu6nDjM1gXeovs^Hl4mWubo{4bys-%)$L6Mp9hTdtEe_nUy-#$*38Uj zl0{v@y}s??wlOQ|it-A=!otd-k=n0jTh62t{ecPJBT4_g`W;8Y{q)H5*?2e**weOjJcja7p$ZM8jTvNiMf`(KsHgt*{@ zy;pm%+mXX)e!Ed>vpHdx%V3tugSX$4!)ki3+J(Ma{r>)mz+ir}-HX6sj=^Pfw?tj8 zD0r>ecdXcXuGwRm%!0jEg}LE>yifcDP53!DDi^Lfhx^&))7`kj7Pu#I48TYoXC^rPOq()^n)V zx!3LN^7;P${)WF?hPvYT`~7^nPjR+EsML=3`uu93(R-`c_WAt&{{Q>^{>0y|_xtpD zxlDMuO5*MIf9UY|r^Mocyj0}w_v`fJ!QHC)`}Vxq@9y^K!Po4h!r|5B@^z=x^!f0f z%6r4!t-0Ev@Am5A@Yt@^l%L4w#o@A$!)My;&6vn^Q;WpL-thYT_>sTkl*Db8f5mU?^yT00)Yj?8&*i$1N$>X?qxl735@qxfu@b~S8 zyW-~Y-HF3ujlScs*O=<_;*!U3dc06os~`0G@qV)1)8X)HoXv-~-hr^%f~(btxZly> z@2tq=VV262zTvFK;)br)r^@Ho!QUPf1EzPL{F&vU1W=N+iT08F^&}Elza-;%E$pyv!odS*)NKADR#w zqp|=ou?eB^iVBON^HE>~hp@;C#tI2$DDcloMlpCNSu8t)6=itWSw235ET)inc_osR zawtpO5Gzz!iX_cQAd4-5Ax)B_#fl$_f2GNhWaDCR-jSS9UJRZ5RZbet+hXEmNfcET ztd}z${#iC&vY-Fw^~+V)zR2NVy;DV%f*DHQ(?3wBL1)uT`Tu?F_h9pb$5ovzY4Z)u z=9aM8R37?P5ZcV+=XW`A+q^=>`%BmwRH{(ufFEGneVrwGsA50^&dh~uVFzrhe=dj^ zYU~?gQ>ib95_R4b(0SaME=s7Ybhifem5{EE5Zgo!ai}Y|N4P@;-&&%Ut}vYu4pFGF zv`09@ro(6C=C)i*h;Cv!L8wpobFq5{%lh{454UuF-mUf3@;SPl_@RoSxej~xaPR$O z$L(tlVH$KU}~I6%Wuge-P}8y?HNRQqGNTODlxsAr?-knl8Y;QvT`>FX@G) zy(P>(5j!+HRPzQ4Fk!D6w;f*i|Ouhtf`3Y=ndz2|PwqQ_W)MHs~5yCjs*X;)vsxt1ujqsRhC z%|r>^bj}7`PZNbQ)!zk*e|DjSYJDBv;&X7HB?`@?E(0ufpoOv>fJqTT5l|-rHFPuk zJ;1r1C^TIZ0USg7X!XASfCKTxUiJ=TOVKpi*FSmpL&)8&M4`jsTOi@7EoeW;r%@k4 z0>?-3J1(ti;SjasXg|o&DUT>f;G=Tv^>qz+9qz5Au%o+BLk)iztOq>q;GYoOS$725R z46PA{j(=6>3+@(|q=Mgm)-y-wee*T`L~FvtaE_++vwaiLppw~s=C--E-W;2DqN!hs zu`o>|(_#MMEd3>CwS^TDP5sCjQ^rP`LQGTmM+^0r2s_)#e=u`fYPavo^QPxhP>4ZcP*g*I zopzb`3XguW!rJ^K*hD?AA007YBWF^)9q3r(*1L5Bc@9zZs2S95vMKJ)NApzyp z6#n0u)Ld3g5diR^1^|LW0f6U!uAn0Tz=IV4I57bL_%i_jT<6?QRl$D&1T%RV$$$87 zJV|r~{)11>vbt^n0Oj%j3`T|W@bRA$(Opha3UM113xtgA|AZ>^FXkdADW>7IdX{JH zr}=YXq|et;&e4aIvM>xs+$q`}Pr~LD@nGG3umEy^ck|t4sk=dOptX)dHPo zmCKklkLz}RIk>apU=DsD9PUjx>YN~xt%wYhR{08RoOtK;ixYZlIC`-o{BT3$U^mo3 z^X~Ckft;yQZtJwrA}QWsIibXC$Se;64rt$|aJt5)kW)2WQ^ISt6cOhAM4pEo>m{nn zAT_H>GLw9xmNC;62(6u)u4KfVa6p>AJ%MX^2z6w9#qrTCfPU+yFZ2#H*R}RTTvX8f z;*Y8`){nkr_U^w<>H^fFjes+~IKV5in>|SO6Bf=(WX=i?+ z4APWDOo=dF-Dro%!knwj$bBlYx*f7b?DiQn@4Qpo=~=+)CC{6vgtPO)C>C1ie_#I| zrGvNBlW;+n5MJgvd;F_YFN$o1gwB|Wshy1af`;iXcJ0D_ZCyr;?C#g3c|1Y zJ?UYIaKX2Wco@+7OU|b>N#>BU_Yny}Rn3N^klc%hlvdRkRqi4Iq6)CeHQMQ&fL103 zEAVVQ$Nlz2=~yIE@J+8zDeM=Vk=WnnZe}V3(_dP))|xnMuj5M7_xi(R`%zA5cxYka zGN7hS70+vftmyrFcyNzVune+x3|dvlu`M?xDnfN0}|P2OX7xX)|A|Ftctyr9Qd zpMYSn@cv|WKP;m7hTpK_N5V=&(neVl^~6(Ld%fF%p>)InqGeBrv`?7PZsU8On2huL z&p&zE>~tS2s>=*EsoJ#J-XU!2Hwe1J!pxzD%Q}-v)4n2h{5D5b0WcR==@)T>=gplT zm`_J0y5bDpNR8G4MI4v|dOX$JrQgVeR+eeJLC`|hS1BjuCKUGl`Gi`x?$ubK2K%IY|Vph*>HpQ$gTZi_tRDR=NtBAmzs79lIT&}(;7AcjVg@x3bvCq>4YfH2_AUM%3&NXg6VgLgV z7uE#fq8+Yk?E*m2I^8=8as3-6xh1xN>L7!=_LxEh`UnCvyN2u{HH_?JId!fXFUv79 zFjxtDtR%(1eCZ8kk1F=Bb|XGzftXoaY@NBaL`lBN>y|680Hcf25Tw<73nRS_CxPGR2yyB_wpu2oDg$Uz~tgkh(p_ZvQfl6hYO=HPm2V_t1ETI~RuCZ{cL#Dd{uIv2#F*Adbsx+9xH!()ie@iX;I9B+k)A29piozNP7?3Mm@AnL@R0_9*WKB4xIYP zG3;ZxVoluD3Pe1eOiN45&b_PL1)SdXv66e>=2o~gSW6>o6lnR?{9>)>5te)i!068D zn&RnBE;k%nV*d8I@SGTyZ?*wOnsZVV=n^{k)GIe#Y-plA`NYNW-;kn`|Kq6zlrRbv zZodxQ2KIIGrliv@buFsRWSLUJ60b=#aetm?iGZ)F^hcgex@if+Ge9BktkoI7= zFb$V(Pz1q{U!x`bDHG0;!xZ1>WIa`hKk$U2MQjcDXiAot>ww(m=JUqRGJ%=s?*mCi zbg=_fiSdxJ_-xKPvUz$voy3SUZ|HkfnzD$&r`QvVmU1$b5I&nTHAVgF(Ya&e5fJBz5Z*AC{-*RxlfV67fmPQx11UU~k=*j%uLY_-|df!~`@t51A^M%;;~; zYscBZ{TYSIdCdt%!`Cp0eY0VQtWOcbk+!X+%%cMAGR8kOcV0J=#RE3Y0ryx_K8bnP z?VE7T;dL9v!d)+P_L z90IkvTMH9!@a9}L^?j!yy(2+-p<5nnK6l(0qfuL=*8Gm4H$o}%39Ugrrm8)^D1+P} z&EL8|*^$C6a%#gJD*d_nyO36$OGKIU{w&GbUfD5>iX?m_K<-Yf;m22Rk>{;)E!XG7 z5DQaR?1=c90XgaSr6(M99vc?`PlioM0sZ&RSo>hbNW9Gh;4QERGe0elWlaz%MSgXO zQuxNpDnifb!DQe?*`R))zlB#L6Ah!G|KIm~gjj8ZsW{z=0Z#E?A=!kCsru68sH~_p zQs?N51$Sg|hhVS8z1ICCN1|X?!}J*5oo;q+GMCQH%KbggT4HKUdjK)1fYGM2-;@Ar#4hH7db$pr>KwD#UyB@_;QhNBr zN2&3e#oI9o)^G1L?2$ob*;hc0>xWwtzdZkxR{Imd$1yCDi*3&Ks@{L0G9v}|$Iq5Z z1btH#sYSn4I5dNFy1thh*8;gcECjJ^nbwUbf|>`RWeQbN)`^jAPi(*S4MYNF=Ly5r zS_&0M#E&0ry+I)fBcTp@ur77w-JVtqtpA1BAw6T;Qu~j6@NyQJ0(%d5yulig&pN)J z#0O#NMNGnk%Ltf!z-~hq_}*JBB(`Uk&kpjedLJB3>XE4Cy6%1eAXH z?@K*pe`kzLHMNE4&@VQ$`AtM!8EswkZfSYVXS*lAU5UmablgrF?x}T9mz^X*N?%Ai ziN>b(Bl&C=A`;`#bWf`QGJ!Yy7_PD0%cY-40TiJ`MB(a z_UX36?4}wO7j*dM=Lwf$xQ|h3&6$0OcWq(A%YmS!n+%kUw81nZQ^hk2kA ziC&w@bFrEQd*lM9&2pVxUgHutZnzg)SP&a5A!7!1iV9w|ZYrb7hv5<>T6h)fBzL8t zI0LYK1#*e`7jA|V{EU8EZ5HOtRQHh@5i>!Z&(5O0EPtJE$@9`rddU0k7q|8>?9{?) zqgfmsxLrw#OGi_QVRXL8GFBISy2qspS}Z4g7Y%T56D+t!)zP%7F=u_ff6Fqi?Skrr z=-t8f!7n8f394T%G3vk?a-1;Z%7dc61Iqoej6~{j_OJ+8@$sfGT-JjWX!y|+o36Xx zaWuS|BS$2xDgql9)rr1(N4hBn9DkQ^ESgE@0C5m6CTlp^s1~b*{16!67apA021Rg7 zaw#{2R8^o?-0!uYzM=!*UBxyt6rC-!zM7nPS3D^GPU$VgSf77L=ae77Jj#yFxAXq( z_Tencm+c_;1=f;MTnKSqH9V4!q!E>`Azt#bMi>cp^Op5LCs?$EjPI*sh?6&{1zj{Z zziAoudapZ{pA=I6HRMlT1`Jd%7x?TmQjFMxGOJt;8+gAG8w zl+i6vt_49f4(NR_rjR~ge_(N`^=zI@^1N-r8yWP`Z*y=#C_lw%D z4`jhOASoh9I`vye^WOn9QKMwb(;)NUhNbz~SrdyRhW8oB&jn7ym$I!Y)h%GB2EV^% zDjKtgoD&8YL8b&>dXTWR&zAt{AO<(ay0L&mDO$Ffaxoo5q#RrN$d;6_X|S4{0byq zx5LX#r+Iuie(Z@hxIR?+=;QQQ82$mLoaQrq2#`GQD`6*w;iK(kPspXhOz;~$lkf$y z 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 diff --git a/resources/images/android/hdpi/npa_beta.png b/resources/images/android/hdpi/npa_beta.png index 7c38a02155d14c29f07e4ac45fde5ed6b6abd6b6..210069e445e538acb7ecf9566f95cc41f3775535 100644 GIT binary patch delta 2796 zcmV5*?2e**weOjJcja7vGDQKO~i@{=) z#A|J}JynauT$0Fuf3@CXurOqs&j0@ZWU(?|mCAar+Pet}y%G{wkH&wq-DR;ek;G`a z1_o!cHG{X{kHcoV*Y5fJ_S$@W!Y3!*iHY~*7C1b=0T}>9DZac6Q1{L|&1{-t6}J z?d`_j@W$b?f4bYF`~CV?tRbh-ikirFuGN#@j*jB(_P-k&^7-#>w?O#j=FCh?$2T|f z)6>8oALN~#?ZCk9!ovRj{pz%|=BTLs`T6Lrt=oZtlECEax3}@j%gt3)@Adn_*zNcG z^z8Ea<)EO3uGX{D?A2*$`ReN8mzUEi7i2%BaQT z!QH9W>BqRx=z6?Q(&)pW&Vi}S=zFKroxk6Bu-$o;zuMyNj$C+|LRg-gu0c`1=$AB>+$qb&=Dvs1D{ zOp=H`t+;)+Yfg`_(|w`I&9c6kZ!*+~f1YVGf7F+pwJbBXVs6sI&-g*sfB*mh3v^OW zQvic`8!g_;s}S&bHBOZP000MkNklF@eo*xMe-#O>_lr9VXSTINSL@Nsnpl3f3b;d z94nZhXxGs)5`i#EBBJ2+$9)NpiJo`2V^L7(_@dxT1bdHFj@4TOZPvwYL$a3=+ro(qxS705w4XS%|I__7hP{#WsiH2Yf(~}%|kj~ez~g2@(Xo; z#Ifg}v$1irD^XP`$=3qu#N}Yef0Twsw0V15MBYCnxDXYSY@Ez|{Kf0K?rkH;sYskr zw(dnUq)WkLjfK!2?*OwWU~RTjQOSmN7B1}?dz_!@39!BUP^m|YGRihsI2r7$ zVuW4~2)K3YR>0XC|2Xj9L>5cWXEFvxiHet5$jWqH#IpZ>`@@g!zK(G3e*p{&4z~mR zAxBZ?iLGYOhBwD9mxa+I^^Da2o%<4mAmH4m=O7RS0jN%)-s~VsTK6)>*3!;V3S+gd zIWaGlO@jgSQ2+%5Kq$9YtAL=DOnfBPnNN{dz^VhiYK13&=tz_bf;g^177)iTo$i?(+Qxbi>% zWH?0BnRRB%>C>mTZ28k)heL3;*aU;y=L#(~E@&@&J z5MXWIX(y_B@ysVb|K(p_-T(SQAhXrb%H^6G0>E^6ey^-f%HcGMf3(BKRN9D+txh?Z z*q~=nrF6-V7UUnaL`20Esty1C&sU#6LNbYT2$D!HjgEM@qP#=;*68ZSdNxm0OM{e> z?fJ_3gY12MjC8dwU#*fzhBN?Q{{{KfBK`MFQlACI+hCn4y>!`O?=2@q^a3x zZn-QY8%`PGMN0*T`wBU<-1J0cJ5C|v(3pMNeh{W{A*2!g-=HFoZ*w*00f!NXp!NS22Kz%ehdDfv@sLPDgGLO2?DQNBZiLThr`HwsfvF+9W)?G_FTlFd^lmF3 zefH_SySFQFf7`8P#Qz%@qz@bN)ZNUGAzq6dtS_vS4m2jVP$fzbptH^cfpuI6>jktU z=#{m9zIXSd4{!T~ho9}Tt4AKcUZBH!sEs^>h_|nwO9L5ALakb^6tGgUL1lIznP=uJ zWP4K7={Lhse8PPWB-@F0MyVTeWkz8tRi-iOhr1!+e_$JD>%a0R(FlEh|SwehhPQSt{byo3=R9rS|L+i|B2~S)^bejj25( zdzkb4Pd+BUfvZNxes_t5BNd~jBjdghtQldO$QH_-Oe3LhSUrnhr8=8wldgJg zGD9vOGp6J>mMpe#q`>)To{I4-nQ~tKL@srxAa3M?iI`Jv5M^RyO})x^0+f>#X>ulVj@pF zf6Yq2ZOIc_u$PdR+KEchYp;5)wBmX3?NbxnLcDo;sg)Q^MDet8c3nKt?fSGGAWYkl y#Oxv-~^c_S^+tC;j(=*d^ST{Y#hra=tMjMRQ5H->O0000 literal 14831 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�_-;a;52nEw*WX$66x!R$kz~6_l*vaCysm$oL)9jtU-Mda4&7msf498V0Wn5}-Lt%}!2- zu~N-XPk^=FkzpTtyH0PfJeb1c;LE#!jxl+kH_fuX!HSi(Vs5~NkaVm)##dW`ag>d7 zkkZ4?)R&yHLQJ76I=5?1wJbB4Z!(`&CA9$nf1YVGt+;)qKN+7?Bk_ZBZg<5GEm^zYcZdvA@?M2y4wtO=!(_X*X_uuT_%zXR4@9Vj2 ze}W2X`uqj=ULM}}oO9o^`1p`4oHu7a#rH9w%%AhrLLUcD%w0f<2-&{)G1wjw5wT$I z6E@G2izuO~$w?_o9)pymQ@Z=GuE6iipt(W>wd_Cwf38`oHA$=@?AQAN8V*x%1@ylBnFmX~6tE-J0}f46I# zqGvWbITb%e(XQhsg8ls5MfuOT@K)RIsfglYPx||f6aC25v@yS6a?!3TM>>caZ`-IIuppLC7JPjU75FnM`T+qIUZn_XDn=3P{JVzhny zPc|H`a1KDhp)04B1_U@n0Uzw}eWp@A>ZQPEp|d0Bp0! z^}Xh?qT!oc9h`~tR59|d1qR-}eLL{Zh13uKe59<*l*){C%_jRHYqqytuUlS0=;iVsb&1AD6hO_I; zJKRL2Tb{R5KQ=LWps8j4U*>aI zR7ip`wLETDWj4W=>#AT5f4GQ57(*TJDiSm_y>N42ub~ z%WIpZDz+F@!Y&J~3|CunNf8vfMHHv7i@yDjMhd_qjuwXmsX&ir5AY=Va-tDbn~pTn zIay|HquC&059xU1U94=!UKi0T{!QP0`pG~3`QHZ*=^UY6NM~Zqe*|V#Kl)Rux`^Ke zOc=jNlfYs#F(Vid>%Wop*A%jm2<8?#BH9LIQc?N8|M%6Ue_=Sf0||`5sT0;VnXS3 zPc9t}%H%o=sKgl}IiJg-!*48lh6ETfx`xKbO<<6~xHudDz<@C{76X^`;0Yg*qUc}q z48&T@)ipmF#9)=oTw~!wSO&_7eqfP_)I5l5 z6R0?j!7qMacTqfa-}cgm|CWpovJ0gNL=F%#R5ZO#ei?&ekVA!J+m8T{#fGprs~qFh zp`nSBSBXnsfBd!Y^SkkY<}4%OA6XM+)zHfB>2!SR5GXNLOZkKZXo`ik5{U9J8_^?l zEfb9@0*&pezw~|nhtKW?WoF*#bg4(tf8sIG|Ke&OH=86lO6dR;0!>1;9LQy=M%0lg z53)yb7KeWsjcv2;26AL(1_cGZn&%?gn_?b90~Fo^e?|t%1xYF)%TUy7;I}EIGvqaT%M!s)fKtag7ZNR z(a|xbR;pxSu%|G`+E`RBjyi@D8ZyQ%5Z#`!xGsR7`BWr+cOeV?$0f|cw zKK`4re_17?c_@+RgY2GX9Zh5x#hd7ZJPf^>55Icw@sB_G#V>ys_1>_TQhO)tSvwi- zvq-##!5KMHURm<inn1f>n$4p0ZjntM#;_4^|4IZYWg8fd< z%AEpF6J+U6Ry&Alm@uZi{b4H|9E^1`41=4X8+ufrtpET3 M07*qoM6N<$g324!8~^|S literal 14806 zcmV;{IVr}8P)00004XF*Lt006O% z3;baP0000WV@Og>004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv00000008+zyMF)x010qNS#tmYB}RMqzOfBQ^J?>&S-5}Nehi}WHzfdC591f(h`O_3&DDM~LE z5RoE9ItbF6fb^ao(g^9vOp=*7`~8rKAnFypD&GI=^W{i9yFX{Gwb$BvjlhO(jpp7y zo({OOn-jQThl(B9@?8!xAH+P`@lM4b$j6M@!+?c+X!kn1xkysk7`cV-iFNKoCfO8< zB?tun;-3SF1i%d!^m2ptq2)G-FI~wHvPy`mlrf6oN5go2yVF<{5fJz>Y zxG<2)TqpbM@bSHx^as&x&)mz$+W@QB##mgi;E0ZFtbob2GoI*he?6VUT;cwZvub^L zhCZb`GKua~W~=_R)~vXKE=JQ&IRxT?_>!(j3bCO6OQL@a^k`9#(nr3+R)o2v^>eia z6gISI)hu8ZTe!|^$_Y`AwbALcq8dIc-zJ|t3Riqh4qEK97Gl5+11|C%Rxyce(XHLw zvBxjrf)!u#$VQ6;_-EmbideKl#>u*@4xghOP+~7n2GnVbedtqWmCJl{nPaq*q% zQ~||#o&6#0R1nKWuvi3SVZ;nzWB$K*Rw(+2U2#AMa;S`zZ$M5@)AN?e5M@sJAU78E zLYIhcY4cH{DktaVE(U8O)mLgLBSOR(25;U-5`~yYx5ovEUE%{A$i<3_=oUWrjpL_* zJo1sQui{HtlvPdDkEA{Cg%5DO>d;Wv9=d#6S1B-^_O9wcA8SBQVISg&i_?7x3VvopqX$Cgyof0fezK|Hap_3MBcr^JYS68V<1 z#0>d{tHKf2iirvW1&1DbwV^yq-_qqnfAG^f4TtAFD<}EZLHDx;6qJ8WsZ)+&k3l`o$RY< zkNiRd|Kk5Po>*t+{`L*Er=iyVuw9H|{56xa`az8TnB3x;mXw3TnoEjQV zYMjBNv;ARhZSY&~(qF#}0*<>@(!USh_D;#VMqsDWexNA7G7fCx_y|crJ!Ju-kwzE*7M5@e3U-*kS5x4AMCL2``{4fA%oYVf@Wa6P zo;fR_ObPGj>?5Jt(h{FKJplhRE_L-CfzDLK6R_H-r1{5D=_mN-5$H)tV-KoO5uu>VuxfY^bs% zaHi8(sCBrc>Rc0?TNpNKhCeYc(l#&uAVU3f2xLK}5YVEa2X2teX^0z?VZGHA&Lzej z*drkM!R z-!qOjP)viIO8I3h=i$`i$hw(LAi7=JbEad^^mLf7+dT+v?={vw5U5EB8~`&`B%nj{ zPax8>Cy*H{1-1z>fOWU5Xqf?58zg>od^cPSxZnLiESQXiX}JqPED+x*M*%nN@uBFL z!r!^Q9>y@a9pn#cnk)m-s?-#t{)_rfQzU27$-@Ho-_2-Ium-k|ypot23XM94WV_Xe z+77|TofAQGS7{>jU_0$l9A$rIcyLSSpOMS!U<@u8Z9N5t+uymE zJ^->e=by2>49%*Qecn9^^p`bO@dMACNPjO^Q=zP!n^3g~ZZ?Zs7|nQHs{2vlqw+iV=`c3Ix?9-K4A zIqdO)8wZm!Py2vuE|*IQbfJ=%Ptk6~`d_pwY{qy3S=<9zjSpo4$SU#!83#0AG0Q+? zF+z-dit4%p64cXjrtAzdQvIHJAPQJY3lN23DJ_B0cwrC!b?A9A9oY!-3wcg*74}JR;7og%qBq9Sv}a1P+5dD_>H3fYMNDtO*9!Hw|WDWh6a~HYP#MAs#6lDzin0j1_D`; zSSZ?#Yay;@M&7NKaIx(D{s+>)I#<46c?ZNuMu;W02`=8gKdnv|wsK~W>AbGa1C2p^ zsx^Y&71!}$Z$tTEK0$T9grJw*z9=^hoNgH|yYB$ek@v-Ez-X)M$=zTvY%0QcfwM(F z9DElzqaP0PJ;t&evOYBJvREOiWhy2+xV-Ux*_?wA|9pBE)4O1KLyeLe5beZi(HqeI zsA_(ngnENU2r&DqDe@Q`uYPxV`bqFv=w#JJKvwDbxZrPL{;ECp?!G zFw*e^+&GY!kedRhjz$d2+zby6=4c8%L3oReyZ|(?Nv5YgXI1=8Iv+6#avciH)-iC{ z^>&YR2|oEQ7Q-!Yv9lYgiRUj@X@4DoiWhh=yph+kUb{)1h5#5Xb9>; z*<23d>AyoQ3R++-=j9X-CB-6TD1?>udai~Z>Yodq+_4n69kg%k^SIGntP-CLmKGD| z_u|*e*uH!_SM6=3G1PP|i3<=M?2%@l28SNps+4Ag8*39A1oKzzV`QI@CQj@vxa@^daQ1(bJ1kOEX47*MZSCe(8Z&U&F1=nrZd+Z}tN zZ1ESUd5U)aTNJB|;xXBX=H=w%srv|C99+GR&s}iA?rm)iI5RHlz05FBm&&>FMPM|o zD9t0u@mmPQz<7|+GL55f(LXjVYYRMADd3jVAPB^*hT$9d(enD^Tm4_`&7V)8;vi=t zL*z8LdNZl<@kGdZHGfHZG>8%6w&D)58&dwBFYPjk904&`d?Kbm)qsF+o7IN~YfA0z zJPNeFN^{*@e&%0#d=dXvJlUqrUt`#y{X!`Vt*cga_goC}0iiMnPKQS9%^U;rEMw$h zpgy6v1CKA<gCIYm0UrXB87(cpqfRR-7LYM=p!zP9>)`EBTMzZ`1;5g<@Co8P=3n~9 zq1e$^ShNq*UQsece`r~)LSxVKkhR>{*wP%XewvVwvk$~qVzlT7a*N1QY66$UY_6Dl*sD5QKLinEO)#GVVYNPQT?o3P1x-x5;m*)Ic{v;5#;P;l>?{Y)!n)A(9GG|H zTJqimT8f9_A-G(w+Old(h*&>s^{mxkX_|35<23lp>S*q0hH^|lHeCn!@gge$n8Uh9 z!}@ax^w?Jy(dwb&rE!pbtH3@Z1B8|vqA$qKal6lYPKG=)sQrtH7`_H7xO4psH*t-GK}W=nIz3PMcld2i@Upzx3B3rp%@9 zjvWEb)SUI11AwDKBesCvhKnX$-1^bhW+$%6p=V^0;mATeu+aa}bo~ zilb&3)Vf@vXKM?%AF=Q0d-<{V{;9;Nrq)yIfq6?-)vT&eIQK!)gCxjLzW>VoSHQG4 zra?>tFzTc3McoBs=jgAazlE|@Z|#W~0|gfnJrZ@GTb{cqYd&ZK3f{{<45EWI+7b(V z#bN+;RZ(+hi*vmD_mH`&YIMU2;P%F?8t1b}z-2sNqWoMRM2&M_~XW~ym{>$+h z@fi?P`s0L;69BDdxn?;yc!qWi?Ff#|%Vn0!1oOR&H!^pD=xD#oyA=@h(_#MU1WGNH zx9@%-q;}0~aDOtehETSHI!*SJ?>|KaHqWsfBQIGWK#4D18kFq_WtaMBY8C0=NAATZ z4As8`Io#j|sMGV`&3_lnv$OVO?SaCvDW9Z#0;UD=-tpdG3XWd0w&+s z>ao=!uiD)ecUM6Ero^PgB(S`k6`BGTMRR)qp(#rNCo+!wwCbfHlzA)7TgE?gs+*j{wm`TTbf&<)z%I$#Hqv7VZaxvPSrvF=kcB6JA?RGd?G#p_KJ~=1Qa?D z`Sa=d(+QN2meoIE7v!I?ypcB%gvvbS0I(QEHhhW-;>qF;2zRka`52zt>07G)KrmF* zSnYf9Xge-!u^)l<_l!a=vy``#2kYwG*K%Kj!ZYcW(knqhX7at{dywBQu5w&uFxH8l z9X%V244N6x#tDO~$HSamybArGx`o7cm9dKS-v3JF( z5Y>Oa(|jk$tr6i8;R3$jc6z?k^HAy1@?Fcn1LNdKk4SgO+1s*e%Xla>rKYFO0jKAm z%Xsd2(DiZ6a?JuY&s1P40QML6Pm~s=f$}IQp!PK%G9QAJ13Se|0lsk^&a{sJMm9L! zdKs{l4h;GW2qdRcT?LZv7-g$WD6R5I?fxX-|J zBIdQ2*TD2Jc53WY$ZwNyF5w&$=pS5oZ~-g>G7~cs!5U(mZJZ72BukPd37AD$%7W}{ z>u;B$hth@~^Z;duU0u7nU^m}yz2ADUzF?YYnh2InS>?0JgV)J62iqJ3-;Et7besSV z4MOII%mw?p!B>N?g5kVxAKyM;bc|UVvlK3@?KG;>C~(^8kH0Z&z*)#;S51m>%bpVScFDWkx zEap7-Ja-Tww(+d|aUE1tpaEw%1Nmi=MY4dbqzeNtYy{;}eN*djK#-5eUqGM&lckYq z1*CN}IwzF?TsbN|L4Aoqatm-si{NktK7t8kHs6piPX2@BbL`obE2ZyBKmlxnAXZ6)-P(nDj6S61Q)hxN#x`4(#pL z+YS5=cm1mCR}k;8y3y)JpgZP1&wU=`rr%zCdodK&f7sw*0|@Z#F{#HSNUwM7wPUY= zrm15;$9`blo!2j~AE=8=P9`Uy3X6-ZDBj?W#}@J-hd2bv`#OzM9o&@Y?0Dg_h(3Wi@YT1`XMMW$ zzeJ#75#~%~DnC~33i*lr1bAHx6a&FLJ-uOiL$Ep-IcvDrx7I7-Z_6`U2rKM z7k>Uda1DPrHoF?QT)j{;c?Rf8W~l`(ppm&H%ws^TGFP;&22n>|mE}N=u(kIQ!3+gi z^mR~Zi;x$T�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 ACIA2c literal 0 HcmV?d00001 diff --git a/resources/images/android/ldpi/npa.png b/resources/images/android/ldpi/npa.png index 4deb765f60a93584fad34dc4636c128f864edc3a..7970e41d82263a1c29d6a82d55ce9d35573e36fe 100644 GIT binary patch delta 1511 zcmVPx#32;bRa{vGi=>Px@ z=>ZNiLL2}90{~D=R7FQ{Ol6kI`TG3+>hk%v)9bX>m}8mE`1|&L zv)%Le`*XKLWtz=#wn1#PJksaFjlq9pc&*uYxJh=Z*VO0qXrIt$ozH~1;jqo;_xk;a zzg}XnFoeEZ+3L%BxlL-I(RifM%;vqH!Qq0p-&&Bza;Mew`223A)K-nfe!f+l$LI0& z`hvYy_4@LU#c2Bc{(!twh{IxRqSA)HTydt=k-}*H|Nrmw`RMWAh`?W5t|))+_v`%q z{$8#rRgT7mtksIdWqGRB*oU;()(csL+Xvu-E(j`COC9%;NHowAz))b;01SnZe?&)|B1u(#+oPfUDJd zrqYziaf`Fr$lmYd@!Y-B>8O9k<7Al3xZ0p}w?ucjN`$Z2kH>AS)sl+9V0O4huF{aX z&*yfl*l)Ez(c|%2kH)FejPdyG(dNLL%6YHUliTdha<)Q)w%()7f{DLhx!R(Y#BGMI z*NnH_lD*)g#pHIO&t#jRSyWwh~(QBa5bE$vUmBHh?-KW;+ z$9A_yjm2qsxlG90?v}-Gr_YCx#%z7NP=vi#wAY%z+V8^F>a*1CmBnq(;_-UCQK87^ ze7aA{;6EtGq|4~U;R(v<{ns+Qhl!uXlkqO4JcRPPwFvr|X{-KHA;l$oLm^c%X zB7NKKf?QmJKt+$EOiZFo8m%!E<;wt-aB<~qFq6N^ucNb&&k{|<-T%! zvjaarzeANZsv>`TTc8?Au4NmA449d@W4#+hR76Bn+5%7%trJvMR_3Y|f;raMMnnw= zW+E#R*y66Kso7$N@VC5;hK7d6E~;WUznJ{P_#qP!&xH)79M@i3kGb2qzbpmD5qez;TA1v$O75q!3@5 z;VLF3HmQFbp~h;Cy1KgP)Fk8xp5Usgsw%b^?kv6bxuT+?>a$T&fl$A+I1rqUcy0mo zSJI&!Qq59QJ$=TgiLSLHNLpGt=vl&dv*K6bQnFfFTC&rs(Ub4w1O-JPC@HtJDl3ha zm5nwGugA;?vlb~7Dkv0!6vZ1F#;@*T!jfB{PESE#hQb?Jz z=*jCZUoEZPzkPHy4<&P=W^)UpB4O^lpWJBKoTvhWsG^6cLX4Q=5CGajvEZ7Rv^M|% N002ovPDHLkV1ga9Zdw2U literal 4420 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 Hu0mjf4NE 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 X1O9J;+#1;7Rshh^G|;G4vyS*5ozv%< diff --git a/resources/images/android/ldpi/npa_preview.png b/resources/images/android/ldpi/npa_preview.png index 8e507b69ef15c1e6d0455316a05ffb73baa0f48c..2bc0f3cd683ad466b7b048d0600c54136677ed2f 100644 GIT binary patch delta 1670 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 Lp|4)8>JalkQ3|ZR diff --git a/resources/images/android/mdpi/background_npa.png b/resources/images/android/mdpi/background_npa.png new file mode 100644 index 0000000000000000000000000000000000000000..ede7003329913a3990457be232289d955adec76c GIT binary patch literal 963 zcmV;!13dhRP)Px#|4>X+MN^8yYMIOO_WDwZ!cd69e5KK8naltG|51s; zQi;P+h{E>y{8Wp>`TPBGoy}E?#9EHU{{R1Cl*nnA%JcX8RgA>1$m3s<$LsO;C@#>F@W|;_!^H*XQr{)Zy>6%jNO*`tbDnqrl%(io@aR z^x*3BbfC_3pU%kH?8n*cmbco3s?@&I=~s-z=TjIQjj-3m*X!u-_p{68)#LE-_4>Zj=%c^ijj`9R$m5l_+Fy~!?D6=t z%;kfs)3?s%Xqd{{A^0zZ$lPN(TCr?<^SNi2i<)DK>`Y;NcK$TFsI3fRRcnmiZ0&z- zo4E{BT+@#`!vgz_!ck{W-{xtn+E)Fp%l<&OSGNw+)a6{ORbhXn(z4vtiplNqg#8oa zlb+7vgg@A2ud?&jPhn^BsG4U9$X6rs;&`wqu|$*>HqpkLeU_MqCa1Yh8GvsT8xQ&n z#6y6#iDu)A#?T)L$GUOZZ3DsP>fwf5v>VMHnHG^ zJZv!}tu}mN6|AfRUfOn@p{Ya9v);qYdOGZ6n|ocntoz;s$-)jJ&*{#OKbYJ~1L5%6mMC--6pv-iPP% z*xcN&oYYUM-0!#6MmH8$;Kl;qGCd+%CUi4+k7x$vwz(P~U>f)VauOnQG@*%T36(9; zLl^issUJ{=SJ$9H*(q@>cMVuuzeyc92Fs+w&1FCzrG9uPZETx(AU*KYiAs2I|M6yKBjjA`N>+%ljz_-ST}p{ZUV@)nIl<3Mr1kmx(@CQ?HH_&x(u%_@BeZo`H=AW0 l*2#_`6$*typ-?E&;U^Daf5h4&= zl_HyvFv1=&VFn_gB&?_?TF?R-3PpnQKfK?4=Y99ybIAjf$49LedVdyP*{Ov9{NUpJmEWiqUz+T~wL4jwP z9k3N!H4gl*Hn>wuhk;>ai41J;!~V5g{1+h)`@tCko@e#I3a#-B2n8UJ-AgH!dZmfZ zmKzgz=1@ymwH>fxJRt!Hsj>~=9`NPtyHYUe~ z_|U55An(oA^IoYUh(Nk4i7p=j3+;%mKM4_nDy^exT|o2TD%<2XfAA#nEYk&~fNU{L z6ZkKwb*|upE8F9hDg+DS-)wsQYuRqk6d?@25&Yv|DYZ_Q`Nx0*v0jd*%^4x&_EF1*fq7J&3(!t%IU7|Xi>^Nf+CsC=WprIG z9Kzr34CIY;ePLZpxG*wu&2F zC|Ys&bnsKp=%*#wheER=ROu93W66p!b%;?+{F{jS$EpaWF(Gqe5uGE7IwF&czTQleN%(oC9MNfIdH`iM$;x8SQLRY0UEd&QuizIm!%-ev&KS0RQkhLx+2CxPuE+eI zsl#;9QQH!OKIv?@8A{V>T)Xh!ZfVaK&CY6hNn_`zb9IeT)c*`uqaV_=(qDeOFOR`@ zzS*UbV6-+At$Nnl|91M}qu-`@;SYCPqAX>XMYPT43l4FLa83`u`*82LdgBrxUHO^T?4^B3`ozw6<%o{y-Y||yYO0Nall$t&{#t^a^;jV8TyiU zW#syKmFIG&0cP9GkCTB}{sYsTRZ~w2UxMl3n9itsb9L zBmBjV3zq)nPu7qJFJJV}(-nH&;q<8_oF_DlsL_q2d|lyzQ$s2i2EGjgE*ELKo7FAT ztfet1?(}in(dzlwga8#juVvLJYX^nVA0KDS|Liu^6>0mPis0!lZy4m!`{~o`c^_iF z`_p&%L#tk>+ICBaBHK2csvId_RWrXojXaQ2q`EjdaF3(rjrg+N&(T(hd(2iKV~0y} zo-UQOUU{$mip8%y`n7+qP5)iC{tVT-P4n^Hf>x~#=|{F-$+rUB&~#QxVVd0?1P zi)a=_c{P6|;E}~YW?OY*oUAcjXG*ER(6>mFhiGVBqCwvqckGl2ruk=Hs&VTjd-p#i z3hb6m5}o-Y1tVr-N|X4T%|@zrqKL0sjpB4%N%UsLJ0005zQOa|#bsKh_RC>LMo=88B>z$VL+_$D zLCyMpMU($o{#BUlG6tg>7Q74JplZnf8h?_c_jrL~h3?NJd1JZ}n1P=W|C3D8eb8== z>9H=-P(Rw1F4W?y+3UL);>A47M$J#H~b>U2U8 zsUU(SgBVgxM%7S2l84yW56ABnUy=j$a()q1(J;scRs?31*tQJvB(~A4UR`jovTi=E!`41yuuo2|Lr@UR zp-WV>M?%6OYY04%*ybe!@dnso^AwU-tzsCF;!~&knwNLf#01;p(RS)o3oGl#(a|Pm zW@>!=j~_pdXf!a}?+nInXQyw2dL0w6-OwaSazel0|+S!?Oa9GLDx2^cyvv6wM z!eXZH$LAZJzVY%UeR_Jz)pbBwc_Afb5sN)|_byNC-dbttEE2ib*Z0=b z^Yg+&H7AEn#l=q(6Eqx-92NDUwRJ8y_-J)C&Hix(|Eb7WLSU&_{|Q4caB(_|8ZFJqmB6RS*9k(iVM{YYGU@l~$$M7110*%EcZy(!uv zctO$v%#8m4e);7)E1H!V&Hfvm=kgAk5v

3V~dLioj>akL1y=vWsf*zS0|mg9Ip- zDKI}MQo?;J1unwxj`oc?lZ<1#x31PPu9bCc6IE)`^QN7y zLQLruSfKc+D9Ou<`H$SkcTxQ+hlv6|Hn-`^q5h}T!}|Ba!%jneQ)K$SL};?(@re`$ z>m*0JxnORD>F(on!;WwKbfOGQ2C=tTGJp;BWPn+ID? zGgbJHkOq=`>qup*2jW;^0sH=ZGD6mV^O^&`^|7{W!NJLqu9i<_FqMqe<@V8@jKQ$# z-RZBN&`mzML!>u(!UOs@QED+RaM^-}4K+d1uz5=c+wGMIi}F9PGD3rq}%NAE4pKC8*tt&ifOyG1-M- ztqHY8_=5@-lhdz)CXS%0o`^l^^-3WOkh+i`-Fv|5F+S2-V)5}sX%uw(4#Ba!qS_l`t%8+{Il28nVt zXzmfBp!*stR+~H3o-uRpB)g^t0{Q#-)6tLh1H9O0S`m0v1l)4*87_VQ$W*ZAevc;) z0CY;8fB>Stp|^k2?wZ-DCXXq`(8c1<@_i{|jm1hto`bORegp!=4Wyb87WyRMs^FEZ zSQDRDn(aR9U2%gcnd$z23ePVw0W#=e!t!kLh*V{1mSZ8D>lQPR*egjLRv@R&a>hJp zimvtu&;UBuENcVyOVfrfl?+|ZLgu!J-#COe8*Azi9^361$$?TxdeppNZv4 zH5W1|{@NA99Dcu%SVnNHgg==+RM9iFb%t%oOPLy!+?jF1Jer;nI)ni?IK=6kMwhbh z=w48*#R)-PY%Q^g7(6Fn-#*{TdscO)PfPMTM!=e;0JqG@riM5cuRTajP4e>0JE7*~=^Epb4=^v8 zyTDo|s#nZZE}mtksO3?nufE*aSlS#V^2q=knm#%=-nn?MbH;gBwiS&2kqhjiSaii3 zp1W8_xkm8*C6!#F%`R!=Q>0W;*J$7CPRIgGs1tDc>I3~ilu?P6*&lPi6BL5v>ulqdX2eih_}^n<@C8 zl5D6K$);;f27hs)XB}gkM9b8(nAypH+PEqCc9^=-B9*vxZAJa$@7_NrB9b}Hq?HB` zufm(w!zY>8{2af2djFkRUM`_|n;$AcLBA36Ig|5MjK{Wlc#)~qT- zL-{aUjxYf&JNr18g+)Cxyi_cf6l;)D?nTh{GfxV@43Ww$H5=MqF->+GmH8Ws9R&6Rg_|y z*Ve^g9Y7|CY~`^IFoCqBt3W-oj~1OZyh@3)d&IcCc^D zb_}~l&f(0@dK-CfiYw!g_9&SUW$&`G({h)`tq$|@EFa1&7l#TX7sYO!RdiGy%#AT^ zj58+Jj5s4QKU6p>S+{$_A`f2V@I#@=Ncc*4*js*McOPnI>iGd$X%-IW82JO@?iYaQ zB+G6$v3&6lp64?d!wPaCvWs)Fm*%B&L&G4=15@+Dr@P6cOH}wKgGCTAiIT=_?xJ^> zpAgj&a$a7PRh+J!aGdd3aB!0eaC|fG; z==HgmyH~Ez%XDeyIlJ+A9dbnEgDv-dw>xPxUN!&03yIK^;~_f2Kc1`cXf=lE47@W{|7z$3atPD literal 0 HcmV?d00001 diff --git a/resources/images/android/mdpi/foreground_npa_preview.png b/resources/images/android/mdpi/foreground_npa_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c62fef84345ef2a7dd192c0d444dff75ed7ff01d GIT binary patch literal 2702 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 T-_UHg00000NkvXXu0mjf0I}7S delta 6231 zcmZ{pRYQ~wpoEuNq(M@;LmH*SrKCf;yIVq*+II;7K_w(aY5_^}Z&eu##tB#LZJdd4+8zgZg-X*m|>tijsBMBjPWwLqua`Ij28RX_Y zY=V=bF@Xwe{nW2n6Q3+NpJ951k?}~ei4J&)OJ6glizy$38YVy5B#2!ss|xDuy=c$n z55L7$I$}w9_8D_8VNZKtL-$UnqDyyCJ?RRkN3|SDPM}0^A8yCCMJK{u-)iy?Gc0Rs9&K^u-LowX==rtEn0}1%-#)ez4~)m1G}UF z@`5s)A1hv_<}CmDZp~y{mG%qDGq-RWJbv-ej_#V$ntc%NZkld;F1J=k*n542PpDkhfwQh-|a`D?rnOl zCj`eOKwEB!aph>15ej=ZaJ8T^Qrg}GNEDw8*kdpl)Ha?6yb!MhMi!Zlf(z0lYbD8E zz1|9OJN_D|SNn881=Kerh=w#j2!_kA^c%e5WF2+Py~T0Q`NzeA?WYUPh>Q?jAeUye ziConbzz#qa4e^t>_;Oyeb*WvCWp+i9a%)GEmZ^U@9^2H55%tlCOO}w#nix|8)R9Ys zzPTiw8dv+hc^fUzx%#g_iZOM{3gui3f@y+tkeLk9065gdu4^|er6pZc7!@pKq)9Vf z`kSZ`ug}a{jM(f}tx6T#cv1gqVSDW}9svhJsnaVH z+7I=Eml2xX^-Z#LVkdgnP|(gX9zl;we_{>*3myX>!fZdf{B9*Ya-H`0>-Y-O>{8;n zj?K+9SbXMR;QaW-^la%zs}{r|`wIH1PgbFCHsr>vT}g@pQdZAxF4POiC9{!FO5KO{ z58d@`=yAQtUmEj{S1`JH=c_cCq%yrGD*a>0O62y~x4NrUG$<2lSnzvB{CVQa=s{4a zD5_D!9TLp1Y?)a96s+qttF0t%0X|EPw&jZE#wT?^aI>pJD06!u*Wbr17%V*2)EcR4 zcWe9Y6%+bn zhJNRs?TY49x*{plD46(q~3aYHx_K z)1pBA7RXuyti-m#&%AC##gyKO|2A_*BM^b?IAt_5wKx0`F;OiK`1~n9D31e{<^M{e zdB~$aPAu4J8bsVkr~swkagFaw&zzMYJ<-`oM~v*THG|rae0FKBm_G;R-x-E~@qolt zX;?xaUkmu!;3U8@LDB>G21KAug*W=GT;7C?mZ*7N$`U)3u2D-OMZVwTT_(DSeA!I$ ziU{vZS(G%z#tM#h%uR%Yp(EX3B%SQ1U#TGkv*BMAV)1&M-s>g68Gp!<<-3-fel@)G z`TY6=ytGr{NNm8`EFsU6sl#KRTPajRy}1;LLBiKYrWFP_X}F^rLn7Hgmc(@n14a!f z>*H5fC)UUnTL!az?6{*6ZVV;))|4EUVciqDvug{GC|^s0^!ZPc518!brXmcbNZOKo z(&z&>{Q`8tX;V$vC_23+2SQmPsBrJDN(IamYzK3R$Po*l~aCH9#J5VO_Z%Y?N`9tM;@tbt> zFBqH6P0P$^F6|7{UB6~6W#Kx;8U_xsvUiNp6{%$HHee%CIxY&jXbCrc2au+oUPtt! z3B^y0$6kHHaH(M*6F?xu)oHJWqU00&G;mdR1P2I3+Fl?wu6HbwUv&g8I-N@51Os`J zbxYs?=sx2mlcoGToANzd{jW{@j61e6e;9QJPHS)-BTeb$;m;Cq&;&mfwk}eC)^<*=@3!(AQ$vr`$tnMf#X0IS>f)No-_-`N z1ELnI&xJP2PRvv>1kGvnt7W^WoxQIG%}@G+2?YpyL?Us~W^A~P4h+NDaYza!3n9ur ztNtZ#&^Dyfd-(jHULFJ4J9idL37iN#GQgV}rK7%w_D0=vFGzN4a1Byn94{o{`lF2B z&GW-=-7B*jLuendE8e)=mX90u+vu-)z-Az|2|mu}&`TIa>;viiEXr4T2L_!jOkjfY z?Ol)+LbuC}Tkz0gIF4aqq(Ke^48pQ<6~q06?I0Z`$wrbb9Am>E-lm-Z&tnShhh{Nz^DH>->h7)p6C|=cxFT%!Wd3(n3&(~!4L|%P<{A!g`ELR0 zUrFg!lSyI>giB|R)eQ>5U1lXz7>GTm5)S6>ExY6J?JzTL_9nmG(lC|y6uHpj3Px<| zcCFN%`!?dNWi{kgFSd9I(~h*)uEoKufIl;nvouKy8!gXqXyx)Mn&UvvW8?^G()wIa ztSx*2Q+O1ERyW_}R!@g=7UGOIR_aOBy^+IAgjpCoJ1z}ds zom76%!g7lb+D}vKcdx6GjKvu;AF%iec8hO_=674UkbaNceOQrms1H+~iw9P} zoLGKANW$u~B%&UpKJN>M)=1GbLdv$*zVLGiQW{|#Ncvu>Mfa2zPyd;jZ^T$~RSL^k`|5zCv)S%I?P)ux}S$5c_&{v3g zz&3_xdeiOCVg>|0>$FAurpXP%U|tX7s!@{Vt|Y7yHM|Zr;#grWS9p?s_A>0jb2Q}K zS!}4y)I&Fn0&=Wk`;cf#H7 zD-UbqJ9z2dmk3Qm#{qOievt;`6YSfzL{?O3Eh=qPCO&`(_+^U@-3%?p-x=bAmkV5b zTUP3O2T<@}8YhYiw{`80-U%!R8kl@RHLE$zB?-8-vW+<5<4 z`tJ`!UYWD#8C;C$3cOYEhd~iECO(ZOc$gp z{7z7sevA0WB6rr@nAxPtUR-6Bk^5$Q2G4h>hy5WDTjPX|xLWS|a}j!0H-3Vu(m3A$ z#koJCT_oW&eaUrm>unnNcloG>%RA)dN1+AoUqJXduI0cN1l!=c3lQJWnN+ddRRuLJ zn#F8X>~p>kjq*yoN9?y^%vY{srm^Aep`A+~>E03!TnyIcik9mH&)3yW;#aqp_CT)z z%?2MIdy0Vw5r2lSeGl zuueT}Gxk?$zVmGq5iOp0Hyxnq^~6>l9&J%X4hhCTIITy2rn72Y`)75FkDAED4IJlr z;vX2RnK5*gGl)gSd<}%CIVVcX_MOWBhib2f87U>7B`f~JUZtI~=q3Y6cpZ-(B^$%x zMC$J0n~SOCj6uGxWZLehr8QLknXJ5xP4-)6!^7MAY5Z8f?5yzL=QyMoaw7=)s#)N8$DjWh}`L%1A z*3a&L(UZ{ZDG@1iNyIp97FkQ^x}8mIC#oKx=uD}K7K_{*gb+<9n^_gsn~pQWeN_~7 zQL|7{;M49-XhUs}Kz6zw4;3yC)sM+jO&W?!!h97DDp zHBYfB=FQF;qx z{V&~rqIRFQp|8aFt2Uy!h$Aw2?^>L}2Ba1gfuH&I#9)1Ag+!+YHch=1(b3q8mK z2f;SxP_UPce%}m`6-m%NrfK9wl662M?5GXiqvQ(zEDNVg4N}}Y*^l8w_B5krzEq2r z*3nVH_Kn3>SOUyOQ##Bfk=UWTp67uIP7m8!@gc(|3*yv?mTl+NNE)%qSMLL_WW^Q_TV#Snw>)@^ zjt;F8+z8BPI)a7?oBev%l96Qvln? zUKvj~-ppkz8J_UX6Fz-i2#TE+1>RugFv4E+a^L5bk4%T&ewX?~d}pN) z*eJSw8&;;tsnxctZ9Ms)#k>nH`x^q%U48NMw-J78oN&XLr9x%a14fiH4d;8!9O0=$@6NzUp z?1WQsog3q9aQz?#`zB8w9S7B?MJa^sOz&K<>Ybji*hpbNJi2`|_M`0iTJd9RwPCs? zv>8Y8+5m3DtY$767mGu5aw7mmWIM!!W($2)8r#Dy_T2eF+Jm zBny*wXItSy0;?2du*`ZCMtK*d73iHicy41du&N{7I7-54^)D4xZFUruzUdnAX@$)~ zJPP^svR*(3hQJ|O_2TBd==3f|yesVipJ4t0_crcNX6Co@3r5QMX2`G#e)$;J6`34LI zhDdv1IZM*=c`evy)JQme*%I`lb9$p@iF^^Se|u(-V@kN@M*;s=NRS#hu2VO-_`-`< zXUQeJv#}GINddZBO{V@S--3eK)cwtJ+uQvRPwvBS!QZn%u zT(mEUe4#tG@I5n^$B!3S|u5QuvnsViOn_?{7qkXQNM>KA{8u!9VY zl|-nSGDB+#mQdOQD9851y9RzcR7G(2Zin~I|!L)neZ^7vQ$jP2+zQPRdpATaqDQPTh6AS&ryiV~ccc73u_ zB1T9V#X35AyJO~ZcibX4tH0zzd(ZRm%@wIU7jmzTe4_E#8mSXLm`~j&J(Eh!hKYH$ zARV{K&+^2?9UGZtv|qk@znwa&HG?m1w{kL+dp)g57*@A`Ph^35){2a8ttmm(RV1Rw zt))Frfbt)e4+nKmlf5tYQbkvE--y#@=+5|x`>u!xzTFb?*|wS3EH1A3fFk`q0GcS3 z3py$dR_hD?=Sh|Gi?Qwa$xh=b{;dq@FuxMfr|;YKG^oSxdH74Rn4dB?$XU~#wt-TX z@rQm1p)D3~KIYvBWJHZ{hDox}=p@=`e&NX<8o<{4D5I$057Wg5Zh~IStFMwHl00ix zSJcwD&*{)U+m=gZwd$wwJH+sv5c>HUntLPp+I8`C?~Sr($U+X{re{;EHAZpy6JFlk ze(1=~x~Y2c>bxz>?qO!li&8^JrGO!Gi*Lbzuc~xcz%t=OW%_xH5fALgMfkCC4k@L< zaUu}%oi}cN4xtn!*YN~066+eCTHqi4Z=YxLRW$Oov-Y)@u=Te845*?2e**weOjJcja7U!Qhj`Yl61klf!Cbn9Nv@##W8Rg}ULo1_o)fH-EF;T$0FS zu`+|W;DEH=V6QCyfB*h_q|soP%aOxqda&H~`Th9(_x1Su(`9AYb#?5yxw{GqUX;mS zmC9zaHCnAC`~Lcz$$8i4$Bn^b&s0?M&(Dg$VZIm`Q;Njz#>T-TBj>BDh`(Lr?)Urr z{*S_DQjN#K;I3bi$L8_f;gyxmP*CQkrqSi|<)Wf)wmxT_f6wW$v9-?Vg~46+-{1G- z-D`65z$^=Yn;ul)syx5^5Bq=xY?e}N=nyqa?n{> z?!dpmA0OwasA!GAgazSQac{{L&VIcv8)w$$v;f4bnP#^aUBbn*D^?)B)$C@@PfWB6o z$LG-Jf5EEJjP3R3lfUAl$mX=m<*Cf*-01U>$Zz!Z?uLCTk7OWzkusc38+f5Oa;-Xe zuG;zQ>#Y+5n!(|pxYmGjmB~Orc!R5sm`0R=I)IeB@#g5vadn4;rllzfag)HBYA}ha zPoz;NuNMZoD=vn*SC(RWq(B+!w6v)eAfA7if55A|kxgcyDmb2gmpa|JZvX%Q3UpFV zQvg{K{|J=u^u7M}=~CMO00d)6L_t(Y$75h%U}5B7S>QUd{{fA%s1jj(7Eo0p`nRK8w4ah^^k*6cbbR}NQ06;x(2;V*6twC zV}Tk|Zqsx?;Ng=uVPQt|XCX8+Yg+?>U6LL~dVBi%-L9Rxz85(8+K5(7fN9W3e|50~ z0v>N9r86Jxttd0}{kl+qk9XlhUgNCAHJKqW4at@+Adm|7@0P;w^7%XF&Z`j>0w13Mf3JdliH%dfpFwYt;erLu;k}tYj!w>gg1sOc4iyz< z_U`-fWi}r#p8%hzC@-&QzOzrTQE@`Jp_6F&9E0E#AEQD;qwHX3+ zym&{kMOB#<3A^Ki=ZcjF6j!F#@CpKb&nqzd*T27iBKOY(#k9u}V};mYTZ8?68G;9j z%YH7(^yT9f%M-K*1r*Tpe|v1+?tJ#*Lt;(`G-)^-%odv;;Otiwke`*lsIo>tbTKfP z_ymoe#0+wsW5WtH{Ac9ksLx^oaSoo}4H>XaW8WVk)Ez211GT*bA}^b?U+ppzg`cJV{mv0%Q}H;3_J& zcK54809XSA$hFktE{wfb3Y&NK_xE>#G{}L0P?syd;$Ck}=sI&CfM{@V5ZZKVBi{M} zSRAa6>J~Qd0cvpYYN_qe$EZ-SR9UN<*8qzf*S?5}*s3g&Dl0{jt6h>Sc3{)t8c9tD ek{c(aHh%zQV_l$7pn0qI71>F(~ozn9O8 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 diff --git a/resources/images/android/npa.svg b/resources/images/android/npa.svg new file mode 100644 index 0000000..4a943b3 --- /dev/null +++ b/resources/images/android/npa.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/android/npa_background.svg b/resources/images/android/npa_background.svg new file mode 100644 index 0000000..9094ed2 --- /dev/null +++ b/resources/images/android/npa_background.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/android/npa_beta.svg b/resources/images/android/npa_beta.svg new file mode 100644 index 0000000..0a49f29 --- /dev/null +++ b/resources/images/android/npa_beta.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/android/npa_preview.svg b/resources/images/android/npa_preview.svg new file mode 100644 index 0000000..f99cc1b --- /dev/null +++ b/resources/images/android/npa_preview.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PREVIEW + + + + + + + + + + + + + diff --git a/resources/images/search.svg b/resources/images/android/search_icon.svg similarity index 100% rename from resources/images/search.svg rename to resources/images/android/search_icon.svg diff --git a/resources/images/android/xhdpi/background_npa.png b/resources/images/android/xhdpi/background_npa.png new file mode 100644 index 0000000000000000000000000000000000000000..582287408ec5d2a9928a9fe25c02cc3462b90a2e GIT binary patch literal 2073 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 literal 0 HcmV?d00001 diff --git a/resources/images/android/xhdpi/foreground_npa_preview.png b/resources/images/android/xhdpi/foreground_npa_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab6421967cc108efeae9ff2493415f814dce84a GIT binary patch literal 4855 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 j7en*+Pu2f6_LlxotKT_ zm_0(qr$x&WIsi%=fV9l}Ruj#V`#)7o1S4j?v@L`;k!%t7ZQ%E4bjJIJhwoA_Zduixt>h?a%QB^(!8jYBG@sCp$lH@gr_|-`!@WbAd9B2o z8nK;&lPY{%Gcgx77(_kY-#gyU?p^*5zfmv>!7c7Z)lTjlZYG2KUB32tZ2UQ?pGZGE zp;z=#kYgKVL%)LHKa2a9Aq_L+_5Ibo`B3Csa3$gQ!76&L`uLRIHnvuQkI5PQ9N)e$ zyS9%dZBurB;#ay`rVAo!CgHf%tN|Ywiro2gJGX=MZMG!#yMur6=-6t{e}t6c;qVj` zrDbHLYqp}B2;QulNb@fKvG|)xSlK784}QoS9$(yzg%kUxHZ!^x!FAKaOYIRTP%_3X zzInE9p`nYgp4CC}Y<*sWk7^-omW_Ow*&Ny2J1!VlP5wqgPUTLl4}725_A4hqTV`S! zXHqa9GcaD0YnYHOQv@+Hz0WP6Yz#fIo;u(GO2>lT@<$A!(O=u@YTjMsmFyi zr-zz&o4SH>ja|z5k{7QHub=1E1TqZtzaYWTWO3GR#wEc{bF^;ESsxE>y>_=Oq#95J z(l0|@)G`T_A+#5%g%0v^1moS;6Vy3gy*zhh#CCNo^M^?6CBv_Pn}Ta2z~{#-j+|`4 zCW%FHFlrR7OHGHCIUE&?nqfC}1Vl770qiP>lOnTM>&_0qBr{NW)5?L&|l zdFcSv@@oK;OfW11FR6|@xKe%zDs8;;WtAA2FK|?`628NRmVwx0Es!b=xRjm7Viq`A za*s9LMw~bwOT@Hh=_I}8;g+zK2iHr5cNNMNNORtjf;mXM+*NC1IlCe<4G}Yfh+Q|_ zXJbT{QTW)PrN8h13*a>RR6g76^?jJUX3mG}A9o-zv`g#J0ZThu)Ox9sz@Oo)<2RKN zPnqAKzDd!kAF8(Lhri;V&YSXN@SBA^ixU?sCF{W)j=XC#PL{S2B?kEgV0kF6vBZ-F z9Lp&4zNuPMqCG`*U!>a)r`8-V%b z@J}W-{K9RX>}*ME9TYYKZk`(@h%W z(^R!=W<%UnFd%hU@HjVvS#11fERx7=f8oyiKWU@yw+zHm>jFo*wjtM68;fFoP2>>#=T@@BH7i5T{Ri;5NaQ17 zMXg}DOE!9y5+Bq@uuZwLlc9Uj{NFPLSPdqO4bCBW2^3% z8OUCseM8~aPMn4(&i-P5l;rXbcdR+m%Z_2`MQ$zXz!Ocdw~`r&FRmZp{1bJG&ZH z?F}7L%mu}-gN#&)0ZVwFt;%qt8cINd+_m|B@R3vf<=#b0w!|c=qK!m|{6T(rfYWI9cN7b|4na@=TdhY@>HGDd2=qT)1eRkZKFrEE>qs1JYqt zE!>b|G_8(agYmO)G2b5N;7BMGTIbBP_5_I<>1XHEYO}oqtl}!U1YUCsWU{B5YkkAI z0L^$F{nM2gu-cmDb#|snD6>$;sBG3k`%Z2ok2eU2PkO} zt3MtAUb%cR`_rm^?Rj<DujYGKFUz*xeGu}%2eA8W>jcn=U9$*-qRj{8ocUD} z0Eqq14KzuDJL~Ps*;lT+%=GfUirtMSLCi|}M6wm~G{;|=$D>v#e^%~E%Fy+hadL{2 zX>JIikmg=d0n^WvKdR#6@O1RO@4fl&QxQlZ@NxYcyCr+;Wh?WC`M8+pDR<~um^MEL zAK%OyobW{F0*YSekZ8wo(B_nugBtNI+C6G%DQPUjA-&FU$U~ep*TTy_fixw1`PbYP zl*ej%i{4~L|1PW&7OC{{pkG(ENgOs3Wm1DlH#E{aw!9nDI05aUCd&m{xYXY>zV!+M z&H#-0Ro`spcl1#@HxwaU@q(N&W2Hq+Tlk2ita-SuIIIUgO3O;*tZ{oewV}YFf|M2V z-uch|-UENtRaZWyfyB$vu`1b|K{Tsm2?Jgx%S!romS=p*8OVo*A-ttx9 zfIH@5I(KE85)VZm-IAmeZ|0C9F=y($7NJXD-?60#we|%K?_40m zSe!Z0{=UH}4I~*E{LBYewjZHVc0++`O0}&TOAg8iwW-~g@Yg<58*G1wuXx(3K`kUV z>$Xx0Y4Jkj_1I*)I@nPR9Jaq!HajFQ$ok^YJFxQ5bm^d=>*%21jG5q<7G|cBi2r*@ Ork7dL;FYYdfwm^Zy-L<&8OK~kO#ogTwc>U*ndLP~< zv%lI%w%UG)KuiqQHW6h006pzytKwYH2IIPfdBeBq;lVX0B;3S1_1!Iv8d3m z2>-^EX7U=!0DuoY000gJ0G|J`z=r^UJ0}2eYytoXr2+tiPMK}$BL60Urb=?s|L|XX zl4=k92gpwHdaeKf*T??|CjCH?@*fk?O+i@(aSII>69v!z2~89L;HFZL25EV%oMm~s zCCaRRul8;#eh3ZCo`yf_EWiU{!K=d~97UqnP8)+j*m(XRcm#FnNXp3Dzp%3zyvXqK z44sa3%h%%%av%Fh>~g+=TPL^dFxrJ5ca0c7boM&)LUnoO5~SlHN#;BF@vF$=s2ka@&~7s>!>b^+IB zIJy0T7cKLBe{ZUq8lkA7Hm|h3t>QZHV=TU-4T2?jXrrQ}!|?QU0=W+fIXg=T^kq;bb%= z0-*#qZ3(ypp4P~wJ-e8|a3jDA6}I%pDuEpZ;PTQhux+$#OMH<17MFqAwA=ic*K%A@ zu7O6|j|)znm+`>(G1H%wem0J`_-YrjdotwyJ*qyR_*CF_s0|q=EU`kQ2@+tohOJv~ zQe1@*v}?z!iS`tae*2mP{B7I#iyP0)L!VL7KiE5CY?&EaF!L3Y?m%+jPlRJS@ayN0 zx#(-;pZWPn7I-F9m?!7tg{Bh1#RQ;3&d{l$AN=GkWg3%OC-H30{286Rw<5A-I3Q|E zv;oQx8U~|4z+)L}<|GVi%@bkn8d`HTs$apcS4%IYitZp;zXu>l=^_-Z z9gQ)$qd=?F7>gq43WGdx4+V?Ud`ePS1G{4em z`ECSO{L?cVe(&@xFh)dI^Z*!p>YfOaP_luX6zwGCG*1HEn5I)RFqNk z(Z`TIz5qc_nlR|>pCLMlW<>oDHq{T>5~18t4iXpyb`B-ZvLTHr)xr3}_Y2Bf zhWec_0*i^O?NmAI7M{TO4=T3BA%NUc$;Y#UxJuIyIw3Iak&J;y5QNX+knq;js zI7QT}q9p`s(COY_T>z9@f?9oq!hp%MtMWXt{fwXLz+FjxpIbh5n-njddpK@?)Zr0<2 z2!;UqpTdwS$^!IxS z&H=)0c+QwOZp2bBbqq6MV~k{L7`m`WPcZ%+g>J{9vp|==wwU8X5U-0^WH)TBVmO*3 zI#)Y)M-{zfq$y7ASubx-eAX4bF5xdTHr3z`TEvkQ36F%y`=PwHNvqUnT(uNZAk3=u zSebb3J3UDYyh62=PVFSPoP(kDU;%+n<946;hpTDS5?b4z^oe}(7L-??3B^lQw-?35 z4`t(5D;7V3n3X$WqbY(_)5ikV$)|4#xeORj`qgnw5>SS@(kX%!;sjBcjy$u z2KY;KvxEpDrLt}+=CZT*#!6t=7$NTUr`644D}_534a(fcRl3(trQ$43#VZ3E=vAU=Yq#U=PV6iW3qjcs zx8HNz`^sv}o{k4V z^t6)yyvxF>zTGc+0`iGt&0rgAiCNCD+FAS!jmTQkQn9VQKTN(7FRt>!r2BudDE(sV zWuhWsb>NUIT>XL7h(oK&X(O8IoC0P^trl`|`TXTQOF+oiPm4t0R}^`p8K<;g-2MKb zR!!_@9eqzQ(U4CO+Yd!AX1U>wlIfKzeF8JeF9A8)Dv+IJU|qThRZ7S>mF_1F$+oi_ zc8;RNHDt~DXfE-*Bp{Rmz=WS-#)F_T~PSpTfpOandtB_bPAv zEb!*fQ+B$fj6KMm2~`AD{Q&nTG$W{~;eMbjX&X#j#)&zP@Nu}A zauQ_v`fycb5(_c3_XY9dSS3w@6_HfqE*_ieCVMVS+@;x!;;LQH9%I7o;7{w2CzR%{ zc>t1m7}`{#Ec~McKw)vHyPXZ}z;}zPM&2-$S6lXb1Nf>Fv;sc3(YBh%$xb!^%(pvN zxE)W>VaQ^a{vu|+-BA*IH-afn)DzJ_!Z@B|y!f3zzmVTo6n*fwPhaVW-In$4VUXRA zbbMl|fY{37HU5=VN&H*4zB9tyG?eS22Z?;hZHr~T3sxA9M$YzyB*qJ2_fxG_2$0=G ze`X=1`_{0)+UIV_X3{#tEXhE#omv1eyC=(eck%W?!+J3i9r4x>)2c#4T^B3GONPG|WD_(bSbl2G3j2N_R9kKAcOKPX+V;xFJ1Ak>I`iC549 z<)4jWKxHXiKGyjJ=N?5$s|v0e!K=l7OnsXJZiSqj-4NF$4zQyDJDB6Mom{=bGc0)R zMn&Gg&C(wF*3KBc!))qIxi>kWKZRH%L3`^o;QQ$Y))~OTPL{o!3ls6Fdf1W_E%(c9 z*^p_0mtVull;niMNluDWSE!`x!DKwcTNQDb;KXabR?@_=zS0iV-+*5t7G2G>3PMZ3&Qz%I7sWhcJk2}?4ud@CXEloW2V2N2u1$C_cn8)OT zL1!$EGCk5>1SX$lN1CSxOb~{XQ4Wa}dOO@>BtZSB^&>5FVSWvvsneB8KoI-c-eGMj zkh^7{C}6H*%8*2?(-&TC+QNC@>I}0Cdtt}v_N7!TqZy=?bnBDS4Y(pBNkm^eK2F3# zz{vTYWdPAmqf$)>42T9A{60)rdy(3#Kj)W3Q?m#;5O$BJ+ysC5QzqI|8ACNGjB|Um zGW2syf|XVh`HjTVOh(&Ma_BSPpUz^b^09eLZvm<2QiH)JeADI-S zU=~Tkkag?C%Y|(-^2vogKMeZ)$`b3M`n@n(Pma~GFYNnv_T|Fqw@$kb&C(9?`V3;(p0%tM_(V_w4%&az5lZAW z3PnWMeV4QBW9m*FFtqLIQV_Edg{2PtFlw~P8$U4!MSEh1*Bb_S|M+{1YvLy>JT(aG zz6~8}s=&MpL=jnhQ@UK+=k4n@F%0z2&D*)?)|EB16R=UU$kOfeKypH&26%P^$tE$! zx@MpZ!8zKEBL(v~N>fZele*mNX4iYdTv1^6M}bLX8}MFcF=jFZk!oa@U+OV1Fk0f1 z77&=x?=r12;qkwF#qf=9R~_LbbplWpjzfRVUxRVk@+X9Sq<*jNgGQ`CY0Q%>LJ(%n zxq?CK#hIin0d+fsrv?Km7O60=hlb;`y!lvdpNC9j?XHLCLl}O_=nwg;_8S}>`=y0s z-QYex>pb=_)t^eq4)kuZzE0o^%hI@mja6@|Q-$^p)*`Y2H+f;ZNd%0`WNYN@ug9Cp zwPe~%Wca~{QYf&q`Uiey_Q;4H#;s{9XwS`#E6sg0xz$yA93F|1-meH2900^EsrUdv z9wdib#SjTp7le{DWNHvpt|3hS4(iLFgJ@4v9(~4x zzIIO}(jf|y3gW*e8<=F<`q5s<#R0{O@y5g+Aoc+%L!E(8oVBj$ZZu&}175mr_=DAf z`>`${x4}Xp1zh!PS{dF;N5s-F2d$*8QwOKs=JxQ?Vx6kQj;OX1%Sqi1JC=lsXSwRW zxxg1HhnX%P6MM_|kvjZD8`J81#BU5gFQR%O{my$RDq|mV{pddtBM_e>|2#cJtMt{$ zSP>?>RpNW+Q-L{^w}aBBZjin^$Z1+X)%E9zei00_A(Y6mB1XUJ#$f*t{+jN%W&M5< zcZ3fTEx$J*x-1(elyn~1+=6<{2=!IzhzHZKRXM7xV)DHJ)gjBMD~Jd(rIF`>6(KdW&Bt^P3M9(doUDU?rzuTJB)OK^8jW@XX@By+g5(ZH=ASLtl8tnv&WSPx*c zNDT|N(^W*IxfQV5sm}H~ESJE`ZHzB{+bmET(u~ z!3+%~o{LVX)nc`MtXl0oz)Q8+rCa{ew_N|vw0;k&xq@GB<PE5FjJD z^RqOxzWlbA;2^en9r?HHNc(wE!v~fTk1j$t-Q#%{6XL~sB7JMn6RYbCFmJHqSjAJC zpja5dY<1d0C07s1 z?#|6%9(KYz#nxNqhu)h70{*!jp}|~z^alhhQPX#OZB$*(HP4r|7mnGXncm5WXHgOr zgdBewh)z9*J#B5{?c1S5lhx5rv^?m?993S^e7L+DjAvoKNBB~|JcBf>c4_}spw+%| z8&r$I-BPR1A$q4-%^#X_n)J%D4}0#Rd7~YFM)k^dw=Z27wYBbC)nOq(b9g_)Bj#Ns z#f9v-V5PHGwXJmukwTwFp>rm=?1tVyz9_Lp{;-aw*pM73+kI=Dk}}Pz5KSh>`XT2l z^*%cm@T*-y>+ZH;Y}v$TVmr-6roSC3^A~QRWnY`S+$bdU29kj@W(qPcgeCBWSlV#*@vS{ z$jASMKw=4Ta4B9xaPPX$S>%T6@Xu<}T5?)F7$tjuV4A~uFWU$X zr^M1TCK8rCP6|Ul1S(A+m1!(CsxymVpmU5X`dK1tKL9nuv-1@$%+g`($sc8cl|NJc zsPIKh;M}EC!G~?wPyFGhz1R=q0W=}J5K(kYY$WI34fWn;lsp0tRv9SS0x6NM$>{)% z*aO~ZV@$o@9V_3^LF`}KcP!KCY}DJtVg$O|lu_>dO9fVGaxG~t4Y%r=xBWIhgkK5m z#k_kmX(_(dlCzCpQAruV^i@#DF$Up|X8G@596YK?>+6?&nKIDs4U{n>$Tj|4p_vA& zVOUhG1yju_R1d!Qmk~N&sHf&Ajw;bCM_#4=A!2`f>R|i!N&}G-BwMt&$fa0noVMGJrVL2TB zf|)WVu2Mw5&~5CA4A1yVV64|H?#9KCa~QV{7spz1%v7(QPfl#qfV114%pnky75N_9 z28(Fgy|WqNvPpmAnN>HoJmkhe0tlg|b4tUN!2!c-nV>}PHE%W;9&8hAdsPcqCXPKB z8h8+Q%{Kt@cSW9%hpXTtFk2eGKj&N{XDuNm$J%j>Mw>i*E*XsmhgCJOwL%l2M3geW ze;M}t)yQ&Cg?}m+;SdLE3?5R4iIdrS@1l0}3QVKVRm?HKaglNyiM(da%>UsfFbi_8 zFee}OI8B*K=zgq0f`usWI{Eedm7Fh?>g`g3hZ3kaXefCsbUwnu zS#TzSomo>_>2k7g2*EC(+%)*@Hr+~6V5?z3bpVQ2l=rBTjQkSzhR)C^Oc{Pf|Ec(% zJsc43MzL%2ty1^&V^%uSHHo)WI9NcQAv<@tM0EI19YGr9@2Cl{ARJa;1P7TT!Jz6} z@W0jfW%d&9X{N&p5XX#)qgtQY``<4hI)Hp9j!tU zoXJ2~wl0xA=v*Ywmm3%QOI-3<&{geP7ZNaAMGT@vj=uh?aB#j6;-kQx$6r{KhEuT! zwsGOqqcl$H+?$e7H6~Ab(L?`zx6-Hxe@Om^RFgpPuYtxtrT2#MEB!e~(z^$Fqw^#y zr5LWBWA4#$BalH2+2_&klEy1E8e1l%fZ4D0u%AS7l4LPd5^{Z~9#^WkIa8H#`NNvh zK~Guzbw?e7Xo0IjDC+-I)TUSkvsnE5LptkptM%_FMY^2ocnY|}s93(4&Ds^~n;W2a z9E(Ps+2^OQLdDT3{X{#k3q!X%rzu(sVCExK*hYyR%{rB371JpkJt{6rrsVK z?@%JhdML?PnHsa?&stc>B7;~+UIVWR{YIM_N9Of&@K~JFccw{GAYr3=<@XP|2djL^ zF+DqTY_rj~F&2~e@1+#0VnHlX@m4vJA^WZ@Du?*eWEksMlH<2*wGows#*K5PQ zI>;7r@D72zWc`f)sBNMi&ybim`02*50bSKycxifeWST97jFFa3t{{2rP6_BTDo{r? z8(1e}>&pj~V3hW?{Ib}vfp7FVhp)MXS9DU0&s3GGH~jrp4U@iXd;S8e_xrQcPTv9d z8t0Gy_Pc^6_*Wqoc}x1h{rQqSB{7F@HE<(=yBwDjY0eNx^9S}R-wp=9zGGjA4e-FE zqH0sG#L-?v4;W;BD_01CQ1~(PA0i)kFgOik?$+}r;==HwdEw9e0DNE&PqE!}dvCGy zrODN+k1TH!!3bb51ZqD=2*--BGUNpFfXIA9aE~p}CT%epJ}s)0JOzpL8+AxDY{eU( z)H!2&23y2O;Y+(>;G#EHAy&C7!zmjMY92-=UcX0acm_dCEn%MrAnoU4kjq#meeJ=PmFwQTo7up@|Kt&v6{J2x}}t4~yra`c*;x1{;j8b}4ND z*yq-YG7+q@C!g?ndlW0xfhpt(SY=ITjR>l4`Z~g1u$daGTwc<-6V&oFL0A}+MffWA z?JwrB!R1)D!{T{MibO)7$V)dtM!~*k#a^qfsE? zizVaCWz!J2H|jrafvlzmhG~ojp8}JYYqrW0B5GZ!zKpys3Be~SDh|jmTkP+71#748|FmmLgN9W3K63KX+afPKS%lkd81S7O{kH~7 z(k#P8Aes0>D&0yps<@V*Wvn-P6`7K?B{7^L8CT2}<;fPS987eS^-vv`Z!%;K#Vwhu+MtEn5-;TP+45?kl@CM3&>r4dg*blu-8 z$z^h1Uk7mO%|f;wm&(OU!b7~W~^j%ScFf-{N+k!|gS+lx1!$keSL9;iBk6>MewQ zm5}CT=Du`O5DlX(Blt8{ubb~$a-PqqczS2OSp8I+9`Y0jIQLd+5dE;=OBTp^k8`^2 zy=A>kuXeMmwhTxe6EG@#bcl3bgDJ*omq9*J@(3( z?Fo6E4^D@VdUwBH*(Js`yF0i_*p@avQ#3TfWf#9WhG~(C%ZoqH5}wwZm%0m_2HuCi zV4_lv#UJE!p+DdHm`va3U;aI9DC;Y4_Mgh`hCx*Bf}HE4gz=yPo0-V!0~*nS-M6hR z$I%7ub1wOq+9j$IlTuObEV1=_!e1Q?4__B|-$yrUa*(DCXAN*{b6wk?Z{Su!d>b@7 z9Axzf7Yv=GKEXuS!+mkP2G_qheneOP&Qs}-z5Xu5I6^I3AM*u6*8ojwOBk|hq50w> zKu#p=D#s>oXPHiNhS6D?CF;UIXLu&wvbRbJtTQ6*I(zXP8+Y0A^+fGU+t7%J-3-RL zQ<25jz3}mKIQ3|063R2ZXQ7;ZjI^axiLmTI66vcj?G&58B0ZM5ld_Zu>76g}#t5+l zQB`|IbM#*`OE07LID^8(bZ){lEe^$M_p7BGBzCvmx{ZV8Y+6fj#wnkFxSO(=xUbO~ z8#GXNSB(y2n6$j9tsJA4Y_hx_r4*lqCtI=jFBDL_k!rA27<0n2dR7|l33&>2(Tr+) z)fk`R#l+(gbN_CZ4;+Qkor=0seRL)v)%W!_bHOlg<~dkK%N1b|`3Cg5rf>+hV{Lb> zC(2R%P5|Tb>vkLNQhiNqz8k%>jn7~7ke2BATR{>OmEW#3W-8??g2p{8qZ>$O9#e$E zD;LhqR=r?!Gv@L&EDH6_7ujy=7v?H4m`GKa!1YAyhp8;9EOrn?bSi(ui{Rd^^=;O3 zs*mIARUTrySA-l12d)&AI;_GoKVzwb+b;O|1@>$*8#G=ZI4-!X38 zLoaLoT=9%)Rdk@RrOkD| zty^fz`U@~*4Dc%ZV85BPg?Ds;9KDF3a^wc@vp?_S7%I$YC{0Fp6MI&ww5N953(Ub? zH4O;YY_E=1B0>0-QHMWq0x zJ+505Ql{RW;Gg$qtDSRefbja?MLL*nCIWic$l81LPEylXGs6LP;@~_O9vBj5fCB%glOi zEDqAzlGoC`c+~2wNZ+K+#bEH%II;H*x8b|a(=|IkqIJ!2y3CSXx<984ZIB_y`Tij^ zydNVBw#42H#UOOxYb=r}+i{0k7lhj;^N6IxqAz2ifg#+lJ9RAFiNQu^^dGR)2mjc{ ztLovpuOl#5eUiuKz=oFWdg`LsK=GbhPhqsXuQLv~0pUer74X&ITuR5llDxG@mGz<+ zZAH%7@<-Wo_i zD9c$JPQcp!+`HL^E1P*tO1}1?tobfyhx@kaVjW);+P!~H*h8Uq7jCtRNZ-SlQk-IC z2TqDRz?e)!Cj8A{Bv=O+&?3iw0Ux=U;tx`Yy`q{o@eWu13k8d3;dIAQP@dlc=>aSs zPbrPR3bBB~M@j@?dGR}yu2V0CoyIpunOyJ>B*camuNir*b?#aY6p5}iOVsBzb4|Zo z=wxQI3?49Bp6kIt7x=ha=YItd$s&Ao&*1_D{CwrJ*y0mt;IkPlwl_I3xkx0$G%Z{z z{%2pqQ@6kDUBAS7MpU}+42PH20U_T9p!{8jSb&{9tp)HYW%;NDrCE^`vN6$>IPSM& zkzZ!Shw;3U(vsh&j#bbfv9i$|>f1-TFDv%AH9W(F8Me>4&JAJk+@eu{WBk#eF5AuJ zEA&NW0c7oTFF&;t`z3=D#l>o|&|P~$!foE%OnUVXNI!9u2R~gejwVWs<^CR4b|ITi zU)+@g%j{Qwd}R?I@o)>09cdPTnbrPX_rW~V?bSY0J=25f1aOr3D0dvj(^vBG;I&yeAx>k0QiXpaGA!IP~K-B=P#W?b1e9 zkC`D^yNYS(tj?^>Z{^(00{UR4Pf0vMEENg<5&;}j3F>Hj+BLF=u1KUWsGX;HzC zXq37E{jL|X8R}XwHpy>dHQspfIgQHHc;#4$zQ%S>;|q`4{STxf-03uvY}mQLCMjhj zlX@u794>r}L1KRiPzvZ5NnrbT}X2-xxpoZnu|1R;CI-gb_kPRm zx;!0a$nN?GXGWEh6uEDi;AeZp-dc7p<5Q%NkfS&%l48&<;fIX=Y?u>E-}MgBTvj{= zJbtX&4yI#3Hqq4qM~dmNl17qv@aZs`An~vnTm<;Wci&TaJdWj@YlK`H`p}x zEY8<&T{rJVU;AL|f=Ne()V_~0KA{}0ep_UUQ@h*gp|6_H+bO@3mhiQ1{I#IGL3!yn zJ*fNubb?QFCgXnBWMBYL&Bjdoc5zRC61>F*+79ce2KIK9#x-zf(tK#@@@ zs(~Ei{_{h(R1gcUhQ{P+5Ss7bsF6+yQ5LgP%wX$2Qwt0vOs+3z2wbT^Q|j&ssbMts z@(tK5g@j3o4l}G%DB+ZCe9w?+n*nG{*IGO3!q68t6z=CoC-(Y$bAtx^ps9l0W)`UL@Sv^yF1N-6 zeo@=&&S(zila5LM!#0z91zb_{)|ld%HkBGQZtsM54zJifx#+FFpzCz*z%{T*#q(Z+ zk2~Wo4ikkvvUe3%utV{dec4@W%>5V-b4*;b7{6#|-y^29ZW;@RGeU)Z35_~&{4-2V zI464T?2Ud}ucb|fa9ruug&tL>i$G@Y@xNhe}y); zYS>!*9hq6>j{L-rv|+>gII22e=&yZJpZ^5KuBz{lDL0!wFZk_^Xczh|2x^oka8GUf z!iae&7Q*bMMp8P<@!mML4e>;*3cHorUn>0UbaPTsj;(;D$>3_;g5dCMrTX(SWMHu# zQyMcQSMR(a_&Zpac}<#LEvho`Sr^eOwo2_uVI!J77JLo1X1SLF#|~)~fO`xs%u5{9 zTAMGTCXFRFGmOqvf;R8cZ0$SYC-@^}Zee|daZb_w1}Pjrc5je%=hFSjU7N{Qm^K}X zF+7uz@e8f5(_81*NW7v{9d2e^!oJhjJIKdV#|otPo3O4`7AEy`qK15_#@tptfyTP+ zP}Sr>f|??8!-sj>0TVb^QBD2E8H>Ey>5(QxOBMb@WmX^_4R1M8V6>t7fD-@;^CSOq z>pHNj`&jI({~h0@xnfd8t$q*58@@EO+X)E&`M!*=;SgZI;IYpWX-U3IIw@?EgRm*zrit0xy`gG00DcT!Cw`xjah zoY!x_afy)hrw9VIX*m(*x&fPP8+qA=ZwcDu+k$gZyAoF-varRsWM##V5uq<55>ik{l0XPD`ilKkp3Wl@YTpR;J2n9Ek=*Ew=} z$jqH#43B4Vh&F9Iu$8w`~etQ zSXk8Oy=9_^0jm>C-77j0yi-Q6uLDu#L=`XsTajOXOMYUs_K;!Th&*Nu4Xr<#?I5eI zS#0Xn(NGIK^`T{YwwK?q6>_lmSq(|TO#Uw!_et9)pJ{RhKfu7h!TA7X3UintVKGWLJW?&vB2#w26)kca=c_^0|4! zCr)?UmQ5AB8C3qQV1l9(DQ=L*wvw7;QnKlXeH$}qj_VW0@6YqL7q@(polB!pqCP=6 z#+!yT-x%73@epl{rj(&-BaVY8OCG&0FBh(lYHaT}(H@^TXaDCVrPuSe9 zpUJTz4JknWnw4;db)~;e`p0SfIOLdI5UT)b^r96Kg5aJ)rqj^Uu@ppFF?`uysGde@ zAQK$_YmWAX-|%j6@`G~?eT|~OoLEqtvMIupDLpRFub^5Yu5GA?CoM6nl+88EOrg+w zu1A6u5r!!R&k@RGC7Q!Z(&pANw+266rYpL7`f{!wO;yCF9(*gewe)n364Dkv%`9b% z&o!73s#!P}H*e5=GbPP>!@xD)ZsrK4)u_s+ul&%DE&h;EulW3&q8cfhVhf)PfLIEUN78qpC7V2S=<;PV_Xd_`9qN;%a30PrQCHCsMG>h zX^_|i3!??2f%t~2|64T>p4sCv33f|?(}U|6H&ua+qaC&zwS9AW%lua~pa^zCAmB{5 zr2O{+0M`hHrZBDUf5!~?36P6=20zhzc*j9CLpfUfV@QC(EA1u{vBf$xE-;!Ilch`Q zWp4oRfl~ZF~a@@N9UdM>V}}f(>oxTxa%-Ex^nbi{Ro|#jINvcS2qhGGZ%}0 z0O022;%DRHX5$jn;^GzJ;uPZMWZ~oz;^gGUtjzj90``vP-z>fVe*q~Ce5!u}00kKp K=_*N+;Qs-#)d5`q diff --git a/resources/images/android/xhdpi/npa_beta.png b/resources/images/android/xhdpi/npa_beta.png index e2ca26342668620d585b65fbb993006f86d3e0f5..a16de0f890481ce05c17410b060bd104e70d0f78 100644 GIT binary patch delta 3620 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 literal 22172 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

K+rMFlt-Us=E=7e??*q(LubGr(bXS^vP z!L0Rb5_AyEcl^c%_XE@5fcHxu22*Z{A*Hh*6N9H37fH&8~!90he(? z1@O$RLCptukr>6!d+8lTRrp_Wy0i~G?lgi2iC&@?xTb}@5jF!T!35d^X8iC2ItgFl z3%0V^W3$JC<;R3_3FW}}a>Rs)2_So^=hgF|`O-DtH6OG)y<2#<0Q-vEz}!H{N#-ap@zZvu1m*txNDffH1v zDyW}3+#GITO1NdbWqg2eQQ-^27lQJ%#;7rZVQff9NC+5eh1f!DAfHmtspr6Layh?p zeqb>tG*4&_$q5@0HY9+5Q1i>pFN04~qgst>LCNu5CU%(!G5cmtnmGxmT~yFn=S9pF zpNY?aF`VQi*~d;7ej{so*jF3 zKw)s2EzJh@S-BT;FM_(>Qo>RKWOKP#E(S5tY2&a%1d2egZ^|*}n1L|Pa~^m{^b`F+ zoDfsQ6ri8b3q4>iQbiJ3&T`<8)3}$*X+x-z;lpk43Q&+R!7 zabBamKZJ}e`g)!#z?AG>#djH)wNclpgMHz^sj=95Z9E~fE-a)R08#5`(}F>c+A%3$U~rQCyz4dackz*49w5P^@-~PE`=q#m+TI?H!fVca0Lpdr^cqnf}Q{ZfVd8G z{pb2a;@A~pg@D33DHT#GfVD7nYwA{DC(e}-McII+iZSoTynDa;hAm}wme~oK?oM~8 z+nC6YBR>Y6r|%Bm9gzLi@jJ)wz|qb&_B*rn%vLzHru`4? ze*nkZrq@lcgN$=rc3cL`io4NB97h7{nkDI%TP{ z6j&%7(gEZ<1qe6sns^OZ=QPe`eHkNTfbD$12SDi}BRxZm5F

@vt@5NO>!e(?AK z^dWvZemP*sFa2ccC&6`g*uk)a;MTl+hw>f3m=&HEo(IMmp{L4pgw!s&V6O_Wd+_N6 znHL~0j8AodOx3=nO98o1sir9f6cEdD5Y=TH*#;OZh1>uPmru$!fRgHu>TVD^&Z>C; z{6Hq)BVVHy`1Eq?sm}#Xh~h31_`~s20T`&Js43u{UZF~b$`CTT|C{|cL(a9cv1k3k z@ubDw;tqLvmtVg8G87z)F~ykfKW=#@@$81cVxvH=u@AQo2SfEzAC&q4^o;`A2eb#bRpl0yTLd;TKg#?F z(p`54?hXXg!5DLl8E7nyiDSTN87f2Jmht1nj}zhU($%e2w*u>t)Qzbd!PYdZLRJN! zi)bg>{Y+1m5YLKdL0xEDXIlsAaocd)aKOZqJPG)UC=mq+=Lkzb(N?qtvDWET!An+` z)q$bTh^$<~+q?~2D;k*xI!8EVh{mCDfJWoy=H>=EKOduy5nNslycu{C46Dj~QRWLU z9xD4%*_XgrGNM~VH*l>J`ex{xU^o%nBe)0XR|m8WXbZY8ymol)0Hu>_hHD1Umvfx^ zY4a|Yy)i0lG~_PP)VCY~Uc$ympo-ip&x6o83hZw`@IZMs6ww>r1b*Pnd%rskvUrm* zi?pGFNZ|$gLg3S$&%5jeqW*aD|EvJWS?Y9kI_Oga-w1pYDwX@{D$@$+JnpXz%qelAhht!({G*zjwf7r2M z$DklO#x2GTOwlntVtPP)g@qdyZh*o$Ng_#rLl*2V*bR4Ut=_qMCnRrP7qu=5EGH6@ z5|V)DMSsyBC?jTynLtBvLYx5W(zKmvJE5?1TAj2yAU5+RZvs1={%=Z%#-cF~F5Yo6 z)Ff}n8$b$^m;@Y?Psyi14x|~)fOW-t8afXm7kl}P&p>f=akw}@d&1+Q$3@V^`9J0V z6d0BU2LuOzYu(UJp`E~37_m2EFBm6=4+tLsu9nb4p@+cmd{Bv?5}+ICyV-X$Xae0Y zxnBY?L{m%SOtrrKFT0c8&xbj}5unMh6U4Dmy)H8$YD4^%>@MKA;&@4&2+Ck3QuqOq z$lr8s!Ab&UJm`jM4lDjp@;PslVdA49Km6Pbpx}Z5I3ZifR=}Ie63u837MJNR)4_X_ z)9q9;x=YtCU7=v{wf@)ogQLEwnyDJNzv|3=srmZ%x!>o4@l5z9;h%u(sxW()9de#I z)!sGU5;a9l zAWRGqL%6>spq(6YfS#g;r~%@bQ>CFQt!WJmmGk9%kPC~5TpWpRR`lMM%3b9yXwqFL zxK03FiuX+KnV^pjI2&*lT$hIAgyewh$7Pq7T@J?9;e*2mgYj1Q*6^+1x+&z#kS{^M zAz*O8V9opy z3;F@`sZ0lu@v?>dE#(v!7bjogW$=34qqfc;0{40~cc}yx2&>l*E*!M!;3vhM*+sEHN4(6cPCb3OGH{H9ccU92OaO#-3qc0r0 za17$6Ezm5`K=Qt|P1ZI6bHbgJJ1KB?-0Eqor$Ne{jh8lF0{e!Xia8a*G2I+u4gqJ0oaU5QenfM|JF-Ua!IOq7X$QOp%{0Yzwq4yZ*2Ss>;yn_0jm86X2d zwvmJ7VD1^SWEVAlrgP&ZaYlDVcLlVY+|Rh50o@$G`hNAn&?l%}P&+VWl$lUw0vJVj z#qf&Y<{t4{#B1PMBXm&cAaL0f{ATc*pg-cj-G4i1TY6|cv>@8+zR`X2KyTNi7rlUP zMb~1y=}h{1 zU{F3VEOWU9+S;BOo=3p*RE_Uzd=DZ?6Q~IU!<|yMOWg+JoQUcX)xlUgB0eG>Twf~_ zSSAo$PL#Blw1e(d@6WwI2hAwAN^X^aSt3v50fj7P@z3;QMIwm=UVd~R^?yR~o}fiL z$)!}z=~LJkP8GzQ%_;%%9DDHr(U2&)5M+(txMN%{W^5qpaFlqca4YD0_bkvOz5HIjNuvP7)Mnc@odC$&!53~oor+H5Uk9k!$R^15p9eIuN8bRL7i@h%P z0(FO@x}!RX;m!pm_&Ar|34bAl1imf`d8;yAW&^!BNhXN8;%#vj2#{s@5vW25Dgu!b zH52#&LHSpC{V60zyOqp-N^+;%R=yg!`=%(wYgSe=#qyM>MNL${!+8;V)GLO7R_o4o9 z6cJx8Cy<%2KO(9^S}LU8$?0ra31XZ$BVGg9NY?!IGj9Gf$TIQ`wt#0TV>j(isNf#d z(S78jZ}u+>z!YVlvL7sE;-H$cExpBa^o1I?I0A7K2W@ASVE?Dy7xC5$0j51M6JsWV zdd7+s(9iP=^$P{p86lA&kzia~_M7nakiFU8OAdzpuUhBrp9=+_`Ciq03Dykn06kz! zbnC0F462LEWaR~r*EL5(0?2)Q$4n44Im1PuldR57;G}$+H6S+1SLG-WC)JCxB;ytEV+XKOu8_9?gQKY|1mHYZK%V7(mU;2k9|J*VFrTjn9pN-fLhPm3e+?sLk@H_NqF!0Ys;lC2!e8L*V zL(GYk+699_sVLrJ0LaQ1DES9^1XhueluwD+h4rtzaQwy6xj;eH;$}1a5EV8XeYXj!08pS;WQ2(p;zK}N3o7yM11olYrG>J*87~S zk{AVhcV0f8x(U=m*-usjKH)81=l44)rsxbXwY%I#F9<&rP~c{OI-f_}^mz~X6Aa%6 z@$0)n{AYyz@29K>?)P+cY3w@yntoNbMwiQw@WO?WGa7+of?CD?6wrgJ_d4nK_#j=J zYf~K`%7eB6u>Zx|o&lWtA9&7zT6AKJ@|WIJ_aS#? zv2mNxH1Ddl7pxV>a}#dEiT7@Pm$3`v3R#*@fX&QB3)pe|M+bWUdpN)HQucEPbWxfp z@g1~$s_Lx3#^4$6nyj1h+Y0zS@R#|NHS&Y%HuHk>`;%%N%!YIIlg{rS0ZO_^(5&S? z0e>&_M`1O{?Xs3*8JrACoVud|q}DF@B;FI+6PZ77H&j{`(5K!65ItEhjy~}GqdFDx z-{Il;x7eNeEv5MwE-P`9a>~GZ_miI_ZikpvDW&pl!bhS&w!C9VRQ zVdgU_77!i9TCo+d6`dsid!atgu__l|!r@l)tW}rKz#{$GH{Rb3_0E_6s%!k$*Q-dO!2T)3Wm@K9^0bFfri>sCKfym$! zo&niX+W(LP#*2^Uo6K6GK$EXbRN|pswVDM%O`vSgfSzt89=QKcCVnygd;uuNLn=ih zLSJ~!6XLJuCSTXWp;mWhZO8yp#oJ;EP!=C5^SdAPd=FPBi2yw4LJLT>7i7i13|lHi zXDpI%ct)II<1{F@+P6!!F;HnwKuEpYQ1)%_*_GRY-xcEzB`1SnxAqubRO8)C``9Pc_=O#ptx;s7353=J;vu$O80{IE0 zL3}3ePy=w4r_q26L~`&C=%?ZtD28P6L2lzF>!9hE6|ea}4Nab_bR(cj(Y-1B+AiIH z3jR6*P^?l|ohp&8i?T(Z10Akc^m`==($#|0yZhiueCn&mkAV^=%$iYv0WC)U7$JDD zdi5}gEr10(1&|YAxtVqcPR&jX-(4Qg&bqsMUmtMmuHWdn4SaH3V*|XQ#@e9q&5l94 z!V1$~_5`JssHo)rayjZk*^kPw!SB?zgd=cfcg$N^gCKKLzG6KF`Qa9={UA7AQ$wW( zDDR6{rhrHj6~tb^Rn$TQECY`ICoTJpuwcajszzNcJ44msq0f7-gf5-yzg&7O=qhO9 zL<;xLBzyR1rav2h9RVnYzDOl1^2d9PbII_p1U){jW*m7P7Dk_E*DSPXLNh9Ed7Xae_v; zo61H)pQtBe$Bl%=+2=Y<9tg2}v*%tb;S>bTT)-6_Zrq=09~Cl-uCsZDb08+MQv`!3 zpsX?waO0DE>u-Mzo*2-8(ot-tE{HhJ;0~N%FW-Y~C!hX}hY0?!a4IatBYuXQC)+~k zq7q-Yb%*|$EtK%(5FG3q;M$M--l@MR@r&`-6@X$C<&763^c(NcC(1$pvNdK;XbVfn zollt72X2kaQZM%h<(SCOyaYtx%ah!jXVz#9wlAecf!kOTHXwA31u4v%y8@X zz;k~I4gcTcuP*?^?Hi&n5R_p^N(u|e- z{_fL%1DP*fAeE_{@83#*$gPv$ajeAOOLQ#zcc=}0&q_?D)6XS_9zSrs^vMQ zJFH8*nlUE^4sVTHzG)lSn>d;kCW9C#wkhYhe?IWBYYk>v~mmdRG>C86$cRa~2Qh^4^w>bsUT_&;_ zH ztplfy|5rG5^M7vs-yOxqa#1?7ZiaH&r8cyj5l#;ve5}t?RZXz5+4cEf2f~HtlHWOa z3aq(~_X>SMxh&F^K0svxM17nygyXkW2|#8tL0t*5nOq_Bfv=0wt^Zx0TZ?9Z@w_Xi z0@19M9YL;L?@wabKO_?n?})q0+#%@A%6EbIOW zFt+H7#bS5n-<XjC_ zvoC8^Q~@}&a-qF8D0{>mr5VtYa9+T zvME#KD?lL|NCk}Of3^PhqP53k87kia*ogHir6}DkS*_gLf4-58X)M7_f_<2Cg3QLX}5_f1Ut5 z4E+PSMh~n*@EYxM$=?Oq5JB&1&>*0+qir>~l$feLRvJz;O&GmHf#@+A8Rzyuj-&AP z^!A{hmkEw4AZoHenE}E}Oc(t?^r4y<%e^>+%;B2)EzpuIX#|psj9}xxsjnRy667fP z7BL_zNGpXPGo=qE!0hzHvyy|{0huP7vk=rnvb_8ZG&Phd;y8G#(wiV|P6^)!8sV*8{pdlgS z+MR>C8%kYm^9I~?$xFXA4X#d08+o!BL_L`nd$IsxpUQdv`qPlz$oyGqEhscN-Z6g< zYIPZ?eg}>UGREEz93QG%9Cv|KOr!$dxczD!v&h2?>K@ri#(?8PRaJX}+(oRgf^tW+ z6KlYwj_#mlGWe8m8>J71(9!|#x_t_jbINS<>J625hm`j!fKu=J4l|wv?NUuuvFK;Y zdtgxbN8=aTr~OGXnHDV?K>yD$a(=Z#ey&qgrxC2}s63(j3d-O`Bv7V{^V(`b#N?je zL-t%tVp@GjTAX*|P8uXs%AJhn|DN`+`^~JVY)~fvvw< ztpiM>HH19xztQb!P@WKt#C{0$^Lp1HAjs^S?%D=II{3eCoDV^xd^}x)z~?LXNWBEj zQpGCT109N9*a29?FE2L#rxU+;Cet{N?fn->(Bi;>Lv2qf{De{2tnQbiWHQK8@@#-+&gdWG5%{W|H`0+WrA9(R&;y=dU0T1!?N_hORoULFw zTWE2-2;w99QXSA?MI76rpvR25DGGOVX!D+u4H?T0IG%95ZMq$@GYisftsi)!`a5lx z@feTsd*UHpX5T2dVQUP><@GMl6kG5~v*Uuuy2Jly##bz#8} zEXpoX1E(8UhyBQ10`Va4PzePyK4j%JMT-~Aji54Nc$?l-tEjtWPYhc=JDr~Bi+bjA z%=*mz4-{PNQ+PZhJjS1aV%|OE+d2~;vp4f3Y*~4l#86bVy1HNX#y}-X<7w(k0Vd4z zYLY@UL3zCttkggYWK#~~)_F)29Lw|~NE~D!WPei7!!{meVZiPKG24-6PQ-kdx#xir zACkPs!tfY>2p;CuL%cha8gnr7BrGhw`#{WAWcKWWUbgp9L`iXgfq=k@epx;SV)5Jh z12+80cb-_K;DZ4lZs1}I#1(g3rp%!L1Z^21htp_Uh*jRpyKLQW&Dm%5{uB|n!TXnof{BoGnc3bc0bkvj`*_oCf5z2BW zZ?RE`V^=;#tcb}=&=5kVEgX=fVGy0)`S^tcyFr6P73sJWLrpx%C!KIAm2<*g{=Hsc#m4l4D;5-eeZ1733b97FxGkvshjP&qMVfmeGd;qLXJVJaBD(>8Oz@($+;YCuF$pZ)Y?~ZyAT1&1Ez3B#@?!kFoD*<7<$B9> z2izH+I-_6!7PX4HNA|=Zf}NTRCakEt9Jr&!?e!*@upw_AC5sSDxQi4eS1C{aJ-O

Oa^1w=UlI)6sO=3AOVj&j`nL&vdFkqbU3=$32zU8?}JekHH)Hd=Q13>I!Dy_j- z-^D|_0=(Sa2I~5O(d-hZnGTxoM2yG<+%cl#erWzN9s}-2s`D{n14nlmA-%w)D-3qL z4LR8bUt1T0>73J@DVs5#-EhyitwIRirlDw&=$3ioiVitt1|B#lyjw^)u5b_oStQd8 z%i8f{wl`_~GYU($4%2rX+zFUDffjf4*zh2q5;#OZ-3>AblHaxsMvIB8!DrE+qHEL# z6NNZDZp$$&;~Yp&*^}>pH(9`GAeI!F&*PE*F@7Dzj0`1ExC66!h1wwU#45T!;Kz5m zGdtiwVmX?P25_0{PX+R5ymdZtxN*=HKoF8d+~q`sm_q&!#xd_SzW&qVeu8c#r!U-h z0jNi!rW^)5&N5aPA^}*<&6axDedf4Hxui+E>R66f|s!iUTF|2LQC5uON`1 zJfh=|ALDNii2$_{0*NDc9vZ+F+Y}Xv_UH*5D6pk18Uz;)9zc(kr}C;|L{b8f(jkz5QvUpV?gb{{U&3{@4u#rPu%f03~!qSaf7zbY(hYa%Ew3WdJfTF*q$S zF)c7NR4_O?F*7001R)MObuXVRU6WZEs|0W_bWIFflkSFflDK jGgL4*Ix#akH8d+QF*-0XIOGpy00000NkvXXu0mjfU6*GQ diff --git a/resources/images/android/xhdpi/npa_preview.png b/resources/images/android/xhdpi/npa_preview.png index c88dc5ff7988d6f44a7492edaa1c262292141800..002ecec8dfef4fcd52975458e8cfd529268c14d5 100644 GIT binary patch delta 3680 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 literal 0 HcmV?d00001 diff --git a/resources/images/android/xxhdpi/foreground_npa.png b/resources/images/android/xxhdpi/foreground_npa.png new file mode 100644 index 0000000000000000000000000000000000000000..f36de1f0aa4523c13e8129453f57a0b14df18a4b GIT binary patch literal 3966 zcmb7Gi$Bx*|JT>iO{-Qeg;H2VapYFv$Yr^0Q4}?IvSFquxhu2{bH6m?-bglg6LYD| zb?#B_vdvu=w-E7tcfS9?@3+V2^VsM8e!up5-d>-_W8tPZ^dSdD4)XBuKnxA^Zt?K! z(ff1n=LI_$<*HTi^%q(jsm;Sv8pFSB&j;3fyl(01@Dz24&4I;%2L^Y&cz6tZ|J-}{ zwhNPZczAhC5$16H2MCW>AAPEgaJe5J7bhk%u_1MLaIZebH@euD$m1F8+fhwcMbh9D zT(OO4Oqps>*=WoMXWL{}0@E$75ffB4=9&M={sjva*J>5t`m}P~u~ZT4gVU(@PPR$y z=rWZ=rdwdyXb62GxYo?2TPs62WuOC~^t^f!&?DAzENPOUIFMoLK<)sQzO

@-cL| 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 literal 0 HcmV?d00001 diff --git a/resources/images/android/xxhdpi/foreground_npa_beta.png b/resources/images/android/xxhdpi/foreground_npa_beta.png new file mode 100644 index 0000000000000000000000000000000000000000..666f698cbcde812920cecf4cf8766f6c2fa1040d GIT binary patch literal 6933 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 literal 0 HcmV?d00001 diff --git a/resources/images/android/xxhdpi/npa.png b/resources/images/android/xxhdpi/npa.png index d4ca03c3ef4fef5f6ce786b3ab61928008caf289..a5e83aa05b5c8500e8784d2f9784c52110e05317 100644 GIT binary patch delta 3501 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 GK>r8bgFWB? literal 20405 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 z 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 Hu0mjfWMZ`G diff --git a/resources/images/android/xxhdpi/npa_preview.png b/resources/images/android/xxhdpi/npa_preview.png index 28b65aad7f276368685fff0479645d6938923d37..65c584150acbd9a6ea18a754b17e81772f00f645 100644 GIT binary patch delta 5221 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 literal 36960 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

_ckF-7lr(SK}y?uAM@zNysN$y~I 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 mJ^dBT{D}Df literal 0 HcmV?d00001 diff --git a/resources/images/android/xxxhdpi/foreground_npa_beta.png b/resources/images/android/xxxhdpi/foreground_npa_beta.png new file mode 100644 index 0000000000000000000000000000000000000000..9437e83e47dbc66d823d9bc55ecfba867be5313d GIT binary patch literal 9108 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 KT)m7%*#83quWvvA literal 0 HcmV?d00001 diff --git a/resources/images/android/xxxhdpi/foreground_npa_preview.png b/resources/images/android/xxxhdpi/foreground_npa_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c9856f4c201676e83763930ae190f378e6c38a8f GIT binary patch literal 8693 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 XV4(Ljm37kNKl!A^6~rn<3i<~V(6her5llw z7@F62-Mj7&xNDt#_TFdhulvJ!k5H2*Ct)A~0DxRkL00o0WBv;w$iHn3{w(s3@NA`3 zr2*i39O;!g{yz`$(3F<}$_AOX{~2Oe1p^NNuyFb>Kr>v%3IG5B5GvYo@~$dck?sF8 zno<8N{_pbt6Sudw2_24C*EfiWw&;qfPaO`XiM_8sVErn71=lUUE1M0dnzK$HG%0^% z^LZ$we#s$w#P^4qUFML>*KxhrE~AfF$1kISH4B#C1%1nBjmx+#D)@C{I)iE#(be4|K~>G$R0?apZx3%V4*RielF)-JoHQ%v(U0r0s}c+NiHK-i_5VKSoHrKS zr01SLVOuHkvHgvG)l>82zR-r{5AAmGZMJ4feHJPG4%N@&+HAZ_XPj#!qgySJb+WN- z)=o8&?zJ+8r5u*2{oV~q?=hy{CDUHT)Am`zfsH!u-zMJHD;j^qMq$i7>Rx&kO}+b} za&vq8y6k~YbcfY_>9>;2l zH&xFpQ~G;WY8|Uzgf!{LwpyK>T{%_1xVgEpN*i#gh5tT0i^P~kVJzHgrM>FqQ9m_3 z3n%xEFG89P-((HjXAXN7O`#gKJPIb;<_P*z@#uVi zWV0=@ZXu&_zH}^Zap$Caxhkd0y?LQ9{O5{A0(N5MAg+4m@N9Q}cOoLCF*)Y7-yLb>#HeEWn9oK1JJChk-Kd)O1iz=T?XkDuw|5Gp)?O!K0?#ZGvm&J&UKciWt?xTXV04Q2z?Th}2Zm0?hXaKzD|ZuQ0IW9s`XP>8$`p z1;vE2Qu$AXO@v?opg=0hN^5)1j?eiZXl$VvH$-2KPVwYLvnOPwcnh`#To67tgWJ+p zzk(kEeMBbuB2Nlx2F111EUAXPN5yhm;cXgwk6}1cY~ft*vmhcc3A_G*ovjIYTyM$8 zOH4hpbM4afFz!Zj#@|aU-BDP$OU!BEs)4k6!)}L1I|o_4X~&x)j#>~VFKWKn#2L<# z>IgfP?r)&vB%AZgdex-f3{Qm6^7-Wp6J$wXa5tC!!rsBP};Y{uC??oXje zyG<{bzs)E`?K@go98}3Y8n0UFz*gaoXL8vCt_M0Shx%u7SF51-4_;8Lac&iA6E|YI z6z|>?*5i>AMjp;_nEk<)(hZU)?YZR|e-vJbAqO`!^=;SU zX0SnfH_EFbtzU|Rh-D$F+BU{SYKx+L5&1AjRB#Yln z-MAG4E^{)UgN|7$rJRD!|K7#KCQ!dg6xQS$zVX^(x|%;Az;ce4%q^=PTnoqe82&wn z$`vxget$5^7ICqn9Hmr4h{0tluHeG!uVWh8r*0KPW)nG3sO%?tmVtgZRdExP2WKTl z2b3|(oK*J<0?-G`tMN%)Oy|@JYlTpBGPfz7hwwO({I)5wMr3X3&c)C{R@nK~&}~#- zCrT)Qi*U=1%oNMpMjV0dE9{3xs9#>W7?etj$OTG#zGZBZYo|k|fLPt^AtQxt)c3l- zpB=RjCeF<2)-^gs^pMaN@}NyM&hrr|ZOioZ75Y4}``&1$R40Q}CuJ8@lD_&0a1~k2 zmFnj`X$N3jtzSmel`@0Nlt3JbhcCxa3@mu`p9bQkXMT#&gLY>^IW50s5mnrO%~=xj_`7XeLL)ix0&5z}?RH!)?%7 zSQ33J9Yo=;mO=cXJ;afTX<;&=nFyW5lmTW&fz3i8)ptdk?;NKP$etw)r=cV;b3tkwqS9|u z@nvbpK10dP%)hg3@O?r@1k&CkB|mU^mx|hI>0^R@Njbe*1+}D%4Fu%_APkPzT#!=W zmMX8C44tn2_LdMR3CLLtf6m8_R$|>fCx80c4Q;Kf>#%L36W@sk(|UzFYgfD@8HXFV z@9{viAg5^dGhbVgVI&lxfz83qCg&yPcPgIIc)>NiXBo9a)>C4Qf@!jEqOGf$Kj9XRv zI%v#0DByc}dIP(a%&}IXojD716eVnncoSeAG-&jYIsNaj%ZDgNEWXuFiYQFJ-j`6K z+xxwc*trk6@+9U750M@VhMzMX74CjS$-5pVVihD^Hi~9iZk|6#OZbekV?1VHU~>Zh zK#Or4Wj*d^Pf#x#@P+TGnPQR<5HKb;eI-TgLFA}NO3?;% zGoC2{v!QhS((b360;elLNpOX=3TgcQ6%7Y&91(rw;WLktCidI{0;*5s6fQ@JN<2%R z5pC-xvj{CU4KoY1c$yQLpbLKA!#kj}f_{N0czA_}_(I5>!0oH?6i66krIhvP^*1F~ zi0nKgD>^2)0C@i=Pvj}i5A5sN?GpHFnpXyIjUK)s^{@m(Nkw}_us2xjDvP0cOSFWP zxH%_wZqIPQh_aMR<0WKD67OkpLIAcMOhybQmh20NE%P#XQ;N6W5)5;0hU_UU8gsxi zhi`=iZn^kcv64tUFgF!D$X!wfm{ccvRrHepG#<_l8ZEgl51yS(X(xj<-VoJ0Fe?D2 zDA({O9Q}azKrt+cP60jI{yLDEV)Y4R$*c4NG+iW33rLX>(8K79pafehYyg|)5E^tt zR%#w(>aiw;sYULv0vz{kDIis9Hg8B}nZtoJIU=+KE4}N6C50CH;6evei&n!+Ku0DN z+ro{V9BoNp-Zl7S-kfltT1*D0@lgSFym*aa1udW&-!YEcm~(3ZCV}_q5zq)A!ehbj z?zl}(h#>rl4IuEThcM+|t{tf9-<5e`vlI{PLRB$nS^_#jGIV9cV+K`>ztx_AAteaL z9QyYSEAVzh&596n#E8rOjOA#fF~ck?m8D_&TAMmv4!ccfF$~AoE zLyCj`Xg}0Kf9s-x^YyL^-=PH6zp&jRCvVxO!ix_%jx9N(eHv$&zo2;v2f9$%O@(40 z$XuDN5G3A290^I8vE+bn=!&^Ms7wWQFhIdxM`^Ugh!JmmvU=*S{+QCm7z{eGeAwAh z4r?TVHnz9gm|S_Bn~sToKH|(vttx<4WS~J)R3$D&f27)1v;Aod+HC8P6s{(e2E;7x zfKp!@2M}!hjSbv+CjA1>EP-1NPvK3RG@$2q2r-!x2G=!)hZDitjEpf2D^kgay~*tW zj#wMsOo+GS4!*=UjuEs9$W0f)qH*QMae+UhFDYsYo&mL>S?~wYox)^RKu@ec9d_E~ zt^lGOX?X)b`%y3R1C7i0UjG0f5D4@X=%uB*A?JQ>R!-FSynhnBcFwj1D8`(_~3p5eE|nL;`HK9nkjEs z)N|>ECQ9LNmm!tt{$D1WIp;kIl8h1J8A~&tt|A}rmM`AEO@<2dOIf!xVs|{)AXjBq zQ~Tkffpv7%#+zD+vji)WP+xEHo`6@$qG-n5rYH{nRO%i0u)X@MKT}*bnX$U#1CY1x z6dN=uZ(Y2{aPHM9O+1N2*h$w=ddY72$ROcdT5V?@kQD%?gjIX}@~W)$$(B%TXY^|b zMBb3EOQ-;B1C}&}W@CIgZF*jE1E*0vzKS>O1tc%X7@GWPe155{+`Zt+_ZIMnbY4a6 zulmv_6xbQ5b57szrJn|LM3FBjirj_~(yD)bdIxX4aG8^bwi+ImhjiKm8 zGVutiYsyYo4DJx*NnYXbZ_70C}Sfo-H>~g41W43d&d|l8-l+j08OCa($aXgulmryT=3k} z_R;{o592^nd;gL64s%fLRF)NzqTDq4s+p%&7z!vQe3Pn=?lsXkXGl)$--&s!8c1zB z0z()?cL_v4;&_Xa)zM$oyme4Oi8s9a?J1|!;sc(MqK~8-O!;GNQn*kwNTj{rVgJr{ zcP)Mj59t%n%k}q2$xC+v-}#%$@0h>*jZ=Mj+2uz;%?R=ZCGn)<>fmN=stZH;ttgS4 za?xFeutuYM-=$6VNl~pr$9Ja=lA~Xm9>s3)7`a_@a}XTm&NbdMRs{rcu6p#`nO``= z(rde;uX4-l-o2kzD!AccP;}JEf>zg2HiYTCZi-O-Q*_0}v#X|!<1eZ)$%1Z=x)R{s z=__m2+Bx1So}q8OzA;p#YZI$*SJyDe!Q`FhR_(ACS@?_o$g&`*IUF%@XunGINBrvH z4jhpd?O}>5im>GBA+RqIm7E<57jAVF9G8^02Wv6o8D|Ze39_q>%nRPvn6MO{A7L%s znoJ@4&9Z1Vie#5TE;3F!=)8kQ8(tfyADm4b*$s;d~ou5bs_$}seq!KnrxYjS1vHxVyVsafjmWT8dkXyIXO0cm4VPn|X7SH#3*J z+h_NAc4s4$6{S!R2@wGR0E&#XxXQ=e{ojKQ_wflWUn~AG!I+6Ehynn0u}Cl9VL!f; z8%e7u005pe0Dylm0Pytj%KrcWaA5-gjtl?*fiwUB&pxyDtKi2EaE5YH|E=*c9>v=H zJ|+ZvX)PxJz|iKu2Wp8%Px|8}$XP}~0NPZFP~<)B&n+t zh2{9z%Db`mPOh%5k|!`A;+N9d00Q$3(HZE%!x6*%W#xDSo!$Pju}R3^k5)BwiR?k} zr5?p$!_xUDw5vxP72Egw&ztVs);pRuD5jeJ{@QCh4!8|8N#;Y8SKb@;h1X-(;I#r4 zo_c#K_%Ivr{*;C$pyqW7Ow2DeR|v`%yX=oF3(aPVYF@~Rg$0T>qHafFsPYp*qm7Cl z*X0fz@%wWDN*tRFztHVspdAl!ad9D%OuuCWV5xKje)d0PfUAt-zyca{=mjyUz{9J{ z^pZ^^y0FLf=l#{Y>>e)XY-}FI;928B|3dw32 z%Q@2%vnT5P)v36(W60JPTc0)pdKX`GU@(WBC3ADHiIL%hAI>&?{t$i)GPe5qU6K2bPCg3Jb!|^V2)OQrflzZf4|ANy z1*5Y4W`6ox02<4vpAA6hvk&CHsi0f-pL#lM>*jAe=SFtNuP2!5>`w8Gj>s3>>r-oH z2tWDzt88DT`+oj1`%#b(>h$-P?m&5^g5u3i4V7$u`Tk>1u?&9Is{D-#VFc;IaA?k@ zVXhbvA;BRU5&PIO$Aa$J2FoMBn z!S8i(!k4GBWzPko8FO{>6!5-vCWoGs%E|FOLgl)Bgmv8)mH0!)SJyFOaR-CmRm9&o zhAgKLkr2x_M}1gp_I4qf2l6vK<6 zzefHn)`p+qyi!kfG$7q^hLru#-M?MFp!xUi3-;47@FLCrX0{G98C~aE=OUg*=OP29 z&VqG@`s5LXL#?QqfXonm7!zZhknMxZ_DP6#r!}+h&GI2}u--_H3WamfqH+^@P}Y&| z*k3X#UI*+;o@x&#O^$-K5s0xW;=zG}f)eeufqo=Ex(Lu;ae!tQy(to~k5iJMMaS!9 zA_ZR3td=1^Y{X#1xm917?acNN4<~D5qK#6qdI$W>qx!I*i>m_LE@bo^08 zH!LWuZkfyS?|nYqRO0--?o5X!hyGr@Zrm#BHSp*K%PS|17qT)0Vix{$$i@-(m z&Qm%CYI{Xn3}-v4?X*Ys8yvpXK^y%XI6XfTy9qp7OzcZuRa*MKdN2NAhYj)@Iy!PC zbXmbtqdDz*_%tP*g)%b=A;x2g3N$Lc(KPEvLX{DdsQL%+UQ^045A5u~Y{Qj=azA26 z8q6noZz;EK60@6?5q!s^LUGvo!QNf4o*Dz@^Eam@pnByJr7IgN(u6h>3 zbY1lgNn@c$^s{?smq6|Ut*YHwV*tKk8&zBWe!{^xP9<)|2+hAHWFE!QaJ9^5<9u4; z+lI@7IOTHd>XF5hn%2*OIkGh0;{F-S6hre^FLqz2S^0>0(UqWe?l?e|ONNf#9>JO5 z;UL_*V?blI4+~_$H2IF>-3l8pmDyESz(qFU_wb+xNoaf}wf}t&^AT9M-k7zPnEm*5 zY~wV*3JLntq@#KBLch1;-c-L)TQT&;d9SGvRJ%48$-NScKT1X^K|mU*>lrD_cnN65 zu??euY4-2HDH(A#!i(-*CFIR&TY+E82%LKtxbAVG7PA8U;pjz&kse7D%F&w&ic^tn zH%An^?7P6qivB3!#gpz1vg2&Hi(Xn)yi+CULuOKdxW3H&Ar^|gAw zSIc*(=J?3XYf=2VJQ&@&upG_{YvhBkU>;Ls9sk%}$8oTM)Vc4t%p_mEq1Zdkq`7b3 z)*Ex~4iS`O6CK-Ieojey+ColeXlQ8v`oPMJz?WByPjJ1y8J7&i4_DJ8b%~qcW4Y(; z-(sUmGWurxP(c#34E}t>TmnGTO234b+W4%f>AX*Ib^4fLtkrgF94ND(Je@*LI87hT zKLhUQ<92k#WH+R`QhM*NKUZ~nU)VcE@WJaXiJW&gP;yEpKofLBjwWM_!c18W6XNhr z@0zz|Gnn+|g6Ah%WOybhhr1chlbUKb?I(gI#ge-eJa^cYjL+wj$GMMj!$i=+VKL|P zhhLqMgNbi*4qNfvv(D6B6WvsZaOWo{-De*evz{`>bOQ#_w)ae;LYaSKg%XMUCH?of zxHv$5TEJvy1w;2!TwxEonlF#iZDON(JmYJ8ozWmwN-qU#BvW-{D*U_)s}tdmFb^lF=(H#=jG8zu)Mkq9l2>4Fvzat{+z1XJ8rgUXjxf3TpP*nR zu)IDZ40M2Hs{O9w3_jo=sY^~fj8trJF|8olNW$G1svYdY^T4daI*Kf>Lr@)d zTVTm}aX?eAj$#mzEIh=J52Y4kOcM1>%e=x=$ifHMcbci1Q~`B6U{s(&xC?)*NY}9- zf7tj;6W(XY+Qh!42w#^LArWR3PBsa>x;1ieIk3{Z;Jde~7Q5Z!YM-G)&TAiNUb@=k z?3eTH!n$d`#{^e2g5YhUMR5!x0EdVnS1K%FAt&KK6#4n%5G7czj(mrYpK`z;X!yRl zm<9Sv8iZ9)qadq`lFvPd0Jr=#=+h2QV4Hw-Z(yqkwhU%U36VV!nhGUmL?Mw2`&D{% zHD-W^MC{jkEhls(L3WejHCM2oN%0G&v3|>!6xc_o-QcG02@fGTJ8u&}dP$nHzYy`A z1dFhotUUo4^8JP&Hgjp%pYPE4_=~O*T8t0Lx24|&v$h4L9==%ZTbY|xy)V>h_-t%Mj&$|AKwn~y(WA^3Vy~^VwX0$JziZgpOT*XQp=ij~rJ1Bej5+`AFLaawIX1?AhS+|M!OB=zA5|9!Ne%|3X1OWJZ3h@RI7G+)rJN` z>IKm+?AZTI_uiM6=(>7?MH=82IX9@g

yF`6v_vjyfoiDVq59#{(hVdCN1kTS9~G?j-NF^ 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 literal 53277 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 diff --git a/resources/images/arrowLeft.svg b/resources/images/arrowLeft.svg new file mode 100644 index 0000000..1267a28 --- /dev/null +++ b/resources/images/arrowLeft.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/resources/images/arrowRight.svg b/resources/images/arrowRight.svg index 0f3d647..1909053 100644 --- a/resources/images/arrowRight.svg +++ b/resources/images/arrowRight.svg @@ -1,10 +1,5 @@ - - - - - - - + + + + \ No newline at end of file diff --git a/resources/images/desktop/background.png b/resources/images/desktop/background.png deleted file mode 100644 index d3ceb7fc3fb429dcb1df1ed38ed7b20382026e67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170322 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

J1;h7KQ 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

)x+im<UY^_+kXW>*Vm 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⋘n2ZD)NEbdzCU0^ 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 BC=H##6a#n7C@ttYMp3OY2%bFJ z0aZcvISuTc?$JPmRCU#q8^!E?W~1Om|2e$QKuOdQIrTZO8JYEWEecUfWX}Ve>^Os*DD3>U##@TQ6^8;mRY8&rpx|Vma9ie z>^b`@#hgYgs;(bORpwEOyLI)3^g)wGiXeE);HW48>#MCtOhrXSLb#cPrm=LBzFM59 zpTGA&rY@ImYz(g~+YNZi{wJ3~U{xv~k6KbIhUH${e_ITem-W_p3x_3`w+ucW9Yb(M zL!y!U&74M;eVE-aOw3tZDRZq2H@GxiF6;0LGJ(^L*zN3Cd+UUKB4wD-H`k1Jt=asF ze3IHCUUM;6#RB}Hy_!Q{tV~vqkEqkx)b8{l^=mecHDs}jw76ug&;JB{IhB2PP?U}r zG|^diq(uEoc`TdFkXrJTgZG3YMQZ9@sg%Q!raHG~XAj?nLe7J)-uJx4qvT-JPVA1@J2Wd)@mGnMK)qnJ#EvKY&_E444|F8Zm9{h_Rlt@-F1y8f*P{j?o zC6f0^?oL&EC@lH+*6K{*!Lt+NK*6db_u<39Z5U*03v#1%{q5u90^?HP>C=J$rq#7% zEX{=uV8Ah8e2P{0uXK8_qCBRhyL9|w`&)wzEXn_t?_|_%vGW(;jO};XIJ^vGQK2<85xi09Ju~`%}R{!Q0gV>|WnnhY8&o{m-stI{l+*KlSx54JjK)&M$(E-U`394rbb9wzba6AQEt_B9oPa zIN7c2( zG?i}Q>~_YQ@4=a`6Axrj)(7zFVcpU&E?=fRhDXZPPt)8t#kkFB|?GpKEgsUF)Iv-t0=f~{=|ubvaYWC_wRQNOgPmR+mO@s z)wzdzUb+dFKf(D*M!4LDk*j(HPw*^w+hxfQz4)HTX!i#Q z{E0;tcu(5CZf!mEz7KdjcH8DlSM{D}%WbecT!1uLW7S_Sx~wc3Rw|41+aZEpq8j^p zhy_Jj<$@M+0F8DQm|sshaBRO0?c}32`At#lLnrSRr$fM}q&{V*ITfhs+9xveZWe9IoAX(W$E)5Y2Tk6WV**Qt!6-eH7rjRL0YHv-MDCCy4 zh>JHrAZ>Z<_^xWA=ZrwIu{k$6AmX%q>FM1l7T!u3uiO|&L`rmN{daU2T_9lRRxqS_ zw3R%IWRY z^~{fzl$p)eL&i%+ZrAN0a><{SU@5f%tJY ztMQ9K%*3wVZEC9gkgW@ElGaF*XjHQ!?d;fx)1vss?@hMfUBTEK{cU3SNx9C zj8vVE7a=Sz2qn=G8aEunL>MDYmhTVDsa0~L)9HM+*&+WKZ+J$HOJ;eZmQ&+4{e;osoY)MwO|}u0S#8^L`z#Bi z)+Ou0!tSi1NU0ny*D93?igt&$6|)M+xD^V0xzY=m(|94*4|dcPOG^qssA5SU9H|v7 z^#{$frh=(^&|T-`HyiE6(4_9|pxxdS)d!$zf!}%n)Ju15Z8vqum+BCN&hrK31V!h= z+6BF)oZ85v&{I0Uh-&neD@RBFISXmOa_O2@0|^0ez4jmQk^V>hkK0Qci*e6yCcSRl zKw3SdW7c8ZGakwb%aYZf@3xrT*LKYo+a5uDG7~a`&xqR&eRdT|5_{w!X))Q8_i&5j zz~}SfGL?0x^thTY;2)n%jg=4ab%J(_T79FPfpFD@tvK0^&z> z$P{~k@|ZC(kpSiO#2=y}K^Uy%FQe-n%w-9p zB1j7jW9X#JzKb+b4tBbb#uOrKVa~a8GvURImf!QRg1m7Fy@r~?+c_y@@$YRs$Zg!1 zxKlEp^k_bAvX{~MH_|)bQ*-L*ht9Y6nAK;(XD+?nEScLFdoVAl>=$1cLjLOSNlYxQ z&XQglkn*peX})#rdD&@Qo0wLRQc@+l`Ka^n3xy9RpI6W1bhhR2k6#js1(gz3~1)9GcH&jwjqhiFKIyjkW%&k^jF5Mj=WrsKbiVi7&0E*3 zyQ6x|wL{9^O8=8y1Na9hQwMhd=G*0KxOa}Xs%|tkMjm8GjMq1=V zvdw;AAmn7V2#bVm~?R?jiLp?3nCJl znuu=F3WlbjT@9|zN`Z3GYEy0PPzxy7+EUa^%Zf{MT_#c2^K*)rpB6GcA%S86 z?0`+K5KwA?!pP4CyCX3mJ9`USBdo))V00aVi(i6E&Ke$XQmOnus}6Oqj2~e*B!r~I9_jdN`$>h>u5t$GsvKep9gLX0b z8oh7yVo7Ro&A!xVcG|cUGA)lRm5DK=-$8%c%ubRS`0l)`N%t=%p|vtJxl}Rtfe|ibv7a$)wpP!oRoLcH72B&_TPrv*}=V_v$@BH7NpSJv+2Wt|`5aEx^ z+C6RmMPAN33%)_~^(v6_)y?zwqOPi@`RKhWb#z|+*K^URT7Irde!Xf}Ue(lmM}E%b znqA!sg?!ypq493O1#%2yySgCuG7#+6I0reW3>oKPF|Lfaw6a5a$TY&hgW(wEkAnG~oIETTlmAknV zoUD_kpRTOemTJohjCQG6%eddmZ`X(zXcVK4Pvt7E&~Y_Zb}kkta=viJmO6-((YJb! zy@6KpfD-c*M3kuQM%LVL2KM2N#=)i7kZ1pvb17!US)8;N1MI;U*PLOjAQq&cJDd@x zC&(tzthV8pCbc@ls+{awSqTo zVifcFT>iB2;N{FrCe!rec-)~famIi1wjBhPd2ec&JRZ-n>?q@PAMkkD6FYzW5cfNl z56W6YfxyT?zbX*ecFnYY9{0uLIh^j+TBfN#6d&K&R&Q?)&n!sFG<&XS)PG#n6m6<{ z-P{DQ-UQhGoy6ljK1aky?`{+%p$$>fDIh00pLNty#t1;iT2wkmjG`E zhwgj=!sn6qZYSQs|HWVDNn(sZ|4G7e^U`TOAkor`xO4%{uhX4RH2o&Z3<#Ncj&%0! zHUUO*K`xI*n~$5KE_I@(XI6eM8vXhQInX9**LC@wMKHKiZZdQy9M35Or(Qz{_*ZMk65D=b=2L90awM;QdKr)(lV zIzX)>4-^Sv5OgFAaG@2Pz<}A~PtaIo0{#<02Y*U=#MR)4U^~I^=v7S|X!=Dq-7u0U zKx}BlI_P$F37{SC{&kpe?3w+38iXp=s1ABgCcJU3fg*Ok3uW20M&_eXvekw$GdI)15PnOi8< zK+DyJcLl`uUptEP>RF@z?L?(1=u{Gc(MKW+8?v$#?s5wCN}irdq;ady&`~TxaWILR zELODl641STcCwyuZJ$eL=~1-(fk#%eUCBZhzwem4%0kQDh9_6_b|<_2{SBNw776cL z45EkPYWK6=cNJlgZ7HK9Mhg$3!VwnL7HKR=wBU=#O1Q(hqKs*8*c*gS zJ=LzFeU<95+lPia!XmSBt^rH1ipW@{q4EKVj-|V$qY6}m^<}$7*ty?fefWQ>t}Z66 zGz|w%;NnP7S>#6rIe59aWtWgim2cPsZ21QWW)-XY=bVp_=Y5~&{hsr_ zC2d_w%{3Z%~`drl<>XijbkXFJA)5H}1sRdy8{* zJ{nz(9IjamxCBL#ZXF^*+H8ZTZX9K6Ixdmm@{eEVfVEP1Se{}0l-}RiA^#PUt@&Dz#EW3Zy zbH0Ul?&o<#`22q+gh5Ys>;JrK_hk?`dWZl)%X}euloHG7Z%z>-W=&MUo_}4g)!XjI*J(V zqDaOcF=&(X8Id6!lt_sFyO|@M%Z2-gv?M(RLW$Ucm@8pz?FH+#H-_z)sn~QwAVt(v9L;0`|fMQVZn0Qpws^^ z8hL(59{iAT4TdZ1nL|2!n8x?oauEITY4M#V4!(`6a@WlEk58OJnwZ3> zX3*LErm9A^t>ebVSbpsV@!*J!2J_YJx7jqhW=B1K@Q~KIvHWSJ7iRR6m*-ZBNd5h` zsI=EccjlgqwZ51=`@D5!Lk-JX9g~hS4)?ciTN5mPpitKibd(QUJe{_I1rqzF zs%+tsviiEGw^lWhM-wwfyXlKq)>r(B#f%1QK zxE4PY=yZGjwM1AO6p403PW!7bhmqLY;kUns5&@tLOyPtM*LmY+e<<$P10jtWjb;qX z7yfEL!vF&ZN#6<%0dZH9$Wg`93}PqS72L(S-0g;heT!8?}sX$nyqVYN@BIU3ubOtJw>4vCWMZQpED9X!I z7!=e3XCXvkN`*qEARiL;G4m-RgqugDQu4V5DFiVUg@q6-D1r*0f`S?sljzE!V8Zgg z;#?u>WEvz2u0RYzfSg$@hlN^sVGT-wYq-LiK4C5wEi5$Dzz|v^hbYn_Dz^fnLUdO4 zc0H1;0^ySA(h5?Eyn;^I(Ugui=gCSmLhcx&q-tVff=wFU8PbVm7Kp0y%4Kb}xr+CL zq$&%aH8C!gPix?Y2BtLJRk|Fu$io$Rd+RMX1Zu-rlI9usxNc!4e~Ypzx*D^)Wy1FG_}3peR7qoG^FS2ytT`_;KBrG~?}`l7OPcf5|lQ+{6W z@@%N+eE3ecXY;ouhV1$JN_hvFr<_)=_b)PRVvpwfivcd7Hb+92y40MvMz2sj5}7Tn>;4JVy5b zIY(8SN6TT8=xlb=%)8(J__8NRt|ZYnx`lPt_a9}Sw#|&du?plx93qWPZ;rf+d`f;LdIg5c7M% zdF~Ojc(Sec!R5fi>e~m|KaTnCTYtb>0R6}6tzb2JGa&lEejqyd0#Wei?fuYdpf79K z$8{nRikm~B0G>tzkx(iU8Un;;H61y^MLKs74*@2imFS2b-T$NN>O$H`*Dy1~%*AAw zjA1hQnV4iU6Y}R^0x>a>WOEZvQP9O0wI*JObx~F@dQp!NrK=XDqS&rjIh0zWN8Q>@ zlkBdR&G82stDa)_(9(j7?ak8dVT)B-T-u(S^Nn8ZKqkotb2rcPKJW9s-}~)bl9}Y# z{?P%5{5|{WWG0n%;4+gYmdOoV!NMa=qdW6T4}I;*0=~b|*kSiXd7YO>6DANh@lNT82U}Mx>wdJG@w_SD`Cp z{cOT4APUvZ*mpYu zim9wvRKdk^$a?qpZywJ5)!|q97OTpHA{hh==F*y8Mvg9$unaFZ49X)FBqaxwfD#1p z!nyqBhsR&s3mlG^2^xtG#^Ok3OvvE#5Vu?Yl?S9 zv$@z|dNVT}<74?W&xLv>Pr&`Yg^z|NK|XtWv=_fxSJ&40kGeYzb@8p2Ai~!D?M`Rg z!JW6MnVGh>)NZ`30kFf&g?K8pdj|T0>Y2S%ToT`%lBxgXtPdZEbtzm+xIL@tPf7R% zIl$M_*v&5``(ASOq&)xZcn(PotexcuQX{|gtfc(UcK$t)?85Ug{V!jh7y1qW{_8rc z0Ru^j1LXV%sef0`)B#SKslHm*_D{fHSKGE;9-KDZX-K62M;v4hbMN!1*l6k~Hy!By zGqd;9`5{xtJjh8aJr*wcJ~Mfe%!PPM^yvMlGxXr#D9v|g^7#`>@+kiStn43UlA(PL zm%;G*NW`tcmC4pvaX6NYU^uB@qap;w++kQ5?HScbb2nplH54{VJ81Y1yn~|XXb7XU zQ4PajNKceiqDt+khQW*otwbn9XVmIAod!cV4aOSPlu?QJM>V)zi<$gr39q9lw}#gE z11MdBvfU*nrB*JCSxQWPpdiLd*nkN~IFZ(Ag%S(U{}x)B@{O=GBJytOG8&C61UYyI z#PE6)B87sFZ1j@eLaeW~b!5a_MnX?3m}4ercr>ypARDEECL6)!ui4|}`A3M=G1!#Q z)iwZfK#jk81m7n2%+WF|*vcM7meng|ujv1;6b(&Eb8-&YAJ;ai%!7d9=r%#lxpcYQW9{!{kd zrQvpS|8H|)*Z-am-0Gj3w+V=?^2Sc0*1Yh^1Tkh$RTDAaX4WO z_8P)`%VB|A$O2d|fW&@b@7L*orJIX^tbL3(X1k*c)3InzAzg5GCl^{n>BApBXD7Qk zJ~=tcXOmCw_ar$k^~Yg0n@=a_V(D}Nhy|c^b6fe$Ok5hg+fe;Qb-enmv_lg`tv zgRR{-P}d;ncecfMJFDy3QhS-1hBzRAcxrDq4ubx{+p`J$Yf|CGm=V?%6s4KbymkOTx|n_<-59u-Mu!c-|%4T3#rTawBbTLm)goNgq-)MM|1fj z5apkaj($4L$HvAo3zL8La3}fvQ)B8h?UaV`PwwY4NB6xdF_?wH zm=F)bJ4)lC+ipih8bg#89Yr%3hcFN&ax4>eV?Z`QZc(WT&_zH2D0}=$xsk$nrv~@m zciN+LiC>G$odNKTqgtQU0%h0Xkbs;(|3tuzhioD;Y>kaJEMenoy12>$^S{=`U0He_co(FUu6=mnuP znl(|p&=!NS>MSl3u^|3j7;V(3Gg=j@Q+KU0iBcuRjkWQ@)agyPtub-ebkcOTbF<%} z*^AzAaW2Srah~^i-uJxE^I-}pW>ZWI+a^{93D?EUOIkgk@sx+(A?&@g>D_SJ=-5=; z>#u5tyL>w{ZyI@tPn&xeQLb=6@So|;W@+nO)IarZvVzJLEg2z^QUoE;?g9jNL8wCK zp48P?l*5WJ3IX<&85J0gVm2eEtVS4C_8jN)$Jq@Cv%K*P*jknqQ>Q;zHuDY~-^m~6 z_YR_SIzaOrVf&jZjz!VZ{L|Pw_tsQ1(UZ@I1rSy1iRX_uPyLQ?&8b2Vu5aO*2UZ?D z*fCAV)f6djW-Jl!3G?|q_spgp69dOhqpmye_WSOv?7%|jgEGgMa~ZQJyHQ8$a=0qL zsPSN+fbSb3F77QfCU zD_{GU0JUc_7olR(m@1J+hKl8>m^_n|M}qU``@!wd^-1pbi?@1xOsUv%j{j1K z#te{3e|#K}ep7B1Aa8uUDNso1Am?#~T&}+Zj6Zz%ue)~vcRzeu_*4(N{cpaxd$-`; zdk7wq&u%>}4VaBcsPF6Fy2O*{BNJlp0(X5{UN!U zwnx^tPp;EfC&}55M{AvR!E1Y4+FrL-XHRY)Mb@@Igd{_2Yj!y(nk7lK+EBad5n{Dz zzep?Q!O&nW#t+&FlpPDz_Ip)oh(={2MKLWG1$-+uh#f#RJ2}YbnLbEM?ZQP*4JRpg!!nZV9;-U`S&C+QMDWgj=Ha++tyX%Lc73A zd@oE{=9-nV@+yk3BP?2M^jJD-4W6tb=4z_9u&hFIiltMIBzhK(p_a(AXGXw5VWRE{(E$R_V z_uJt`LgpN?YV`}09D7wvePqaj3RR+vaM>*ySQmDI%0}%z6+1$M`eA{v3N6s zA&?&ICE^>S{-x=jQHB&Z9<)GnZiaiwHR>}n1TMF8FXWk1WXdkKZ-+kH zuTw9ceE#p}&)@y+)vG#jCZr#dWHR2^s=ZPlJimOB9C}Ue?5vg8&+TiHlZ-wV49P2F zod65TbS4RYtQpY4lYqY2(Do7Vef3#&b;F;3X=|t^KcC<1InM=sL$nc zhvZsKpm5FZBhrrZ&u4($zadc$p#JbFIin{TA0YoOxf)s+;gjS~4)tyoa=34iN+0z1 zg*rhhgTEBUfuv#}(O%g1{gT>WNbGz>nuH$x`UspX&;}|H&>(?at|`!#YZ?!H|Lx7D z065X%I#2?E26A3e9XPxC{;y3}k=1nM!w#oRaCJK(j-6et z&)3O2kA54nr`IET`RdjB$4I4KpZ*xKm&A_jmGYzY*|Zv_npXz}4F9Tt*244J?K^bRs=a18mnJ~n9MgETMoS3r?TGffGD*S8gWX)b56>HKK^6#Fzxy9ij=n7 zfh{Vf8lO&pOzbmx^=jPOkJdO5x&ZXo-8L@o9$;IPpyM2)H;f9Z7UA7?7f#t7rk7Wt z#4wl6HqZQfZWwxbacT0dU=*7P+qm#>7bj@Vo11(_ec7^abEm(35*ht;A$b0?OE%Eq zjgIsY7M*`*K&S5iBP-A;Fq&@{H&($gqtQm7T`Tnolb;_YD{$5gs`vMjpMM* zNG&tLW}P{nIL_`Jp!AC0?|V)=+80fp<2a7?9nA0O}dotvj3#B-4MRb<(t z*&W&FbbgQxOSPUvHX9w4a(AXjWr?VxE^)ea>e=(~<9P=IcJz!TyhY7y*`L*0g9rRFB~;6wc)0LRsz1gQ&$_QHD_&!WO5o2$ z-hDuadLgcq(^B3F%G7X;&K&OUHnItZ`8t)+>qF_E6> zzkL7qegFE`w_>rFf69w{-_Gojudvw6f3{)ZR60ti4tgUh|3NGfo5bVODw6ajyd+6{ z^b)|#@8ot);rSNs!~NC$z`OAaVc_|puC5A91l@pQfgJ$X&VG0V@;xy9?u!6x?_fC3 z>a%x;a7`}+5PlBOcIe!H^VAI;KWy=zJA3vV^zd*{54P?A!WW)Bh8o~{e)b2x4@o~i z#Q#MFz*qUjf4D6OUSE&qSoQfX{O!CuSmg_B1LhCz%`zn$ z-G{5;cXxfKxq#1?o9>N8v&mj(=J!N0wz!?0w8QRxCff^YLMGO`lg=b?l5qZ(-CIol z7L6?CckZc@xv6ZN^nOfEX41Kdtdt?Qj7cR%zspsq^gKy=rACV0Ut&jr&ZnTjU`tfE zUWmCcmdAzZIRXwJ^WtI}N+XPX9S^{qN*9Q+5)sWM4Xb#_%NjUVoCn2jwW z+k16gE2~gmX)0)OAj{3%;-+eiw!%tbbl0I4Ev=ziPhs45aLOteat&ATDP=Qk%np%HI66WT|GVHJ=7*-&mRVt1ScHy?xm}-_djDb&6e6Ct3UBfm$)Y zKB)b)m1?xAuWHm>t(n4AG;*lb6ndjtUom7Vuhi5avMW~$OSjnib(sLEv?6^q6sx0a zU~X)n%THw}K7CvN;;40ZfV*`(IwVBq28NG@-=`S$gBxAy!QH|38|xcuf{i6w>!_qb zwlusk*gk})Q9$|a1%km1kFBGNQC(SC%8;oQ+B>a-wHAxVGw@=gy;e_ETxsdAD@3;D z=qwMD${pNV>%OWjEJRWYhoHNq_PxGiS98UTbTS!j#eJ29e{J(2o#uIYO4xXfDMYI~ zwD+_%9rw(|TMx<=b<1_v?%mVOKYjXiUgIZ|G3Tr2q&fi)flBo%`mfn1WIRo%Vz9kG8ch&0Gb`CCf7I`t_N(mPMQ0`l z@Ddn-$cN)O;ehYiYA}4^!pJskriTMT=&NBX4fy*i!1p`*BjKvRT}ZBnt8Tbm=jR_n z-~k99ApcS*1f+iG>j*zU__?!ZLJ;|vLf7GP9sB@7|M3DS60q?X`qJM!b0!1}1jP84 z31IN!1sL#~Pw0bg|MB$&cj+&4{BC=e+S&B519Vod6?$$J*Wu*AY0ty z`{Tht?(}d!J>{K_Iy0lWL?n~ROv8r%L?#Klcu8+M>x~nM-y=?v?48am64}h+6MsB1 zy$HVKOe9pQL^_>us+_%Er?p3J_Vid;q^G@>3j=g@n2Y5UF;HEP$FD0u1xA&wgjxci zCIX5d*8zr?is>93E)ns0Vqohr30*1yj zWK(feDUORcz!w-uvDn6A8wgTl0}4QDFo+2Q+aTr}YK~ajz93OZZpUH=@FkY zzniMNg0Pwu98)PmS7?FJXE7V84H`DBfg&$8Q93G7y@pe$;i?f+F=yF9|GQQ;I=I%p zwkG5XpWZGSJsNnlJH&O3ZtN~C%h{=y8yjoPvPXlS+odSC?{$Uc=IDT_WB5@!SI!t( z8y?n?_}_DNHt1Z`Hh={dLd2?k81tTs4*Us$!p2#PKn)cQCUuvvM3E z$tX;ff@@ThW8U=V**!b(__Heqi%xqi6TzKR(P`)L$!zfC;mO0D^vTQ~Fuscu!P5z# zq2WmW>i$U8`3vqqm2W(}4HUgQTs1NR-2To8)cg~HZGim1MVOVd>IQ}Yre`fcuwT!E zKmVK$=6Iav?Yzi`o54b`>kkL~E-mD@^yE`K@_TwOeQoN8;EdZ3a0AaJ7{L#h24S;r z;cL=2+$8YL;lkse4}CsJ{qB)q@O)qd-rK~^MDSuDupJx+^zZ(rDgdfjFg(8h&UY~| z65bEza@njCcf!cMbUH!UGoa8VaVdC1_2FaAX^-QPY}V@~Be~=U=joz9+8dinpH354 zEbS!YA14yPFA+*CCQ&l{lQOz76VodZAC3wgpri9+V>y^GcxL*BL21iNwwn;6U5k3}Ppr z#*d42P6x#lHZ~WD;w3nTi?_;x`!l+GI1=o zZJjayPM@nCuDJ4YPBcC`=P|D4kH>T2>zS^un?w97wZ@r_eq25GmoAtzf`ra0DJO_K zB!nxm!cZ>O#;);&u^J_FTnXO8hn4v#s%?kX?Szqp9(+xG`m%UcnZk!JT-Fy`5jcxO z75HNhQQpkfnEOc|x4D|VdT6miZ6vRB&)*w+(Cb`>*oZUsb#F&9UQ7LHVTpjsv zVWU2OGx;Eg7`L!Lf__7l9%8%f5HYR9cvV@r#Uj5`%H)wgmr1W5Dygo{H)1GMh?`gb z{k!*nSV<=Tkz88YnXt9~eLzR`;eHD6eDCReU^8%Va9SYg{ORR}#37Tc+jKbIX4tYxK&%1P zr<^>ysomi0?(U?werKohv+o{JCf}d`O5L}k?0Xlfyic+BYm_yQKGdVCcL39$Tm(9R zV)sO)p?cgPasTytWVi~uTj=g$^cAd{`0^TKZ2Z787jO6Hc<)@eHkHEg)q*6*6M9=8H;?!{*)tx#<_V-5ybOYiqeSxYx3InIW!*NIev{f3R z44_;f@~A|L0swG{3gL>G0x`l7BB~a!>M?LUVxgEL9AFRO?z0vjM%|45kt+zAs?F8{#)*oKPl+bw9a5cLP<12B3 z%wv)z5DK!s(VksH^1CSHZ<*kRh4+d3p=RY_pZi9_1Tk_>0CM$>FMPbkZeG8=w5kS$ zS-vWLa}ASC7&Df=j=|XD*j6G&VhGk?FSmzs*;2$9YMiQoHKtpcIsuOIoi}dzAtEtG zh_-GF_MY@X4Q4-{IJEMZ#IQDVnCQu4kwf}02FqFP>q9;(-&~hC-28Y1M|Ej+H#Az! zVk=9mRj8aa5&6n&tY3RQthJLQIRyy+^VLv^=$UTgZ!cxCji*1_Z0UQOOaB=u_-RF# zdKJ(GqUni)Ks0*l2&C6ufu+-$e zbm^@A?1;ASQKxcLd5_ZibQzyIuDg1TuIB;3U%Ws|{i}aGm-;~d)1COfI`7kQjSdy` z&(%+8dO(YVFMgZeL4PTS-y>=YK+~f~w|@q&_FlSNR#|rY^T}Y4KI5yWWJu5pcD4g{ zJ=t`-DF{LtMN7Q&-j9!uCme6nr=GP`YHbI^ztfFi>P_dq!jYPYre=TD=>o@ZsKMOP ziL|11?JO;`wJfEV_V@P{GKbC6vb@|PU~U)GJei4zxPcl77Nt9Znv~?gh;2Z_g@|ma z%A=wu+frRP)gmtK-#@>8Pe1&?MI=-+tp6?l@T*9|kV+7Z0eO3oUZJh>9I4L6(f#X! zN-UKZx2RB!gu(db!Y>>fF3pKDkvH_;zRytr8h~u;25`U!O+y8)Ipnd>F-D4|2Mzn>BaiTEg0F-JYLAv8ozo$=qF*)`BC=?r(+iax+0^eLJ1? zEo{=##%y%q3;JwoR;-eVRa5ir5tEOljH{fbrMAFx*LG<+3!5@ZdRN(ea`+^WsV;PX z$e5C~Ja{w~Gfk2FP&qU4Zf3FF&Xc}>m#7|Qb8A1`Uz~paxN#aWB!dL(oQw_jm}^5u>CJY1^iTi>&InVlh&k|COPV*u8^~21VzYiDe zC6%MrhDE%hdEv_noakoMw)HPSQUWQt+0kpN+uHKy2)gzn{>T2g(z(X0yzWB1lC1T2 zU9U0M#bRTL8i;AUHCD)vb%hVZ{t&B_bd!0pPU%@eBYJf9tO-}wwv_E zhDGy}!MVss(9ea#|E20$W70~~a5x9}0aV}!2LVChU=H2_COF=rl2|e`nqar0c>Q5o zjYc*oKeV;MXtlvO3wXiHk46lo+OZY^d$DC&OzTcHrrm_5O&RU%cH3Ix#Exsnoz(u> z@563(#~&nIB#`jD@AJIpd7rN{1vy_uVPvJ&Diau;R?c_*9BI{Q0m8vBl+8(yrx&QI z?)}9@{v3e;UCT$2!N^e{usgWA6jtwU7XGZYEe8Stzb_ncJ+a8t#O}kTz&>dSEJZAi zt-wBj`ro`jw0^s@yZ-&s&e4`@Kx=VR)7pdqTKb!yxqk-KD!pL^)P$yAO#0~F%qyTxR-*9OZBQ74p+&84FL>bg z!Ei3Z^7P!YxI(UO5UjeE9 z;0?K0#HMM)JW)PdsCH!V2ssT@0+E`b!7)N6WJ0YE2!AFery>S@7J&XL9@ogt^Y*o{ z3d1alH$7vuE(I^wy?D|1fR))UykWO96B<>*)y53D{rn5wf{0~RQdr^eGe-X$I@S2& zi}vguX?yyMMmy`7{22Pk7wD@nWo{>8EoID}XJ^d{YLy%$s|c00r(Nm#uzE#)-FtMV zXI9DTt&&{4at-HnTCewQ>nKy@ypdcdQ+~OV*#3NuKIN3mZTEdu*2+**gfG1S03ZNK zL_t(I`yY)d?b!3w`=!n#R?g>JeJc8cawJ^|)JrObtCTX$4RK~cL)Ez)#5{+YlUPcr zBDX-w&YI%PnVFJQEN6RsNVZ}}wPIh2MP2BktLXdIIEmMZPagdV(R*()jSW#_>~-1BFw_l4HdB+4J7 zI#`G@CqYn^l)@}4FOmpupJjBV((kJ(?8id!du}W(6jBXkDIR5?#1p% z#N`ipy#dc5fc4&?XRlsA5jB`*N{o6#iLt5PWCWP12PiUJorsz|{&myD`r4YQ321)9 z*TwpY325AX^+Rlk4=MezoF9JM7IW%CCNLbc=K-Y;f7Rf*_&b2h-)Xzs7E9-V7x#yU zVMmAKykqRcalza8*sQND7T*0Oz&EzD4{FTQU!YkB=7kgkVq*N-sJ~hd>JzxRw7v#D zs|U!C5)(8gL6KrKPBcY9G1DI!OD5o|o-Mc@T(so}UAB+@Ab>ehx9mT35QHn}^@l>; zL2|z`=sD;hf+0e-c(7=3bdZVK(Ba1pZ?KZIbq~0`XA|q>%RZge9NM=Wr}M9_gT-_@|tfZxPYNqJLBWF5;s9qQ1^2 zGZ=+9TUf};AOO`Tc^PUMo1LGSFHhttk`qxmDasI%B%gxf6g*jg4FIs`QPOnGW9TQu zpwD4e=TLrq27bb;-HOxI4P0Fyjg@WhQ3Sj!v`WfYU66_=lN6e*{2%Qq1~yrJBds4p zXS*1>1tFurp282G>B+O__57L&34Z}HRYV8SSLJf6ol|(ZswFjtt!hPT%^Za_6}dU7 zYYgNtbFaC@=CYpbc0~TJ@q<{&L@wMKke^dwNec_TNPC|9_s@@dizYeQ_p06Fxl&2H z@XYq*xE|%_(T(lLr@Pu8jSTf)spg(<1-zThmMST&IK1 zQGMA5RaBCH2|QVy&u#o0&aKc}<+4Z@H|xn$j4@sx6wg)?BM#C0SM3IU{9Bk_Q9X z2>J);_oWL8syK=)C0kJHoWf{TQudUJn`h=W+%~7$%}V9uy*KyFU961A`=iKxEj)kY zXiHYO`!J}kJ961}HunQ-b>2ug*EFL}d9A=kSw zVR6U^(9sAr={odGtb0s=!NX-dprMObR*GlfTD;NZ@l34fL0^qVJt6-@6A=09mtY*$ zNf?#4VvNE#4j8u$FWXa3K&B4$d~ALXjk%}b{@wBL4wMA|``Cjpau>X!4YGyiQ!z3R z(|Mo`0QUXZP~Z#Yj~&YqOYwYl7Y_LE#xnh&bKf*$&_`$fR8p)r7}wSw)_-$#!s9XN zf#}zRs#R|=0(k-Hj89Ohq(}oV z`GNZ=ol3PJe3CaPXNyGW+Y^h53`?4Z9F)u7Qvbu%wZ*h?rD4t3o`>9k^%} z{S%U-F=&J&r-Q>F%?b_}$JNo;mJXDmaK@Ocl%$A*AZGA0n0H2QgaO_2+E}bMJrf67 zAM@hK28-n)h!kR_jg4*?^hFSolw)`umo6d4m>a`gR+Jq?dYm=Et6zj9~dX!nIV%O+VZ7MRDg`=ebVMFjt zcB~YZ9edQ5uO{G?E>Ze8&bEzhyt-Q0tk>2LM_!Jvznt^AU!EX-v{>QdpPqX-W7%oX6a1iaRUVJFa6$LcYcsySOCPL73BV_|&-0S6>(Mrsz$ zqo9vVBd)~8<<8z>7K-O3c092#W_wj$iNqxHtQTsMZ>0+OCwzF1h$8QzQx zHxY<3an54UBe zH+CRXHJWad>5X&b_&BKSm_A;xw%>dF)HM6IZZ*Ta_ty5v z??4@2%)3B!t3L}QG(gv-3zyag0GQUcL7|@ss{LDFcGw;P44avjw+6&@<~2b1=f9xp zeW2x|VjjRX>cqbjeX3tx9__kyh1vraKp&j@qMY*hoEZGhms82Sa>};zaTjiIiZc9B zmY|ae4|pwpzWCYV;^z;~Qn~$W4;Q1hLCUL>w@dBV1173#e>vy4_<*ARff2`rf$dwn z7k~(GfMX9XIzYja`6P4Kv7455ab)SO-`Qa8o}C?8YVQticbmFrm;7TpcBOr3w_Com z)1jpL?G+ViOf$djST#$x>{cq_KiyzA*_YmSSi7h7C|{wJw;6HW8KIt(;gFIA(NGxX zqX@)97^gXMGlGyx8p5>;8RUQHf0xr3I?6*YlFO*4dI;&H(_=(B9O2-Ih(w;z|3%8d z+(Gh$Mzj1Ax>F$+VVoERSrzjuy&Ld+wE}nQexaYTSUR{0pzWz-zuZKUb~;_eor$ru zTWG>FJVu8}#jq-HPK=OaQlK&IR@4Y?LMG75tqM-HMyH3fixLoB4vQz3e1tw=eHP7S z&QFy6u+d`NP}AxgUY%L(yN?EpoFcCp^47oBO{vszt2eEG9mW&160CFVbxNz4SQ#}K zGDx*vt1x=(b+Z<|9g+qdH@=DlKFtl73$sK3w!akDU+*CKT z8TJ`r)VJBk=wHVdwkE^tuRN_cDsV#8?4Dlwu0GgR5KrJ30`6_jvmRnX6@-g`iT{H>Tv;e6%oX6;E*QO9#*_qbc1|;lFWPRm9|WtrSI4IJNA~vi@1MJPs!I1}4C=U!70ZRXSpsO8u=P3L9B}dvn9|9Hs^}{>ouTb(lihL@g zL%H`)?6}e8`zt41oG93XTAo_&zf=D8pQ)H`bny;A|HQ{zekZ!Vcjf%~lWUcqwBcL? z&_7G5{k*kIYER&6XDO%7lP6T`Ek_!durfc*`||pO>ksaIdEN2*_Q1e}O9KG#dC@cv z)tPh6k(WnheH{b8-D+@FYi6ou{r|2t6Po50cb zY5&f2wbDP`-d@#V>S&(<1F3e|TxAS`;7Xy4goH8(QR+yYFp6E0j1kGrB!U~|Bp`pg zk--J5Z&jQ|QO4=h2*v6=M5ojN=!y`U(Tw9VBl2(hGoINj0+WN;EY$x>ud<%Z#VlwhXG%#HVxq7)C;(<@d3`11IEtMCiZP0KbM|g(3skAre7dIRHW8%b; zr;i$nn%!C{W?5aqY-JdCFCG)m0~V@(lpo-;6VqQm>RC}2#;O&8jr(}6lpV8bP-jSm z<6;c**0ST0p^y!#Z`EouGU5q|w@X!91EDoyy{I9mK3!2paKbO7lOOhVwWAo3A?7C@ z1As9)3T_3;pq3@6nVRpHJ@X z>?!o+H)q>QQ4G?;%(@i5tptf8S^)GhH)kN6in zV(hEC+EA|7*2C=V{ZY`@zZvQu;xG8b;R(U!y4!O!TG!vd`O;UQP+={#3;m5e#Mdi+ zwTVm&B`){5vs_KuY%w3NolkA0u~1%9Z$Z+3xw_hzw6ZiDgnNHn?Bz=N5)gz70r?2m zEQ;2sBpovyO|UDVRcNxt(%39Xg=|{Hv{}&xQzNx4YLlIGj5^h-twnUKQ$NV6QygMv zmX4cfb!Ksevp;4Dknojz`0>2Y^StMM-!nK*1QKYVhd*_lFnUT@d ziAvQda;Yu_{Sw^JmQ$jx0D}KgCvJ`IBprJZYBB1kB6~^uZdew+ugZ>wJqJ6~_-1Hv zack!wx*I+G-FULt9^YK1cA|cAYtKKi6{h^X@5$Yr$;ohX`C-uP2*2G}T^;DHv7K_q zZ8fEU^=&q%C1!IwZE!vZU{k>LP9UaNozB(xfTh0%7=Cx$65DtN1UekD2Wa|O_fhfg z44kG7x8hRJhnD|nuRaBRSndNi^=FPsdb(3jaPJQK{-aS|&?>+Xahw4K|LM7-4Ze>6 z-OtQD10v&@B^Ilh-Hw5a_s1-jQX5zvKz8Y=&#&G8{C<4H2^0!2DNZ-cMA!h@olch} zo~l%E+Ilwz{K4QvFz7dX_5sze?XOLS%yzpS*!oZ?xc^JYV>VBiCqOK)7gHS{_Ei++ zv6H|Osi=_Mk&okC^s*qSni4>XQm&f<* z2qN~1;p`pG2|A`S3XMW6#P|W2dO7w_#*aFo7}0sWLc5BNks_VY&cQfxE@BtTGf0_{ zQgL;~a#Rl@lPWWlBu^QM4 zT2~S9r+Dr~gs+vz8yoQ~pDztp7hTnkI3f?wihxoYY3F85kIWA>5rsZpR<2Kz-Bg5} zz2Oj6_^N9Eb-=}|oB0ds(bnl)`LJ4=|N2w8KrL;2e2^cQ{xh)MHx%c(=vkj0Xo-t$ z)1%BhpMXgS)BycbR(UQ9XET|FENMxXQrTS3rnT0wSy*QdL2CnCszmXu#L9~A_T7B6 zvHIUVuL}yt=dZ6MmN43S;_1rm(FD4b;5WS1W)C&t>C*ZePe)(3)aJH~-a2T=t4-*q z?q;`Mm+-MOeRyFTuD~z63LszNV`bJ`JyVGEZh+QPhTSp=5~F=SJgo^AOmS#}`HZTO zJa+5))8^)MCVOa*`^PRk9bafEXc;sq+0y^3;g|F&QQ+nCs!_ynE+bEkpz6BxN&|5x zKiy!!tMD{M+GX{ZYK|YBNHrqK~{uQWe@Gsl7-j9DeT~2>Z7lZ2&?aaJyiWKCt;U{T8_(F__tR$5;Qd3g_KhK89OpF1OS51}5;gKZ5W*e(XFf-USNaG$8fa*+0P)9>nr# zK;$qeq@4cwRN}rnrSxZ^C74U415!=BDSn5|ec(-C|7XqvhXBIB>C|BEnc4m~CuiqA zhNb*9u~n7viNNH;n!bTv*wr5g>j!=%2EMql z@%EuV{K0Gv%O-%z&jv_W1)B7qd|ECBuF~$Q6fzjAK7@F^`x- z88Z->{2#}D#1J6|TVwoyVa4(jItrto=nzs~j$9;0I8>&tn1djsM~;a(80i&p?0Q5G zuBf6kDjur0VoVg%wlj$aHgCD1p{w0$T{dHS!(WH;t`dt$PII+{=*r7%kML<1%C*lU zm(!VpdAj7Hj$ffw7WHWqT^9uWCeHJ&Wo+!C=__NOmS(DK{A$oKjHa`@iqb9^@Y^Lk zK3|T|wT5~FuBa^Mmqi?=3W1`t^?{~-(DcpDxE5`brsZ@7jJvndy6UskcpGo(;P9rl z&7i!eX0{*JDmyQ->C@xyfOi=4O}9R6y1aCA_eNG$n>1^@qPD(iSWy0-iq9kk`7}O8 zs4?2TI?2793ze0I+{%{nJ2b^Y36EBk!zWlsU5TRc5{(Bmh}ze)a;4UK^Hw13-0se| ziR*XYA%!i8TWO{hZK6Q(t;sYU&^&&3R`RMykTW=(QP`G`7bKqIg}$DJk(H&yx^LQ7 zyFNV{uuj(oMh6X7uYNJuGb$gezZfPv##|K=%Km*Yo-COM~b=l^+0r0n9k~04qhmQzJO2MWiWAoRL(KqteP@0T9mGqRDohRT-`?);Kl$7K z?b$Z~`@rbiVjvvEVzZ@gx65|Q<#Jk1Ui;* zHp_;^{q~7}a^G(DhxXUZl*$XB9tuLiAF`8x@JX}T^C9H*f=B=!en&Xy34&V)_VL

eE;`cz^ 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

6JX+YEmlE6xN@NB2?P=1 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

mH0F!S=!#;rR<_*F0>A6f{f&BUm(XR_y5 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

W#YYbCGG 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 N002ovPDHLkV1k!J%*+4) literal 0 HcmV?d00001 diff --git a/resources/images/desktop/info_application_log.svg b/resources/images/desktop/info_application_log.svg new file mode 100644 index 0000000..fe6949c --- /dev/null +++ b/resources/images/desktop/info_application_log.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/info_diagnosis.svg b/resources/images/desktop/info_diagnosis.svg new file mode 100644 index 0000000..5c65230 --- /dev/null +++ b/resources/images/desktop/info_diagnosis.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/info_license.svg b/resources/images/desktop/info_license.svg new file mode 100644 index 0000000..6e12361 --- /dev/null +++ b/resources/images/desktop/info_license.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/info_manual.svg b/resources/images/desktop/info_manual.svg new file mode 100644 index 0000000..9f57a2f --- /dev/null +++ b/resources/images/desktop/info_manual.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/info_questions.svg b/resources/images/desktop/info_questions.svg new file mode 100644 index 0000000..dc52e41 --- /dev/null +++ b/resources/images/desktop/info_questions.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/info_rate_application.svg b/resources/images/desktop/info_rate_application.svg new file mode 100644 index 0000000..05f9b8f --- /dev/null +++ b/resources/images/desktop/info_rate_application.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/info_report_error.svg b/resources/images/desktop/info_report_error.svg new file mode 100644 index 0000000..620a067 --- /dev/null +++ b/resources/images/desktop/info_report_error.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/info_setup.svg b/resources/images/desktop/info_setup.svg new file mode 100644 index 0000000..bdc623c --- /dev/null +++ b/resources/images/desktop/info_setup.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/desktop/info_version.svg b/resources/images/desktop/info_version.svg new file mode 100644 index 0000000..27ec465 --- /dev/null +++ b/resources/images/desktop/info_version.svg @@ -0,0 +1,5 @@ + + + + diff --git a/resources/images/desktop/main_info.svg b/resources/images/desktop/main_info.svg new file mode 100644 index 0000000..fa6da26 --- /dev/null +++ b/resources/images/desktop/main_info.svg @@ -0,0 +1,6 @@ + + + + diff --git a/resources/images/desktop/pin-letter-page1.png b/resources/images/desktop/pin-letter-page1.png new file mode 100644 index 0000000000000000000000000000000000000000..b634c51cc3729a71491b7606aefed560f1dad51c GIT binary patch literal 453516 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 >fW(j*6G@~n+c`w0j`7$XBL}RN5=;Jm)mIc@^ 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ⅅ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 literal 0 HcmV?d00001 diff --git a/resources/images/desktop/pin-letter-page2.png b/resources/images/desktop/pin-letter-page2.png new file mode 100644 index 0000000000000000000000000000000000000000..78ae175fc2e6e98be39e728195c86adc6a007988 GIT binary patch literal 340062 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 z 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 RN@4&2002ovPDHLkV1h3s;<5k$ literal 0 HcmV?d00001 diff --git a/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png b/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png index 20e8cba5b7733b87bb169a7352b8e46f25dac040..5168d126311cc38f635c3a6af69eb4e887723919 100644 GIT binary patch literal 32319 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 Q&Hw-a07*qoM6N<$g57;2Hvj+t delta 875 zcmV-x1C;!&2c8FzKz{%Ua7bBm0000;0000;07l7cJ^%m#?@&xsMgRZ*{r>--zTW%& z{-3?xWR=OCyxpL_-v0jo{r>*x@ApiF!JfU`{{R2}|NZ>_`;5S0(%<>&^W>hr-k!bP zp1j@t{`-8g-2DCjda~W8%;|`^;Pm3_!b`23{G=XtK$-0S{SkH>GJ(S*BKrNiJ-i^YGo-oDf6sLzO##ched zUQ?cB0TgfV}Ya{i)QC zzTK$6;H{0oWQM+4TC5|~=)~6Q$ce*a@%ii5>d9=gIe+!}|MvRwpT6DX@X?>W+)9PM zUYE?#;_z{(*UaGYw9)E-tk!zHQAwl?(&O=dx=)|Xe%|Tx)$F}^xk`1nMNg*~kGtS$ zqtt4j&}E&_d$~=Bzh2+(*Pp%J=knoqxJUB&?$qqP@%8;@p3vp*_i3ThcB&@Ei z&waX2o`1dD=kNH{c9yI#q_O#lAnpYATA!Ko0VWg*wD0ww_75*$04<+P+C<2DL z*dOO*L zlu$_M#&|=TmkWEsIkL244U$~DJ6fL#TfiR0ZL7ziNCU&g&Je6wWir-Jo6iLy&4E~=yS%;MqtT^H(fu2;c^op$mBM5h#}D&xH@7}+8B+iN002ovPDHLkV1jzT B6rcbA diff --git a/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png b/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png index 23f6f0d1b68a07f2b3522d2dda532a7aa2b56e78..26882a7545675ca31c1b6604728d1a433886b9ed 100644 GIT binary patch delta 1780 zcmV{{H^|x6$d<;_zFK#@g!jl*DZQ|Ns5||2}-Y+vf62g}}Se z=T3*gO@_f|n9BbD{(Gd+=Q;o)Wxk{78ZG5!fjlpAmyHAV2VO5XEWuDQ8yW+OkoMf>wwAY$S zg~9v%{!fX+hOE?huG-Dv@pi7-f3w|!w%^_B^{>k1d9d84&W4%CbCSbp*X8o@_w8<{ z*6i~5?DXYrrPX4V%G&JC!QAg)mdeA}>}8zKYqUIcw|_&1zFXt(*lM&ohQ3_$`0r|< z(WuDfnZ@RHs@I6WUSXTgbg0&CqS9}q(`cg8W1P==x=oSAYk#~`guYtg>-2QCLwK^@ zioRac=)_Ws#Alk#o5^?V_2ylzCxyIM;_%s{&V$Y6yZ!zCm&S2Ws1}N_*Kf8!yWOR+ z)9kz2qJLkoELE!?n#_7rsT!2P;&Q6k=<)fy*X^6Z;-JUoSCYx8(Tnc$`FpC>+UWG( z?$lkD%hu_}kG9+K_xyytSGm>feX7-ar_*<$(3r}1$m6$Gj>cq{%XX^QWUw*s_v((o zV}r8V>hSlMyx*zC;;__{o510Vx8B6xuYA2yaeuZ#r_hOlzgu*-MOv&Qtk#sW)|jx? zmg)21hreCr@!hDy;c>J-iMim>=fS_-scxLjcCXv+_UOdi@9OjV8jO{ z$J_3?&*$au_txsk-R#hRw%@GK>$A`3bGb&!-tRnnyvW+@s>$WE%;v1h=0TwZTCF6? z<$t=6wAr`Yp^e6BmC1CWz~K7){d=U)=7l?;rmb|Nye40wR7jEEg8BLge1 zh%y5M3kwGnsHmt2bFjq1`7A6949X(BtbYsw{4zjwP|eazAW{*`<`9Ak&Sqec;TK@| zBPI)12UI4VKk*dG^~V_@Kc zsnnHXkPwF|1R7^PCsaezdJzM|!q*Y%K@r6;Ls=NaB^V_6AUtM?%K0zx>P$O##C@>iqKz~7)=-}Ywki23QP#UgKnxVE!UPD7(zKVf~2@)b4 z!VIZ;dJYbHszA%(3Yi&BPnQptubjxBgoxr;hD3KgXNTM!3>*lnrKi+{25(=-z=WI_ zI2cyvIy<|c;(=SO!f>^+smaH56S~5U1qT`%TV4PI9H#Jg$h8{NKqd49#(#aJprxh# zJp(sf;hlhN^np#~3Mk52N-Sy!>gFM7_wd5+}z3@!Gi}FnSVYe6&H;6pex+ESzq5}CnCUsQ5bo!V*Xi$y~t6>%~0ww z*+7478UqVlAqT^uv)(2q<>f%jnIU;_Hqc^2LjwcD$?K641<=aqX(qU9I4ypxyOSi9u0_ftzohzlEzsVc0HE;(tU+;Y=GNa@0g6m4Ltz5n#xx39k#80LMLboWLcyz~JVDM*EsG%%;C%~H`2E W1m!netqo!T0000|NT^p#M|cb{r>;_ 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 delta 3559 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 diff --git a/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png b/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png index bc99dc23c340593f07c9d7f4e41382f247ff0fbf..0b673858a73d90f2635a6a539ec9376b8cd8ded4 100644 GIT binary patch delta 5660 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 Wl@iJR-06h?0000-9#0zk9FR+w1lI{{3&Y zKU$B*SC7X2{{H;_{Cu(7cdXcEoX%sJ&1A7Lf4ov@vp8O_Dt}*+$8Mz4kiut*z+jKU zWo5B5dAUpd{r+{T*Mhd+YN64S!)lGeV|}|%jKN}ElgWj-;arl)Vz4k`l*xaz-GjH^ zfwkUYm&|RV(u2NNT9C(<#coiD!hp2iUX;m%xZsh)Y5o5HmBnpqv^s3GJ#)50b+|@d zt|;j6_qx#Nd4H|hV42Qjo6cL2$A-ULceqL1>-PKo{^9TV(&6xftJO`0!m7yRRgA<` zio<@g+;pkdai-LVyW)kuT5+~P+U(5a@cEj$-SYPP=kfWSyxq6a>S>wFezVMRORv9RF1~^{PtFj#kbGrPpB4Mxzg^1V@y_PH z(&oWbs~*hU?Uu!FfVSUnrPTQQ{$7{Nm%ZRylgfOw-~a#quGEoOlF5$2WTeoBO^CyT zyj9lf$$wI*8oJ%3%H8kR==G$*--5B)Zl~6;((Jq1qT=oLp2Xz9+wa=v^2y@1_WJ#` z*P7t()oZgku-BJdk;jzDbDqwCz~8It^yBvX^h<@pTdgF$-l&na+H9rOXQ0x5x8RJu zABMC&*AW^(v4)8%fr{} zi?iCq->!$kVPKTW%;WOZ>BW-9ZQbtD#o@BC%H)j2XXNkr&*k%uy5G3io{6s3ZK>Hw zgMYv{dAi={^P#`qLW00dr4Y*Gxjvu*oxa}{Z((Kt00+NGL_t(o!>yQiTvJyRfKT!; ziCJWj5P~2A4a-3gq$(&Xpe(hDRE7v5GE`i+2c>`oM-gj_6C73R7H73uwGOn-*7nyu zwbSms?Y-~jB_z2?sO9@Z`RThK=iK|=y?^%{=tR&gSfnXAvp8Cp-MQUl>!KIem1q_% z(3m8^{+X^SntQ)gAyO|?Gop6GpvOgu())9ZROuF(YSzT8Kt`m_nOB^)+O6HJPAi_5 zqZToNSrcceIGH9xHI|8E0$-aC|C#wa1JTg2stgU0sWNuVW)zu)lK`YVUYM}mgn#jP zQh-T?nF?n1jtmu+rO#5$7RBkx0eJfV9+{p8P_By;%~s7yM>5q!lw))%@c8gR@Oh9L zjWV66>I9miEJmSAg)#8JjDb|0g2^hkAMdsxp-=z<~2N2qhkitCmVu)T?Y?q}NYW5hK5(f$}tPG`zWSG3j zHEVXa*x7hcyf7Mc>NFdfL;{DeM4*@i*0RVUgviMC=hJ~NwUMQ%b&$=hhA=A^z`>^Y zrvw5U*@_{3IU?7r-w)PrKz|slX0oBP$jvHdq zLqV3X1cF3%HHoaBnI3(YU4*s^=Rmfntt)XL_nuw-WyNG<8)Twi4-^~Uxl9ZP+qe=F zgTt>JI(Qu|| z;bj`jNPC$CYOchaWr-2ZZ{zQZ+cj`fn)fTlnOQNU#XN2HGBIArUIamW_-E)d5pQVo zmSf*rK3&FjA&jfIXdY@O(?V5vuXsW)gQ0-^tgJy#R(g1J;qciD2@YfuxHB!@z!D$a z^ft&h*l!O~9%zPpn1AR}v5#9(TNw&$njx5Am{tJZ;9w)H?9SOdDms}$vz3YAP=0VY zOK|=PkUQF>c~G*;V>pY)uJ=rXZDbO-W(bO4314{&?f#BrXaRrB9qvQ$FzwPdGBK>$ z5)s4_5&N~{!0^BWyG*X(XSb8lHZm=2+!8bm6SSonoSw&gSbw|Ar#r^y>^?GS*0K#y z^Hu&zmY{C;>|YA&&^|s(WZkDc_YC{uTFbQXLF_1&m9d5wK;ld$g_d`g@|a?gE4 zk%{4GXzX-M?0<{`=TnAsCYP~2vKW&M$r31OHYas6vV^uL&7LtV4~?8dUCoUX zj59FCq^+(O;L(vWJuxvO-k{2!^)!ZJjGiZ4y&7Tg(SHa|_5^!|+sf)aXRxvvo;O`b zwsu6%<(Qr$wo_NLYUXId%;_#ar`9FD%L%@FDXWQ2rq~I|ETfOqJI^x=wl^*>V;T86 z?L$YIJ%1#5CMJ2Jd@*H>7pVK091bdzlUQaR+3GAbbP6>363W(nLhev@ z+xGR*o_`Zql8$^1j%N*J^-iPjNS3b4FH^T|oM%XqCrgswQAdXp4lHYvZ&w!Ib%pc; z1(!KxP{w!TLed_2C#-W7_ z8%h}F?_Ur0tAK95SKZzFyAxUebzESSi;Em?27e$6%TQ&Xjpi$mDXK6OM%E_eBHXPm zc6@Qc=Ww#0zmnkZpAvfy$4j#1^YBw{uUEU9i7IO~Umhu!JvrP9;ABWA3;6EuYvi(r z2en=uTkYjOn8UsLQOl*Db`AB0+c*3}IF!ni(-V&0J_!=E8-80?T3tPOaBmKG#hYyk z2!HAYSr5hjoYC=ykUkdtl&4<=IVwOD zUqn4(CaU-5GvHE&zwlez`uNGr_%*zUBTL&HHNecVW0@CdMTK3tgKS4{q*!cywvjY5 zk9lz%%SQ7>D|aY`m>ymox=khvAjmk`0DqHefbP`Ya@!J?6k@az(HpMay0I-lmV%Mh z64@!;QjE?kQ*oiyZU`w6sl_Y$#tS}gs68DJkdhK$k}+OOmwI`1J{33i0NB^zq5!&x dN42B>1v5RN@w({o9{>OV07*qoL;`RgA>`|NfT6ZC;eg{{H`9m&;0oz>UFVVwucju`zwJ z+>5|rbhkr+w%=cs%5Y@*V0sMdO}+l0MWg1uIUzg=v#Jb1ZEU9KqG z=ksl&(}cO;cz>+fX`aw|t=WvhVt>3+g}z#cyW(xNK3I>&fvD3)g1>I0(`ld3NrS+2 zpwIpO{~%(1wP;Tvm<6`TX`%sv5i9rPAf|Z>7{;mw(Kj#N_w;{a~8TW}ni^-S2p@ z-K)}$*zC(ohr-V0y@;*WoXUArj>mGhLQts}u+r?7#&6r}_JOtDyV|1T@A!PQ-u#slve%e_xZ%Lt@1D(m>GAp6?95w~%GBw_T93xK&*#hIw|cVP%Hi?$ z`}10@B!7Rm;H=N;jK1Tm$mC_5&zHX8uGNzB`21|8)uzbh`uzTKrPO1b&(-Ae>-6No z->mQS`d5(1g1=by`TXJU)mf6tw%41*;IPo)@KKD$q0fS_%H@;Dam(WJ)#}KX#&PiY z>|CxVwA!4e%<1&`@aOX0c&F5nz2Ru0)8X&dh<~}@(C5IHxZIq-;ES``-|O{{f%E#RAkF(jvSLL=uD;& zyxymgwc5DYp4#a2lfvbKvfGozY<{oVbE??A*6hvT@P4b-Y@yNB==IIx^P#`rY^vEf zd4IZlxlM$v)yQSR1;YgfG-dY z>6D0ID4_)iLa0g!te}8^QbZS26g#r0;DRhwih!;SQ2`Mb6?^Z!_uhNgb=}^3-<>y; zNg$b-An^U*91in7?tT4TFeDHNSey4M#1P50kF)|=p*9`+kgJf zHKmU%&71`sJK)p$4^gj`rq|I@N<$j7CTbvNb!%Ya%Yv;(-%bg0rv`Edn= zuwm8Ax}jgL&D)H8)G`AWos18V{`u)dv6Inh@q55Gg`exz4fU^Evu@4;N*jX=Q(fGo z6o-jKA|sI{E<3q!D8heD-T4Ke+kb*y76Li*m10bU(8&A|n6A&9LY*eGGCMd>X{l1F zWNbLO(tj|4zyHE@bK4mi*740^rw@&c+R9d~9PCEo-)mvLR?kt(FxPxdSgm9;-TJ6; zbDKG*t&J|tLzbGbFc&_Wcx1g=;g-2pf0}k!T&-Lp5joGE{kqbzSFd-}^nb~mqfZtB z&8=J_ky2cFsQC=~%bxo4*D`0$o7azIUS@r(h7>YB91v@|OQckmHs)yldtqJyrgJ3e zmpNC{k}9&CN+Pgya*McdXObF@XFn=e4Fn9Mxd|7GFO~@NCpl6VZxJBgr(2?0esk4(ifpW}M z;8E{2a|g(SHJpkF0BZm;|(l1*!oM3zLMv4KzWIjX2 z;>g+~8$>XC!$!){%(faU!-;NBn&ZQ92JN^>k!A>NnkJiwkbhZ~=^uc+9pO_DgNn9N zPK_A~*(8Kav0MMtSX>l79uZ#jm{L|TY+^KGqT-nT$ZCqlk3jrbR6-%cwnnSTIMG&- ztMx6X{o6N;h)0aru!v#+u#;(DwGU3T%XQ{F*-(-{Vge$5$0e$Tj%C*1;$wyIaXF!H z3%Zp*VJad%zki08eKq`&dcM8SJv%}{W z8^zH5(or*s3Nw%R{px!y#r=#2O);JhB+`3b;US^J;;QMK31ghWzxg!!_^gL4_4 zeMuY~Vt-nyU!MCHUBQp1f@6pd&@hNp!Z2M5=fH#308hR1(a?KLs+ zP$S8zX?=I6xoyMCTn7t3H5Q&NuaWH0QHh7G29xs7+VMicR(M0MpP#E5i;Pc^?2}Lr zFEzHdwnwz+`%#xLes$6zOI1;uDN)heN^rh zK;Y$7{`83Uo0I;D$b;3D8M%SJF$mw;gv?;Y`xpT$0z$KHY;OM(5no0R@8r&I2@E`Y zHt-c8GY`O20UU$S6>(L&xuxKCr^rZ+sTI4wgUSyv_&+2Z!+`nCj*Gia55e!8VJ072$ z$*S{`&1Ec-=qumwc|822;(D`9^_FkCw6J8z>B5p%*B0Ztv`pBw1$*guq{~D`>MeRExuEv^oC&|ADpMWU(?_lE`7O zEnTiCg0|mVk;r74%~y`bRgA=9urN)A!GgEniNIfKq0vTyzkgbg$A7ckSdYedt=WXW zS&hMCbg9-}l*xp+;C`~)UzN&lwLf5%%6+lie6ibkuGx^nXJeVnk;7-UqJPkg!DDi!)orHLcDP4*yiSF{ zTy(cYXPnRa{Qic%TYtP$)#vnarqpw%)pNH)d%8_qttZUf?%?kDcB|KJq|g1_nU`G>C7i?P^&yjIcR@a6IOrNrV-hrx26&R&tn{{Q|~ zt00lI*?;2h_qo#Pm&4`U?a)?@#8i&PioN4@uG`n;@>8lC^ZD@Y^7-iR_kOkCo5tq< z|Nh6}v!~ID@b&un{P$0&6~EW)#oO<%%jTrP;P3bA&EfHSq|mk0?4Znlp1j>}ozC6p z^MtI{u*u}o=)zHp#jw?s^Z5LGyiu{w>G=EofPbjcn!4O;n#*IA$zGStki6jh{rbAv zqSWfg&E>q~@Yq?B$)LdCtHt8M->l#7)S1Y2rOWA*z~i*oo7wElzul>w%6d(Q!|U|r z%-`^$#^tNhj)=0_==0!xzEfM2%Zaz%`1|#2o6P0$+>pj>fWB6e$8UhM+;^qZn9F%= znt#iCs@9gra{T`OmCAI3v)!o0;%lDI;Og{vj4dw!01ydDL_t(|+QgY_OjBtZfIm)) zwYQUWxv=(K1*}{k7FRsZ^@eXsOMh>M zQmcfQ@eof$Cq-*yG7q;SlhvS79bAA1|8%%qMz5tDV-OPx;|6avpgbQQFV`~%m7yDc zyLayT)irMC>h*K?e)>CHAjdP82bV(|ZVko>h4#d-azp(Ftpwrm5JW1=y|(5|2N$dw zoQ^YVt|2lhg0Cmh{;l3X2--3+%zt3Y(CU0}Efl?R`=ae~0e6)U*gpQ^?XxI~tNG}( z872cpCx%)29%_AHckq;=8OLo-906EG1RR^)@eEYz3HyhS_FYjai{}%#}z%!jKCQ9YlXMZ!Wn8#+N z4)>~ga1*{4d{N+XHy_mCW;$i_Vm862y6;15@siaR0q#2Rg;~c1MYSIIwo@W~pLT#v zOjvGuD8;vi?EV)I*XN+!m*IUw`p{G^ToN;6Xg%?GJ%#NBd==obPh~J>p4tqoxaUTc-;41-FzAuB(@qf|Q+cp3c6E+QQ&`Dt3*TP?euLfMY7VZFvZo^=c&?bgi zZoz;d(g#IfE02rWEP4Pd-A8*1-=`UG1kJ$3FoRKvZ_^vFovh%qtRk`KGUe60ynhwx!E0{dZA)o1 zU;wk!;T47+cRpa3MdAggo`JcgS39m0Ev%9!SV72+qj;6oSujv;YE$lrad4}i$*y-(YO`FeS1%V! z$x2D_P5E)!SdNFzxqrAVgbYFZiOG`snQJ=xhZ+>_?oe zl+KiyAz=}4wrQW0<|5i!3ounTNIYe?od}o+Zoz@BVYL}bMe}i@iDFp`;BLO>jU7-e z&xw%TmU&7Vsxe^1@9~g}tV>J;oAA#s`R33?E4yN!+_J`+oPUU#09?$)?`4gk9!3tm z#@5RUYin{;A?GhyQN(<+QkTfeO6~NWE{C6xLQfsFNa|vNbF-3AN@%)$-`& zR?K2HH!t7mAK1<vcEDLjSq&O>i1a5et291( zEDxp8B8i>%3J;)Q7IV9v0w%-Z?B-V8D=xqVz8?^@FI%MZ1(nI z!e*A|x_=l4h`Swl@uNeD5n~kd@=iO?Vc452#o&m;SohEhp6BM_r7I>{cfr-aW5Bz0 zn&Ae6rI-lz38wv+%~zP!QwN?eT`@Eh6xkXA<#yS{yLHHZGTDiV!3cv_bhN^(@9uih zPQ2(2)_XpnHEq|f0DFAb`o``CU?nC7AM^}bYJd4~*WBXCu6xk^=Hew?1*j^&D_2%vu zxE06VlVA7)n@JA|pf}rC25p9eA4cSjcX~kZW;z1WP4vlh zEPnzMclYLj8n=7S104 z^lgcxH%l6#4VgnR5tvix^`TS_%0Es5E6Yb|@V;&BpBp#RnT15s-ZVNCNzov$2wLVmc6esmdpNJ-;}HESC5jxM;=!&3jL5B9e4+%N?Q_gBUEa zgqUI?@c(nJew`@*7f)`YP;is@xeQ`r&~=I;mN4s%uOufbHk~Ar)c!*bx$&t`J5a`(h&SbBT&XVA;Es&K1O5 zKJ`CVN}{5Pr5GG7%2cY;1b+f!AG=;+w(8eV#QfU`)z2h0Ql&~DqKfTukC;(&wBBk4m?8PDy5{V>KwYW(v zxnd`g(rvwj|J-wkzo&>L@9bbH2FIS5LXz0N*pdOaj6J2vKyRS_xM@qfxKgW`JsWFr3C-m|_L5rgh;DPmh+x-JH5f1DyV{?v(?|M}K^ zu|%p4xuwY7uTRzx@gHv{uFfdda;PenOvDFQM@0c>iqeot{!1I{h`}4)JrRW@s=jf# zlX1b=cybgG&Gy~I$(r#IfffAnZEOUQ!b5(p*VymtHDs}WzJGV(X^$AZ{0CVqqVSs$ zS0Adp8P`Ppn~3H={iMa2#a?YKJW8T)>o2Z8hI&69wVg!NU)!8`+G7Ph|F7n3LK->a zI6STKA{&z(nPkX^Ijn?2V8%-jLM}F#%U(P-U=mO^>PWGNXjAA~dlJ2QSX{DHOq4p{ z>F;VL^YBibWM=-q z=a}}7$?`s4xXh9nu%wc!!+U~q<4!n}Mf^coKEQ8W?jyGOXjINMy8jsQ9&8~tCI<`p zL!V+>wJ+Fb`yF<9IvypFz&^pYj(x#lS%P%`TCL}@cYm?vzq|@Ad;1C6?R4S)k{F}q z35HH&d#<|!1S>yH5HgKEhF|hiAR8Fc!(T%D7-}FvsUV~CVScLJ}_51`;E#I zAjrYCo7Pwa7<0@TeQ&!o*k+Xder%`{-p(+w$+}x94=|K_I2{{V*Q)eim60mLd9=ujP=8gG+)7tBY%v!Q!^pcvADsyyW64}Pqx>f@k|za2;7Jr z>@ksMEii)I6JMWTEjF!qvI))cbd<6AySY@TStFg}@L=J1;w#PF!Gj5F_C_jXRZk_D z)7GM%aIrV9y*DWsL^b1x>r@A8W^xj+A$2gDr8s4%vNK6Fqk5TzKf%AlnVL;1v42*8 zWm|f{aogO*`&FxE=VcbS`j1evA(>7%upT!!wrtm2^$Og1{Rg%%#eX~bIja>6mXdF^1AlFbaorfwVmMdmRrM&GxCTb!T zsQ{Y>f%P~VCnuoH5ErF9lp3Q@1b<>UC0eu+%+V!_!{HjbpNF%dT+|p*i=RK-;5br_ zrU~Y76x*i$h81aC6hG0cvV{>Y!$iq(F(fAiYwL1~nRhrFi(e<<q*>X<<_VW0=j(t{O-$1$xdu^5fl8E4-u(W5*@JVH)V6L{tTi0AY>#NDUumnh07nT1zHA@m^ zjHQdpwZhXEd%l!k{KNC>lYi^!2g!S-{h+FLB$9+nXeDOOFWgq19g5D2*~NVM%CZjG zc_GzGTvo(kR9sdHf}q-bS4~)xDB}1x)Fm_0dp~uxyGtt6CHj@Uh=KnJ>TD?+?reBquRKC~tW0Q{LdtN17q4P{vcuiNj zLj4LJ^{d2`OGK}}WQnMuQX=Y5mxzM2tKYsv?WzM>yQ&n`#$TPNc6Q+ZsrJ>c47se2 jzVnLo(Qgl^>7)MvhJ(1;WyD3S00000NkvXXu0mjf-u4vR delta 4316 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 MNkvXXt^-0~g75V^yZ`_I delta 4587 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 diff --git a/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png b/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png index feea787fb80cf70f4e4661d5f6518e4707cd3abf..26882a7545675ca31c1b6604728d1a433886b9ed 100644 GIT binary patch delta 1780 zcmV{{H^|x6$d<;_zFK#@g!jl*DZQ|Ns5||2}-Y+vf62g}}Se z=T3*gO@_f|n9BbD{(Gd+=Q;o)Wxk{78ZG5!fjlpAmyHAV2VO5XEWuDQ8yW+OkoMf>wwAY$S zg~9v%{!fX+hOE?huG-Dv@pi7-f3w|!w%^_B^{>k1d9d84&W4%CbCSbp*X8o@_w8<{ z*6i~5?DXYrrPX4V%G&JC!QAg)mdeA}>}8zKYqUIcw|_&1zFXt(*lM&ohQ3_$`0r|< z(WuDfnZ@RHs@I6WUSXTgbg0&CqS9}q(`cg8W1P==x=oSAYk#~`guYtg>-2QCLwK^@ zioRac=)_Ws#Alk#o5^?V_2ylzCxyIM;_%s{&V$Y6yZ!zCm&S2Ws1}N_*Kf8!yWOR+ z)9kz2qJLkoELE!?n#_7rsT!2P;&Q6k=<)fy*X^6Z;-JUoSCYx8(Tnc$`FpC>+UWG( z?$lkD%hu_}kG9+K_xyytSGm>feX7-ar_*<$(3r}1$m6$Gj>cq{%XX^QWUw*s_v((o zV}r8V>hSlMyx*zC;;__{o510Vx8B6xuYA2yaeuZ#r_hOlzgu*-MOv&Qtk#sW)|jx? zmg)21hreCr@!hDy;c>J-iMim>=fS_-scxLjcCXv+_UOdi@9OjV8jO{ z$J_3?&*$au_txsk-R#hRw%@GK>$A`3bGb&!-tRnnyvW+@s>$WE%;v1h=0TwZTCF6? z<$t=6wAr`Yp^e6BmC1CWz~K7){d=U)=7l?;rmb|Nye40wR7jEEg8BLge1 zh%y5M3kwGnsHmt2bFjq1`7A6949X(BtbYsw{4zjwP|eazAW{*`<`9Ak&Sqec;TK@| zBPI)12UI4VKk*dG^~V_@Kc zsnnHXkPwF|1R7^PCsaezdJzM|!q*Y%K@r6;Ls=NaB^V_6AUtM?%K0zx>P$O##C@>iqKz~7)=-}Ywki23QP#UgKnxVE!UPD7(zKVf~2@)b4 z!VIZ;dJYbHszA%(3Yi&BPnQptubjxBgoxr;hD3KgXNTM!3>*lnrKi+{25(=-z=WI_ zI2cyvIy<|c;(=SO!f>^+smaH56S~5U1qT`%TV4PI9H#Jg$h8{NKqd49#(#aJprxh# zJp(sf;hlhN^np#~3Mk52N-Sy!>gFM7_wd5+}z3@!Gi}FnSVYe6&H;6pex+ESzq5}CnCUsQ5bo!V*Xi$y~t6>%~0ww z*+7478UqVlAqT^uv)(2q<>f%jnIU;_Hqc^2LjwcD$?K641<=aqX(qU9I4ypxyOSi9u0_ftzohzlEzsVc0HE;(tU+;Y=GNa@0g6m4Ltz5n#xx39k#80LMLboWLcyz~JVDM*EsG%%;C%~H`2E W1m!netqo!T0000|NT^p#M|cb{r>;_ z{r>;||Nj2}+voE9{rvv_{{8;^mBnpMhQW`r*v;MUM}ogegTP*t$^QTU`~Cip!e(Z& zHG8ky{{H=x#B7eiWKxR5{r>%dwcdKJ+F_T>W0=f^xZsw?Z-0iqTZq42YqUB1{`=$b z+5i9kywT`dkjL=$`+Tw7ki%zYo6caC%XzKYcCXx4kH?e5Yhakoc)3c9!D4N-J#Mr; zb+|=ovp9yi;mF~%bGAZsw?lQR*L}NBbEwy4vNL0x&vK^Kh`Zunt}1Z1KwFW>Vz4d! z{{DNi-G8&)>woe1guPdi!)e#$@`ASCr_Y9RsMlYW%JKN^!QAk}*z9hn)|tn1sL_hr z?apVN&uymFgSX&h&DEo5^>0vE5vf z$dSWmRF21Fp3%(U@R!DMe6`<>!DC#lC(`G_Ual#&*qmdrGK#R*SF9nBwcE?(yZrwD zyWOQ?u`p4n7`xh|$lLC+)9kFv=1+;kU$88i%z9L+9sK_Na;n*aw%)wg?cVG5o5JIL zvfTat`+x8B`hK$AmB8cQ@6@2j=B~=+U6#w%>Br&g^?tG2d#BTq#B0>(#Co#bWSPxU zjmCGP(38e(s>R~O;ICJb$%(*T-Rt)9`24TS=3GR>g-l?tD zlyS8`=JMUB!{Ld#;9#20g1F%7^ZI6>(o>Db)Z_4OoXy1D@2b_2kjHG{>-4J5>7>nq z&E&h|?)HklUe@c$xzFd_?a+n1SGCugXqwEd(d>V=;Iz-^JbS!Ps1ke{86l>-61xnwyw`cZ^f+1U97 z8H5DbSrJ;95KLBNrU1|zoa`J($~3FmUw^Z+SLWVER?5N73G@>SOd&Trdy?%_sW)%g z+27Z?C5P`~XBUAfWI<90G|sl!yq;HjGCTX!4{ohXgOS=CVSF4F+DvoF%5PmXpnPou+Nv5mynQOql09kB>OghF=;WC z_3VofCbF?Ng~%I9M4n`4MOdv_qkm#d}~oCbv^M4>GEB^6cG9SO@& z6|%Bd#_e}-aH<9x4pGR(-tMTXlCVV`J#~p5igR)(Z$eUd*{rNAD;gBrsCHi{cXhh+ zom~{Ju(PzFp!6It8rf0pE@^aiZJdT=Vy1m@v3(*Ig)S8pF4K@qoN(3A(SPndrqyR% z3JY(3L{ivinPrxeis_l7+4=dVQ{W0`vtP5bvNE%b0R|L`&4H%J^YXHv!``1nYvPbOI->AQRH&PU8vKM)%Sy-rL z04;~w&I+_xK|xVbL4Ps32!A53dDt`CEUeYUt zb_JOGr_i-UvhKe8C4ASJqJCc3aEw)y}7DcspF UkxxAZ00000NkvXXt^-0~f^DO+OaK4? diff --git a/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png b/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png index bad568f6b07314f97f80ef194f38af5d5169cd16..22a7bbc8fb1a5f9c932bac8fb3dd4b88e76fc401 100644 GIT binary patch delta 2925 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 diff --git a/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png b/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png index 863ded6c5506b3e187471b21e63d77d425f0faf3..77a048ac644d38e885714c8e00f6248f6e44a6b2 100644 GIT binary patch delta 4127 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 delta 3559 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 diff --git a/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png b/resources/images/iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png index a72a7e8951e3095ad47e79a0177c3f3139130e38..d14b925c21ec88100f7ba7e2d36f6a62b498d1d4 100644 GIT binary patch delta 2326 zcmV+x3F-E*5ycXaNPiCL000i@0S+@l8~^|V08mU+MgRZ*{Qds@{`~&_{{H^|-R$<1 z#BBZk{z-$sgsas4|Ni{`{6c@d+v@dEiNgN>|NZ^`M1a2j{{38%$Z4}T_4@Jf_WMeN zz4 zF^|Dz^!fa}(dePU;H}E$WtYlgl*nb4$$qBNW}D7{wB3-xXMVd;akfEjwLWaLJd(p| zVX!S%kH*{U_2=^XMS;G=*X-i&_~r5WKz+P%-DF^Dv7(|T&*Wnjeo_;-tWoY@4(mWc%si~pU`KW z&ugI3Y@yPT!)WL4_jb5Pc)3c0y;scP@$dHO>GR>Y*`K7(g@eFdVz4k;kH(qEbm{T< zUal$d`0aA3*mkYjT$Rgwwco?q?qZwH)ab;6y;y>_-pu8@W}wp7>dD68vcA;nS(D24 z`u%ya+<(a9x5MAA?)B)<=D_#+^uXY)p38jl`R`GS#gNBrakxZHhr*Y}acZ?X^Z5Hv zs2E?8$nf{m|!$GhRdPTV>1*3ofevHDB z-8@3Vh0)%_2EjY}aCnG^n|_!Pr5a7FjTD$1an0kvpbXD*U1%bRtea>=s74bP*a!2BAS1l{B7vd;5F%3ts$n{99=b<0-bjuUbo2^VaKdJ+LnSbtik%|KFDe@v~WM`iDhZ}j!`ZS3p&K~1C{G%&IxnUQ~i zr4bc(x6oHC7Weg~cK{zWo|O};EvF%t$EaOaS9#D@D2tDe?`vtLZj$MKdTd&Le*U!8 zACPyers~02dy@1yJAtRAIl#E%Df!b0RuY@6rm|s!qkVdMy1nCeZGSL>zZ(OP6X=7Ybr#&WtH|oxa07 z7-2tqeM?JWW~=smiN)?4V`5`tU&|kdml;s?psQszvc7biZgs)NnS>f!jM)#Urm)P< z5t-ezL$_LcGIlO9Ykvt-jq^hsGoGQ=ot!I|&yvgODkkg~hxkc0=~9iMbDezgVtIp{ zo-l4xOLJysW}M`@?x>f)mNzss)IaT^Z4>gvl+5PlOv$&pf1LB{8tUsCP9A5JKO5Qt znwy$Rn@Z2>Dv6bo2ysF^F~DQw%Y@$<;qFvfP$bLO3~le3WWOXs!r zVN>V|a8Za5g`!$=eVHoilFLPRvrdmivdqehm5Uh%2OsWNi$pdAisdv3(UFcfww?1b;J<1hX5R{pUYZ#jV0j}*Ol6$ewA@F-?w?-5@<`XNRtZAQsj5g~&bZx+-j%NBmz=yNH z^yUQGu3A-9Eh5xIH7K^*9q#_7m^Q5t1A&*2Hilp!ZQ9@apt`E6+J;iw+iSWl9)1bx zCN+jIhkqYDsrbA8%z3xBm)s`1ZVSV^-kmJ+z+((Qnj;rc!N32tZ~s9;^?LZ*&7T1n zlOP9<;K-$I(Bl)Gg0~0D$v9V4i&_Rf?c=2>zrRHpu=I3{mxBzooM#NRL1DE+8KrB9 wQF`bD{QrAx;Lu(hhVZhIta@1)>MPQ}wPUc<-VfvxY5)KL07*qoM6N<$f?7WY^#A|> delta 2175 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 LNkvXXu0mjfd+n$5 delta 2813 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 P00000NkvXXu0mjfVjL)I diff --git a/resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/Contents.json b/resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..80d250a --- /dev/null +++ b/resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "launchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "launchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "launchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png b/resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..d07feca6781580cac5eb523782ab74bdf6c5d7b6 GIT binary patch literal 9247 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 literal 0 HcmV?d00001 diff --git a/resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png b/resources/images/iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6430d2c565994f0152e8ed18587c4f22607b9383 GIT binary patch literal 19277 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�QP{Aqa#{ z5)c+bJyTir_`7cNiHjK_T#kfzZ=(wVEpn?K6Ju?Ed_vo`PLvOhTbS>V5 z@z|%yzo^oMA(it*&MNsfHF~>Kt&i7vB0YaJ`A2(RiFD*awb&p=+9So&YmRkbeGYB0 z;kpK!fGK(3w4~mqeN~o9Ctm|>K`p1)#N<)m<-FJ#FZJoU=AT2wk_Cr&wpKF24ilmc`<9xWT+Gu8NZhUWF@>F zPyIrjcT$G-OGA#SS0>cW>3zx#UZL|wP@Zkc>=`#_xb z=3Yhnc<|@jLRpZ&flFcpFm8wiS}7l-EvrZrB3p0_C+Pqb$OOYj{h}*MND-B<>Q?3lc-U5;(_JKNHkKV^;>;w#(`D5`6DOWtgIOr`8wqAEr3i1Hs8@WqPWHtxLdbHyH zluujF?FHif)Ytqd?va6}69UIqY6LPtufpMhKUH_yv^HN`_E_cV3dpxvpE;5*x9pGJ zO$J|I-zh2;1mU9ezCC?U@ySH~74b7QRL;~p<4}182XmuA>vUl)8yj*$`>4-8fAh)X zijhlC>5=l;zqSNZmRdayVu~8Etw92R&q+crIFM$4-1tlzDNnK^4w?+flpdR_S*D#= zTo3RvNoYa-M8EDdY)n64oF?vZGC-3SO58ySamg5ViQ&Q!S_TgP-VUyhyY1PrzaCo& zEG}anV)-O{fZx?{NdkY1KAuN<7AkOzprQ8TvE5|tL2ue26myMJ$|@<=wqP2eaIO#G z|IV8KEa*5%L>5L>6o@#F7H2{Zvv49s#7~Ozx$~-@mKgW*c}tK4H9ZLfHl=jI`G_n23yW3*KUB0vo`>2@EEh5!LQ)vEzI^3UJt_&A9l#daiw7&&f0SRpg9wt zkyqF?p_keAXRY@$zuuEJ(NoP6*kX zpZZ4Hy4wXs8H-gYi3ouJsQfBZpr!BA$3+M5KiZxWgrup<<8ZSbK9yFp8EMwKMf)>1BM5-W>0A{s5qwl$v4#~ke+nE_9@916PStK_kv(O1k3zyz{ zr$nX32EwMHtv*~EIEH!gR7IJoN5s%|lrN(qs1Ffm|>wU{f zz=!KbHR(O#Mmb%zo*j?uITY^n+8&|p-}-1r2BF3$IMAuI)D(Pae(LY(Z~MFXE=A%k znB?z8^jw?uRP%Rhx`k!XkW|w~;L7hx^H2U=8oa_uZQ*yhg7O?QXEV`kQsT^notT;4 zkK}MbcuC$#w1I#-f}wQ}r5P^n`z*roW4o=`m|d>}lz&6&dpkK#uiEMx#S`B|yqgpM z06PNE;!{~%FiC@Au9lQpt0d@RH>@$Fcx{Uu<0X(j`={^)>M0 z)+krscDJqu0`eeN9dO3OVL+$?g7@yN`1Htok^y z@P&@t(n{aa^*5wU5XD+H=}j&BG=4bjXlJv7GcpFv0w9>JvI2K{-}J7MBsPkhtIh9vpF-C^;|u_3cq}JpxSHwg}&j6h!39J zbSGQt@^>7^IyyVxaDNN6@AnkzpQz+%u-z@B@bzSg^fr1?Ymt918?bpXHkr|TjInel z%HF<^gr+KhAJP^5Y>K_7*Xf&X&Yx+kg7a zx&2MAZnlRB=Hqr|`6}|s(0134p~V;RllCGlwUe{`H({`quHdWS;70FVK6*nJi?Col zkP1@*gY7Tv`3t$Wg-cn!2~v11y0F%8KL8ElS5fWU1y&@XHiSs( zL1s;crE;Ft<5+ng!Qx!=Gzm5)h}mHvLw;~xnjEt_SVfkhlNl)}71Vt!`fR@kYC2w2 ziP>3zn{CT-skrPayn^)UO8l9IXr1F9u2GU`N}BDJRg^9=wx<>9<4o3;?10q;zMU=LLGN&3~R)zPPJ!_rMTfS-*s7DuH_&-KmU?~9j&f?IE+3}snCi1&6>AwZju zf%ccA#T@#eAsfJJsEa{CR5L2-mF!`Qxt_m)+8t9f><9D@2Ja(n01#$yee|Y9p4W_l zKXg2vAhg-JGrW8tjLhoHvks+$fS_zmdEq{QJu$=D%F}1F7bBB}8#$+OUZDy+nt2AP z(IF{(i64*1kapkzfC>8QeB~*=`Ki9}pA^>U$H6IWtxm|Qv(|%u>Ca+rGDj!NSzq$N z^#RzyThzHvL{fvk-YO9SwJxzxo86XKZIb1&Dd3JSw(;)VMXs8GzJU;O=JuPO%DbbB zb~()Rgoc>Qkh@d!5cHHuw_(17)bq-CZn6@v6$E)a@=0NbSxVj)VIRW%Yy2jJ*cdbS z$e8X;RZP=051W=BTGK%CPZLDzn#ZZ8w>mroFF)E^DcDzrW|pyyz_QD;+-l}*EXB6n!H7Q^2aqK@#; zRgZSAv$M0_qx)wGU56EfTR9H1uqlMMUlzV4Eyl~a})G%ovNy8~{^(mo11fy%D zPG&}Vp>+P^XJ&^ZlbF+grB7DSxWL`q@3C+F&1pEK$Zy6-N#HU-b0{G3O+ka5jEEeD zYXc`dm|`;ux9O*{3}YNsAWs%t^giA{sGjxIUOcxYf7WWn-7$5Fc=0T0v0vczX{b4=t=-2)N3C02)@f>F(oax>ByxXUvzi-d-5CK1Mv;=Bv2ag1cIHP>h00o zFbjR^=4O-Gd=l}DQfC~Kh-|i9*&QsO{1i3|p8NWMqo`ZUtl&PQ&7^)Q-GqA`daki| z{jXjw^CZ1C)T{+ijWPyx2hc<5pLTdyx0;N;QhF3Bcai@U-w?yKr9)ASixz6HV$+5$ z8v)$9QRG(;A+Me^b6FuX05MhZb}|(K--_Z1+R^E_ms_eug~SeUyoVD!LU`emTq*%n z0FA4Rk4wTws+dDWD}ll ztR?ECYc9TpQz`g)f%!z5J`wXuzOgat>Q=sV+C`2ZNg)j5KRO55f04BNqb5GD4Mr&V z4nfP*2yYtOqr!tfo6kH#4lHtDx2u>`(E4k6J2JWf$gnm~;7ar5ACZ6f=D|t`GwYFE zCNUowM)YdPlKn^g;qPx`gaIY)sb?fn%2R&}p;egEl{Vr;N}wb2G%ibjBVjzUC$5s& zt?gTp6DsL=6kJJl7D(88<2QZJSJlTS((;uE%Nn!kY%Bpnv>wa{$#!0*6jjEI%9&r* zTM-?FHw$fb|`RG&rKi@7g`ngTWmLo8b?9avr-q*Av~eoUH`)rVi1{3NF@c=4+_F7|YeIE>j! zUu%51(8>UrXUPr7K6v)dEcb+xxV9L)AyE(KUE=Zn@NDmt$(jmC^zyUkScWc8xSE6 zz2|tKx7GoEzj*(O1+Tf$F8VZFSo%;!iycsDg}dPZd+EHSK*8A|IXICD(7H1J-U7gY zPyrNSDn-Fr2nW7Zyy!!b!tanWT)+_^DFzC+7VYE#l^Nr78}>kO2R)$3jo{*W1pVyf z3_q4#gCfNN3qkXD(Z~h%M;#}wis;Nvbs!5O6vKrDQ!?sTN7^j(W)_gnLmv(#3qg8y zJQ6CqM^8Xocf(7_kANGFMUNWG07!DCe-3BlT(&@m;Jpt zb^sG-&JPE2bce-?71JRHLFxmPk56rRcra?Ze<{EnUntz9m7`;kpH0cds^eKsWtVCp zFrZWi`8-Co8@>N|j@Himfjy4zp92e!GZ`hxEeuw4aZTM%Wcs!szY&6qaRZY8tY;Ja z^2&gXt7-{;EhobVVQX|IzcUz&_)MkVt@=(_^wF^7vavxVH23N_gd+VtfHZ4|u>g{u zI4^{W>iPVxwpQ8|#Tu|+fStowqA-N3SoTqGs^LIJwN|8djX?M+!vg>&v8l+MJ8K&3 z4+i=vH_SJjFe1>%>O{1b>Q3lJ zfr?x}gI>7yK2Dm&tW0<#9>lcOB{Y?obk=oK)(p7}{-pRMDKxJWHxwCnV)5yEYQRepCI2{b(k%|4W8a zLYh|fFZ2XjI{n`Mps7awx|n|CP+k-Ei$X;Q07z&5*CPNx^taJJ0o!BGH@ZIulyBo) z<0~K5r6=;bbZwdx?!CD(OQbm+cxpAjC#W&#nS~1&=={r}kR6TCYGCYI6|N^T=kyuP zCoKxlA_D<#$$}lEpwOc{-0H@2zTGN4%8ZNl(6_i*|9~^U1qm{EI$j#OImjtHG$p-j zoPc3L^OiXrmn#Ycyyq-t(8TqaH}YXPc&}mPc9n4@{@ahI%LW^YblmE4maHP{h1aWRC4$< zCzHOJu}`y9S`Yu4Ct-^@1>#m>Pd={CZAGr{3?)9`N(t zTK88)<{SA0q8)ema1ORwQ(7U{oDkPxgC%FCJjNx?%3Q)M8OnS$ zN1LFQ`q>?R$DDq$4;Ghj1Bg8q&=&sgw3aHKO@{LBd?bf#K;`AF{{#4OJN}Xb$51y0 z*C94Y4PgL%0T>r9={WJi8Ysd2{eV*tcZYw5GPcDB-H1O|)QZ5mL`Nb)hrlS`r(?l* zVBn9|!3yTRJ~Z0aFd@Vpn(XtBoGWyC?ap266q1Annz;GlI=!UkwWJ?AT*eso` zfi{a1z)%JBd1N#|{o!t<{jbMe90%ZvE%E`BcS3=w-hGA(_WDW;Q+oAdIZD%i8Ou-4 zLK=-lj(h^irbO|J%e>yl`n&~J$yT zGQZpXz#=zD8*AjjY58BdyErc78Uf=^1ol?&-7Pz8q>{ny3{8#`odc4H33-gA6|CSC ziv!6fgP(h)2TiwO;BCM_l7nDPQVp1bJm+_N4Or!N8}}uaA3DuD*3xA~(GZkIElg4% zt#}<15{i}Vqj{1KM^LLgzD2(@0jso9>opK&k-kJWhTg{?QHl9-)BpudyF?75 zO@$r=HE*tloK5YY1N}y?t4K){fabd-Ne)=YvxBAuCo4QsD5~*pDhC)tzn}!yWdn`t z?HADG9D~DnTiD32bxglxW-G>+5|NrHZp0JrM~x5&3CqEGHwjIa=S!DU$E)eW_Vf&` z(F}WN1`zcsC`a6rzhi}g{Ky<_uY>Gy86hJ-cHJ-n)Y5KGlq(*v&veAMg}Ifkht%gR zWWa%Z2?i5oay1eZ(O}3oruPpEaTg3U6#c-0ct42AVcE-s1DikHto?DpBK3FeJg|}b zH)cRHwT7=Wt{Zp9iWMSj-F)tU+mu4hYYRIH7{t6SWYs3IH+q1bN&k=9#zAK;FmS?5 z!2_-1N3h{ew@_i!a&T+x`6t!Fl#o4GTB#kgLu7We1!{&q1FU)&5)_>szl-@Y55%yA z96f0zu#o~s`n_xWkKRCH05Bu%kP6N_$CbDyK`cw;9zK6Eq={X_hfP*0ukjRWUla08 z(oz9it2+3dV=zm{<)5SVx^MsR_KsPQ+V@vVxxO&BPekR}((`!Jk|Z79?P2+`(z_(6 zp27~j`L?lseT#^D0*h~oo*XHU7{P(H%w9esHVW8RAy@D1&STBDxTAojMliGV6kg3D zB>7nW0&#>J1<2NcqnN3j)N%{I5RmLA18WYF6}W(eL_Azt7clBnc=j>O;9>)aub=JOO!Kjb;Q2RqpS!Ulhv8tTQ`Nl=@34Cc?{#pYD$EtG)@kDc8y z)Sf)jykq-W+}vD22NN%tM0-dtjEVm*KlDm8)nI!k);TGGV8kj~?;!A=F4qutG}u~X zl9|#!SrW?m1aNRT3osZKHM~(k+Gc|;m1LGwv04NHmY2;JqbHx`kxOcj`Yzum{GJ7a zU{gVKu=6k%^h*6=fqHxAm19e26BEML0C;6yV!4DGGuaRoj_88{&Z4 zSJA6X63NmXZXi#F7f6xG6CM&9mljMch*}AT+k=X;$Qd8;7C68X7pchIlpy&I@D+%d zr#{{x(*&C;W4KkBVIxI~BvNgv)gP`%P}TL!qr@QN9Gt2#=EWKTfMs>lQc)IaugT=* zYQ{7p{ix$`g^`y^_#0&Wo}|E;Xpb{#ctuY~8G3|%b#_SOk**_K#0;+cu#nv9?6a1h+Df6RFV9@$;M`sP1C%N8^+#D2=VE+p3wVs_E{eC22YeATUt; zj_n~P5u-fG`QN~6vlQTGSKICPCFXNn}FW zS5kKwB~QNXC;&{2F%+co{Ua{q&Jmi40g^`#RjZT;Vi3{?Yh*Wa3vA&_3+om$L$WN8 z@MFbex#d&AA_NhX1VCU>kqEU|_tSKhNdEp6LOxjq6d=?L?Dfo0jOj}GkSVtNE z(>8GSktE6c=h@&x%M5H*cZ4hs{m#U~r^Sd4Ie;WqJ1v-eCC|l;=C%OgCwyi$vMjd% zKWC5sp>8pPlwdFWh`3P>ZwbD6#wFQX0CJaT9P^dC^}Z+8&HG(|kNvB_gZAx~Tzl2w zGc%+;ZWp#XG^{H~+)M6c;NK3p6GIpYL|Swm?8OI*WtaH_Dh9Kc!-keo4cp6I13$og#nj3_*` z=8Dk#3uy6Q03#-d=kg)9j{*j|=j38Zs^W!Dya%lKQUB(V0WxPgLPa5023Vhc7^D4k z{3sz!k1~o5L81a+Gf&qnfes!fEa0HOa*VfNIRKLoGC{Xh!4iE83G^%<0~03@pf!OB zI{T;bAZQ?Y@b6loZnj}9%Q;wVWJ!M z_H2&o>PEzH-L*HCmVg75^54s12%Jrp9WYx8s?QyH9FG4Q_o}OS67)Xr_CdOC^LfBL zz}Mq}<)p(5ls5Nr8`-`Dxp%-rkU|xCkY%`tsnTrl8Y_$#0@(f5bqOu!K+b6c-ze^A zUUrb9!)A$+Rl!Y_`0&MJ=q%7dIv3+!5AKta*927Yw50Lj=5a<0Fo?^Mb=(^)5?Vbq zV8C7Ir85L9L4rN6g;&-i>tB`uq^+VXCqiyD1MJ?#8 zwC>2qC7J%+h+{xX!qFs2^5Y&FeyH)Zmwubvdz1hAw_j+Ae@b0b(f<(K4zXYUVQ{|K zu8Q|`Sp=Ae5%<1flvb@r^U9JLOd?+-Qorj|uNiuD%EK5ENOXWn;SCVV?WKJ#hoZtp zr28UhTZaD0j+O@qB^-#k0ZpKL10rM-Vbg}O*EaH&P#_ZAY2OCr z6$zFzI=OM(f8Yd4fJJR0C3<6MNK&I@Hnx|(O+3ejXA8PBJ;~1@YNCd|TOC|J+st7z zjR}EXoZfa~4}(NzR$aJA;(LSS{cprg--|?=Kn7Y1%YGs1jx~>aD4n~&M~mQSMmJ`v zh0Wde<4+Jv!%bh)d(H3?EY#9JAnFjg?H8qE3IFeoR+FvD;-?l{WQK`=LpO-aUkF4ogRq}$`)sC=aVQ^2M8yu9OGdWun9OY6UWt!QVDb|@+z)G zS<1DmJG3EqZb7f~dyUL)xQPLQN!ge55-6uo!Z4C1^v;qZTF30=i*_OlswR5Z$+9lg z+X>&?gpYj~on1@-Ub*uxJNzHrbAeI9K-I6)XG=Y<>T9lnZ|+@}fd>5l;@mGNaUSS< zsj5G|e(YR#qtkW2c4J-wpGoI(-UuyC^9K$Gk?1hY)LvH4pK(pX-LdOU!A%fbk{EmJ z3TwXsPJ9I7vUAfr{gD!bXqs&CSQ+^}xz!DkGr^#Itykde9tu1{DHye|k@orWU(br& zZu{oP&un!<1$7BHtaQ{49z(SgXz%-)z*jP85Q3M9dU!DEd^b3Ky_cQeimqNumJKF4 zMw?wpU&lCvHOihx>CmE{YE6Jp%W`UPFdkZYF|K{Pd7QLRh#po#6j2N1XFdl|@>xiM z(cHCx&n9*HN&u3@y(JElA1enCASb-Qnt60k}s{yWp)-em34U7nkwWvw31XZKxCK4 z^8xq?h9)+$1&WWfqzd6avPmF_Q5A85Sdg6OQ->s!S=;OCG?;CGvH(-HyZ`Q8xIT8p zVOAsGIVFK{=|N3BV}e+0CSszj6m)~~Z3l+axQKk-_Vul2YR`B`iRuHL<3DtGv*U{a z3u;TL44ES}^K{?;@HXoo{L}pt{xC!X%OR u=tYw}p|RDA)J@6Is@CALw6R0wTMVFMz)a(lS&3P><@NiOj|NnX*=P0Gq<6h&GB+;cdHLNosoCjaOiOZ$vt4FS z{15xcCbQV@HZfQ$>$I*%)l!Mgk0QU$IaS}p;c%9(emQ@VdERJj5Z4-wwM_WoVEO8& zL0nrc0C7L;YI~L(bNUjS9qlr^4L)$!^(?yAU>vKZtSUv_Y7`#j_E}Ymy!bY6k@E9- z{cIH0Li@#!h(=SJw5~b?!X&XnH>x?XYCP=ol=Iu)#_?^Ba{6%R=U)g3tt&;JH5fkr ztTeN67>+geD;quA-;ZcCIo;kqKRUwWa7`>M7p#Ui=zk?8#hsou(9wNIqg#Z8PS)4I zQBt0r<2LtBp4HE^OGzECto-2RJzQ9rT;1P0I%~alZSBh!$FyI67Is{-x<{Ayj!w`2 z=H+d5cJ5D3&Szx&n%ex(@i(%3=wNm>^6TtoOUvHq=pR>?qL#V5UqL_TYx`%n)|;AU zQ&WH4x^;YZIOyQesic%rJD%4xy;xY7@pW=4Iy$a;bSyB?BB`V5*Fx9byN!STt!^Lr z7xo7g5A^Em|EsAP@$vaMoYt+Wxl&a%9Us3`QnIjdu-)CA^5gHYr)S&fdT7aDzq$GM zv5nn7e_AHDeoU8p=JxELZ1?Eu{$6f&s+JkBw*D}fI2jS~y4~~X+rB;%llp8+5{+6~ESfv@a%K-W)MB!r}|F1uOW9uM69vN!o@FPbv z_`?gvW5tFURjK+zKKCDyu9d_2XCT-2V8`6~pi9`C17sT)Rl9r*<-F`HAWBL87*o4B`z1q)nfd^`No@Z_iQBd6;uBE(<9vjyBxcxe_r9DueLqP zXxl}sa>nKZM6Z-awDYT>lGMAF^R#@bP{kwu2-{|j(3Qi@?dwv(_>)n1Yy#(mVopE)IDwBXmdJQ zoTPm+qhpIf$7Kd?^ApTy9h`(GIVQnRksN|FhIX@l{t}3oNBg+8o5J^hL>=uD#}5$- z*Q6RrUJ@6%QkkZ^pX;J{1>vITJBY#X)Nk^&{USnaaW1*@dJjHSjOLX4gnHr1X30Vg zhdfl=w{802t>_ykjg7UA(M4gW_j8}6clvgngcdC$9)>0g-{U99tHFusvn{GV+a>N* z$s`J7r}lS)9L4q%o5@XZGb96`k#a%okdlDuum<;vjYc|TtKbog$vW!sA)9&t_8uhA z@y!f#$~iNkJ$b0211^PrCBZIU+in*keFgb0ietF#5+>Yb93P8qT8#8KMXeG$B3}u$ z%TEfC)y072!DtP>AE(GZdx-njx~v`KLj!(wNBx(zB|_Gx#%QR;1z0CN*&l=-63-Bm zX!8s_E*n3EGs$4yQ$EU5Xe(Dv`+CsmZ%$+IBp)Scx=e-bZ3Y91lShpG?Ajo{(c4l$K+l(tG>h;IrfLks;`dkN?%=E#T^NC*N>f>7o8Q>s}U*aK$@FnPFnBErFE; zrg?23fq%;{Ikd7PJb%?SWQ8hnU3N&6`Ss!YY@avLqY{&ktahr#=B_FCt?OOo;(&|e z-0;NFaFFR2Tt%UUZyTR$@BviUNWbQDry=O0=o7&W!C;JD%}=f6MJ@u%e3Q@35AF8G zn9|d4Hh%rQHyJQc{APeyYM*FRcGCE3W3qwjB{PDDsi_AdaU|wu;K}^oWT8E^maf3B zc>y18d1z7I(Q>Q!=#U}p9j|fL(&r!sa!js1w(ae$?y_KgG=EU*ZWuO`^UZbK7Uomx zJW7;+67|ZZ+@XpD0J=C2aYspHfBeKqJFnC+Bn~F z-b>N1BiYxwp8?^0~vRh#+5O5Mpfc3f`Ouke> zbI0waA|qXz6{p7tXL842n;Mc}pvL|($oz4oc>w?J(8rppjk7E5@Vq~UU2+0djEG9= zmLq_F(y)vj@JBn|uBug8q*|OJE-+sk4!6MSq^8obN>GEz7zx)A&e9U@QZ|!zcST>+ z=k}ThSFL7LKXBV^A1Pr+5P2rhY@~5W&t44s=dyLi^Bfeo3d@)z?Yg27-0%|*;1vDdAr5-yE^AHvqxFR8+|cXQ&J^% zR`PTRu?g&&EOY12^%#w1KQL_Nxx!5LrAobX{9_&A-)%@iO|{a1BEsPL6vq&!oS^%7 zI89o!W{28-@i1W=Ke(+;@jfKA!c?qPAY`kL%{#(OLnRP?NZ3YCh$SV?I@e=(LrF@0 z79P1Y?`2Fd3PVv3u+f9}@TeCUkjllXFL#i0Ne^h)G3pJV|c~GUHskMs#zR#BugS)e)^J7z*xbB!}9UzdB`nZoiG(VIGaHp zsH?sTDp40AUMHfY1{taiCn25W{Ed$RZj^92bktcfoAWxugaugc>_1sIXH>(3BdJ`U zTcZ_kv!E;CjL6ld_OqrhJZ~bI8lj_f3UTG%^BW$i6xwhjA}{xCQwqn5#ro>eJLu>+ zg~zFFC}~Wz2^q|Au%ch*@^X&~wh+WBbk-|8|8oj$=O8Sf$sdT^64~*XRs>CpuA8^y zg!n#UpW+9*bALL?UZ3kdw6(>bmKDc96iV3+i>$kS^&q7 zlJ?a(j5QPNm7)RiD+-|CBNjdimzNdnnzNFFgP^{$;@#6+Qc)ZtkIY0~T=w;- z;402i%>mk)&@xkGwy5{rWP(KlHO;F3>1C3Vd~+rPFV%x`oBRObIc+s_yeW{8JWE&R+}C;nM5UnH#jPA2U0608c0HWiX`xWXe0aMf4`$cPZWV%XGR-o48@p2 z-46|5n_5OF9f!NnTs>}esU`V0;qN5vXu#iYAS?oJ^R01$sSiGv$Vt)90}2SO2%rR6 zMh!r{VTEG?I6wGdBrlzqp734X8P-As)>9`m?fbd~@KyRaogX=ul<@8$0)^22cWoUn zY>B4=IY*!q@#~%Tdy{!C;3AJoI=USL3~(O*@PHCe~p|S ze$JRf3CsrsKZv^!3wCjVF_IvZwyA(KKS0a`abSc7Uhk@Y8Q3IA69i6)as)ijGu1Ah zXk5a&BuRK#`=5ki-y`}~64}9u6Du76N6ADZ@5Gkr{j*sJF+&=Aw3e6HvEZo1>0`pX z*9eV)h_H7k_=g9L_P2tWDlo%zS3r}pN5Z7q4}7^*Ci!B!JlX*PhZJ{9-%z}APlzyB z1duim@Y_{hVCNjw@V@r&&@@e-^h_7fPf{;O-TnXo)*xw*Hrq1LjP&d-uzjiE&n7xg zi3VqO2A8M*2-uTmbge?-_aI3pUp8=bzf39j_W+ALFzPeIs zg86{$K_q1>sUQppLUp+}h$_usn{;(B$fjdj@RCmyLZHFHM<*KSn4^>Pnv7cl)XiEfXM`yMybG!Y~fdHC%D4DT_cFRKN4H@ixZ;D`Q9gBld zFH|GH>oSypj!QM|=#TZ!0f4b;`caKvQbaY^2#+M|iP876pi1ov1sM7mX}Zd*ekxl$ zkanpmF=p9{1O=dvuWtk(s+cV2c%f-NGa{!xNy?}dgfR?Ik|_SZIOi(sdt+qcoyZYx zH}*+!;|_qJ=J`j`nzz1A``hF?6-KO|F;3lJd;~#?!SZ~5^!iXeF-emK)cfD^0zYnj zfQZqK`X;xGCE&hdT>^|yVsJKnZLL$|{;|Dz2=-k*$?EajTG*Bmf*wAA2{ zijsBpyLvK=fJowEOa|#S0EEFmQdhso6w!JzSpBO%wF(9Zld8{YC-jL=62M~w^a3_0 z6ioOST3tYGkLVX&^!eB7v(HABn{kjKHSM?oPjy*}q9ihC4>++TrMS>1LIjpNhGk66 z1;5SSNlqfQ$x>Xx=<8Q!ZdsT{Zf$L?t*zm3v$L`76&k#*y6;^iLqBZJ{a(>2-%gt2 ze2ok~ts{A%t3z)(9+}p?)0213jr>y5xzF?NJ5z-JqvRywSi{v}MBbjd8LW$R28`GR#V0?` zzGhw--xE6!V~?S_mEYgTc|?kpwU$Mi5Jx;#l25;gPt*jOLoR9sZrH}1LO}f$2=R`D zYhO#g`PIi$M~0orCM9ib&2oL3sm z3yfd>*5>~}ubXg^Hy0#3!AW#l`^G8{|9r*k5D;ye!QUfcG~@VVPo!oUrhI;qM*Cix z@CRz$BkRpc)xI>)VV~&1nMeP~np_&x;@5%=C#$n@eTqHrIXxo-C@m+>6ax@q>7h1e z&VQ1P_Q;Ror_g(d7b|ZCv@SyD*E!to@4J+|AXg>0=rjI_#}n7~Q!d7D8VF6RnPO~| zzK=gq9->jVH<7%qRErTVyi`bn=}7a~4y0J$aPJABLIz*yPGo-Y#unX|qf=L^0uyh{sjd-=QtB#gMux6`WPeCgY}9EU`E#(W}=!W6cHd(2tS2 z5K;IR^8(#G;nO70(M~j5qEl5gA9|A5Kg#aCm&36hIb>gTZYdAH9-P^!Fg&fQ5Gu1J zEr&S^WaO0@-Sg$V4UW>lLxF~8R!9TLH;!&^Iy={VVvGxK=ja{A0N2J^omRc0e1Let z-oW>WIs$RIVf7+V@FSmFS48unH`(z;1NqKH9h@(FtZ;Jj@VE2Xvw(B9)1FB>=0buv zy$=c7SuUwFh`?!nO;Skn=QB=*Un2y|>$97x=XaP+U*o%0j{@eQzxcCXA!l*aa&mE}pi}6ci#xIbj@~~K}qLvnkG`Hm`*vbsQZ|RsNoUT6^@}3tqL&}w%HA6?Jw~$6&EH)2^n!Sw7qfk zu3aM47HZPNo#;|7@zG`Q>?XKsev7n^^;GfeP3Gt4Y_m&HEO}4@XU6H)zkf@V`RDCf ze4*`2$-LLe15_IB@-N^l`84bC^)!1i`z7MlIEQ!_?3g#aZuKGk#9;FO8`R%oG`t5VDEv;)lfY zRob1dJ+J2~=Q-Vw3V5OTVK_9;0P17i_y@P%Cevi?ja@$<5ZJ7nrlUeHGM~gWEcqw| zwb*lWvQkpW9o%?GSeGMM7Eub+wj*%n;FZ&(!%J9u5;N?X2LkV0)Gu|(_z4yE^HAbS zQxNXhS_tD}?`_?TgKa2scolUEqXU%iuIS}kU@+@c*Q%;tsijS5-RIDj7}uZc%tduU z=C`cT{Q2Oe?gN|SkuzbuF~?_OEY*za=fw@g3!#cbWGn$jp=u(AI7zQvVvg>3I-7Gc z;#*`j2=t!w+ZK}a9m?JS-(;m#Uy1yZ&xkjP z`;c1+Rx&e2T5lC!w3~D_uxgV^oo*7K51VUznOCeCM$X7tgWXg(h;TSRU}|I@ck{I6 zdO`Z)9Uu2qy5D~uLxzI4C&uB&>?0FHiqU7oL&}ZR=a~f914OV0-t!~0Op%t{p#Qyr zU0Rp97fRdEX+FG5Ofx2Twz)RDav02iX(zr(1DJn=)*Fr6aS8QmPbS<^3Bq3YfKx;! zP-CTFs90l5#LrHCe=e4YxA+HrvqO%>w|g?y#&*pjiVeztHSpw1@_~AxL&+IhZaCej zNzo_cJYUCxaK?QPM2y1tY9CyA)Dtr{&fI(XXs&-h8rSvTu@{*Mzw(KxOmHLF343Ol zEZVJ~ahuEO5(T3ZDVLIJe?ev9cl1^67fNIdcLuF-DL(c|-3px<0q0jUr4O?O2UF){UgA7-f72RGQ2>@X<{+n$qL597i)B=hxt@)(l+{%GDe{U`WDT74OE{_B+4BUNn}irG7Tc=l1J);_%-2m^ zXD8oIs}WlU+*x0LPYkiiH7-+$q!bqISI;)z0a^W&$#`?^j0RK%jHyu%KV=wx(qA2t$uyk~VgV-g`ikLIrpgy3!=lFW zeL-t9;168}9$BpzLpj66&i_a&e9KER z{>LZDrks$ERVoyqhHYJF_q8GFy4FU>1e^Exk1x*@ohdQBggiXF5!ow?>IiMJFgfD- z5=yv-q0pOp3F@jjjrZR#=ihSXIRJSJhyuzU`iv_im`tjfbAPizsFH5}g0T-bm& zzAbNRVOWDZ22_qVo+Zdc8uF?R^zyFbR6@(QAi7U%4HvOt2UFY!`WuNOBXL}ow+E3Sxu12M5(m>Up0`8Ek ztLYMAc?)^#{*eoX+PC39WjXCSivZB~0J_UuJy=bjUwEh~ss~KZR3LDGNMpb?_?L>k zaAwDIlY_OJwk}N9H12#CUWn3Ca9#+zITr9n`kj&aPboLb)3?~&WiS*5D2;BmpTdgt zF9xQL7Q@(Tf|k8$3=Zl)`QYEz#0TfI!6D~R-c`)1Wo?4u!F%qqpG(3&TirTF>*Dsry1A5ir|j!ClmfsA{nm*63W4zHT#)=dGxZz%y672Lf%>AJf}BTk&h zj-*XC5vKOneUE{#L0K9}MJRvG5<{}H)4g0Lvc;&73*%fk0GljrQkXj;SU{V%mT-51 zx8CI$0%Vb%6zfz^Fy7+GLKb&YMn<7#)cCJnFN@!zd;qBH|B7~it*Ke-RjWLTQ##)V z>eng3yCgF~{Yn{(!SlJz%S@(m9jMJ=RsuNZJoEF(w^0ImKp81VVk4@pg)pVtgygT> z+=xH{Erm#`P(6y(NlCGtWzeMz-bcJPFs4PnzJi>I{ffJdi`F0juhS_XgmvU2#d`&? zq5@W3=3b$~ej#}8?#W~tny7G#+tZF?7Y31qbWmb$VXQsl?yIP%doqfLv`!{M9<^j_ zpr@-YXRce|qSd5bJger2b4XC@wAJv`89USHp7kBex94Jq_b=hOU4Zm~?E>3T(d*wV zBbo6YS8Txqw!Fe4ZeZ~fei=Lr(!A$pWnrBi5mggBb)NwgctT=ZuV&IiqjGTh$Ri1w znZ6tXfCHyO4z?i6122nir0*b{@iy|1^k0y4w+*Y9s!u5z_30CZXNPkx?lyQd*5GtDJQ9J#SZXiA)C&_ai+%BE5rp;yMq zL9Z{dr2|H{o%A;{p*_6*vjC_QM3_pH?e_ZY{#S3vFK!{77f~>`-$6x8eiv1Q6g@`h z++CvbJRj-%hM+?gvme1WOAoNDvmHIA(5hZtNIJ1$AyP(*< zgX<}_n?ky`i~uIHe4unK{L832z90Hl9>g-nJe$AVdKYy3aQcw4LNWfq<-Y=tw4#1+ zW5mDG0?U_#KQBIT-ak0mv0bWIf`{>N{?7#`06)|$E5s8-0GQG;;u8myP>$3nh0r9# zVB_)FTC3tRSmc6LzKDd@lS>Qo8X!R$aZ2OkhF%Fi0_@r^P>))=1|adJ?GQOz(Tg_v zb{7zmLx>9vlmsB%JiY$t4)N9(TX8y7D*4g#NR{UoZ-3{%kzvL+Z=njPZF5`DYi>oQkR>qyXl4D9%4fR>8Q=l5c_C)jxoIO3@bv?ew)3AR?%rZ*Ku?GMlg1e^J9P^rC`?`+ z(8Q?{Tf%=S|FI*efoj#m^LR?jsC#)6@6iB@z)D&E=W1OGkRS@=fh~%NAn)c2$^uXN zt^9E!h?)H}{_x%l&V|dx?lBRef%zYJ`$(z>TB{Z@`cDHiqZSiF!wwLZA&PGdvr)hh zbW}Fs^O1%yhzuqGJm84P?qL2x<-|vU5B3NeAYnkLe8##2gx56ofhGZ9273|Ia~DQ; ziDg>fx;QbT(ppai{{Jih><+ju@CmB{zFmNV73V|9dH$1qNiDbK0RqgNUwB;Mo{9h$ z7$F9yhZj!pY9Ki5`xiifjfs~CU%!CP>`l5XE_ICn+6ugRdp`xm`=5ef(&fq_u8X{T z!iRXwe*|d)2rCTYZm-Z&wShdOp{dEKXW27g$pDP;TK`!H^R)RBUIxJ-Nv!0D_zP0g zND|zPGMK}FFKy|rVjsl34jKNh7>yVBzYJ$+jV@x5h#PREroZxo{-cQ!VaPZ8fB=|) zt^EkO>nw}lGgiIoga!yhXbI8U?+|B#LO0Bm=C@>&~aYx<25$1!+D#-P4n5NRoVdf@y z0_xiLC8_ixD2S>I^VV@xO>2vr)C6o`g9b~6(V-^@-Sqjjp95(u$9nVWTK{V%eyTA6 zSD*h22~4;@&4rQ%msaS}_zEK2;ij_e9}%j5D~q3`9GR;k-rN;uD}73D$9?6qLXbZi z${#z~XZkhoBQUIt0(9;8Ph^h6OMm({KM&5hYZ711{jT9>{4uALK27c8TIDkJi1pTM z#*>o`ypk7KZK~x-9wrPWg1-)jB>~6U@r)(+gWKt`y_;UF!B3vbTHJz^CUv5@B_A{LndVgW~qf+lyj&>;z65txeJ<^SHBT z&uT{9dx09V93q1i=0&gsvrWcp!!^4&{`}xy?lqs@B;8;W5~TB+SIjkR$IRi^vU@d5 z9x=6FCizZd%FNW+woh2SP5YM}Wy?FlgooWo?P-{3w~3ic@ApMLqRGEu{fVclf$=Vl z6XvDjoJj1YIXh*?uBS@zFhtv;dpz&ztv(%5HSt>KBZ)rDcSAOZH z)VvixD27m*69!qqH&29)3*ND~)6K`+@uq)(bwkTAiNBRZ{2>EBC@}SlRCZ*_3M-X2 z{>kgQKp{`KE;EeFn8=`RgLvOtX-<&kFS~)ijDYcKDs@W6^q;k+>haB8a^h>ctexuc z^C|zXN5L``chAg363Ma71SRyK)8myYQk%ZI%0sjhJ`=wdD;8|N5S~pi1`**V?p*W% z(>PV6c(xuJo`?8A*m^?2LQZ#Koq!RN`(65d^JX{`nZupMDrJ zt9dBm;Ez=V0z`FuLAY3rmi|zTTG-r-Coa*gdM+%LCr?)huvWlxmRcvhiTUnxFSZh& zuvm^n+lk47N3xEF)TSe2W2X$bm=E-R3NnUaDIf%D`nm2h*(CU=GA+5{a!H8Ofo zX(38u0ECfmvrb=2Q*iABENT^M(n0o^J2!f?0XWD>CfSn(!XG?GiG5b^K7Nco1$p0} zO%d_i2a*#4OC$^nfwx&_UY9Z>#E%!0(J!XRm|H&cJTwCxMSVUXbu8CQ{L)-Y-TC%| zsq$6|kZ%_K0ATc3j@d2AOfpYquM@O2ao0MS-v&D}d33{Sl^Fm_QoIR1{>;d|JNk~x zDCc?Xpj(Rzu~SSj$E6S4K-%*vqtA{-G0%;bU$xqLlF^sT5e0r1++dHi<~Bg|Rjw7w z4q|v*l25XJWz{J@uk2>veW$(l*TDuCwL2W#?_KzYOa`y083NfT3}*W zf7JV)@67orc8+qY6Kz8rUxd=WPo%AhHbdCzXl&!9gz`qh_TJ4{lI3W^#uq5Lr{roLOa9JLm(^82%S~FM1Xt57~B5VrW@HM30@2MMb7~4Bz7wn*!F(i zr3;)~Pe_3Cd$W^5U74_5mZ=w%5D}XXVi3TlUC}*fbT-OS5x5#T=siU?i(?5+6#}yi zo+LD8$DD$HSGMtw*r_WRYr^YnoqEx}x~OBI{TWz2(C5GDI2f`)K)`eP8X|9mQdI%` ztl9(RTLw=z@xL^&);FXbl~WNT2Kn@$TVI!2rxg#2X7Ufr<8u{C`pMm;Y`Ecik(qqp zxbyFq-BW$lZFlt|g19&RI4$cln$EZqqQ0FNdT?J9(8}CfYPxmr@1wJjbg+GoRS3xz=1X1$@#RY(E|5_RfsObvc#i*kZRXPp zBJfTrc;r6Rcb!;#GV z8-ef#?~DXA*3i`B0l0qa7!kvROC1f#z=cFoVOvU-uHVMo(1iL@jIRnCKXydZzpKVi zA20fQ_c24?A4m~m=t$u}a`hvsg5^Kcn_37th=dH{!78BZff`?nIr;WRoF@<$Ny8)r|9eLv`!S>&eOC z9g-QvC7M`*r+WDptr8JM7U@5`gf|+)eNDB;z*64np}&me_AknaLTaHt!2juWoO?Wo za9bu2zbpO#a6{U(EwVH7ioDvV_|GLE9rSqt2iC5l=d>hn;N9VIViVz)c#{-GZkAAF z-Y+cGg{Iq`9+!NN4nGR`pC0OyRH8!}4^k{u!k&A}@alzfNbVvkG#Mj$8^t333;KMqq{ru$K0X<7-6^5l=YtOpKpA0E1?x zN^8%}@B`}>g8R@|X)r1Lr9DJ}?Bu9PWf$+?S&M#T)r$n*81J!xyChY_JIC&wzi}3m zo-k_74>&BvMI!Qgema!-_|N{lJKvO}a6!dWXvp$$+C@GI#&B3;-l9y`9>GP2o$y?J z1By!p-$QjISazXod_^r4H9w_yGcV?{19V$z=rAsRxIvTw!lXmXglu>&e|*yvamMB+ z$1n|0?Omi)4J7_)9frvJ;?DL@(xSmkN1;Dp0&fVq@&9s>w$X45D7tP@k-&mq`&wN_ zT=sFVy8W^s0=%Z4WduPh1VJYj$iJN<-5yY1PW`zN{Me{GvA;LYe{*0Z_z#5D(S#K6 zPou8A?77XK(~mfS3YSHC5wWh{g1$8D|I3^#OxGg1*UrJ&n6okbkF$gXbXFd57SB%S z$1JQIPcvWPZycL_mH|nJ*FF*03a?#~G4bDV@&Bk-F|0W46|_TEPii>oFWK<5h#RCl zU@T_9vTHSMOnK3Xul0MU zL#-SAqk2!i4tZOMaGIH#PYvJ+;rG)G88zqcaRwGQ_eluh`_uuU9QYtE88A4~8@Bn) zF)W=Rt@}GxDjpFVZ))P-KK`|u?wl$m30Feu(J*Be9JCd9GSyCQ>3GmT+J7E=-twzH z{zh}xM4Al1rjT0phFn$3#ZOxLd52*nK=p1@P6dr+po@La*8^XhbC3K8IGw3!?_a85 z$mFT7->%uZ!=2MB;jw*ExoPhYLks|A=d@kkNbx57hYFv^eSX~)tP1# zonFy6ea%S+UxFf>y79zf_HAaO!xQ;<`CMO*5G{5vLn@QEgvSVLNr4-U4C2D+U#;$* z{%J-3Vj7@(kgVbvr1;cS2%@~QfAU5upnY7-f}_Fr>&K=hshyoDpY!gbr6$^w8u$G} z^D-BX@-RGF{rYywSv~>c_=4j_he)D{@4`;?v zhzrHazCr)D5YNwnbMk&8GJe~RHje_%t9*j+JKqOe7q`dLYpZkH@iiw`9K>?uvz*G# z>CQDu0OlGOj{FZOpn&;m5MkmMG00=diMiv3%)HsSZ&P{fj@en~)PBRKs&})(0Y}V? z2lj_=4eHI+W@mJxmETA;9Fd+U7!*|!W z`Zi@B4ByYi*Tj9k6L0gJ!y(P8jYXOzEyi?1iY~wH&-HV=#_XPeH}+YMp4)Pprx#an z=N0AS--#s(T9r6%U}9H?2erfZkd-yt-PIMw zo#3U6(IpR9rL5KQSXS!4WhfMIiW@LhPuWq2ZG zo5V7tko^u4D~HHi*j{ekG$ssAId=_wZpZvS2l^lvK;!X7tSV63I6I9Tn@?61`fymx zuN&R*blBd1eb)AO`F-LQnKzoMSxiwJ&2(@Obcd{Rek}SXH0a4XBUVvi8eHREGxfA2 zOk1DlQW8(8OxcxBmenP5&l3o-OysTK;^wz;roXMX#heJJ+1}Ue%E|vrSBYQn=qs{_ zZ?jZEyhx4J1P7B0!t59?LhA53{JK^y$JwR5nCOy{yZcoKHt9<|n)b|>#FLCwr5uf0 z7KQ1vNr(9zat{bYZ9Z`pp6IM2y7u3EnV$0u=$oIxj9lXggV8F)@^o<#H{ea|41ve) z>~AC+iDkDOlAf4z3m2m`O(x7At-Hvh^OwQwcsHrzJ>eVW0R~NLAX1`PnCAl?Dv6Bw zf~dtXa*F5k^8R0`T0Z}HrRgInE5U%QN>uQvkW{43-q<;8Y9;F!p)iNm6mSR?L|wz~ zJmegk;~ z+2Eb&f(%DMNPz!-{#y=#Ga=(vF^?qe{S!M3Mjn25Sf&}uWc2-!$PT%B--oViNoxJy z?$5SH7YIJjAOLWz>eRJvVl|6yE^@c}iSy=gzdPh4K;w$?{8Iz{-(ktfZ^F$iQb*xN!GUruvcq@?_ZUxFoIgSxnG9q zLypu1Lf?$_6U;FNsiZ-wOlX-&i%UlAWYjLZrS;_+fg7PWMFbT_#Su((@ zp|Q%#u=g&tWtJ*7d6+Zl#Fc-u6d@MHz(^8Qu=n03mqXm{No2A^{Os*VQsPM^ho`nB z8Iw?JN0zZGBdV)&LW}z^g{a#?CNEfip^A93&*e(K{DiR2R{%v&J9(QAo+Lb*nReR% zHVeq$^R=SGN2}9M^&cpNHGZfMq=(0TbI83P<>D>zDI<(hsDF#kVI-<4BtB~G5eW7WUeD0H3tjXwk9ve)Hv?s0K=+$aHR zoF`Oh8Yxj|Vj^fFlpXqz&JHH#GC8LdDEByd_HH(e4W}xA?xBVK_?mAOAr3mNy}Lzs zgE51NBqMChdos5pJzHc6S+@Kepmh!Ll-%*0=pwNLuv6NsgtB%&i{OPLPg#A$!|~ZQ z>|VsEufBV`6=HoSlHIfOPqHh>f=Y%4-5C@250ix3t5ACnpC=pY>k_trrBY(*G*b?f zT=u;%9~OWv$n` zKCyoPXRBax@NT<#x^!O7^Qjjx_E7MsSD=}NL+|v8ey%-F$BDIvk~O-3H}j9TfgN=A z*LS#$z9g2Y!6s7yb9CF_HJ!q>-0OnSw~4x!EKs1;#m0@v$mI6kJ@3FTJS&uV{Jq^k z-;THBt8z-lC5)_giQHhsX$r_P5_L=sB;v z43GAGz7JiZA;^iDe02K%rFYZH#w8M!cIa0t1oQQ1|vx=YV7 zqT!Q1x?Y-L`cg*K#iG3qZC(;uf`v!y%p(EsjHo+4+h)HoO^d9zn{kGhSog$iyK(Q$ zyS>+5Z-5KK^1r)}BOa7S5|)H@P{Vfo^`_;fKglldj?LsYm4*x%WIl|rF}nPpKfM&I zq6Mx(r+jEJz2yM8jVIn;uFHOAAwPTF@Gs#0WwT~;;c&eArt<5L>Rj6V4QW^$lB=sw z#hp)rQo6}Bjm2uwX^>1uUAq*mM1A*DK6jYfi|;&YC09u%sZpPw+`J+`bF-2uz>m#U zGShqT>id?u9B|y(R9A8=wbek3tiTJ<8Tn=S;xC*#U`g_j&C)KxmR5$x1tMu%QZ3oGg=7>dWi53|q>Xxh%D5ZB*4kP3 zj-VPPwx4i<;As7R-Kxg<@&USNv$g+bz>)hRQ3HPK05T%`e(W;!;!NXF>kA}WkJCn$ zYQ}f|sv1G1=Vvl!&}fxnfjaVfG*j5PZ#_$l+bRC=_oY#ua^)WfP!Mb`H=|yvr?@TMlUf0%z#~S;xa_1DsPHQ=EIS%bZv*iO;GXZDJLwGXT8^By*wvxGDPFpxFJC#V2qEm zqJSCBH01ThORm$Aig|si8dHAti1E(sFZ}+%W=q|W_uh5$=wq>f8Z{p3W0#s7MJ6qO z5jK{PPH{?uh%_2Cf8N5QMRMPq>ytw~M_#25!?T^H|;{%TEb@pk<=RND&b3Cx5(9D-NUG72x&zVq6onFdiGkM^9=D%Cz+|2Q?E{_#~1@cBvXg2X@0D#Yec8o z>=&>ruuE;gJsO{*AvR8VB0i$JzWSqnXMhrTxZCczVr{SeKLCwDa=*+2gL~7#-|6A? zOgrSB;>0D<(w~mjLL$bBDY22WR~qo*2{<(XEBilc4S;K?^g~zbXQ>Z`{#~R$&egRL z%MY+t~a;9RNn^BmXq1D}AN!wN#q|%|xin zm0XBqraXH=$1OP*N~L}pCPP|V66}-(I5~T<0E(^cpZ{n@Kt`*+)_3=}vn_>VahTk@ zhxn(Hr5bUEE7b~7`fS;Fah9cqi^^#3! zR+9SIMDL%g_^CTOVNuo^^P*gdRJr~S-kg01;Mo~4@BhNnP1}Y5-FdW-Q zFWH=5WzQ;EWzuI-B_DIgyAkrVMb`_f1gm)evslq*7Xo;8{^mI#@LycA?;sE|G*tTa zL`#ur4+cH{iADVV)A7(swvpe`3bFFRc&enMs&Mzq$#7P0LRMJgi=fG}O$gu-b8)l| zN(As%`xOCEMu&c1=^x}9x+r^52z)E($61bVWt-7VQOo%wf|1k9v7;FPLAlJO`yT9k zAX~i=6dimLO%?3o0leDmtbsxRhqfsK8Y=xjq^xSE(YnZD5Z2bstLVvYyimT?bQj~X zF;%)5-?Vbgz@vBPlyOAQ~P9HyAZ(c5hxMB^~0Tc z4*?RPvYIYtjOu;fQ2H>be-{N1H7f<_HAdv>5mXFH)^4X}Y(Pym>)HAUj;jCwAOJ~3 zK~#a&`w}DGE*oS1(jqeTmn2}%lg>*(2;k+>@ti6EHz@_mu|hh2P-*Bb8*JW~ zxyT>;ucnK40$uZ5J%Y;d$^QRfQ0l4CTj9n3o(by2X+F{D2Gz1QJpnW$j4eEX-Mzz? zi(uI5o838^1jG;nq2G&@;-|^%=OvpE-;=l!EZ$H& zrk8^_y{SrtpPB%&F?$feyPYS`0U?0S=6qBE4y7bTQ9{k=+u2TWUe9pLCWQB-5ITxs zn3qp9$7S`Amf7A7GH0HvXQSiO|87R`Zzbq4-4(`^;Hj?;5z~|{2;h8wWgQR#crzzO z0E|=%8-w=;DSeLh!18@-S$&LF64iV$t%l3BI6o$-$D2*vc3qn1>YM)Y%_F{cROImS zs^boKhwvu50p^hajytPsVBmiV^eVuM{rQJ*hi5;*W~1;&;5`nLxA zyk}u}le7Z?>~1cBK>+J3XD47O{ejLW2xIvEK~xv%q0Waw-zxlBC7V3ea#s>b5(LFC zw=4CC*yzAJmM|j#srpqK0KpTNVuz{ulka=G`*4OwD4WqJRaHC?L`PQZyiZapV91B3#91`=6KFqzwpQb9r$M1bf-} z4mkiLpKr)~QmXac{Y+9<*n!N4yEQH4^f6=IriT-^E5&p;L-EMOKMMM?~1o zYWpaE;!6T()J8b~)TNHknEkl8H2(zf+s^;lySf*((KS97OYlG0yM@EDyLW|QFVa7u z6fX?}2OASiVv-9#K(G9`kVNKSW)lb^c;i@&h#)f5GPOvn-A?H#g+bUWFSf9-=k9P$ zqE0l<6MgN>v}WpiJ5KaX^8DWC_j|q`@5Tzh`U(@lt$_Y0XY%~vl;?}YjOg!;8{y=~ zMSdF8FPcn09}|MqLBrYHh%+|c|NIzE?!&kmpzX8y`pT!7(u%UUSd*%F*EfM1Cp-@T z58giw?*;(;@CDO=DbnKkx^hud2lZ(q&V4{1#pr5bh0;h zs!i87djQSdxIA|PKqtGgMxP3nz&<~CqzHYyPdojDrb`EKRvLV!tg%(1L$u|6062TO z8vtNt0r>E<(0d}enleDKO;M{XZh zmk^qCbZcNFfH;LdoZ}q^$h!p^LuL9iw(4VOdMgB=GhPRP@7bph51;J7`uV5ZF9amB zCeJsTItkEiry%;vN0>#HlLn>5tSBPb)z^WJxm)RH0frG z8XyB;{xo#Bk2Hq^&~sq`q1MS(dnIUI>#4O;E>~c-cs(#C<#`X_*{jF9VE>1Yj&HRN zfXq*%#x$%)@AG)J4(dnvs8&C3_tU2>N1?6Io@L_sc?rJjBS)qlmQ+x>^b2Vo_$~et zRO4T)I#l>_-Yv&)LyuqVYOl1l*PdEdn#FF6ItVqmZ2*8slO6|v2k(!=y8r-3zuaCO z02>tKMyZoz_Oms&3+kIpU*sauUZJlSyJTqEFOLFqcexaN=QB2A7>2d2@I02)zJ+_9u@6z_aHs!-u=DzI$^! zTNjGsYEs;*eCSl4Zk zN20$X9Zy=5H^$0HlF>%$u-(cW0LpL;er(_j14I#f^(TyL>N_5X+U_6d#Inff^0Oyx zhynPMYAM~wWY>aHVz6OIC{7!>=oLud$)?8v;KS30M>}BuNB_8$ARwDXAMo_e2KA@x zm*%xjS!qi7kjZ@m6oqzw1Hxbq04f{?SedYgC0mHIIw#kM^NJg>926RhpOR=74$V^xmRAij)#7kr+f2vh>W!oylI#Z=1PWGI>1S_IDlz;{n}0sxM0qYx;hNAPP;kBDf*-Yb|IK(%b7M=9x3HbzpPd5g=l zTtGYutAJ!P=?nuP&g(G$Gq+mmkEsIC>oZfepC-l?Tr@_w#?U`3ZvGv?=Eey@n17)G zXbsBS9>B+6c7XvLK6!B)4#1@fJUg+M9{Rr-1i-E@`%hvz8@lN&HsW(7T!A52(i{Ll zy9Mg6`xg23O7RX>odEtxw{5Eo7+rG#fHVVV7dH?N5ow72vWSCb!qXJs!Eeuh-3bZc z$FsmKY$wM@j> zJ61^nc$GKA%>a;tm3%@+k&!CM0KincA&+MQzCYUy062brZQ~S$Doxq<9!x6d+Cj2U ze+$-+&mwx|e#yw`x}MG{#<(yzxhm1c7$b4x7baDoU#tzP2UKw20081-f==K@&SGLL zng#$s(76QwwB0-amr$O9AbA9<$N*5ycz!U*+joz40sx-AUD-HA<|moSRtUhx2GFAu z)qJX1^WSf;pNLqZzTQYlt%*F<_XHspOC+-0Rz~5jig;`CjbE6SI{(u180fPF3eH3T zzJ-46gyF0th?fBSW~BuHaIOI0(h6vdph&O<#CHXU1_OBw0N%X#VJ84!J`6=>jHZ-zv4+;XFdid1nH#?_iSqo5 zdlT3N7(26ixgz?t19EjaivZ&akjUSSY!(4w4Z!CsbP;~Vm_sB0B}m`!7yx`c{`uf08rk`v?Fy!9}8~l3B~`Tl2IP%&!%1 z`o6HS{@nOZQXn`}3h#_Oj3AtFi9QBTH79gK0Fbxih1*5}OrO2D*{2LBJX%ae1L4$T z0Py_fXDld?s zwF>IxRTvbHH$L}0p#sxks6scT+5{amKB}oX%|rpbZc2t@15~gScRV@BV^1vR32m1L zU@on>830yx;0gdV9O3jB0Q~FGS3CC2_2-}e`RlL${{8nKf5iC+N8qb#%}wkS#A~`X-@{zp;WX0=Q-Zrd$&Gc?AIgoI7yMsM2KC`vCCZEc`VLKWtjQ zW%^Uw|MzR3A9pL*7pqE6AEhp12=XnPR|ycRFH+|OZ&dCR0AN14QXb`zL{hn9ADPOQ z!PbzFy)2&UO22kqAM&%#3bq0d8{a3@2>?*eFqO^g)9|fHGMftaF&{zmCj}+d z%?lerAPtS2$C$dT^F+JH+#}~-Oty!P&GwlK zTZpPAAs1)EP(g@>3A*Vt7%Qbwro0f~NT`4tV+kNL*MNDT?tfwMMZt+}H~n z1P^AzVAxQIj3vPTW(|Z#!1Z0;MQ;JXn-_Nn0Jg(_G(Yn#cYkX9+xO|QrciKvWh{j@ z$bhh3Tb89E5s7;)q1Tmu=DI=jr<~~95s-njO=d-Z-LJrS8NQb8;9)oo6!lVxnvZtL zN@BYM!peiPEvNW=~#Z_Etn$w#H3c=k%-^57OXsvzob@0*Qd{Z8C1mhXIH(5`#GAMMQ&i0s(>om4X z=}jy`peG~HXkAbt$E)M)^N`*Ylz{nuhDJeDpuGds*1a9<0}Cj6T1l@X-&6Q$;$-*!dbGJ z<`(m=K2Qp=STq`svp4yBpp?Zm3n!NHQ-d7<(0A6Y+w4P4<&~b^oG)krBdys9QpZBL z7~V6lYyX~>1-|bfL!e|8B}hD%WGF=6!IoH@2k@s+dIV?CYt0V; zbI8%lHS^LLOaRX+8|o6wBaHNS)f^HxY7ogz!(Tr{)xkFj78LV5v80wwd>sJr{aMf3y_0nIRjw>|xcXQ+#;nRntPZE|=?b>ac)taj8C$<|Jzy#hqT4 zl@d^qj`#L!*+jCtKKUs}%dW;vZJ;)q+SqF9Q#}PeZQ@0DgRu z_1iVR+fAx(CHj`#+uQcOkOfJ4$^Yg=^0Qi7(-z5$vsJz$UF7s1+NAnPXB&lfuP>D# zjgDe+-(`)5r$6QR&~2QjC5}4aTQWuoW6D7QKnidkoT{h&x}eZd@1$#98j%`&oJ7j$ zTq3dw@d&pg$>3s+?Jp@~A{+qV)uMYR@ZSIF;IXVWg6OGN1pxng`{5}7@X^Wjcd7oD zx1^*tjI*9nKtZSNN+UgTApKFhKou}M(WjUsZ&X*RycX?5pN#}G<{tLi00dtS8;?wE z5`6m;w{KD;?_ohh(HSYgnRKikbQf_Yw79%K)C+v)tZqBm^eP1=H0;nR^pP_KViC;3 zOxQ9+HC!H&92bu`ffoRb;td-Q6jHn<0Eqm08UTD_clS14f1B#Rh$khIM!)Dr0iv2A zkmX;c&9Yb=6YM2DKg9`c?LH?fk0omx#W8A}d;4urrXM=b&We*_udeEiMx(C|WIMnR z!&L5QOk5!c?#Y9QL-JlZCf06a*b}aZPWyb&tx*Zw5S;4QKLQx z(YZy83}08F0|RJy9`GhF`H28?=+_j-$&wWew=1h#|M#KnzKtFYPf6{x>{t|Dn^@T73FY6_k-$>5%WsVETY-A*c@sZ|^j}wc(Fj zD$vCzPIiORIE%_#ivlqA?UDRLBP^t*R6guQ#lT0w!1@pE@hbuVYb{t%s=t}sahyK7 zz-?OuK?xO!avw7(70tvqR=R(=^#IO}O(yL~n(#`@O2pa7lQd6LsxO+>a1v>3Y@)Z4 zBnFv7@fuMLxD8O62ITY>+kp6weXjj&-~u1{7A(vY;-kuHMu0sS)hg3R)0-ikQPyz?8oOha_lju~6My z8jkXjif4ccn`x!4U7amnLx&N`=J24BfUwIvkL$0xNQ;0sh&zbXKDyX)+I`t20} zPWe!@U}$%0XIOG}Y#!A3*p4MZ7V>t613-0Gz(?sG+;y9@nX^M4N`-@qk`Q!hVuj)H z`L_cxQ*f$(w}A_hQW@I|DwJK9dnzR%6fEv59~4BFfkT0CMs8)Mu1Pm6WByxQ-MvfvWJ&KznY$ zU5ZpCFoV|M9i#EFKfwTrhF+AQW-t?p&5xxfaF3%M4?hBt!Rrp#!m?RQA7qAhhjh`H zuF~{+AB14 z58^Y@L+81J)0;@IJp*Y(-r}VB*CCbG!m?`!T$=Q-BS?mmTB89bL1RZj)CnXk{a-5P zxqBB40PLVTtq7Uq;nWWC?)T4|0O0d`^40F$RNv0@Ibo_ba&jqV=lRF%EKEdK_Bac3 zw5~ZDkH%7Bwy>719SQt?Cle0<&kzBi>I4h{qNAWb8ZwG705mv1&qxMtSiI?_8RE7K z#C34@N6AO=LA60xvo)UW-Hio~c2=g+bViu31`}*cfA0kQ=cY%gn~3?iV%7q-Y$ZqE^wbTArx3~*r}`i)o3=YW$0@B zDgYp=^Y|VadiVa*C%Y(sUM>GkQfiGy4Rz2do9{~MDKy@joJChdRM}H??z)Y zHnX;);PgPT5rC+luXbkoP#6GmK~+G+>ma&CIxRl{Ktw}!;H|WybQP8tiN+u|ot^nd zj_Kxcdym^}{Z0DB-05)dEBw`ABFp-H7INxnW z2E>(i|DW6Sx7D6fN}cs2de%ev`_a2JoZ`V?7i1sOJO2!(lU_bY&c8seETU|3v^uaRWE-*F0RZtgI%x##T$6$tme{ z&QyLk_ox8St34bePpe(dDNxNtVFTSOv28@?rO z5nkKS(0-b0h5t1@uSTAj;s%!z2eh-65(EHt6AJ*;uPVo11OR^Temj}a8AbIv<9c@+ zsLk=l+ERble`EldmmdzI+Ac`Aa3klzoKLKSJC+F;Y}C2(py@h!5urQ9n9&SA%u6jI z5g?1XrFtmTFhs*4eR0GYN1mDH{nf>NA;xKN37!G!aat=#`8qNFMF3#CVGj0@>YxU+ zm3qB7c7D(QF#w?5eVlVqKLP+|(w5FigzM{g2| z061%|M!1P7g4DUvMW+*~X4I-nO21+#9S~rxB?kbFI0NPAEJgR10iXd(KOywO&{@-W0Ut7RPD}ux`_A+HFs7h93l$ivfo2Y5lwNJ}NO{-shr4giQtrN?-*ukQB@7?Q zAWxslKDMe*59Z6VotPOJr4Awlu5{w39v|FlT#3}<)F%^b&mgo+I8RN0rA^JT` zG(1TrgiZ=>RMBI}0*v11LNk{@At0TSINOaSDM7Dl&jtWKSM%+4$qcSC{H?U5_zM6D zU3BY#2;zdy{>D1_>LAwuws83q6hOa~7@-!XvACk8z$OCF+cTkHM{k*VBmPSYt+xH3IZ^4DIWv;0PXT~5 zr`M{Dh3hHwS9uq`!6oXP`CH~o4ge-`R6Nscr8e~gzpbUCieXI>aEiT%1q$B+}M!-fN@}vlJLAPhG?jj0A3o75`6jg*0>Ui+A80h2k=_OAC0qj z2udUIb0j%Q07&J!El&`c3(Fm91A?`krGGX6B&l77`hJWkl6JEZa&~`wn zM=1lOYj}ndtvEY7CRB3U(XNxtXYSNiM9i-C1OTx6SM{5tBn32KTG`}(h z5&*QuB}7uP>daf$SS=Yt75%KG|3-^}$7W$Qvld5DzGDHmm=FviWpmkT;kjJJzzhbK z31+0!3?|HT_z*rlACnQ3d`Osr!u8#wB)B7oAr=8J!dgVR0mNWNc#JUIz(hj>7Bicd zqnzJ|-dtROyUAC2g~{fr`D?cxp5%DAYrtaR15tnHK^ zv-&CO=&>mj4lBQ88ya^s!TjJxWp-6VMuk4U#Sxzqx>OE@>$NPSUKY5@PX0T{T zVW02tfU??lcV;&{mBzH~ySv+bcg2vhSj^G;-64*UwlK!RlkmK*r(gF0(|Qm5SmHPe zpQn@|XL}SaD*fGPuLa@3pZGJW4=&B|gI3C;rt2tICARz8#@WF$0N_hI`Skhw0|P=* zsW=yY49}kyyh(4^D3-TVL)X}gP~odyGAALrubsQF<$<}gW~)M8krhn5*Q^X40J2+n z8@i&xp2WxG!eQmtN49@>z8t#=@4w8vdM^S5;|COBFULLFJVOEi7ap3pnAe4ghPffE zXRZz-BmtvaRK1gqTfv$1nvH>7o*qSA4txH#+HDM5Za=H$g%f8wiCsx(JOcp2s;o?> z%Yv<5v!D4f=YJ%)>%e#eKgJ~_^FsxHS{;-E$(N2(P(G%t=p`KQl?DFbfz&R1ZXbQv z<9#grj1rVGTFt=Ix0XAv7c-0!hm%S5ZnB$3(Dy+&Vb02qbf%*Fu;iIm5B(HOH00J` z-iqi|gc@GayG_;kaBRtEoqlIBcU{YJ=abG+c_l-kL@Dy0y2{BCfw=y+*Wz{4V1c)p zfBQN4KgzDjmGJ5$k;4#@d*h{-&xA^Ghi?EM!L<@zl?N%98JD6%9aDWd&>QuRrHpI2 z(a{BA9?5h2-a3F(aT)wxj>#@^CdqaLXY6&cwqc?n?_-8nM0b1hVak)JU2g#pPaip3G5|=8gwi1z@J6EY@RT51#IF)0?BMLW>}G;e zM&K_{tZAoA^=izc*uLE87;mk`ZF8TarLn?4E@sq#>k{381Xv@VFK2IScBOS(z9tTD zwmYUh=9RWR)YH??002w=tkO<^94(b=uEhV@(m$QG1r-*{LCaeeqW5t!kpb=!3_RVR zn&O)6pt8e)BPGL+#&3!JCAx{3*A2S^!9>Gv z#z&WB0P|KIP#?Y)0J!hZ0f5YB7BvD+e*C*bq5sda59&6`$z!w87=x#3W_&C5+2RwG zPiTxoubw4j*G>(?Jk`0IJ9({j1pw$x=nSj(&AzYks!&w@PuxcfZl(nfO|Y{N0Kh~; z-pXKmr}mBS%#B`Z^bO7I)KgOc)Q8CFd~K{U=-*%Yr%bqzZ7;1&AjioD1l+aIZD0T9VnpU0;%o+0w$)t*W>d7{UtVB&;q0H)h6L7vUG5-mcr!* zDh~|}@Ecs_gk-mpx<$TvslY#vJ0x8MJiq+R7$%hFO6|-)Tmv|IY>JsfChTrX#jSSg z*an&KMHYF!R*l<~7vFhaXkcV{G?&l@kRQ+&<45p{r5L3%EC*%eyM0ak2@p^0Ecw;+<@xi zUx!}GqJL=7fAIHL{dsR_HoDb)1?FqAGw2`mj0j=Aoj>gXoHdL&gyCMqm=B1Im$8JG zBWoxhq)okrIkNYaDD6Q5zgx7susv9vR0YIM@P~arzK_d&|D!EoAPN#xXDjda+HCgb zGcT*WmV+H*Jplmp#Tl>B+{dRxT#x=Y7XBN3^w@M}fyZXi*NIsk4>hf+C?v5zQsZd~ z=mkvMtLqT}U}M}50DF&A7q4>T#51v7y#^xD&P)m zVvz=-GA;dlBw@8m%@4#@HrCQpW%?CmE<0@U0PtnygDiuP>Akw*KXvrj%n12aXFP1! z#((5py^8Wo7~N`k@8r9Sugy)QG+i(T@~1@-!BjC85^YozLI|WWq7f0qMpy(3x3Cu5 zZM=ogiLSfq%ot7be!K6RcG-0^&YXFE&T|eM5wq`jY;rq3b{p=d6*$PMM9iZ#KE=rp z4*+y*sXJ5~U>56Dpcn$h$isnYm-7TQqoRk+0b~~)%-ciKKOmt+3Uc%AB>*7TAh#o7 zOQl_8BYnep%XFs;m8YpRH6K#G;{4-%mL>p*2LIV@DgIyp5cJ-w*B;vq>*%o=FI{cl zM%A=p#7uRwY6a3$^aqv+UQ(Zu@4fqV@c&(U@3MM&Qp#6 z3Rd&W2jL?C)>gkusvl+gOoZJ%bFPU6_&mGyuiYb~W)h;7TtM0+h;B9tNuYyKtqcim zX}bM5{BbPIey!?wDm^1oi3^puEtVt!dV9>P5k-L%%;?_Lye^t(XwQDMkR`!aY>HAQ2p}rp+ zQ@-TxnlJ9{W<&7sEcE1<=wwm{1WFqnTnB`l15C>?0f5uy_PDleu7*AJaQG3DuyG%Z zExBmn0YEV^MqeEg0PrrFm1s2;a~Y%(MXDN)QzIBN06l)%)!s6vZ$liI-thf9bU5*ZoN|!gTsA zIRIR%J^`tVxNHKci5#}cWzq@+rC0QY*BB50U}&HVWd)HvB>HvhaP5cQtf!|a?ZCGm zP64DYMiy{N6Uz-4SwQy^fc>|8^sf8XIGpwm@A@O7enD4f%kdW9(Mkyb3ZpB@WYt7% zp}evFod^nP7&N2zRuKP=J$+8RUW&H})ahDsxAyBS66o&j6_qy`8GYG(@+i}M=nndn z6hi_4pufGB0^2amO?Oz~B}quR(T%Y;B^3dgA^I*ayQD;&R?+T2Mdz|MrFcPY)AbLD zO$j=v{LJ|kdRi@C4XtDY0Kwu4Ad%Jz`JnR~hJnxgeWkO4x>ZJX+b9>YY#t+$$fh>+ zgvX!L%xeIsAXKsIOPZP@{WryVCapjP{bD(Xa7`*0lHGh)QRJgCW!eod865$z2DT0O zi>jb0%dAPP)bUl^7}LdX336ud`rG1vx)$A~=H1`|YPgk6FwG%Vj~30P+^S2Lb}A zO~R1u-dC9&h8{Wx%R7XrB^e`J5D*7~1p~Dp1&GEja)b*uXy_E+zTBlPok)E|&Qv$8MXMO#ncd4k%B* zF@tTn7+G(`SDmnyFnXcZjD4q1B5`csm z?yVBiG2mn9keiGEfL1WEYI#O*FeqVK`qeejBG|1*e5}ZFAY{_SUi|^SYLQTzyhAqb;V_9-4aJ`D>UW z3N#^5l-(S95DHtrt}j!sk$}<;ohiQ)#`eG(!j>H%%zIuk)n@1cvW>{&hEoWl>T9_=l_dAHgqBs%7`wDAmsc9;{`AuS#ZS z0H9K9urE(PtPv3ygykc@WcV>^Lu&`I{w}PRQaXD2C19CV?9itr2k{8S%T$noZJ=FpM?0BfAb zwE(|y&Vp=!8BB_r2K@}*b{!!@FA$(Q3C{n^%Qou1fx#nF03;gC`B~Y8+eUh1v5D2( z&|Eof0DvrKWN_UkxdUN>>(Mi9TwXto$RQ3t#YnR1VP(VTQ{r8YnII^Kq=qV0(skz7 zpL*=iZz;u7bx0us_$=*F@?dthhN9%A*>(rBHGjyFGY)kU_3$kv`YYXwc&QM1GIDuL z5Y_Nv90Y`FWv+aj7@{!~x1yDLE0C_VFoU)vcOVR3w$*?9tE4=`Y^o9+IhUMw2X!+eQpq1(q*2Hus_>eho2Uc z06^V`i8tuazg|Q6hW*y|y8R|bRy&Mw5W?FUwKzG=4AVOex#`(<<*C)e-)EGB!I~Lv+E-?@ZN_@mmZIA4|MUalEd&Fg?_z`B{RR4?2=h2tq zZXT~3mbeI*)4nP&UF^an+11$;jgDAYq(23OzLo?4v`8Ww93^1b^4t!bLyGvi=v8=u z($S&1=-fRBR0%=&6N3}64Rl7xeV?-)Y6X5|umZ2FdCV`;4leQ`2m>!HOqKEp0Pw8i z%D&qpvlhC`<9#dPZvH?M8Ho9k8@287PhLu#m!XG~S!ebNg0lL6wEA+kMTOTpt`spnLdKjgSy352` zro%c3^19y)$95euAK0Z%yn$~IGfBRa$C2!w0D$I`PD7e^w<3D-@GQWB&Ed-|PXcrI z>MJGcZ$17L%}D+618%Iz0U$R`V@?X3rj}J`I~~~Dxm7OaIq@jNaKv`a+6J2*gDP3s zk2_fupjksWSoJFUv2H;f&i+j*{S=MnqYHw#_`aAY@*XB}vDXBK&Pi5V>8u9fxK-UZ zpg~C#NQ*eT1*(g#l@|wuDxic>>5JoUbCs{*KL0*J@IJ^0oHnl*UM zm9HxN7X}Eb#_%6|SJR`mc7|CU%}?lGm_Kp1R_``jZ$^bhRm6v6K6?dNwQr|2P!)kI z6%h0yipos_h>s##gj6AoP>{wfSY$ONQKDoLX=YhzHszQZus!EJ#+c@oFekH}jO}yY z_q-p^`#d0wW^`e~Yebfo(CEvuF<|IEULYCfD%B4O$}b^U_!exwbni z$W^)lU^FJwcVwV?d^6jIIABu4nQA`{a~LiWE05)QdX`O*O*7Dk=&%8<4R?u-T;XE-d4b&UlMs6sk|liRj5!Z1>w7(i7GnYs{sk1zG>j zdzb}~tdo4InLfv1QodyhoAP*7k!?Ev*I>;^na|pv9FY#GlS7EY*eUaJ=lVLKZyhA z)UCdi3m2~@QocV*sRV@G3xJ~gH|fGGg7)3BDTvNyj_zgR5q{2MHzvJv^o zZy-EH>oNm;A?7;rRzCi~jK5y1^cD&SAKGQ?KTP-eow2ZcZ~)nXcykkZ*v8r6&ZKora0Ue2^iC5QN@GyXXh23iD?fUUka;2vf|F!2zmMmF zq7GCBKz34St?!4E&Ur!Vaa`C}Od^N3qn++oZDF10e`sv*rNUl6?wpUO$)W z0)ouZ9!6^*7!5r~CDMU8Qu^t3)CQ(*wfE=4SCdRzoil(<0JX2le`W$xU@#on@dYvq zc~!Q-4F@ucv{qVMPpLn&^M4Gxr#vh!kHQyLI9>^itg^0$cZx&BtQ+TOnHG?#Ak1V*53!{ zLJ)o@TPP{PW9;KIEPC_#)6)9y&d$z$_3!7@hPK!1b?j~J!vXa02rw=PE7CTsmUgr! zH8+gbwwb|*GUsD&0Zl9uiBlpSn2~sP=`w-2dxzVI>toE}G^qu-at_W*=Nl9UAdhT0 z0Pkkl&|lpK_mfFByTb%?l;(eOxitR|=Vz<+>gUfLUu^Be0W<|x?N`QH-K~Z&*zO)4 z+*8&3EoMr#j>z185nu-x4Gw!r#M+*UF|&udZ4PI|prOu~H`C&2zySnhvYWY~m2V+! zr)}3}*f2;ZTMBqRk$A2-Z~KoE!i!`7x9{)HPVepi^wp2w9hL*g)?I#~*eYa`!>y{f zXyNwResFJA%R>NIhdXVbXnO}3&2lNd04XmvS|}5gfOOhtP`G2mrg4+E1C%AWG1&p| zG$HNs%$@^?uff0o4q=Vd$W|5&OcZde6Flh6r`z)f^ItlE7ytOpVL5<)$rUWhT}hO} zTlsJ#XY5xmoDr>@E?^z*refOxa5Vr%)1ds8e|ATjzNG{Eu18}(6>m|b@2jIgFEN( z)OAvvNdpc7B>=U?9%aM)bDIue@K6P0gxaJa^*T*a6!Xg^HaoLkB|T}CrbQvh9O?Xy z(fyD_|hmm^i7QDbA;^L}@OMV?lUM51N;5Qp9e_WlRf28ht^C z;X+}|@S?|?MGi+QsCP5tlV-Kk-{{N;f;07uedvn??p zUr64RSn1YEjd~d~fcgE2urlm|gML~Wcr;Cst+WLOxf?2iGF9{)DWcmdjD{76MajZy z2-)Qi7l(MVSIl1Jc$gB`J=2;HYA5d_kw`AtSq9LF_HE`BgS2_C$sJ{paJS_qS&T`#<~H-w(|JLCu9+x6%Quo~>Ojd|@Fs3P*T=M~bGaCNasWERUs^tc zmWIEyd~Evf-o3xQJ3o75|7U+aI0uj_TkGI5Q#ZM;)*>7k*98EWPic~Hq|5**8zWf( z!@8nDe<-X>Th&TFhZAt;V=tkrpiLkc4HP&aSB+qBK6kU0ZuYI*s~wF>01919S`8(% z1GW*l8suI>rb<%>>R6aFQJeW#1qLha)x+FVkZ-(pE-zodR)PMX-ha3|$GN`x^T+|5 zzWU4aLvsN9)M62!2;ko)#72A#=wi<`))6ka0Ta^uU`#^ND$J6pI2I9IX^1+hlqM7y z4d?(kGLxWN{gYM-X$4IPz_>UUEz_sG0;>SDfE9{5P@=E}(VA~1vgyerRX*iVFbHa; z9;@Z!b$M_3w|C3+{rR)ghpHc8z4+na96-F~x8?v8K((MiVzy=!^7wFOp}ih!`tI#A#!sHV!t>H_<*;TxXYP!T zvc1AW9v2lMu@Zqf>ZYDP;AffDaNnnQ@0Yf}jQ5|d!9MVM_VQ2P9hw7(bgl8QBLS$Z zRY*!uP!lVqk>^6u3-Wc9nkR(vcqrGp=?;{4`;tTIX2y5`W(eMMiK{(rPox*x%Yocs zUV8aS;rYWrBy*h*e1L&H;FO)|6OK zLL!@MlT=JVezJD-NXuuz0*dw#aUwOZ=yapL%z#=$w+f>{u6k}?`@>JUJ(v|@fO%=2 zGB52aK90NsZZ*^Ii&EErKA*)mhKP`5Ts)P2}J}X1gS+pO1f+J-S6{0zkQzl=kDyBIp>}^ckY}y zpO5Ngn&d^jzFsNCM_26ma`%1UD`7hfiQrjTKcF&rnHrJ2;pt7>p~hihBrmMh_896h z5`k$z8a5K%-9voyZ=;>estYn^6uqfHwOFdN>%zkR(9UxE?Vwr;kH@n;)%(BnOSRQb zEV}w`T|4Gtug`_Gd`%WH`;X$G{{|rNvqEtKU_wYFNa0gwr!p@d^y1dGkWMHFwzQQb zLD}n+GcW$aNZqPN%d?=+nX+yi`X7+k7rT!B;}4tM3=KmbU=VZ;Y4tl(HyWKgV!{}T z;@;e0njMW!pf7!YFvdjErgt+ejoRQhIfs0#J(GkQVdPjO9xgH4`Xtq4G)RI0rp}Sg z;H;@H`^#0*EMJ;Te&qhh{k0%A9^5KihUE3VzLzh*9KDL?{vL)koJ_FR_?v{`6dq(jzyEj7)UB?43f}Sdr#2uR%x$stX^PtlAF)WmPWH zkKvY(gh-OZ+*H^7ksWyI;SNS zqxXFC{l#>hSxDyOME}|OVN#j9BX$JDv1>J|%e5Ag8zVXM$-WeC2ms7QI-XJgL9q4qs3|wuCgn)~uQ$j{6|A`(lPz?c>mV_K6G0p3PnR3Ax9|S%EWpnd zml}iQzXE2RA=;{!%cJa1uDV!Q=l|_*;De!|HfM-4F(~{!A^9%+V2?8qeaDSEHM1$c zZ`#N6dQqvmgR4KWl;xwCtcu->0iG_-5AC7490Wri_g@dSO4|O(v%Z)P;W@_~F6y^p zj}Ox2#KYxW){ga;A;`x?GL-$Cf04b& z_?|w)2mVF7T;DtA6NeZryxDsanvfvrpE7M!h_MXWJs3(KDjHVB;A-+cZ$S~w1$89R z>y_$tBKtmu}F33e6h>SzSXsW+krN$`iV1JZ)w}}>(_?M z@UN*#=mWOxSfQisc}3Rolhs&!KUy5oY-18-*8iT}h$)lt5TY!ivH1l?k+O!y&+H3?5arY2P7iB!;LS^XtCP!E-sO#wLAb7iq8h@)&9z$pWSLqC?E$ zrRiHB?`iS-FDrjs;HwvJzu%Fk33}QzZ}yDa42F;UlPB;(EKpmH;wb% zICmt;H`s=%Jl}d5iF4m7e_%oPFs=uP=)4kLL}YO5GPaE|Wa& z;$xO0D5`DJO!ME_X%Dng18PnI58T;&-h7T~%QbB)ZyveH?4Wg*tQt+VMs{?5ri zaD`BRmDqWWAMXE={oz|C>DxanH#BMBy72&GB8X=ufeyLpSB3QbMB15x-FeI(HLGQo~l zJAzF;f4=JWnU#G($u&3MCv^YEhN0(k@irqaoIvbP{8PxXwT1hYr-iJ6A9) zI}ZXvqCdS1y(79cViTNA{e-MlLWwI{q5RSWz1C5o6oYTYvet?j{6X z__6w7U#z+RTlQac!Y68HkNf2&SKDQ(s~Xb%Aq$V~tHa(oiN!U-YFRQqjYQQ1a^))T zP|jM*iF!yX9;?eIejA$6C}*d5gn6GjoEIV^mw~^ua5jQN?LNC|sJF(^tcc!#aJ;Ic z2PthGx)(k$wj?QvHl6X4rwRtQd)lA5bQnhr(V=|6ts+a&d${68s@u+`9Eh~LG-ns@ z66#rm{q$Pe3;S7;ku~dIhpu5;z6t?lu5XFJ$Ha%8iH3o90z{&^m@0i*A@Qcsyr06O zfA&XQZCZBSa3&CuAPg28uJn_C_aL+MzO|WX#xKX9M8ToExoLCi16e{*g_ib3p*8C> zWgWZh*r{u6c3ihV^839fCo-)A`p5?aBuHjZ+et8i9^%WBk1r46R;e0cCO+>5dj-CJ z_*=}F&^f*yea{xA?RnJ}Y3f0Fhm_mB=V)wgyVIK)pjRUALM+Qlx8?KAch%br){EVo zdV9dcj3A=)J1QX%?TS(q6f1 zJEst6Jrj1OFdcGSsR+qu8l|_@G~CU3>bX{je|-XcggA0DR~S+F@F>5R<0(Apwe1t!ab+!ON~75k8=-@w*kNtk-1! zT0hAyM%;%5{%#?S(yPm?e8;q)LFWr^KIa0HV8!J&<(`QC{-e)%;&Zk{wGo?b_xsnr z{t}qXuy2}qsBG~d>%4m)dAl57q{a9^w7QlxgHD&@YyI!{>K&xvFobvsGsxiV@yYK1 zbc*ZAKgv~Civ}Sp^v(>u*UIw`G6AyiVgTo@EQaNsaUS*~cPJLy7hlt(b~ftE@bSPd zqUio$T{C1}@OFT;QslXG?Xt0K4KtX=$936^phxL;>Wh=TKh-KT)2m|nHo;tCoq)=C z{j90%0*-sw%8WVQG)%rqaoJ|r*mv48%pT{J!S!mSR&+m_*LD##qF|j9?tU+$bR(`9 zLmMt4T6C{T!33(XZeO{R_$FsCdt%zU{>GCx2sv4+o!yavj)3n+hq0fX6c$XK%A7mF z+4)M8OEk7aI{}9$XrNPcUoHPb7;N<0w9kfEzME%3&i7t`9^MQ&gcA03k5(7|OWQ_M z=0{Y77$`dSUs&JQn)-fxs2QSp^lGVDx2iatVd1SqjXdV?biUdi(tc%W0NhB$GsDmL z*V*no9&a3Tmo_bA+}Gdx+rM(=nzmBMb|ow=Z~;LXgWl@Kiz zsHD>Ue&@YqsjWxeTkpNx$|-~T>?RxQM5F>S!OXz&^yOPcNn+4oRCJ$EUwOCvEUMe< zxsImKqn5F+yfSzSt?*`iHbJCu3B|is9BYW*3xdd34n5{{1|r)e8EL-rRcCer!C{BT z2M4bT*;%N9#$J?3vg7Y+H9jY^KTXIZe@hHxPSQ$$(R=zX<@=}=XiCg%-j=JWlthk@ z{UPi@A4%?Q9mVbKZC0A}nmKmHHLymn{*^u?yf0$(TJrKV6UOc<8n)IvDda;vd8X44 z(#Gd^w#7ax0&l?VZOmBrLXo$a_s#>`Hx0$d!trGJ)(s&K)4mb*BYe-c#NO`h5uX?| zpxwf}ZwcVN8R}8k7P(IW?lr$%*Y@B6_Es0S3U_Jr$W}``m4hz%q^=IVPSKa_LkV39 z{*J~VU*$G+OEm8dN295r+N;QFQmr<1ZNk#PqvH&A>wB0dMNoJLi;BYHmaQk;gFL#H zH9C8wn@%37;O(rnH@P3k!rOvS--!rg&@bF=!1aH&7bpPG=z-+k%hz~F)>Z!a;T=}P z!+*o5zkdaJCK<0L`>lvf3q#j?&4iaNS(Kho&KL1u zix;i+P#d3EFf-X-^c2txp{$P22-ZLP?c&RbC#-cMI19kkFW+GxK?HswC|&EDpQ)v` zZWjykCch25O^2SDjTOsiOPKyhL)c7}7ixk&PNA@V=9Wn>D(Z0Y6sC7G{7Fh4eIN4 z?_OTGXyPU&p`&s`J$t*yOdNyXRG*O{B_p}pf9Dm?$PX7u?cz8|2P6;TnOI~zrKp|` z(F^KXd=}+<-w7Dyx#HWM)det;)Jjv0&7N$uoomL2^5+>?S3Qj5V{ zrOOc_byk>{d@8pC5(YN5T>q^2srQq?6PrZlA7?GTQtW*kC$vcUx%m9?zD6 zk~lf*6PiMCdZWl7G(~pIpc1VwvGP=>mA2OD`>hXA_d!g-5rQe60S`)`%g^mCHU`B*W zEw>vAt!sVSSNM_s69)hqPnw9m6d(;Ak8EidtXi#(Ap2Oo0=p-%3#9H_L|WR`_l{ zGBeARcZ^<2eX~9&w3u`Ayf0^_xcqi3Stmk1zH(N|(?pl>gVLgl!|A=D=?m{pQux)c z&JY!64KSx}Y}T)UVSOhUJbU$&N+YZ0>V`TJk3>JdOjXVX&ypaEHBa$ldSOewA)(=! zX6D6poXnVB*NPJG+e`2Vstj?66!0tF*F^(#+SqqHQXY}aZ$)28CYNIBsrHsw64_8c z8yLd0-U3r`&vB$^x7aPO_ot9Hlenb)^-qh|f1hd-7g#yCBGLX!`OYio znXvOzJyP^6A(xno`OK=SDBYFp+%cR2S}K%4o`-9Fa6>0hi@j9=5nCHFNBS}UG9 zw_4Eb5xBc`HV{5EW#RDQ1`%i(vjG@7qNsF{(RZX-K~<6E71L+Oy;q#AlXL4cHn&PX z<{sNV$T-+4mZwV-zNF9czPbL;+|~ISiidr4$^P#V_%@T7%I@4;m-fJR~9_ z%{3{_+r~m`?MHZHWDN0-PA;+$U#F8^gScTgBSY8iCubQXudes^MLEtaI?n2I||}?cEPNq>YyG;`imI ztVS6~1$_>#F)I`jefDcr(_~hZyUVIrC63~SoT?aKCC!e%s}G!MT$|);!j-_d1%bp1 zD1!21k|gQx{1=`w+FZG}OAlN8?i^fRF4Yxwx<~!|Sx<->__Dc)88ay2uD?lbfn4j- z+N{**D!+YAxS0LL2R1!DBOeSShWyKWIh_M0Dn&1p0KY|6@9{@odG`&OWO3u2d>f2< z+bua|5uc&B5@+!|q52eth1s!$eTPows!|+8?uQEO6*W4YeF#a3y6iRK0^>a3kH(_y zgBfb8n_qLZJ$;Up@AZ?kFG%c{PZ*`h_rhtK-km*uR(k!LUV3`GEBzvkkMLv? z(c?9lJnOpi%|EmIH~7R+OwO=O2&B2F>ZVnKwz1mBvVPuul7#Cx_<&JyR)c1g+UE+2 z9Lb~5cV0Jxilm)CXe_?qt#Ex0{y~#L)xVG&0_Yz1F`EgWx43Tb#+#fsBMb$CYj>;n zxdX=L)Z2_L9llXipB!l{E>UTAi-A|gau zN`2gXU6yfHvDdq)vtROPx;>?r3*HGiGgqM7`Nn@z|IX>h+wT_6yTXtMAg`f-{+jkL<*B40|0eWH(G!d@$Tmu9ra{L=W^ifRcQoEzA*SnO5@6#)RKvKm zA(Qijr;*o`Rk^}}s(9Ixk11ut3}@1Afe`58^u#YgiII=RxqbtRXo}~{M}#R*)SrWk zg$hSqOY!~YEN@U2R#Bo*3}@iw0+mppD4?^Le$^{&`n z4wI66azU~{`E2S&z=u8_*htV8J*xZs+dYoDPhMBuX>bv#Mk-~>=x(N!xD?i2dCRyE zk6*&mv`#H4q+_lN6TjNEX6+>PB=odJDA8SUu6aTj{78W5oW8WRgEAJuECTI&;_CkF zUIxKwR-WVBUOm(c@sD}5=BYFOl}&Wolel3U(%duc`0zt-oxQHBzXK!H=Qn|kI3Jm8 z7)$Xgo9nRQ#G0q*uv%mC51rZ~EMnc7QOo)`Dq@s{(-4{xbsi%5HyThD z%m0I0nhd4nwb9j22DZ(Sji+=i&W1O4jhwlEs5yGX8RE3Yt5?!&Nbam*n4>IVvdUC)3;xiKK=_t(=|NJ7Liv z-q-hU6mBu$_g0wfG^}_lbAYEnEeP*?wRUl<&z1=TXcN$Ci!5)<8=wn{Rb?26uzCYLi{c3D)@t-wpUoa ze}QuZ<-*RZ2Q=2y^N?o}_ z5D&P9oL1>jT%7TjpAc z267e*13n^D)k|onEQG6-@oy?wz5Kf#)1d&B(X0u{3k~+u@fY5zIJDc$pHWQMN8G?7 z4WS3NM44gA=E3a9&0Tjo=IcRyvhU)UA=VAerUA?8NmmE9tm9JtW2?8=NNeAaS9tlx z7cEx$Q1pl2zCpFL%G(fpeNVwdUDvvFOFw_9F6}X<0Pxc|zr}8m--Wrqzjb$LGnRk2^MgfPZXVFhZ;==G@EC z2-<9cSym%^yByT?_C5~?(Ws7Ut>>-K67yi-x?szq#E!omF5*t4M*1$=`B1Hw5OKJV zyPg!Rwki5-;UII?PJZ^czTR&!hGRn)QfggaE5kikf14He!JIYt3F`+tO)Ou=zLrbP zf6Y@jmOrNa+h3Dw%wJwrEO&&l#Q5{?FHb)knwG>6Mj{l6?_`BZ28`G|*KCvhJp8@g z=_>aLeWdx@v#ZY2qmI1NUH&Q1>)B57wLKJ88=?e)Bn1n6aSm-KDO1?V4&v&mx zaEXlTM|CP4ZH}B;bOxRqESl|1tI7qH-$5jp;gf()FZ1gWHt=TtodA~N`|ENm#F}G) zn$(ohml$*1sSqq?Xl$%(Br2-=Ew_zmt;XGBE*lgSRW^)`^pRJ*r-vDfCInMh`jJ{eSPJ!dI{}IZh^6X^Vhelf2*C%6iJn>o)_wM% zQt}{;m6)pq))lex*0l>s@*%9R-0dDX(%Otl4%S8a3S0DwYtsR-jZ`#i-;*RF%Gj2T zHL6({pTZu+NGPb|Lm>)G)#yKL9yc_}N-r&QuzqPR)(Vk!8UeOM_cL_1@|SFI;9O#R-0Mo_Mi(80HS76B44921;gNo zoo>l$`6sR$?!=UG#8o;>q|$gcm*Zvf%Yhnj#l&=-A1|3dG0Q$VqELh(3WF$VIKdHn zS5U{ZySi+crUXy^G0C`EV0*#IGgek~JyM{=?#{Ar@o>R68VC4>9ZiLhflmB54hW?= z{9y9&bm!h@U+cFwoIlj)MQ3Q{oyc!rCT_zPm#=jMM4I>MnaEA?YKM3U{)W_bR463^ zH`>ZhJfyv+Ks$58w-3~cn#b>zv2xbed@=-syB-STM2KE6YO{ZqpM!0#8c5+(1}U03 z9)p$7><)XDLJi>`zcF~oC$F=c3ympgM=V~Fn~zi8B_q7k^HoOiWgj}<&0(4__fkXmje32^HiK+Zss^}7=s7EMptzCn+M zEAgrF`V$;C*zYdODkQF3=-@ZkM{gn%`H?%X+}0Fwtwf1vK!4hJecCeF$qwI11M3sQ*=k zmK`hm$Ii6KOL#kVljbJgI<_YyAxDQ77!m+ez%jHLC};r0^4w8zw7)}d_;adRG=2V| zasw4{<^G*7WyVnwh#sdd!FOzj3I!^+p{%F7J`6fv4)$_>Z!^{n+ z9*g#&h)O38-eYcpSL$8T)eAgs2#4|_1Zf08MGeJ95F;sWwTf2X(Q};&%#RE0-yo`v zCEFdyIXZf8kQaTHD{v}$7u7G(N&^u4r>*D~_VoGfP)bk>LvGd`{t0-pbkLxiu4h^~F$P zB$lqZEQ^W5rB*mYlVr7cuw6Qk{DR(HoD#V|J?^iKB3uCbXqqM@N zz_O%|A#ZC+E2+Gp zXPRKn#}r@Ztd?L zKdhnj(PIDp_V{?p%eSfB-c_7obK=c9uY~Gf|F*20hmY4|hCR)v=UP??G>~Rqw~@SL zCzmT6*Ln7N-EcBw``7p(kl&niw_(9pqvDHNMZ=Gl-Hey7#($|otSVofICz`I=z7Ma zpPcyYhJS}}tpphmu2g_^wjM<&LUzKHS_*vN5rTp3?u{|`mkyuDH>yM(JC`5)ZcP4} z!ojWXsH_gyi4fI~@b#Yum_*h>@@t+kn926s(i`df!L;w<6r2G#pxTX8kml166JBy! z97uuX)yUKkBJ-pkf{;9Tpyzb?-2P2rKiBP1N)BAeG9yMC?}wX>tcY9-HwDDP$pI;| z%q%u?Ds(kwDn35+M8htav}*d2l&6qd#W{sqePMT;4G0qM|O}Nls1IycYd>Mq<8&jv}tmY za<)xI?MThh5@}A1ZiHB-!;ZV8sJ>HDW`XiodrzinrkIGOf0wNjE$B@VKX(yOBr;I% zuveh;{ZQ^5BO0oKshaY@10rUD9s{aYeCFFZb7iWh8?V?-Halg^yJ-2r=%gk2wZ-37 zp{Px);4e}iTw`g3>NRmri*=B*V{2feP^^@16j5(pa29;zs7}R$_oUYT@p0 z57aOXemv_(=}4ZRLfO49M+>XPGP``@9$eAkKAGXK6~N_h6lC%aYrY1bUfiFS&R2df z8vhjXPZBskc<<2+)&q^bQ~>JHNmIj?QO`D$JPJN0+d||6I4~D z^WZ>7l9AgXRC*}lE1C}GAGzz20L)rs-^DUM0G37p%iUQ>$X>ScgYJJhShj#dMiHPF zbdCF4+GJx8i3gnH@vUS-O33tnNcEOK{|X#IZci0$2|<3Y#>)$T2tq&N)zV;pwYm+i zb(#Ki0&5{Rp_YAFq&I-xs*^Huy0W~Hh9P{)g`t)SSV6(F8>f#DFpimBm73T6S68kc za;;>)vF{V|hXElin2t3{!p{Vf>cSsjU!<_Eo8MdUe`9gvAGQD&&pT8U{;?o3H94SP znlZm(dgZZwe^mefr?YLY0~{p=r8*x;wAIzF`&Zzlxh4hjz;AV;pP+!3Q; ztUp|I(bmKxM~0lu;Z*!6?>O+N7{ZI%{le-c%pq~FWt-_2^3viBY!=304=i2U?n{=8 zZh>!$l#u7k*jG$PhZcb@QXS9-xav0*8SSKT)T4ue9qQkd2lZX3w4)`>yMFUKp-lhj zVtn#Eo>mqlrAqeelJ3>7b-5VhFJcd@e5qaolo>n63%kcq1$?!%l{ZCpu#ku6r#P2D zFNe50+V+y-S~w8adSG`ENHOe<-}IQ}4}4C3aO@dF*|*o3n308KCInZpcA z1k0QS{0qcBGUdME2{m zq!_7CMwIoNy^o^=4OrZ!`y!5rIpSjy5iM$5WQ#dz09H&m?VM0Y*lc%haXT{qJNA6> zdmCJ>19)822vN}b&>!F3A!^meFt2tqi?mDZQ*#_cIp)=sq1GV%-HsKR+bMH^`M-Aj zWUOU%6(ubyITb96WmBWJB|h#aCCZdxQ2ZZpNS1Q!D8MsW4aPw8xE9_#nv^Ab`FbNJ!DF!Y56 zu#qJWzlWq1dCertdc;&`qj((pt;_n>A_pIm*Mex!`9UUZ&JZ%Y%|s8$^TB?g8zvw% z7d>V}7{WPxFY!enbGc*)*p)c8vI8qCGLgbr1T;~ycOW##mAg1SkqHK_8XtrSAA@re zpm2u-I{2AE25k$;?Ui1jJ%Vs&Iqr}CVQ-+|C!$5FUm$~EI4;E}2tU#AwlKqbY-!^z zQsUxJQGAkv4|uv&vA3d`P|ISkJ6M(jpzSe-N(6KNLf&I_1a?#)8IcY$oMALb8A=hK zE$2L{cnKkKI@9y6FM5@Ha6HRQYD)=H0`w$+WZ}~Fxk%$rB75$#C@8v2Njw%RGN$%3 zppivK(L>7W$O~x{v+E$w#?`4uJt$uDh7h^(`!zu+knOj%_4%F+wQ>DiSmBd#9#XWx zMM#V?*iBwgsD)HRuHJdQZb^vdAAat_`sZIrjJ4cxZa&a7gnnpLGJ#zm0*J&n!~O}Md@RM^|1^k-49~@OztDUL$vAUAF3=B45O2S~ z@wVbN%+NE$1xx6EkscB2ZXaX$2t?TU`0|M$IMA`A0pmh=c9BIf#y*P{YLwHs@(pF_dp6F)`}j_lwsYWBEYWOXVSIgphA- z^=eWeF0$w*R@LzX&NjBZWfttwNy;&>H&k=B$e)7?v@$HL8@^J_MkRiHx~$fabxcv0g2|y4k$mR`J0~8~vwti(0x@=Rb0B zzK;;uVb|dTSsZ@!Z5v-%zE1(}VEqYcd6GMQ*gG|PWYH#;df-!V5XWdS(5=;o8!Il; zevA$Av)=z_zW>eF#(gwm^~r|PLkRLc{D>STvFUc_HPig}ZRF|~1^OCVd>;ZAw?Kg` z+;l*=AoWA#VSeOq`n)?NQ#*KA-q@HJ{s}nGY~5Kd@AdF5qND}+1G&d!7jO>Zuys@C zgw2lk8yE&xaT6iO&!RhnN*0*=;!jd_L4HP=ud^5@F|UMm{o>As{`f!YH$rRIsRk7^ zfr>9K?h6^TBQs&PcpRsVW`%DJzwFiYo&?Hn|IPKcjODNEKYv{CS=;W&bt@!5K%fYq z#i6$({E7Ust(M)Ur`iSvv?r+&JI2ZnI`!-;>~7|T|Gx6Vbi;HJqNN8?Y18y#AL zbG9h>VMrkvv@TAAzh=@PZ*@><_iRLtJ;nMSF<={5?z|aGYXqs>hU_}``?M;2Jvw54 zm1^l_aw3U+|E_-^(k4cxDg)~RHOz>60+mAd~V-b3C7PcX^b!?vw zSxAhPo=(Llu=^|X)TxK6 zTvK7>TV&C!RtR{=YPVHs-at^kQKdqae487@hKdL5{}&ig8z;e56X4G> z5mII9-;L2*C_be2;AaYM2p$sZ$I)%5g1awDp%5MtW@3Q1CxX!z;3XtR#*R#AZM}YM ziF=Hl_ExMiDndqYf_pnrx_}QERSP*J*P%tFTl{hVU0Vor!0Aiyl9u@%F^(@ian5f= z36c+X;yRAxar5U07fk=&qQVJl<~{e+I7on=je`!SEV}=$s9ukxCN-?E#ncUQxC&3Mu`OwN3@n2UdAs>CVl0!wiFGZcAlrK6Pqt?a z^}}Q@oOeBK&cC2jg#-pDphhVdtnl2*fPG&f{U10U${A;<`hxwmr#irQ?6$!RS}+8S z{;?UC-ayRp271PWwcZUhA77u63g(lHru-;`uNdg?NPY8P#H*I3xC4#-q*1{n$vXuG z-@I=waew94!L31wMK>SXiO0kt!v{&1n+N+NsiQg7xJ-@FVhF`fPI z4+Cd;)OfR!*Uqzd53|{=U5gKRDE4$AwX{mM?D>Y5TW?@2APCgXdVRJ(*?U+}q6;XE zH8O%D=E}Bf>dDR#``V~_CmjHP9k~f(nVfkbLd&k}i4mcnj8r_Tq zKXw!_Pelt*kU8Njw zQC|8fl4Lrxb16~O)g3V+|sW@rgY+7!T}>OxTgXTIoBaInK6J}2ms#(EU{xo zZpOlop(04W8Wk8_Sh_SqgJ3+wsItHL6t!5Nm%A9SxfRV1o#-6?5egF#2LCj8SWEbe zZ_T^|i7~fY3Eg}?EoH+9+(dZL|5c1eOW!x;5!Vd z5}=|L;P7TOl~@96^2L&fQh#17{)Xe{HesAZ0?={LrS^iOZIY25$kW=mQ|#TAhM>3q zz3hM!SkeQ&Rh#KYyg*M@sLO=;lNHW3UQp0d`8h`+$FrYa3K<%hl7PAWa%dM zpxO3b+{VRXs=edzp-}(`Mi;MWoCm|wfAjtLbJ#`z*mocyJQ3wj$~umTS&(CpJ$0kQ zqkcEO<$+aSH%JiCb4VhIKFLThlUu_kAh5InaD~;Mx{hXo2d_Q-z+N;3z8j#7qkRS% zepR`CzuygE^gVRdj8(l&j@Hrr0^zX4l_tD~AW#NgALA%a3TM6XRs zG&eREDY$>)$%5y6rIxHna}6E2Fnib2_2nDKK%_XVyzGshWPz7~ zF$#)I?`@#q^f2=E{UN7?gK+#(Tjv~eQ9)ARMo)o^gi_aOpQW;Z{4(1P8K?GD@Dzd) zly_C5ivG<8Jp95(;`pLeBWkjvtdw_j%1-{~^g4))5ra$DRqDP=qnCUZmV02ZK$Emh zA7yd7N95$m_ItnpP?W17n(@l>l%M421kV1&zev;sKsdsZg}{*&gNfAwXQW)O&r_a- zs&9P?xw8icgKC^2VK_vsRHE`AnLKw0C^h+4Pu!u34K{<15`uCyzDblqVfiThtl(HH zV5fVA_Z@z_L+fO%xBAMh7ff*P%gc6I}85cRg?5* zf8QT4a`eWRI}*iWN98;3Y;F}demudg|NKH~`|=>Dg)+m-^}rvZB@(C?9t5aQad)N8 zJh8$;nKuRZOuh}s0hUB!ye`I2{H=~dYp1TZO}EEonmZtjq?I;QeDjhvHqr3x{(e3I z(&jZBuu2$Py>9U|+?6h)0e^i!XDmxpxWZ|i+buVX_cjzj35S8vjN{%xPVM}N9Dv7l@Y7BN{uy(&+*R=t0+S#W=zAwcQ9X|R@} zj~e5lw5<7El{bQ$_L})8O{b^Vy+_)P5W-?&pP@2 zEyVDiKvwOMWQ1B1#01)H>Hv^7QxE+=aiEaoYtY}j*zEV2K4@bW)WrlqZn<6>6&x#M z!*j%H6oz;%K`n7a7VNU@HCiw6X8nsA@3U8v8)C_@L_Z(tFMN@y&!Gn)QmM2*4?2^m zFDk***MzAHwt*qIqGZ7E0&9uokmI6XtF<&nKRAe9K0_F`cImi1p~ z*vL>hfMO%l+wu6c#!MfDd{r+6e)Jp^rbL+7`}K*MBE1-!8_rq5S9~IRQ-~uns{El+n5^^p1p)YEp=O3c(8t3S+!WDARoAvYGlwbn!eQ&bFt=|~ zkYFi_d{Vr62L7zo_izLFK?S6XFbl$7rR9RPIQ+O;RtYCvgrT9N!lg;IG}i^hM1^^Q z{o1wU!167-ShTj0A+nodB*$@kw|4GN$ z8Sgm};DxfQAdfLq`M%_K3an;}U7CAsb*zBKl&}09d;*i8Bc|%Sbv_gX+hYa$rili3 z;Wt#Kk>`A(Qw}>j*#SawD6S;zMb52%isTz2tyYX5#c57*Y!dN zO0qW{Y6a?XN$A}ibzlviWz0b4 z@%(cS>Aa8@B0xRXq8CaVi`BVED8@Pv-_3!&KOzIh+^^4IRd8`s^alxwEmvWlU!;C= zJOm;YD-`gvPgN@UN9>=WiN=2-eyC01>IXD~medrw)0S96i|C=@=|mmdod=o`kfDbj zpo8gQMYIPI`PG}MZJYNQ!z?u~7vQKmEolmyC0e>~pT^eocP}<}#?Jp`4k0Q5&0q*m zxq-)1`ISgU=Ac~l+gt#i(X)RCq})?fXmLai8TW@Gk2g0=F1J6}%`k$DXqY9#7w((v zk!Lr;l~g=bN7%n}xk6F=#m>s$%-bFoufA1gmp+etvB`?;V>e!Zf`QH*-{s*J%gG*U z>{diN0b}vpIZ0DoX2CXabK)eSwZ<&u7Ay_>-!5)rb%_-V@v0j-OtMtR-|CxNK&2UK zRm-=85qkW`R@#k$j-i3l%)o^1wMm}<-qE|aRjIC@3Dp>HS`Wp&Y_BD%co3yGF7#Ai z$)R<->#p9Rm~m%u^>xeG;~R~~kK z_X~d`F)n5q5OVTw@?w~I!vKBy;NG>42LXqQd*Y8P_d%{lf8{CAqu(zV+#%=)8At|8 zA%nf5tYl&< z6`NrW4X95av8Yiv|JC$4fV-07Jt1oR4IYO{$TXc(wirhJK}?^*VHeLxMjH|G>$urv zGjMy^_VcPn-(Aj6KIoZ$@}4U}*Frm{I@qW)r2UH>w-=}~d`mjy^6K$Ku+UN4A;E>F zN7p2l0y=sVm!JF9TO-9zG`%nza{8x6cmuzn=0)IrR=zS=B9}My$C=^BVwn3&&D2)- zqxbIsf5}{IkN^@l%J>boDWzAsOOx%&3$?dq>J2}2sb6Wg!bx#WTod4F24cWveBM4s!{6(2# z*hj9w4YCQmd(yR9r^zx71N;I4aAtQUXbNsU35QAT;0_<8IpCv&!V8O+gPrC!HqOSs zGWWd5k4dN@xFUs&woY9!CO$Fyf;_)$E<#vdFCEv!AjZfo-IE%-I;GWO6&xzEq=1kjHM`ag!hSf`)?d#rFKv#oA;GUSHcR zg~T?wIqbhv{ea#j2-PA){(U2G7ywFshT$3S%(mt{gpQcc-*3JcI%XDF^#S4=dyWYw zd@dJFmRIRc;At_GP3HFu6pe>p5T5wll&mq3Z8s?JbYnHnX!qA{x+qMl;o9Rx(vJ&G zGT#8&P#PKu$k&JHoI7A{hl&$!s6YGoOUt7KSp2=vnKC=v2t)RE!}AQk{Q>d(UGye( zTTN|puG10Q!hf}kXFg8wC12$R`H-Mm?(>jRWytz)?5bpjCghpRVz;`}!+CMu*r=Bc zQ)|6$I2gZ)38Tv-a+Y1deIB{e z1$1G~T|=%suKVwQMdXs_r+Hm^i&tPm7qv7L9L|~~bS_ms&BX9kXHreC5hF3Sh%rj; zliIS%yZlnx5P!H|VV{qkUhu}xlC%~!srOL(AQFYX^-aoRMxlO7pt zmpTDC8<0lQK=VKIg@5r9271U(En#9Dnsca2f-Q?q7M8$H>}lmM%=;M7Kq?;lrg$u` zANEVzFla!weQ@ozW0xioQg!C*h~vXYZEC>(Wh(ks3Nagvp*&vmsnjrjW7BCDe|JvE z+;w88c-Oq!I5)O@r|G9*2rOZjkGCd?wWNr2=teicysm9XpJ=Yd~>XcfWn;WA;Kf61nWXIYet_uV3TLcA7(aJs%~QGU z=MXnS-&nQ<{^r+;0B~DX-sOG^3P)RvaSkue2Ssr;Q9K|-+@4-!@Y80`7iOGe_IH61S z3GZ_NygJ2?27lwdKETkX6v3q%#QH%j#L)cwi``4_r#Vv?(jQe=PdH+$MLcpzhZ4N7 zt$!o~|B{k9I}V2-ix7jq7b@qjx6RUzh!aSw-r09ZD?nEJ?e zb?k6K0nqF=F<)S;8rqly0I*ax?668KP}yqRny3TN9pV{-!v_xc;Q;_xCVlE|y`)Qb z9bMD`B(yE60w`7wF#rHdWOHOuTlAXMKEKK@5CDhtpunS$abV&t0bpr7^#&@{07$;G zkO1(8Ri%oIidi54%R}#|RC`{XH26XSpgGhrV}j9cA_f3pDco)ze`foI0uXf^Z7~PH zcPBOSkD0DvOE3V-2>=>XYGE>II^ujm0Wj%7qf(7MC;$LUV9Sfi&ADs^=E4G?@4D0+ zkja%0PYMBG2@QZ9R>-}%bioL4t^lO6B$h7#01aJ9L_t)eK(f_fYI}$`2Y|d8wpDsn zUNizE2mpN)mQ6m^VSf&s|2{+%)Tlpd3#wx?ar0i>q_W%|zxaXSbAIo7`!(l_VG>cHXr zk^*3MC-fdbQ3D+@004Of0D4CiD91_HytDvt(~symAd7+_hJgU&Q~&)ys2KgZ^-mB0 z-g5U2lv*$9AU zinSi9i|2&_kS!Y{R}~B6Of4e;;M@yEngB(0u^|Y6EZOp0Rip-^&?A*LO#t|tu|W61 zlq)Va1ObrY`fs`-YcP|>Z+MmhV7El_holP#J-lfEWJTh^Me0woT6(4eke&$;c>yf) zp#T76RsX(V`2~~-fPesSzUx**f?yuWiU;-AFX{kOTs-@cQox_W!cc_IO?bpnLw$f(lS^aWV*i#ke;T zuKz!MN6$?FxV|HFAmQj-08R%3un3zYx1xyEo9gZeRkWZ0aIFznMHL_(;f^2xM7iA@ z#j0TaSK|iHRRFl%H6*du#Ol^s6KwzhV)nneX4M5tO)|Q6&H}JN5XdB}J%k4UKxF+N zwk^@6RyG2U=Pdx-30GzD7iMD|_&@f}UdK^oi^3tQh=lOwL(BtAV95bV=V&AXGM=Fw zVW|KoK!ijFLZ}eNsRNKTB1L|uOW89$b4TagY4c}nukQugcGp_$wb@k#z^B<+iF32e z*4b?hz>?}oQr#Pe$lu-i+@{S1KE>3?o^ zfXhjNTQmXy`1i;EHp;}?rKPM>o6Knd#7o874L}gf9QTF+@ULv%%3i`sJuRxGQ?+y>yDf*uZ_3p9;T1OV_4Y@?Lwx5s~-1(iFy0dNN} zdK4>yaVYjUBLILuc;8oteu@fCz4br90Ek;;QlHPea#94qX&I9y6$N)_Dd=PtlW!8X#nBd>004OU-`Xkbr6YaXn<=J?#(^Et8A-Bn04WM%XwO=1V&^4*E zFLVOHtEd0K(DYvVH_F^L?`!~s*ynz4FE7^yWFB$=c;V`Q6UFPk>M;%j^Zz&oz~2T+ zJ->otIEnR+p#bobeEDjHj?pvy3-Yk{f8!ZI-+6#b6{FDL?TDoSUXkNlK!u*l(T!{j z{f}Y*rd#yc7x1w^D5;PGz{^$t`zmRa-m+mq;hGCEfa}hnzDY*VrPg;humJE%^543C zE9t#O!-mZNk8c3Pt@<2e@G;FGmi`fEhJqJ*{Hq5h^%jgGX4N?QAIktb2T1!IWc2Yy zkOnGR0pLa0p981oyT8kx`gJ;%{zo$alX$5k_bzF4O=!~Uh#UZ(p08c_ZxyY-R%EC5 z`9IScz~!XSruRU=r4`VG(H^IUf~RJ;vHfPOqp967#x9OU~$`l&}z_YTA(sDhZ`sd@nwK}H$$29=c zJqPO{)s3L(tPZ_BE)W4vnEkylVEQn9tOIqF*ZAs^_`q3Wu2Y}~# z`0t}07ykSilD}oAkp(-p0a#v0rD5Mv;k|%rvqLigJj=s>x2a-Bl$Bx1kZ5@O{ogYi z03lJ|{lUL_0lLDPz_;*H5IhC%$G4ziimneUjg2yo#@7D?20&ajqnbW22WX0u<=!4e z0C;e|?7cj0C2e5!uV3Q-_-dWN00^mKDi3r3?g1>wqa!v6fCql|Z;w$Pu%YVb(?2vT zO!6QGK%&r*guy7X!6$^bJ9q$i$mG9078x~$M*mCvcS3IxsZL`6BvNZ*a1Fo*14LTJ z#SyOs!Q-*7($ZmyHe3jTQLE#}|0xZCxaZhWwBg@e>ykhj``!_U2Z9G;cl7-DKs9X) z4Jb4|yAug@Dgz*sIbuv0FP1nZ})By)?M<~M_K=3n|daBGy}Mt6vpIH zEI?3XS!}u}u*GlySTtYWyWn3XC6g6poV72rk%xb0GXP?Hi6iUd{0zDvG1_LTi|vA7 z!EEh3Ybi5?vDUrpB;Q@~m!;xDfF?-&!p3$Xus}9em8U_|mHy+cc~<+; zq!OLh08FdM=t>{y=eU@F&dNBi?BfPqL9iI!H%GTqe@%ta#Lp*UC7O-A_h)7UxQqm} zV|4<4HUt#8GXXW)Z_yF}O9=hE>6g?@8Y}jH+@RZr(bW2!+yIDuN*!TbbYaETPML)T zS_0s{?2cX@ADk}sD}p}mGN*B2lgBpzlX!lx*0pghpvzebqh%0>s%PQ-Ah<`_Z+U7M z2Zx5q+K83^&x0`nzp~6HFo4U&A#p3}Bm3jk1vHWO1K(O0%^G;!gYGl+8z1K>FzubCuF1aAs7bd(vG<~X-tVvF+MzhIsJ_9g` z7Y3aL=o8ifKYifC3TkczNfLJWd9J0fPd;{J85ORPiz1` zS^x2v7F>)&Ct0;IcvB zl+<*EUI2J$_4DkX6t;OU9p23VcssC44wT901%Q{${vtgjb8Pxsq5%-%x}KU*NybV5 zFPZ&i8svA%{);dG-V5;5v@~=C0q|;1e{I#KYIU#dzYGJo&IPDxO%)BpLEwd=ze4LY z_bl_?`n$UUT%th1?@*F3!4F>I*{{otmTBQGL3@iZ0OGol8aIZ7$pG;D$zL*@ERWnp z=zk#wK=>^pg`ZIwK>$2=@>ggO7PFoA@i+!xn#4Zw`xIpjvjN~a#jnYX!`hTN(S6ySUu{ zCd6vzZ{fs(l2b?qf$!%$?BW0wr$3k-fI;oP4&z%} z$4P$ncKs^0ogs2Jq_z;mJ>fmNLeS z75V~TF?nC^0zYH44O0JPFFNx-v;lAnup{q#!Ha>0VO9t%L;oTzgETx>UF2VS=6`Sl zFnJs>Ejy|TmEYLNZ*HSZ(SAeM(Jus(RQdX^t0y@!qx|+seh;mBK6#OAK1kXBzy|PJ zSAhF~cRJ@`l4e1DD9g5S9DZ{%W1?Yn5kW>q0Ap47t8PhkMLt{8|E{g0Q|2y&XuZRZa r{EpM0o97n+Yy8!_XAP;YK287tdVjM;jSST*00000NkvXXu0mjfVA!%z literal 42717 zcma%hg;&(i7wBvNOQ&?Vgmfz`NQ;QH(g;X{wB(|oh#)9ZlA?TRK}n?+L0Uq(TS~fN z^&YF= zRR`c}5;?|!h|q`l8|!F*F9YnGgbt~%?gRh-!T#S*yT?Nn02nYbFx4`NZ+H4C^)R{1 z`dxQ)?Yv!TuT4r19*?gB;C+W@RP~%?Qm1FlO}A==XLSqD>ldBB%9ti}#C~52|2kt= zDH_wTXrB1XEpN#7eNV*K*`%M&4(WZ7-)3F12b@0qt_8rMO58bX;Kh%nx9zT0Z@cU( z#U5q$KmI0%s+n{7CL3Bg9acG=(&1sB*7q9i@Ct43oi( zs>PdM4=eZ|RY`i(D95%utOp>jY2`(Wm3OTws%HL0i?!=Fd7oOOZRPdvP-qPRPrpos zRn6L@bX&dcj;@<`thy1?V(FOP_k)OtAdMC}I*)=sk=1iJ95%V#^DIou6Y*PK@H(F^7kZq@-vLj;p=BHeO!S*X?^he|9M- zbcl(aU1Bf){d?2qZ2d*(Vso=oT6!rh?R0*=S3_gK$Y?S+czm;KtGar#vU1qkx^1C6 zwbOegD{H5@d2sn4zIkOaIr(p4;r#2@J-2R+I5@Nm2_2nb#ymW%-*(T&#B7w7{%dF$ zb#dv_*6F`8JNeml;+}x_TZ!=9{nR zN$G~sSr2BMq@#8R=6cT02c!2M2R)V%{jGcF6cduW&dzmuO7Oe?-(R=()9SOwUbPPu ztk8z8Uo6U|^A^6K=BzHla>gB%+yBWW7GDB0Y2nA6PB z8~soywA#+VruEhbx7ljNXdhZuLn9*qB{K zq^SidKn*WTOSfM*JUtZ-V9MDtXTpVvkN8+m!{$$-_i{AH(C8M=a~BVvs}Io|t;OT< z@wm=@nR8p1+M|$a?NOQbM&AZs_}W$##AzlyfY zq$vJTC^zd8C>oEiRm!6jo5w^4C%{cTBt06%zq3KK9^9R~=wG@bZOU`5pWD=*rzoyq z+AY*tqQ-d3*xUSgUHiEU_9o3g5v$657rK$gcq55l45#8UQNT8Be<>OjWDEK|Qy8oBowJvya!xA6%;x*}Q41s@)~fE#^??z|*9g*Zmn38cC@3}D)XIM=Du42Zy{#qF5XA#L^1ue^fK@BPqkht( zC7h^+jyLhqbo{7wCSRKk5qmtBFp+pS)?l&M2@4Y_f%vIiv(ECnqBdeIP1~!ECL6>< z1VkXmeI@VKA^F7HT*9=U-Y!JvZ@KU8$HSbL`;S;*!e#d8ZOZq3+?Crulb8XtkPTKG zr1~7`+yj6xSM%5YPjJhNSv>XodkYAEW|%1~Q3#-<1yPJnID309rALG?^e*&!e+Wgs z>`XXL$jI1SWyM27MUVjXP5DVb-x~mH6j|YG+fL>H`5gkNYhPq2z{Fnx;@KTZ2 z(j)}*&cPGLS$2p-%20QZ(eIAFg$g1c?DOO!r;5Oj=57~kCF~6Vg^!80#q`0inoL5w zXh3?3to%Y2px^;&uSbx76D$~$+xq(#S!p<-fIkyj6Ppfd1sBi2Cj7v z@Ti-Hmpg)I0I1wqb;#e!zKukgmVdAEfRx@fguuR~g1hRZ`2p6d6b#9pWRkurj(<`5 z)#@amdmJVUkI)810CG`Wmp_7%OM!yqO1Na~P1?^j8io+)AE}>dysONTTqI<=ld!mp z_uRh%6^RkLMSHK5sQ#G%Ae{zU;!YOa_w}LD?llb*43iIdb4kue){oHO`cr5q%KiCW zBvN0S54!?#?%3)e4byW*y8x3l5zy_m9SxzQnKUcOLzs^9swsEtH38xL%-jbw=$+4OkaIZT z7H_{NM`X(AMFoZZ`LkZ~0`&T60&qx-cFhz44OA4#O2DP$3z3O|H=Ja((A}jJ_}c54`D~0YqC4yuY zlA+wY$r0UR2L2Kov=GqE0o=Ta{`EhFKuTcTzgJMA1Zhr(r}BbvFIyziWhXEmxY7aC zEM$lu1oibyO-)@~TzIV-bmUD;@RgRHUa^z$0Hf2jsK_w?CztydBiOkRKc3}#$F{k7 zdAXimi9J7?oc9FV%gVghOgr+*PePl!y3&P-b9L@j>e(m5;XwcE z{@|xn{K>5-%PIUGF0$EHEiR4}rM}k?%&u}%72`V_7XHc~J$_T77n1V@1(50$k+bV| z3)!mSKiH@n=X&v5WMn8|NN5&CTY z1|EJ}Rk+i7b{d#Xl=QZNbLi&lGypQrP1jxzD)@G%|@yI{B7Kc<|ClGfg z`i`SL4YX%6Kwc`~wzEbC&w^9#cG*3Z za1clPC}NoFVL{>H$;K#vZp^|R%{1(C>B!-I#IR6N6xYLN>BVf4%%n6RWFZXys~xMj zb9})AZ%!q^5dh;i!8L|m=`mYdP`K>1g?QE>k`(wLFR4EWfPMVJ#bC;p zsBp8&36lye9TAca%B6N{tDSv~7wr4rpTSR`kQ>K?5D(&lR<67}Vn!GQ3hj_etMln2Lkj&2@4%lx6bBg2d(LafZl84Y#ELi@?Q@FnW zn-uaF0tbb7tW(DCLnbBI`L{^wukvN1bMO>Eun;xbE8 z7k8jcbzY?;)~`r_D;(pJ!{v27FvBgw7R!=es^OMbDkHITK3I`?_VA~y%my$7Du)GQ z6V6Iq`9rJXA9ReMR-9OoLP+50wHd|cb7A4fX9hZ!U*)&U5-9i+j2~%q`1@Rq;LuMk7pGk8 zlEI{MJyYJEpaqFi08W|&X$t4JctuHpOX2}_I!)Wb3gzoRE(Iu2POSUqH;)uq2`k^* zj#Aq+KNNBUnzX**n8Q^m3T{y6fVERwoxSYi0$FaL9YB$|WxUJCr3C_Y#zh&oNA;1G z8>~hgwKhL(;No1JyY$fm9ZaO!X29YV9q?0DX?@DfWO79q)l5V`k#L7M7-xfIU+h9S zC-rM<+)wD@Eo`MspF7*gPthJR{`2^JNo5{J-SWHnzszHhy^4CWDZSsP3+tG_$%-<>UGgTFtGMOj+O6y?_v!PGU z!u5kxUn*Ahrs51BM#K$8MDiq1)S)ciL4v9`4VwT7;ju@t-3CZK zRs7Z$wYxB2$KoCOL4&aRyT1#v5Og{dgqc9+j0L{*LgMkI3<)4$_PshzYMPXAJ7pq4 z-5+;l-gQe%*97R_hYK_5o@;nzAgj+Nu5imSSQ0eoO>T`Qna%ID!oi{MlVD-cpmnKp zv2Ir_O9^J>kF`Uy3#b9G%feOr)(6(Sdx-$1PCD$gPy!*tAH^QyAV|&^VXXFAG$4F# zzp^#ZfF8UrqBfEs{fHn;dxvvhsVt;LC;{2g+GrRB41#6~z?bDz4#yRMAvS)5?vn^b z(16>IswZU!Mg!N{Jfr(G09x+RfAbf$vcRa53^~UXqX$64^19m1j(|UQ)G*k)?s38EH4;{DG59^Wuqqmfrb}VE-mDM3{`7amPpAnP1H9&x9kaXD^_n`+v zBuJlzSBr#l$>Q_1sOwx9V!-u*sLs$YkCq5yiR zpjC&D1JNYM4y@Dg2GdbszZB>^{e%R*_pe%~uRaii5a`fFrr`1$Vt^vo$iWh-CRRZC z#GH3$jRyEeUZ@>8>WmO91SsdIxCIj&;iwD$eh>#k$=qfN(g8qG;U~vhH6AR^-asZo z|0fCjrCsx-mpeeIfTxtnoJ4ahRA7J&|1!Ii02Kk5)g+|5i%n~-ioSrLTtA4RV;aHS z9`r>$$#(-tGLU0$-sF4YUdAvfkJE(;(zL29F?6bblA2rF~re`EnSH7XQ)|7RLE*vFkk)yv5N zZhBOx7W%>-?0e&6l(E#{Mv_W8Hj7}bIhJb|K2Y!-j0T>j$3ju{SNLlweQFT2&`;+` zNdTIzxnHSmVR32bUErg2#0H1Mu*Z?-_Ex@d12YTASwWCEAS6E@kAhx#-0>(0Q<^Qy2DmsuyyV9 z!fr{0gph@fo8Z{XNQ$jVJ5cK%gUYRgnS%G&Wu#FK!N|OK#gr*8d4OAI!2E!q! zs588Soi2ehRU??>O*RDR_^SraQQ#3kv!HytBJhNsH51wpfc;9$f-+%y1U}@+s!0%F z0eA<_q97=ZWht8k2)G9dU<+4j5M(rz0s?eE!Tk6z0r>n86MCzeFk4ixIq?yc(CDJe zPk9omKm#znQ4-^yweEwP<}tLs9|#JU0D@(N!w?rNpO*@imtadx0!029br69GDAJla zoQfENO2;ga_Y)X9aQ&)8*l|nUVMdDtG`^9h53S!2ii)+6?g?4Kz>TA*2olLDG z2uWs5V&5gbMui$8LYjiun70W!0CfsQE-;znv;K3QTd-;iqTjR7!o>8gzAsD+Itpu? zVns}u!`vLO@2t7M~a+QoNjY+|ga zSD)$8Z|LDIt%+xi^CBN6weV@}7XeR95jCuVN_W+TI1&Ju+K1-=zh}QA*DDHK<+B*_ za8DDo=XQN>=BWy0-lx5d9voo+MjSvt1ZotBaj8l?dKXn2?{Yd8HMSel5?Mkt`_d%^ zZ<=30ug1jB1OkZ~e%-qGo$j!(yBJ$tiSg1|SzCNSNpcdDa^YE}hbgfC4m3%2?}61@ zc=`FKORMr~`>r={5zmzyVMr z`k5r!7*cgX1@3OEiCj?6Z+UFv>bFoAp-*mpPrA1wZvy44z7Ei!O3VZMaQ<|UT0s99o-LB%;T&k?z@57wSw?MGD7}+0g~b}lgDAUiq&^8?ZI7r>fXr4o^lFT3+YmY z*w=8>46S`Cw%&TbG31G)zeoRnkfa_uV8jBnu_&9BR<#)U)K=6iir*_R#EaUMpAfbA z8s;Dy=LbuyU148@(XNVi*$>O%u0?}30LhD2q6A`nNn@L;S}saR`Wppl>XWT>1npeRj9#>2z)Bw#F{0 zybjqgnx*8XLba#e-ENh*C|FQ}26T;dIP)TZ+av(w_uD(be)y6kE61XfGAdmsST$nc z*d^sQW%6*Nur(uLOR!H--`?xO+FCl(w{J@MdmNLx(uK=eGJ@eZI1X+X8qdozy;QS= zw64(*dv3HN1<;=bz6~&L37mzD%SGi2$dT5=$CAYPbpn=j;57b{1N^fRMae#u2vq(rIt1L(d7qkWAVy**8ss3r}lZcjS~XwtecA9H7p zxxjZ@a=jq@4v7sRH6TWvlI5?QSqy*fy{X-PGAtmDzOB90Vzp8J=wUt$_!qY;j&>ix8<^tOqwLyGzG|7HLZvw&DC1vFIsruJ_ahj*Jegu` zuInk}-t`kZUYW6U%In-p2#9w@4}9zThIq>AU>rWyWE8gAhC0-wpYptD&?Z!_CLRPf&%ZXiYB>{Be(ZWn}FYd~I;r0dIoK5o9m>Vf_ zF$eqwnpcatMwgEc_OQGJ71RnTU*Mhi9|7OKjHjv}G4^0^-C)Px z7AVj^p!>^V`a4l^gLow=wf|~cyGMbu8bb#&2pbRHFu*Ik#D5Exmw2TW!M;EdlJ(2; z;kCBdX$r<8lx)ooSA$h;4x&ytT+5{9iIL2munB3soa}Gqp1oCKB65XoKQ}%yifoAR zb;RIe)@?`r3vmg}JXkAUZ@gZ~bbbFyskPppngVaf2KTgW@hE11hAUn|Ax50yltd3j zT(B?O)qM0}H|EXsDTc_-|H~I4M(0M=Xn>*3XLGFzZVqRj@2q)1Nbpw##E6Q6;;FLe zXF^`O^VS}NAJ;&}Izd+dzIuQ_NxP~^PR|*WmXhcG+{I_fH9p{>huCmQ1oHs>%Gx1U zt;tqrS*L_cxZ#%z-N>~tP?ckr& z-V>N?{pJ6SDjnY{PQ+;|J7J+gvkzHZhnZgoX)mCOsWhO$@bu$b{6~h6(ODx1e1q(H zqd>ks#CP$`6iH0rVI&IA2ouY_`>qi^LE>u_Jw}SE<*^_V!{tO(B#nltN%*T`GPrdS`-{(O_4E}|} zk)$xx8}G$yD4YZh#9YEE+TvC*4^j?le|;4)k4wbyOyVSxTMVr0-l+>AW%8*J6&gTn z=Za0eKFS7Mw&ue_sFfkY>1vGJKz{_v{3K!rZWRbo#90_Y*=-}?93bU!H4P}F@lczD zHsDnj&wZ9ihd?MD4Y4%5SQW6x+_Z~6Q=7%w`9iHnVVuxo@YLM?1Y&<{avbpudw}7( zY~6pT2ydc7dXsT!fcN=O8h2P2*5~;})YosQGy5)ZSM4zmi02|)d{zP^o+$~~!}7^H zyxPWyQH8YBL#IB`*w$rQaQrGiw_1V*Xr1CC^Ep;At+31140r}YVJJG6Xwn7+guThZ z1`Dc_N)d182^~#oyH@!9b2ad6K@C10V*r*{Z3EiAC)X}pyFcV0Mj(Pnk8_>PCT`}* zclyDrazv=-$weIY0F7<^C4?62h6~S$q0rw7*f8=Hs`V2LU>xSPINdr!gtZG7$7TP6 zGD41D&~aSre&>-PYb|VIbq83g5KZC}bB8#OACn?{$0>a2jO@-wo;?WvXgxerMx&;G z_8|V+C&X=<1QQcrc@_-&ho|4b|DjndehKxywpcL41FU#zD=Y(_|G0jzQs(#i)$=iC zV97&Wb-KrXve&+jPt_!EWa8Rfl!uaGtik$w!-{{8{8)H1P4_>OEz0^(pPo@qPyx%Z zNZ$#(JYKoRr6eF^3V0%rt(F)e=>El-+EZJFEO8oP3hkH|1;WpUm{}DfZ8mDUk3=a4 z3#1i2NPtJt4SOpPs2+mTA$^2u_oXkU1p=60Gr(viY<_$g(qx_QGh8k_yTX`7afWM_ zXyJYJ4^bg?iZxkKs@L*%@2{J8XJ;+<{ zy$}TS9!p|?Hfj6 zs6f6dh@~G^G3?%d&xQ53S6??iI|x~*^7@dO?ptBIe1eL8&CA^G{$$!3~w)AF*;$z@AV8e&8l9mLU0Su0+T$A5$<9I~D_;lCFj5}$1^hfNY<%a-x z+ycdTt7rS9_RiPgoG-T9-~fx~q~KjtDrBs%ZA}T=v2~a|JEbvLVW0HtRd_GFa@8-TUp?xl48>%#x3X8Gqv8-lA_cIQ#c+m>RL<+#1erre3bKMEG6oY#$JZvKYY)v z$KUURx{Ug-GOFcy)AF0dVbI(U}?)80!X6kg22i5c4{HeR}?!(C|7`?)P`3b30OL+^mw{gIKHAs3BBZ-xYSHP^ z1n@^NA9kEmo9ETdChat&Yf<~W=C|h6G@6dYT6trc4aq**zG{JjjCU4TFv-S3LLeu%);ZBPM1oh~#g$fuqj4lT??c(UQi6yO)S;Nki zh{M~fd%Cmp|BaLg#}6+D+a&pXQd}N{|1;2Q{hE{|1W%ouofhI+D5T$< z+0JshN%!iaphq?u9(rm>l1t4WF?fEWXOpb#BlI@pd5swPH)mwDk)*F7{nV;wBfRx( zsrB%7#zr+@HZfHKmPI#cCZeckq3~yngQ4+jVdG|Dgr_zC?=67iH?^`yH%D6gKEG4Q z)T|o_4o>a=OrIGd`=P0&jnp?4z31!X0Syig=)KGEw6GW}{|jwdH~G@qP{g3RIahCnscZp7OV>sqgnM~to?4LfE& zx=Fs#tGRN(@asvi){)jqNrOb%kCq>L^nAeLz=KTS+HKprpr`3ZV>`9FmY|THL&o^j zXn~uTM3$O;J+sSaN4gm$ytN9AbALz~8@RLGh6e}`f>0FJLoYdhG>Isve<^fPGFtJx z`;uOdmGT#Y_CggGc}YwS5q8oSe8JnI%TIStJN&DM4zGV;s=mn|g|FcaN%p4yF7!D& z7gZVHC*ezJ?%JIjLh_jE$?%V1caXea_e^5cWLBq0VoV`mTpP^>J;zL4dxj&41!_X% zG`kCITxSuy5y4qK)A-$m+>{hn9~FL|V+oTKaHec+V8Ew9lo$g~G%GL3pV^j;&|^Y@(JH5UKa z)fH%9ZkIvQ+Bdv?iKvl;#PBrf(d3LvGLK5J_6}#%cw6=ta9=k^DiiBr$i4qEoc}8e zSb`<3U5JzBUq6gkzlyBn8>b%nqQR3fOSYD2bzO3X8iCA7mW6~rnB>fQCXNe0iJ&CM zp!l+SjqNuqb?}x+}C4Vj854uQ{BDl|^XGyx( zpQ5m=?rMeloQo(Ha z;Mq}u0J2iol_F9H3~5OV|B?HGQ*Yz98YN8!$b+ZC~!q-`5{q}r|5HzF2S zdu-qB)fbiJ@80{qNB0!oc_?mwa-FdilYoZEy@6HIDj-0(Ve_iYQpP!YOucA8UZG3! z2d?dl7ud&J-=%HK&ES>2F3u?%k(J9J_s0q#xAZ! z86bqfS60#a!V^@1YSiZOlP3+ITb^^x57N*v1W)he247qytq08Br8ldL?RY`@%)G>v z$5gvalFW8EGVK-Z@B&>zJvXIZr?j!P1J5l5{<`Ve_fBDX=5MlS}6==*~ z29Vlcobx&DbA<)Ri2zA+sCNbN2IX$~vHqoo78m=a#iFR^N^KNrGt)N)%%e*fi^*Lmv*b@q5Cn62Cy6 zNmHNiwa(RDa(w*O}HW=yx&7(B_206o1!SM=PrrQlv@&Z_GN0L zk9*5pS8`ucX=O}V>J=?Ibd$prE_rdl>~Mc?J$h;b=#l0h_8}M zU=oDI1l`*Gr;Cvu(ve1Ld@SxLQ=c$%`(yc*9};dG^BU9*vsS$&@*mk8L2sIz-yy|? z$$~C&E4XF(pq?hSW`zB|LjKM4eGBog`h+;Aq-!j63u^Rlr`-&ip{y-{UJt&+erQp{ z92(kn#0{CXLJXfQw2bNS-}6;YiJ#^Ojp&}YQ;Hwq$vQ^ZKgI6TYwmO9X$YVn!&}S; zCtc*$nkK$ZRc^MvXy{byle7A_vHFsS@qmbBs$5Oq`X9}ZZW3q-7jGLSlD*(e1$lS> zxyfB<4%yhyxnH`6WVf7`BAX-py(W+F>eC!I`g<7sr*MV5%`KpW7CqlaVaf;ylX#8? z#M`!X{@SE%^o<_p{nd5(K1>Cp-OMJpx0Tusc7REcJZ*;OPl_kr)&wc8)Qc%Es6wzP z1va=j!SGj-l_L&N9om?Mk(#eUS6)*BbnRim6#9g76eFWh7Y~^%(YdC(9Z7$Szxd|l z@dH!-=#L?;aznX8*Vh9QCV0Da?;!pDXT`LF&N!++C$pT-WIfGA9p<(tN9h`c1jz^Wk#y|w9m!FNOVLf zf`2EK9U|7m^&ElU8?sqUQaoc>*XE`b>z{F3uFb-(KRZgio6oDpb5=3+?6lli(1h48 zK-V2!b;crsNgv`Ja-flr-Iqy7bT|%mF*G^oTXnOX+O2D&1eqD?)6k+#-I(McIK}sM1ykEe129+b?ahzc8;W8 z)q&|?GQnYgJTYT#w@><^+ja139%skH3uKAI&t63hqg&UWc>X7CE@yn9X1en^TK*xg z!yfA==FisyqXlSFVl~O~RW}b~t3M`&-#3O=HANz5A^q%pm<9De%8z~Yx{ODK`?pfM z*YM0=iSO`a1rJCmui4)z`Q1pULd)5i_iDI57sx$!#=PT2N!Zn^sXxbmy*&!^CBHy# zg<+7pXRPOA{GOjKef6W_o8j(`!*aqIp6*_G%;bmxy!TL^U_R!e`MBhLe6|)2f4z(T@^cl1stKU2+7ZIe++N zrRuPqMCih?J@UvDc0H^^YO8hXo2*P8GClp@O&L2HTkgZ`Jfqs5dITySpw>=y^7465 znf1*G-4cnc+e;cz<_oB;3u<(0FO!JOv;$cWnU&#as8py-R>8`J->>cW43K{j5!93r zOijbSya#G}N}qelGVwzC#+66zSkzR$Zlg+#1Ka7+c6b2-C0XI^BJcFUQ`jek4)Skz zF#K68P-SoWN`Ydu#EMr7F<2+AS>OK{#`OS8Lc(%#kwfjuYogsD&ird+SCa3JYAE^I9Kpfjk)6;%{Q7n7b+#Q!lMtfe)aEvY4i~epbgf7 zvIwgu7TlLbuqHl|Hrtn2j%s@=No9QhP9|?*wOiwXXmh7)*G9A8<_6|n)Av4>GCl7B z|3Uu&|A7bci}kYAFCF zT+)zks5B87KCBt_ZtbYtGE;y>K~U(#t9`-kqATO23$Nan_aaVzPE1`VRx~z^=kP&E zp8tkJojKp6eSvux6KIfVO@IMLddTn07Fl-*sR{{V@8P<#%2$1#22doyBL?4OT`q2X z*WKK?F{ysLq=U;ena-@Rx2e{%QH zn`xQ4tE9oL=b8b0gMamrYd;XI4%c@aGF%-cGY!@~kXjbDFst#fw~L!dK{!~(E&bsp zT)sLUnxk4WI*v!S4HgWyS|NZ{9UZpCWKT`^x>`!y=f|k%Tc7H&CzYeg%FvU}F@p+K zmfun0^b=ukqvz3tXJ{+w_rc=vcybqCtttc%m_SiCYkkx?11%C){?g{eGQkih8H>z-OIt zE8=?5UXA}HYs%$Y^OAS7C+eZlZ?2N}be2+-EnctwdJxn3rY(yPTSgMR)yy{f+X@ai z)ohqMU?EL1Fxb8}Q{d%=0ngYX@5j{81$j(PS`xd;fthh@&MuWS#ScCNNT`~K&mVNm z+1+jEM=@EQvu6j}EwRPv&(Hzn>>O(hBs&u4?sS#@>&mGh?>CdNhB4jVOiN2z3SIl> z&ym9OB8gK0=?}*@1xwGVfW3P2&2Jn-6X_$koZdc9iGYj<4S!WpfUf77(1rk5J(SNH z*AbKcczasY?&VwdPn`da71wRI!&zPvN6eem{< zK!3e^Y?g_0dEZ2{n=;R_+C=m0&$biu>cD#4;Gq$fAzSl^$a7BLu7)4iz+%^m&~1SJ zrAC}V(!l(UNuZ>IKj(qVu~++e(EO)KVsSq|o7AFP&(apvJAKyc-GlBAU2lSB=Rz=N9-T@4HfA>&OcDJQDz1A?m9;opb#P=u z@VD!2Qk29^a`qrR^EesUKioY2iP+v+wc94rh3m}ySpAo-T;X_g_0+yA=(cL2UPM2~ zJ+fPR_t`j4eNS$FcO>#~&S*#?VhNIe=G8&wVnl+T$$3iE6um3r5DCt40Z&{Ipy7NQ zrfx$wm>08MYrtc+9A6h;_wqpEN_x}Xji`RQnMbn;9u9ZKV_6krEDllMj zv6llKRdkBS+K#u#0eW!#wLf15ern+zg#I-hR%y`AV7wwA-Z^W1JMbJPJK`B9rpABm zcfE(+$;}I5Vrn>o6qrv_$S3}|8Oy^5HBjSBgn;y@B9;x_Jc-{^TeB<}tDVZe}!Y8f;bg7Lx6lw* zN^g0BihTpU<4zjvuF=qP{QYJ8&7kk-#B+PX85eDIUw7?%H;$L-)O*qoUS97~LwD<0&tq`9G<4KCxCla7Blc;Mz3_1pN zo&&V18PYWEF6nQ@=HB%g`3mupsD$q;zqO3jayY2EcUah1rZC9}>Ko`gqT9Q^_eWH8 z{{w;1ap02lTP>9o4>Q`p#n36(^!Bbk_h&M4NIS;%m2-qf$H$eDrPPcb$l^>o8)1{Y ziWq}5bbH@jWfpQ2I+h!;3ot8DtB+8J_)x}-E_rxnPv>j!g|49yt zc~bs0vIYi=MgCgc%hH1F8Z}LR=&>QyZu`CHU_uF?JeU*r9CkOq|9OK494KD-Hs|Tv z^C~(k%?6#z5iZ93%}OL({?Pvk`^@{RROWRs*T=5=;zE^=7)L+v@P@dML)d#HQ7)Qg z+wJP85)Gu7V_^NCW^LtW4HcD)Fa`Mj`JyQR*DYKspFm}EC6&OeTAp<-_G=L>Xe5^5`BY>p*+_7H zuHRda1b;8vFQXH<@FIbWn67vBuc*!Tg+~G$yzC4U^s|0Me5Tks-Zt?)o<|rzl7-DR znRH(^ms%7k^9`}krc8R!A3^+AHtQNq* zNqbD_EEQSzuESTwBbs%JiM-ftS%g3 z{qo$$J?b+jPt&zEStc;s8ZHk7);3XdgkU?dj6!^oxz?|PlURmIw*|A`d46NouW+Qm z;X;(~j!!M3qeIhtS-sD1( z;NIm_Wrc!q;%8!gCy)5G-rCv(->yYEacvV-hY$8fBN@mSy&v+P*OrgQq*z*gnG~*P z_{F^i3y{6}NC~`wvzqv_))gc`UuY`>>sKR)+@#&V8$*$>WS37v`5%ql^504pto^v? zdX5jrbRncs)h|;CnNgdjf_UQ02Z7fb77LrE!~+o`lqsGSt~PKa?5+NrJV8hQXRSGX zLT|SE3?o=SEs7|UxAC>RlQ$`}ZE4eRm)}}l)PFx7OnSh8+=VSXB!_A!-ldXWulzIN zE9`>nnjhQwFVTCrZ=W$Tn(z16Q`GmpVE-HaHnCz)KO-{LqSaB!07j&&84p7oJm!7E zYbqj(DAxAZ)XB*ju#Qo1JtE80*3e_yoFryf`RA22Bo9ff>`D4Mad|qe<}t$uJh|Gu zwLs+p=9~esxPC?w8I0Hc`q#MY#KbI@bhsmH+s9W1C#=}LmaTPRFn#LV{YDEH5I#507%wfz*?t6OvUOE zC!eEP$Wwm=_uXGEdYq&W)Kt})TAF_}-J~6pu~Ya`*+M$DLaB+YLL+Um2RvK;i8G!` z!1LJ+M8eWkzZp->rHTo?#V}TqF`Xv97}kE$_Bke+QVsU|+XxbL4M{0!#HcrX-d-xQ zw>lWpJ?xACR4G#s>{$6UFSy6?#w+MGz+DdVE#WVgFh?i96De@_qU^#ki_zHn>u&ET zhQOZPa7F~yc8Os`h`#%_^ATz#4Z-gt(~v@e&cEsTXA_ObffoeEp>Z@N+w{^sf0 zx8M6B!Ghp^|Ga8muU!WE52?n4n2Fz(yJUGc>guwzMizcq<<`go+2KMEWFcsn%u;f8GTXms(_U+g66y!#$A zxuU9PYxv`&Ebcg-l3)#4aCh4TKaePSA&YWnHFwW`tvo3!_SQW9GaA8Fn+fKj{Wi+$7n|))gp$_7tJzyIa)XnJEfOho`7wp`LGd8+3Ts7=7Fo_K8^%Ge zxKtHWQ-}ZSRtTy$`Z!uH6qHh~CA3I^p?v%4{v2CRNAQjImrVI099Kr;muCmbEZX;r zI1cDW)oE2C{6B`(N-xT!kYz8L@Wy>z-z{pB&NKY<=tHh(+kH$H|)7VmLPW}9UYH32^S$K7y)x)JKE+|Ygg^n%-;oPRu=EBuqI zTyihDSUC06YiOV{Ye>}Fn79f+UC!Og+uB82V%QHj`B*S|cVH4MQLnH zIEcZVj`gRcU1_~bU@~<(r3aK->b-t&Jg~(aP!2~awmyJF@tow$l=v^22SYh^{3_eq}rveXZG8HTSaCfs6F2(tP+OZ3(dNcg(2=|k2n z({P;yg5jjwH&C}Fw5uWIDN#%sj;iiW_T9f)FbIU4@nc{=x4Pw*7vVVCKglltaO4D% zCU=D9Y-6W^PqIf>FQuZtl=<81d|Ro2SYs^% z8yrkV!C<%Ojr5{EAv$xd6US48zqi_MjnjqU%6|WTU)+6RP#_ehU5|bt5)7njy1g>D%L=Hpu@*D8o!WM zVtA@ly}adYj0sh`?0yiyt9R!QKlz`}mnl94{7&lY$b4HtGaak<*E&Di(rlJtQY9rz zh%TIbDoQ`ZrzFLey3veINA4iRrX@1MEEdy!LCDaw@{Oh@q%Yxhn9GkO>eJ z0+0sq|I#s@ykkHl;Y2vF1gM}>640^)x(!zc!zX4*0BFYUp8fy; zAOJ~3K~yi^q6BAjW#>=u5+grGT055Ac+mD;MWbsJgBy-;$2Q8om9AwolJNn|6ai)) zgY6Ij{P(v%HY0%fTq)`=r2e9d@38>o&E`kG4m6ItY_Cwe(^As=yceNBMj~6dTR%K=38Q+{mH@3d@G$Ku|d?)q($;rqScy z1%>fT9Z#jiFp{@WmwUq+-@P13R?~5PyrIuJ3m}2hQGsX%DSz1UINT)yc)bw;%x{*^ zU-a)ks5$)oxh-V7yudzaju3N1hV=`SNK^S+S|u?*{|+P5F!-^>U~_G1dBs zVdF#=_*LHHku^TUcszVH(>iHdc_I>T13_WgX%>bdV2B#?Z&byP>v+06fxnHU8iqS# zc_7M2VJ=7*aC znAB;#FwEDpJXyXF%y{v#ZQ$$ntpfgK$7uGfo)+^*lfEzE-}nLD>ulsrJpBUQQf}6c z-3k2FvOgvgD_fO7kZd?Nkjw}G*o&uL)0S~NP!^ivSVbkF8r)LHj#?r4Z^TPsQ;lxs za+DA)=X${^!vPzf;RN8`Cjxl?<{ZcV;pZ<`T3LS)^3zWN`39UZQcLpaRBfi|mm}wB zuKIY$r)1Fa@stWWDpl$yws7G!c-y%o^z=za)0I@n2?>0a2COdlEH?pyirp*>2Hord zUaDJKi#dqrIDs`35eLQh66Vsx%<4O7X$2X|!R%8b80ob}`$PaQe})NQ{`uz1qN=X~ zU+L#@?8c(aP&O(|(vtUaLVd-KR|bE((kqqPAvICf3~cj+^v*W8{^Z;pX}fi3a5nsa zZJGU6*tUCZ%@-WTC$&vL84(VR{GuG#G0+M!zfPl*PzjB!ICsut@wLFc3~UdX9HsbH zXByrc0{GvbKf#s#OKno$dDs246BluLcn?F9$ACYhBEK*Ze91(>r|MKH-r35DTjzi0 zaAvR;V4)V-((VY(h99tFuW2o2fOH-jmxF*|e4@v%ObSk?ezctz)Z7M*PFi?kgcIuK zdt%`#1MVp(^9_?JaeG4m@BXbs0O#lG=#B>ePwKf(o`%%lJPQ8~y-0?l{%X&Br=S$| zlgpxhP;ErP>(utHu0EGhL2OY*V}4tTmJqM7W3w0nw%)621^NU znsrgo3NkiW)JYR;CPDqAaGat|dl~xREr?~4)RUAC>pu#Bxs_{=B4w$!}RJwpu=zdu&~KKF=qBPFh~tgh~LxANvK)> zuE~k-z-fSh{2lT`)*1g3;;(WS(2JEC8)V3#Uuvy0f2$*g6U4l0_g znF0YT!6l3TXYXoS6xX)su@>?hp>6TQmDPaPYnR&{jsW#+ug%-Iqys2Yf&G^ zzkd7U0RUjYe@XQTO6o72Xtsy)6O9b+Rb&-m@6JFQW8&eI@~!#LUO z>3j6=7P_IAKqdGpyhEHnGXU`8_0*iJa^*#R|E-e`&;9rBKR$o?^7+f>Z+|@wy|<{( ziFVDI)E_BUXT!uU>eH?pS&r?*@Bg8T%>LvK>1%_zESCIyCPdU_5dlDKc(EInUO+YY zz$6~VB12|xg#irX8KZ|nkIvHf95o~AwG@ww=c(g3BiXj?$jr6|hjtYvXcwVnmFpBC zEfniabH6!GEbnyCPYeM0eG6tp|NPIl@BjSs{rlhl`}#QhZc*RK^hHS>Xx;Iuz$cx; zrAO2g=x-NzFOKp)Q`jF3eC9ihjPYeLJ z^X0zs+1J0WEq~bK_&?#CG@l;Y`pzlp-%jesS&9@!l)V8(zSyio=PdTUc=jl-abjbVhWc60mPqkc40;~ip zaSMgh#8RGz=awqlB8Ovu{`Sl2L!-b)lgQoqdoigEO!kEy1i)zIg#e8p%{o2}cbrw~ z@%Q#7M~^Y3m#hJ!6^g0^MGI=imndK(qGx5jfo{6l>45#fsr+`V(F53@eZGA3G;* z74r9fLswA}Tm*{avygKe~azcu-+8V5%pEXmZ9_K$k0I0{iLjeBz zfkQ;uQB9h-55lfEzHpq3mFJ=9XaW#e%(UX|i~Irwn^z;{^WG&n|36p3LEaz8;xTr=+fn8xIlDC5yxzO94+ zkef%kf##V_)mU_&*MsHUQU8q33_uM_f*yJhq;?1a>RC}9f7fRq95sj3IXXtF<3?5h zz$XKMH_yR$1OPhE3qsLZKnc_10P|S)vf|1;oRTwWQ7uQ&h@TU&sp z`TDlAcpj)W#l>R=FsNb4KiL;tuSO%G4F3~;K*bl;Sul)`SI-Ai6GCnm_zX^ezSvkL z;{d!Vd5D)b`KA^^F(jE=_*RuySjt7XcJD7U( zZE=C1Mq#Tz&tkcvgAGefDQ@T+!tg&0QSE%E0eR!#bSTF|fI2cqC)nZcegxo~mYI-G z@urNK0{~s$OctZ{;M|(^YqGNjjhMv9W2I)r2Wg^7p|G1+&Y;DtCOPVSSE3BitQxTy z5p|(0u=}c|^@(V^Yp7v~nGvDY5&{{zw#EWvE9GzM&nEP)3?fB4= zxr71>-jp#@01%oh{c@MIWY*<%+}48}AjMQxxChOb)rukh=-d0IW3;!poc&hc=AL{M z97L40<)jZ)S*78*>83TTMa70-!%|}qmRCa65;OQhE-T#a17UU-kqgp|Vd*zN{+zA$*^K@hChn4aKJ6L_ z_V81HhkbJCa;T{&MtAsDiRc1>{&!iCuoTr2-LFzaJ)`zugTNM?ibuaPaEl_r_D9Er z!&`h)A1!UFl=24gUdkCp0Gk;R)VI5208f3CAtDngf&2?*>MzpwtUNQj!%O6FEvNFG3d<;Wil|4NF*xYDs{PLhnHnX;{*?;+);a z6iiJpjHt{tYZLPY3eBqJ_^DJ%cPL+bRF5*`0B#*lajMpuc5g>F>1Ovg>hrs5IymzC z&ZPd}a`uht_Bsw`NZD)yMzwG9ETP`q0?a^I`js=$b2hU*8@ePBnv^xFODQ3{c-xh0z;W>JOF4t`MrpTx7P#$+)YTeU`XW zN*0%!?*IUK#`L{@oV2F~N|J)#_r%}k{J&`OIr96OVjP=-SCbFLET;m1w-HvSqUKoc zojQx&+Da~+m206Jc=8GkQ5o(JwEL#k?VA2l*?g560rGl3bh59TqG1W+fNIHh?V}xY z^F3k@8bj1AjTY%GC4Sy zxP6Z*K)~UYY#9t{)K^#yexp9$OAxf~Ejk-_Qa?D@o!`mXywD#btaQGfmtM%-yz7FPAT$OS!N=RSmbYCbCqC%!oGjG*V?+2K0uO z7`L1tBbq|{W1Mh4s6eMxSKDSCx(LgoN+uxyG1r?{VLnGavBHv9#-W84o(R*B!)jx6 zAgce!+OTWGHY=+Rm0{`Cyti6VTaqiz!6 zIFj+-rvngY_3%Jn zV5(c1cG8*+<(t!x>Hbs=OK9DGcP=Ftxd%LC!;J%A|0polQEtWZKeRw z7`=VXb~le|6YQLS$?G2yCn5UPh%ZBtvU&tWIG;i~3llYTM0*;DuIQk7P>dY|)UBE} zA~s=CrU5kUcoWjFB!z~)IvS3)6~8VhY7g>zh+kl%TY~e0pXt`~NTg>90L9*$ZtohU zj>xoS@>fj%aZX}Umnue1qb`TN_I?|ZN;-=((b+X)bRjCkli%G|?+9Bvr9=R)(a23O zpQd36RV}#!R}GKe1HpuD@tPGC<^-(MKN_NfAU{4VYM~TdTpb+ zZ(P7`AtP^`XzjOza!$#(o;1=~(*9HG6)@R&d5kB~RP-H_oDSTXB=np_nuaB;1Vm(k z65s#HyOveOwIDj|^B4J|J=JLlWF*ljK0*=%pFsl#d?JY&1rb3A9P|wR1%K%#@vXad z9wz5%cShYbhdypowX15aT8kQO1I-se*P)xSOZA=J;;Te@JVQW`2VUvSm=9h8ynyGYPbY?41W4KO8`Ep0_(JbJHpxx>bg0Or!Agn}!gR8Rh#Ip7hKK^bAN znC`ms_GG!KSFpKliz__~3mL^zlOoo*9F>rqwUA_oV^<(OaLkMJX!`+fX=s%`i5k{6R2;htA595iQg7q3dmlWJUbcr zHtgWL@j!v0q_Yz8BzyvRFxl|YY1!#k(V%0>!~6Xi71-<}i_K2)QbK=}yIup0uxCJY z;YGAOa9R6Q4CLKt``cvltI>`+0puovC;oh#K&Rj5Bu?KG%1GwI0rgv=RSNm$ix>%u zsb6L6eIu3TzIME zyZc!jg(*goIqZH%od9mk4@eaN*LoK<;A5xn{xS*4u*%#E-nw|wN(Lh>#j-*0^H-lx z(pjhzeE65mIqmOu*&c>rywRq`2Hm0q$U1*Y264tL^#G!d>8jWksS(j?e|hFs6?)*sMO-%K{|?b5)yI ze5I7To?K)JK)l^+1yKMtrTl*lzzNi6V$N3LQuY&N7((XOUK!d+AXv?YfV07O`_h!P8#9dI!XJ zll{e%$=%WdsGq@Du+OFE6oV!86#V8`eHYKW6~^mtxbzDA5^sHL4$!?)XGa%^*XCYV zZhC+O01%dVBDES#IRJ_U&fxr69S0RDjXo{+*Yry`j_3JD^ zSF?_>TOVn$>i5KY{=Nxk-7PJE`WdVZekwhYj%kEyg99Fjn#3|23FY-?wjfTsw$i7XWQsFE(0YHSM)PkfqpFH4q_a8BS({Mj){qkAAK5&m66^etQ-rf-8 z3Zh8>Iq_cG4lr;0{Q;mOzdulS7f}Csk=@VE9KO z07_$c=j`~49%He2b`uK}7)Clv=;ME8uS;`p&rBek5>DBOb%a8lHuV`n9?TX~XH$Q<^`_#x!ykb9>1+L^ z%x`|Q*1Wq@A9S{Ga$sypO`?&3&B*y!<|ARe{t60oR&fOb0?0>z5a;oHp`Rf#O{pq& z2E*lg4?6_Z=LY@-TUmSaP+m^}Z2nt41vaA3^ylZb%Peoixd(ie-=D5Klf8c#y5sN% zpnej8@BESX-RqARgW_|Ih%Hgwp%zl=_`%#T`U9duNoN6rvbqvi@-6_K3Q08?A}o=r z24_L?4&dXm`BJ&UZ^icNuk)%%cn)(TNdTpZc^=4oA&? z_nYb1ZjYf}>$Np-Q{QVB*G&MKK=jwm?l5zC-w19Iv2tL?l9nFh1B}e|QUFA3mExpeeUI#VGwHBc(uuDk-`8yWN!l>Vw!zmi_OZ!A;o=q>}wb(2?FLp>q9 z{=Slf;Bw;R=?v-LkkIVl6XKtIi^%E&2us|QNCc33t)3nGi-ydgWHR{|hW@G2@ny~W zasn`}+U<0|rCuP|#FQ_Woi6#uSP$YXuc)+^dm;W$TYPxxCkx;w4`!117Y!!|b`+na zm@y!|U5mU<3L~9G$@AcH;$S7p6hR+rl%O+dX${JTTV(1j(BrZ@;<{;Klun?(-J1?& zrd#e;62J|I8p-O-LX0rh*UI=H6`4$|C@RIw%daGW(-t4*HetCEP+M3&IN?}1u(SO1 z2+*^#A_q#65ENv5wP(fa-+gn&|yfq@eIS^r~E08Bff4?&& zDkwf(8DCBSx5Fem*`u4k2#%j2io3)DMKAnr@eSRib$6TO_>E|{h*K4?lYTIh#CHI= zpXHA|E$A1JpUcTGX8`xGVWhLbb?*H%@G^|E8JgdUu5Y0!jU2HIhAED!gXU1__9j1D z0tK_aBj+24u+)>j{^`f=s&v1utS={kJFDrtx9}Apl{)eF6NOABL(>U&*cK2%@{0rR z++cQZlU$j%mJX=DcEsH577?H{KbT44%V?Y&*ye<4B_urR!0}T$c;wTJAWOil2TEs& z1l|!SCmzDi{Ja@j+Ai&b?dxk@*ZbX$VaL8l>*k4yK!l~1`A>&G#mxG=-{sbq6TmhG zZ1@c73)R`tA+_PKPk}}f6ut0==X2ZRZC>s2{6?GiR|~0l;e98Icz#e;OM3+ZmT{K5 z{2bEpwFTQ7Apgf?=STZGt(wzyr@cZzB@#k93rY9_g(N2qwnBHwggrjKz8cRJ>4L&O zkTYCR-|95};rK^%aX88P4uF>vKx&O5{{+H7waY_ozvcOq`|x#3>nJn)3>p%>@UzLD z<-dE!vbG@4mi5uCpB;+RvXeR#0-qpM&l5O#&{s&ps zAMiF#@84$jwY9cV!Ieaf_=P$FwN#=I2aP)7N7UD13ofS18u=NDGH|dV4Tj$*K@jJgC!>|r_IEGXTGN;AHNbs*< z6M%cq0CkojI`LW82K6IKtyV1XQcf5O0HJ!yu3u(lBl#@q*mO$Eq5f8SKe`k|4>~`| z$0?t)c_?t*=-}!FzK?|VCSDTNIOk!$x-wB>3%Vtb#98O^jwjjVdGjphA)Ew}ib-M& zi@}$v@-o3bFufEoqd?ZqhZE^ut=$+N0Tnc)_zP+MX;Ei^+KwQd_(Dn{k*@Yn8iPUY zh2t=0WJu%BruC1AaktJA{1#00^r|dRrBkbSy+-gb<^w?15K9Vcwety7!ism9w&c9} zy%pLkS6yGb%5;j=A>ypdmBK+@tnw*fAcSI)q%&$ckcLeRoWvV&_Eb^uy5d?Y1+wfy zb(_;uXKB!hW9tUi9xQdLr^U#87vmuG@;fkL0|CHaB-)J@>o)th?fx(ObsFE2I-PiN zTo+#_0MMetSgC}a3GIm`tdE+EGhSD}992Nd#yOkkFRMeAdbt}GlhhM8!O?*!ptK+f ziPKdLtOfwxZAD1&*9dhM9HB`cyfbaT>Ddnr%0mcA>wlvRo z+YLj$3B@EahNA;hF4I7S7Gj)O8Dp{fVjb}|zA6F9PP8C0u-5vz1u+%&m_)Pke`2aAa_n2fz~nI^5%7m5!X^Db7v;R!}tx%2i!h=)v*S(^_4!U7l1 z5}sR3FdYD#14XBt?*o36Gk+vxVv;NVQ^Gl&ntMK2JAh{3E0?prScd?ReAx}qZCP17 zow(EIC1hP#ZsalU2JtQB6zaVwZ{5Q5U%c2aZ}0xTe|~)Y@BhZQ#+cLR8jteF*=)UD zKh8%+<0GeK4Q4(7EYWTDN`*uik_nE?e{8>khTI701*tWGPn*$7Q-QQQtH!9O0ft(O zkXENv`eGd}U{%i;bynYGp0?b`1E&xxWtF#EJTE!8ZFGMt^8U|{5Bs9MdiS&C>zVlg zu&6zmK(m=32>=u~0-Rxbr}D%JB)u@7OOlC6t~B1T03tOJC%C91-p=Yh7=3=XcoV=T z7^2QHw_zpQ$Yc0oNZsL`T$OsHA0;=&6_)* zMtb=y+PdfMAGCX^pvSSLwg2Va^TXALnfveC-u&`?TRF^r}&Ueqgk`2{E7P9{z+I@%0B7*WklR7I^H+MeEHF52L?~IQm0S=@u zww;qdmbw1&H1qzC;+Gfze&4VFAl9Dl>3O>mDMm@iEI@cIC00b%QD+kLq!*+{DkiBs zR2&_c#kV5I#W-?MLnL1CC_a1eRJVi%0{~P$Xi;ZDlNI9gIbWW4CNH>-WP-FvVJzel zhNDO$ds1t*5R9MMR@@KEU4MR%#&=Aib*OAO9zG%KUQV;%g?`v;}qv zDr(k}#YXqyVmKBAVLU*NKi3uIw;spOT|Zw*?r-~uzV>Z|!LjSpam8*5MSRK&E_vb^jxzUfG*Q z!y3%?MyRvwJ(E+WCF+rtXiMDg;L_ZP7Ys2k*tg#Qt+)4Awtbt-_FnzxUz-&GLX?tL z5WIGNPsWE`w62S&qmtPn40OoLgho9%{Lo5^^kVK;ddmTznB<8Tt1gZX%wLZ(^B>7^ z9LtAGo#uHV0=CG7sT|zTb>a$-3<;w~vCwZ$CAy@524@;fowaP#;eLml-`tyZEDO+c z!iS|X46~(+yNjVeGCRv$-hL7Df4TqLzW>Lsmdy$PzHF54DDA+7bTFPv&ZkRAaff%u zTD|rVf{}G)f}}9%1+=w0djr{kyOM}%N)~})l65$J#s8a7A0TdWFexvfqpbb^$;M_L%|wMduei|I6p+$A>E$n*FN+fbEah8x{a? z%`I(%;I-A&nve~Yhx*+7Ot6brzrc}RASJ~*Qk`la zDGAC*2enHWg_xw=F3Mno5kERSI6CsvHP%A%QJ|f7&ou1lYiA=`e=tgM_1unzk>iuo z9wJyof{E6xF7VX}Kg)7Ax5)GF#Y_M3>FHsC_*wORWc$DUxp4tt72u*{RPb7RNgxOS zAnApblaUVgllAit#cyc!LUF3#Iq+F(62K;S7cJR}Y<x&P>3Wr(sF05{B^<0F)8H zTy03H2((6e4LP2CI>GO9ecWVkG1tF;ewx+#$ngz%{vrUp|Efsf z^#lMdTs(d(MFX!5k8sgKMfO3!nFm{4OH7gpWB`tQpgzabff+U5iO0O>8PWP<0?k?` zm#PGJr9Su`&se*Eb9>84e@W9lG~T;1R_j9h=8;pk$EP{{=PN;_f zhu%p9%wT-^lIZ{dY5lp@f;0HmOMS`tr8<8Px%}SV-v0VMe{R3M+r$6>2~$Ew0Ix;M zy0K;(uYBT4uI!rrpS^4OP1{|fOY$FNRiUoCNtW5N_m*stE3c4wSiFP@5(bO_$&SLS zh?gNngb0O-0IDh#sZ!c3qO0_-?mE(MbN`BaG4IDW#>Rx2)ZaRZQSh8^&dixJn?3U+ zc((M0V=PQ6P!OW+z@RQ)q#v(d^|EXwQ}BXYc6zv40I<|ncKuNf(N3V3^ywJ@qN9(Q z%}1h;_dmmA|DRE3e=6jiRQg}~STH3czhyMIY)8{G#tktSrzzwwjMF7zMv^)Y2CP{9@!U7Wq#0bRNGPA^-$axFP_6<+UEnV#je$fQ?l< z!0a61twz@a0`kn0;@y-t7_vtC2`(!Q06_js4E5`?Qeo}bCtaNNG;h?nC*)p94RwiReDi<{;2ram(K?YZc4Blh2ket*jK_jv6u zoZsIM5dda$_p;kkK&9N}_jkHh$(4t#9%Dv43^Kh~2boaYpWq6OEE}Z*o?+~77PeLr z@)d-T#-Tn;x|2eb7FF~|sNOnQs2d4()V2aKPXK!GUzzZW<~&BTjTuIMfh(5${r3MB zc5|#X=l2!<$0uiB4-x)M{P4Jm|kZ% z`3ge7OOGu0>>E_{m@fsl0?W8j^*gTz{>Yrvh*@wSlM!lJG4}oK@siE!e|;3=&os>Y z|LFPg`5*znT2r*r9hBE@ivLim0;KDp=>;+5-Juch9%kQ_oO=uUYbz*F5F+ish)`{_ zZ5jseYf9=@t`{jn3Ik7o0QYN-_>4GTHr-Py4g&d2+Ug9Lz3Ls1bxVk3^^2^I5| z9J(L|nqGM8RdJZbH{{(S``w2ALLT`j1);r(7A{3)_$KqF3{(96x{GZ%h9wq>| zQj9VofKP>R&l%yv<*047tN@u_WX)<<&Y!amWMDcG3PQ9Z(OZxMkWxmRRMn=}?v+IT zkm}offsByM7s4Xb-_RubaiawQczL`%OaP$xj52F*i@N2rgo|(Fma74v=|w@cl>R*0 zM;91V>-|Wy9au~uj0sz?- z6fOq|lj;z_Y2}kkZFr19Hx{H!FXUb*bON0?#@7_d7+N(5nTM=(N5WRP4(QW^d-HpB zgxLc^xlrX>W2#TeY7SrDJ-yRF{F{EB-5n+X5Z-5n%R$up=289L;yf;7dO^i)ssSJn zMyKZdnj{IZ18e7GeFmdcZ6u-(?nrg@kL*60E%&af#nO=K2bHZgy10Bi)c^pT-rRpa zOaL&DWrg2bqpkkKx0?$$Fl2f`NSR*9e8W6Vw7j=pTT$o%c3@84CJ!GmOM2}|POqcg z_s3IdK?i`fuD&=nf_nmVMO?I+Ds>#xR&Ua$A2%jV0Kk_|2MPd0Pa#81?!q^#y)Y-Y zo#}2Kb`+a2ii@m*=xMp=o^@Co@sm_S`>o+aL|MBUEeU|`s2LQ;eJ`#uF zcJcA41U=2IK`nhqy`#=i06pWsIt2;Yf%WD4`WfjeALr7sY)!~8Ihz~P?e`amzR_X} zWZ3Ljzu)OPyyQ-z;M3)e7D@oed)^GZQvg72^^rJ`ymr>-3p%>3PQC8054v6u-U)Bs zGP`|OO)sWV+S@@904-cx<@V5!6Hm)dLX7rIZL(-jx8FaS$@kq8`F^YrPL=B2;BKSf z?#EA)CYk_GhYJAxtg3hVMJ{Rv;od#mBL2&t?5diqT_XJ?)0AL`gP7*)DEWS*w+=#^* z`K;(ZyAA;gqe zdXP(nzin*MF^G&?`sBWY;QmG%0Pykb`tSi@2m$q2vXF}V`-4`y-EMWn5q_?j%`97a z89hCj^4i%YjK1Hk;aL{`jE+)6!L~s4jToMbj)bFY^Wh~Hd`WS%Ziy<<=ZkfX6+18@ zIPxEi>T`U^nhT!G)bh>A7xC&$A65bU)SfUC@^C@yr#v#x7%`bR7ehAxgy_jI2CbqGkWicb5L2VFO(;Lbmsd%@gLMf zezE3a9)1zb=!*y!`GMn)1^(n*e}8zdjSOJlI{{t|0MIA6yi8NBymsD;M_Y+gb4&6- z82#jU4Y%2HnP*Wt+I7M6;f@}hr(Pl7(`BzedyE2o|Mi2J&7++Uxv_>f;vx*1I2ZRH z-f05>o^IbV0FVR0vW>iUo-!nmMF67jnZ_VqK)+Mn1Q+i_9M+)MB}p);D>z_#Xt*NF z3m?`O6XpBQ8MN>J-yZ+=fFSOC=yx}N5qmwKpI%P20RVe91K1+~I7(^Oj;+XR2|4oG zO)^`t*{+#I_xqY;djisx_l7G;( zYUSRapReDv5&x&A`-?XU0E8paWIbETYiAWU9QgS;0GuaX>i!!E*msXDA%GvC+?|KayJ)geZXoLa0{DBg{egME4_F?knwGIaD`|TSTHc$Xy zDTn;SGhhlp&t-<S zooE99ULL-`RRBOP4Uj3X-KZQ~XagGQqB;)H%DbTq-rh8LyY*5v9m_ronZRh(fX?)1 z^8Itsp`(^>it_z_+u?N@4&+>GWDdY|`twiJ0QZyuR4iM|Yo|9$E)BQ>IIiXZAmOVo z>quCLV-?Y*gQb1?r2Zn+pUL;fO?@kAIIwefX3|Ct@ZHZ}pWi9~M5+R!x@KldXaK0L z&F^CtUpfN(@%H@IhK6xuA4%^%y{Qk#_rvjy!$}Z^gFIgzPqlI0-`rljRRADe-K&5C zdF|Sg5xbB8@0P{c0ee!N**I0Q={Ng9$oF@~0M1@C0syDq{?FdE{HBp7;UhlG-G>ph zxcHKhCO$e+4(rRFT8dT{TrDIdOSpN7hXvRY@4?K11(=5n7))5e>j@49dS5;gnfQRz|1V`&@H?Y@| z@)D1D1KEkGy*$mZ7f77yyZt(f8;Ag|Y3gH?eShp6#p4Y5>4gvo{@WKX`Ah%;T_SA2 zhtPG6y_TL2S4KK7jXisfvM=XY?!xj{e+pWwqh3v;4B#=?_wOw>-_^u0@Gs0SMR`pC z0=c7N)3X<7O|;k2JKrs-T)}n?ToSSD{1?F zStl3pD_*{D07(FZwc|~G6M%r&GF2k@4eYh@Jsb7GWy^|=zPwgm5{fX+o)@@XA5cyx zN*>={2l)oHet)#;sj}>|?E8Gff9C876a^q^o@IDW03CIoW%t=#i3v*FZz>gUwDVoZ zo-n-bxaJV@jgG7*9dL(T`)0DKKZlz7gQor*y_3%e)xLjk3BXB145bP1o)ZP|umm75 zrde&a-QXR6dW~sU!gd!H%3o?oD9R;rQa|Jlr_39AOo|3~2KIfbsqdtB@*P=u3;bT3 zU9_QO08f|XGe7_uKdZEB4O=Q) z@Oi2azLSqT6F_4bN)zzOiC_i@Ku~7c0aTT{eQ1t?Y6!-X)YzM>2If2XbB~J*kg8 zJ#3fNuGbw3-qV@AM-;El=b_+#@nUBt2td(dt_8!BcQKI2%Y}^*Yk`GbR?sNw{&PT4Xq~?=$TC5|ts+QTpE4o;~P4QfLJ;8k^@0F!*0SiSm#D z>Y>VzHCO9*G6^76{Mr;iuFK|BECaQhEa=59H^FV`B?**!Db!}rCeeq`7Cr85Y#9jBLVFa#jZA7=PS0ED)i zaF*i%Prn*ibPu-f=v#{0J^ov!kZVJQCUz#<_sOG-xljlBz_#y$i{t#V5K3^g3*f7`PHekSm-ISI9s?;z=hy?q~E0?-75f1#*$vN=Np zAlDU?{UU&A@>4}*-cQJxY2p*EF< zt$y)c43nsOi#%|Zxp!y}CH#Y?{_2L=)lvFso^0QT7BA1ALc)K8Lj^Eh0Nx-QSKsJoeNnFg6-I~(Abf%Mf zm1-3qW8kIkAQ&vpFgdSlMaBK;dH|k7N&v*|rB{3#ZoiN6lmK*bGf4ofV;$<<876?$J<|4Q-Hs(I_U(;*`9DC!ysGsC0m3jdw3%zQE8!4LSiZ`D^ODK;X-7r@KaKqbOWQKX%;y3K|SeZ{fOSV1*zE z6Z6$@Nn=9!iJGkms21%{8VlZEUQVOmVA(6#R4ZOa^8?)zcz$@Rirs(}W-)r)rhM9n zU$pw^J*{@R$qp0bwAM17(Jeu+38L?8NwD09Z^H3~*6`ndgCF2{3{IOf!QcIh8CWZQ zFBhkuQ~H#qHCbYIm=O7zi?J*EU6>+30dWyO)htbG(-w8hW4p96!@vktKz0}-a`v>Uzeq6Y75pDge_`0XUVgE$-`v|ti z|HBBlcqh$Je|OHDVt3OHdG0obmJ`mNLt8_ZPGR`x(L?{ivj@o*iT8G5KE0kXCCbj* zbHi<-`eDyc@q*CVhQ$aMC=HT%V27{1N!2nSC1r7|KK8%I za^T8EllPy5-(Td~rDfR$DU3_-@AC>%>Z2G&51tAtn-N(-SGiz;8bZUUTQMKh{=>y0PbA&**Z64cPoA^>g94U&JAq|w~WE#S*{4`5ug-Q!-lVj2aR?9B4m737eLxA}mELQ~gMI}^pH~XAEDUWs@-7dGyk9IBQ(UWB{X5}2$?~EHdeE*6 zOT*N5Sp!z`Oi2V`{D^2JPXqYJja@RhICzSll^VoonEtvMXUk6aa$P;>jiUUR{jFEc zM!v&qh*IG|b;|zY{lcJ}kB@qYZRuTI*|-Pv2Ya$&^+yJz-AVc!3+AiSB7J%>_GcEjp#er(a; zS-d0abC)H+s&+F8=G5p5<)_iC0l=cC+y;<=?z=491dt%se_Gb zxJM2Abhb{qtaO+Xt_!HBGB$U2V-(}M2DI#4f&;{e`-a<_cK1`OZ&{`Isp|x~1}>bD zkxh8C($gK+@Q#w$!n(@LeNmA30Q3i4e;(dv5yh%fZsq-n@bCOKd2%p3%k@U^t+9li zAYU(PW2nJ!V$J7;5IOaI!DHy29)^DHK*m!!bj1G^y_v^$cH3YlpGP99pku?1ny%lr zQD8Gu6TBZ^rOq{#rl0gBZ(!eR@r<^70>p#+xmP4g^znEk7s*X?b-L&gn+&N`Tr;*I zxZ`L2O#64zr=|N^MYR9q(?^#KBG~6oj+SWsr_OM@M?)^}*C}WA=pJ|^0E5DTevA*g z=i-O<`(j4#hcBOp?{F~PD!7AQX`rY3HkAqurQGzVEv){Y8y=q9s86qwu8~U#9H~La z#Bn4=jV``UT^QJ3b9iV><%TYw!ReQUVzRHGI^NSSC|isjR-qLr zHq`CdJFWJa#Dqr%-MDravCRK3r^HwaKBIeJOq|s z@8$X}^wp^O_(<@y7pt%m`KaO-Q5k(c#Rsz)U)@cYfS-9=f5FntZih-^UElX7>Wx4< zbG9*5n11j9s&j#v4}@XhE{8r61|A*ih?<&?veioQtcbYZ=GOJ8D zay}#i5-1wbODw#)$-t7`m+8%mx&}z70)ZD#^Mtd5=USwoj15x#h&}3aqsG~v;y~-& zS$$@lFJm&iJhzp!SSum8Xzn90D3p!CE04G1XD2;Y&ScZIfF+9pa&voI`Ubt5Oc?(& zIn~{iE4u8H<#IVTta1haqu?1E7&1E*D01xmA(P|R7)g>RpqDK0zHdN4fGfvvs?AW~ zn%iEN>%`T-R=lPwv*K-uawZcm`dKalm?xMkaJDe+K=`@Esb5oF26oDi7G9fJ0EvyA z05S@9bYUVFm`t8L=1AVN^R2kliw0jVaYVi597_@*`Cs}THDHC0!}rESjYr^)Qpesr z37{uMKmoS^@l4{Qd&e(B_##@Ex#5u&!f-xX6g(((#6$2ez}?QqJ}d-Rmcr8CjRXWK z>A?$xn3r5vSb*wR!B#XU6kDbw1838>>mGs6 z_TZ?{JlXyb^w3|xu~`a!#KJ21iLraX8G@z6yrqCqElU{d`A+K}svrLD8azVfUkyz$ z1YvnLo$MlD$|9NT@LPr$ndbULgT<%}^tTS;(Bvn)Pky`!O6qgklg#~Z$q0lM3`kYf z067fH-)y&o)a7%|9MOvfU28*pC|qFO5>qxeu_;QGJg|>|+y_y&h0nWlLXr)aaFbV~ zn0$oEhm26k-qbXgCyRtgPFpTm4+1rUlnhST7jg)ouQ%#bAQ-_V!@UFjuP`BK;zihE z0jpiVM=D5WIKzr!2;`Z}VVq_`DUgHj9b|QTLGObFOaB8N%w(d&Sl%-w<^WX3x#TD; zf$DrQ^a>j!X~hzK@Rz`h6`aq(>LyD!aGR&>ll&-#;GA4kTIO-Gang{Wn?BjMRg~gQ zL4&8ODn?QuquW%e1BZp5e;6v!KC%!%lbGfgK`8)zITY^va~diTWjPag?8&8&F{ya1 zr59-oXZA>w*9cEh6uZ?p8qWE}c1ASKw#%@^h`d`cCFX;HO9wBo2%uQ-2dNdRlReX< ziNXviNzkd`qjMAk|7c+neu2Rho*EYM(fLozM4EN0@4;_QM16mjLb7#ObpFZEs;6dB z?R8qbw+WZ-4!;D^wyBaA)Mc7|gbUDS;|#cJ0QZa%i7Ge%*q82M6b}O8@ms3ZoYXVV zb%tfts0H$3+6Tec%QDSxPk}ROW_~N)6s>0Q#fv$tt0dLgOm6VC)AUnH#3AA_&4i&k zNy^O@0vlQi!RPkD;3D6`m{#u7aM`hUsN79La-S2+Dyh!W?J5f_;;4C!mlvI&ELW&l zC{n2~YjAX$bPC#KySxSZZ*m{Y0Pv^hKaTle0#DM$lw#R`?AV#J{ZA9~f7c~dtw1{a zeHD(KmQ_1b#wF%E8J)7}d??}zZ?etkc}^hYDXPTH@N{>t{fXlSS2=Z2#CL4V2OcL1 z&9>d()mGjyt0(xTB_3krUSLA3-*fe5Nw~(T;@^1&yp0-^^|igX*3X|10XcfqM+!Jy zgcEQ)kWgZ6ggQ!}Kn<91`8ZtA8T*$)Qw~5-+A*hjk7RQH$b`~XNzztx((K?l_j8b4 z#9Z!i>;6YW*h56+S^9Tnl&e^j~imt4{gK!C_8B%Q)#DK4qjo zzsBoMcXg9MY@=cbyFEF=2`q986C#QGiUWji*_U~-K$c&eI4L;mR*sx1M`ua=om8FU%-_m%{nD*39R?Qzd!7Se3_r9r zzQcl>zy8F4H>bWG7ce7frDv8wi65W;(NSQk__*rT z)rtE|h5%$RaPt2+d(WQPe~lv}8f__8VL)y}4oG;jO1} zZL1Z%kesfz5o43X`VGof2C*@)5`P^iRC_p@_QwAP-0hyA_I82L;BPnzdZa+M+mqgy zW7iK1)uz31_f?rzTrp;<8z)#bm?C}zdh^n{Vj@ADzr3bmhc(`gCess>o zoCOr#gKbhBr9`1Ufqzk|QPe@yLi>Z^eDjzuwXq$D!ICldOmV4RR{cr?99#wLRHdzh z%Z&8~a8?R{P;k)Tf+m#r$Kx>WKtAh#y{PKic8?`OZHO0xF_OSu$qfo)V2i{ZZrs?% ztD83G?e&T)cnU)U#j4B3s}lo-&pAPPX5jMEf$HnZSgZHvow;WlKz#SS?lIw>;^@Qt za_tOn1WNso`usnsL0R^O=3r?&7t`-d+4nnk`STQc46=((y&tE?Le$CnrQGQ8LjYY} z`?|F1CAEif8Y*O^%HlCNW8F&4zso4bO?K^Vt+EsER-?;JI~$B!a|o*v9z~>YA37Eb zrNOyQ+hb#gMdPH1f=>>lu5g~}1@S52%)gB*pV8%jTN9&glve$z=!-k(kZ(H{fyWtY zW53&kaeP1e?|Y72JyhgWa!5o+FYR765V6;3L`{ce?@y3o80%D zch|y9Bu_6rhaTVC+KmB{_c;ouGLCAt%WmC0ad=eFbW%O(m4@Y~PumP1RHtH$)q#sB zw?9FfiJrgj!D+gB*~Zd2Z$tW^mwxn}zr}@jIDcQKwN42>pFmhW;OJb^%?WRtwdp(y zRoXX`j;I`>ZvJ8H>P0%1nfe2q>DIr*#;$YlCRb6~ywK_^ydI$|nt4t<@}H}V%Uf$k z1d6j!dDyf^i5&ibj6_h&$A%r+aC2P=WwEGb*Dou5`1u@d8)E7(2S7P3bb?%gz_XaPX(<8w|7 zcY?G@;pB`*it83hTtdSxjm~@!kWkIC?DI7HC*5Q+;GSGM3R9D|N5rv>}H1! z*l+mO*Jz)t*)E*&gK*n<7oDz}TjPZS(J3X@d?GJF50f9Mfj|{?HnK;-#Xy=m7a;tJ ztl27IB|p=F{ncZvM$BJF`2k$u`Nen(104X6?G3wg?-5^>KUcio)mS9t1@1oUaRn$i zO)w<$Rig};0gcUHlV0s%fn5|z;Uk9_0Dk0U(p>vGfO&wQ{&m4F2*6$GTk<&su#%5$ zt~rYZ;7r@Aw`Ksm0+g7XWL|_u$Q@j6IjaYd6&0EeKqRYN)t47`nv($38E8WrA{aHYH)!EOgKT<6N0fQZhHs1M8(luggY1Hlt^)qi9u7I zy-8q>FYPq|I{{na-dEfpI27PH)!yEwnR`OqU|4|m73N0x8N`vS7UO0EMjiik!M zrpGwg<|V+e3X{FDtTo)30W9xH34A?e$KV1kD9W)o{^!x*djQ7%$k1%j_+tPnj=ot4 zh{v4-C?IsQLv-3pe;!a8PvVwp6fsENx3k$YHxbfbRtnSnh{T;yhN9ON15kXRnK3kC z;c14a_5TExu|?P$w`>D|FI}^{?wG=W$SDDEUNb9z{lPDVxM_r@R_2ve*TIk4Pb5HL z0G$h*=|}e%ha%?u+3@n^UrXj1wKhc7QZi~TF?>`Ohh%%-L#^UiH!T7US80Ycd;ln9 z!&%bxEuKo)yreXPd-2${e_(*PWU z@T!Xcb3~-N%TyIHg`zfVzWS#EF&!E+hq? z8SjvZNXrg~uU+C@;QWjnL`>RaQ1I$$6bP|nz^l00<2ZBLkQ|1raQ%O(ENPsMIst_K z^O#QI1ypwU=i1AUfzhAc#Q}gtuR1l^0N4f8@>yR*{KBu_9sg&p2n`cZxJzYQBEn^e z%j&IYt0?L$0N50i9eXOS-b4VDD-Mu@$E67XQa}PWeirk;oZLDI4|i$n0wOo?T>l$e ziFhcN0s8|9%X$E70)aICe!qPzh#0|mmE0k_V1Wiyn5pKuF99M_u3hpP_{jx!-dz9c z+dfso4#Z0i#HJ@60G-Gv-oI{ij|=FD!$FlnlnriM280DWximWmPbwDNl^JMz>B9vi zCE(+&#JZ^+F3>oKdUfJ^6H?u28wMRqcM)y`A<47lVgU968?KBah`;$6ogY~sEILK4oMcT~jLLjH|?Qm9}K^?$XU&rSp zNneNIAT?wfe4Nnw?fYOA2~b$u(dPVZ2RWmKK0%ghCq|~T2|y*7SJF3l^#ug1{*g+r zWT*ZeX9BzfOlOL1ArQ?M^Vy!q&jTVq!^rz+tYKCP55PHAZ4%>^$Va?5m+5Ly zEUH4os&BKyX7g7!`3x9<;>dLFlhYlfUGvy8h)PG?uiF*%5o=+WAO_0bu{8hPbK7eg zkpL=@GF6+k&T{M^A|~d(^3yde=zeu5s8SMu^dF^H$ODMBQ?kTsc^iv>EHvQsZ9M_u z6`KUR++yE}V8H0L+u%h9kQ;Tud4?a*KSQR6GhTw~W9j88bo=-=- zw(&h$r{IrI5F$5niQuA5orpn5Eiqp61nc_R!jR&L4+r6fOz)h~aykS&Vwa4U*9H4|I>mX+|yIEg-L&x z6|g6loco6>S>B7d%&2_{;lqB_i1BGgts|>UX$D{Yyq3j%2CMRCfuwM~)$gAKi2in9 z=0|nyh_E;G1Fce?t&l*2z)zDi3aV{ib44jhkHeVpE~^kDg6>X!zhu za!=$!T?>{CY$7qvjDj!V!NYOav*QUl22f$IVn}*-%(mbS-2gUU&=^c(Pk%_8c-cMC zmj?Q`;>cYdhgNp#$}qUfrLl6f038GLMObZ9NkP>*if&nGqRn==o@dNE17VM!5)d4f zthCIz+f-w>6?*_&xv?uc@_j0s3xXMA%*o;;{pyOx6n&h(0C#O~ud{=3`;aQBmrP223b}kKJ@S@UYX~-(}SL>&=+-g>k z7ogzwI54pI@maUcjWlOYP+$7ab+^SXs6&`tyVnfh%{@cZFr1?jwYr3oz#BWK(U9b1 zs0&G^bAr?c;NrP=>#O`QVkXv(c>+E77Xyf^h_u+{GEL6Ig}j_>-@u@7skKt2g7uocUn zLN_&?^``ot>~L@KrW5-_i+kh%cz6NuVF1w=@bRN0)7Al$(zeb9bs`;ee&z@pRG72| zpnNnr&*K9x1ZKoQ+!rr)e;95zwEB0ZFItNPH@>)z!nHipO#zV{Z_kV2zBib{jT~^y zwK?#F6#@@()mat1L0v2WNKf;r7e!w5q=I1feBgD=?AoG&%#^&_Oc3 zESnElB>_-+BEcaJMP}R0P$wRjEB%atXP6O1T><7gC;Hvts8E&}9rVgar%h#b1P^DB znOyptg~$$u9N1VMI8lc9(d0x`4Db?ze&xM_E@$wHOB1t9tgo@dE-HUjQIAEKMw}o? zAN8~*mYJU&7q49L{dE_!p|NCOud=WH`S)3Kjs6z>u;&u?$h{WPA zy|S84OvB*BRgnLVAX!q-`;L|*F>25US_=X=WJ-ZuVfCy_!r^%7-}z1qJyJ*5Qoi~c zFIF7l>pY#03<3lpDOVK4!ERU*0;0ckgae#^jrQA17~C5bCeV`xWQ=(sNqd137I4iD z{IHVVRJKobQ)MAmTzRX-3%<+WF9q-*2RTp0$Qgf?xzSvbr%NQFs zLC?)@@SfIC;_~MO^4h@dd-d*~phwr=OMsYs%2}$98+?z@7GROrLS}NFJ(@cO0H762 zj80ucO6Wbn)j?$W=Dy$HSQ8lLX3M^(*3s~-IYJc>d9qSWifS?V3o69uPvwA6EGoHX z0&sDA%LR_WFL!>+e*qTRb5Z(p%ph>S^rI<2Ze(wz6P|98 zY?xG#7k?O`N%IU>UYG{RXZ9Gu55h0SSp0Ulp;G8m6MWhZq79x5QJO{}SCpw-nuUyQ z^=Z_{qIw25J|)?`hyPW7)L;ZEnXiphCQlGtRDGWP9GMw}M?@0e|q? zE69rAp51Fy`n!6;({Q7AvPG=ut6oy{)ZxiTpwn-Ej7#v76N!<_GQ)f~>K^E{-(PN+ z`^qSHMGGt*jR8c}rzQcnS?;}mr#rDejys)P7+GalUT7XX1(_yj1H5d$D)OVlyKm8Jy4vli6B<9(Ze>O{$8}dnQdaaX9 z!t9T0#-ruQTVJ+9>up_C+zz?Ub^MmBy6}iGU5@oS(AwU@R2L|)o#ln@A6!!=Y-Z8? zG?kO+zsg>HIa>C_hUb>zO(Pd>855yTvw`}q<#2wd5~DK9QApN=yQ1rG$v25tcXFE< zYQOZ9hfsJ$OXJj}#Jsul0uy6X Kqc4W|C;tbO=$d-~ diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png b/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png index 6f016d64c766f6ccba49ff0ea838706140b1a3cf..a47884f5888fb7e43017fb1aaeb7cea7924a5fb8 100644 GIT binary patch delta 1130 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

MFBtdpaTVsRD2mi` zhEj^dT$9PX(dg>4va$gIk;7pw*?M}s3Jb_OI@4of_uSp=xw_6#QSZgY&s9~{aBs;! zKgBXK#49WN>+1aQ@Ac2lvsq^A@%Zuh?U~1O!QAkv#DC)9>-De8=B?F}^ZD;yl*z-` z?CJ9Qim=yMts|?@>;3-!e5us3)9jDOYrEa1RGQVg+oJsb`_$;f*y_rbxZ9Al+Fh(C z+VA{rw?B8G&c)vF&gJ!Xx#xPfbAAeTU*v&UiQhy+2QTTsI*g+(BJd_*VyIq z`26qm`t9=hSdYf7)|Bt|`+U7p*6GLY_UY8)@NS&V&E&i7^yS^{&~v#)$=dBad%UyE z=0TwY%H_K6_4}a5=7qT6mCAI2z+1%Nuf5gl{D1xYa;Vni?e*{d|IOm@U!2j-^T=qq zJZif?@Bi~^!$p6d$91khTBF+J{o{~vjf{Moh<%-BzCY>k->Du3pfN#(l(?2mW2g=o zdz?0WVure4NtmHlif0_S%i_}X%!Y_EhpE3g1#~&L`oC~A?00a|BL_t(I%VW^gWE2u+zzc+h z7&SE+G&Q*d1UXqaaRL@jK>;qHLPjoac7i~gi;+P{fZe>A0|B_t@^f%BqX;#dvkM3@ z2n(_|Bee1(n9aycL7+D{**TDuvF+>L&wtJyIi((1DF-_z&`&Hdg>3BXHC9dv332S~ zP0}_I<(t^qrCXKyvMQFON{hZ%~Zke|KONkxH|8KTf#>4cJ^ zbi{UuN@Run?EA_jc@-3xc~wAG$DU9$G&~`#R1a2(q>zohv`mIq0cf6#$6j{!$$vJ| zGYo-1`ouAiJ5j850-DFHAX)9u1>%`6KOSr9ZfY1C0pgj!ea+8qrNXSBpr^MJ5qKA8 z%rKo{dhQI^a;S-H>@^B9dU`T44($ApAZIi2X6KwCJ#FgLX&2Z{0tzD`3i;VjC&)<3 zSah>@v9XDJdz(SboHFV0-8=V+KYtkKuin4~v6{`pLPaIPiCr9KZ-J5Om+X99Q4tX) zU4vZFf6KuNP1qk;Sj?V1=QdEqqV%8@>S}g!VoXe8B0Q;fAq&*A)J6Yq^aaH=EBl-G zb1dGy)L}QuGZ1BBViJ`TNy`k)2%PU&n7q))IyA%+q>#mXQTo?UA3uxfGJhHPh>H3o zC4XC)t>f=!>~9dH;kZOcC)7wI_^&I&`gKLdOrjz@Da$f*)fS3~87$FA^v}#zRkaSV z4w|Q~t|OPTN>21o2SZ2k?>ys>w3Rs;-l_9u886FQs-d=cRdAqDN}xfmpQi|qh_0O7 z&$$dhg-nkAS%Ln>qFH|a8GnnH2CJ$1sj8={iHI?YiRwOm^yK+#Hdc0EIIdsksS%_a znx2&6n5=4@l+PprR08x)a9W~{(T(XdXWp93ZVrkWt_=mhj52aoXxLeMiit6arue9- z&(E6W4GPT(m!^Apxtxb6WLUdK%}zv@M^u#Qp>d+BQ2{i_*}T2k1%K?l+$370fUyl! z=(_eth|hu-uiiepdF3)#i5V~sf!V^Gy-v%`#f`6uy&00sIKLONvtPS@|LR0p*&cT9 zvuu!z*UUawLc&Et!fi9V6f8Zmvz=v+>yMX>SC+McWHL~us*|^ukazI~8VFCg<{%?Z z>B}n1D(koPKoaim27gN}`&xO+7PLIW&mI=9uWW0p+^;_on7IynS^Cy$X~|nklz?QB zvqBfUgKVR+v$L&o)Jb;szVKQtKE7H_`AYQ61yUKdBTC;n+BwF9oxPWVkB@I__@old z>i7{r>*{{r$5509ud5mc?$i002dSzODcO|Ns6>hQWZf z-j}%Bxd8!Jj>dtu-{tZ7k;7>J{QF&#$z__&T9C(#z+rl%(0@;d!e5ojVXrOz|NpuL z1(L&Q%}q^Yu`*w;EBE^SgSX&`zhA!9>|vM7g}UPR`}K{%WM`ev*X8nwuh+NH>3gr* zT$0FJk;i7TH2VDby8r-Sn$B#sK7X^_k+#}#p3j81;82Rh`TPCh@AvlM;l|nQ*mZSc zurKe##8i#ORe!4Bf2$$I3To?Nad?!mxmo6T;V%+cWQZ=TJ+8ynv3_jjVu;qUlB zeY`(?y#4@5spN^W&Mwb;me3(`IJz(9rwu?{=`={rLEXzgzk0>ihiu)M;t%^ZCLhCI0;U z-;R#F5D|$n3hh+wITenVRSE-lzZo=&h}@)a+-N%fsNX_xkqo z)YPWL;(xKv>GSye;qCTopV5fCTm1I+gvem(wYBAGAl^ zGR0l@7w3{PJgEqk;iR_x!nMg@7u0!BR_y!*;mkqAonJ1`4St4XGX|g^#m)p2$gpzJ9OU|LyC~<-JLz4eI6C z$iB^Hk-~4L)RbHvoj?+Du03g}+HJMwglmn|kcNGMsArMFftbI=jdhV>e2kGl|M~sg zuz$6Ss!^r4b(?80qg!sW2@Ii3AjVr?#v~%7HdV|300(+WL_t(Y$EBBdTvJ&V$Ip_4 zlJ_9-nd zSEu*c8K>^dZ127A-uqq>5@1(9>+g@0`+x5DoqNx{_ndR#J4hUkbZdBWicswSSc!!x z$>Ce291i9Hvzw){TY|QWgc}1rTs;1VTs#6d3Psz4w!}&|b6A+OjuRu^CiLCZ08gNX zO}@fy;ur*Bn6oZAMejp~1*h?O z!X{A)2!#!ftp-?`CyPR)t7|X|FN?&g^FOrK(FhkBghCK+1Sh)(*DDy*4*RcRRrlOF zXWwiL0{1|NCLWxZ$yn45`z&L%#wY2bLsu>Yx`VsNOp5`&wwZOc&H0kgGJk(Y=)32& znUQnB1HmqK*Z}7ht~N9{O2NVfJxTsPR`p!8(_C>FH4{U%u#e!fYS64+XGHT!3 z$ka(h71?B(I;|v&y*>6=VFO%w=fsH}BWq+xvxUux%7*VgSf_>CrB_U|}>Px)0E#PH>Yag9Db?WwC{`mU| zH8fEa$yyWem4xbaN#nGoO#>Y@aAx0BwS}&RMtbmjBYW_v!ur!+@BHnbpWY)R6sas4 zRifERDo0f%<73sGP_3%$hhZg*>d&ahTPmPPaQ{9%fgQGIcd(<2B% zLhuExYSVOepEg%g28}9m7*wRGUsvA&P*n{zePsl{$>$uLi`12M3uuy0&?IFnuF$Cl zVTz&%Np4I13*%$jv&s@ZXh=&FJyx&jqnp|W>B=f2LC_UR=g_dLn)*rOAW=G@pK5G@ zuF?{9UkRzqrGM*N=rU8QQBvB0rZ}aei#m-}$a{o@Pm^S>{<~;<{@{y$(|rBIZhZyx z=PHSA%?sM05-1;6^EE*B!DXNM+F0^ZwSelJ3IUMqHr8d*kFLxS*L+1b?bwP zqGCKmT7STdF}JvL==8&G>kjv7_G(B8cm^xr7~YdMxJ5r$Q6(Yp8e@kTJ1R6ft=eQg zk@%3fxuN_LD`(i%BW8OT+7k%H)e=0lRs4IO{_Lk8-uc#M3?D5wdwO~PcmUQj@*_+P zWMLPmq%^8g&96Va^Yg+RH*UQD0a%(HFl)GjWPdpW2ShNVwhvp|#+=;`-Y-nNe*Jpl z;#wwCf>T<9Bl`m)kOKB6v%!~zJ@8M9S2J8qNZgHuX{P{)$_T_pu#&&(2)h6qYYg!A zhQu9MyF=e(LNCu=zzoD>L@dIJ$hcsQ`m=-n@^{jAJd3qEH1XQ58Otvn4Y08*a+X@V z&woib2SO8A?FiXfc=^g+-1_os7qV017s*-ekDfo>VEXXRgb-E<={qwEQOa4GotnCE zkvtwtE>8`&mmoHWIi%RU%=D0SMj;7{S$Ls5eg&iW6{)eaQ>` zvWm~h2zMwfnB+dYtT>RExi~!(YeOQ2Uw_OH`XMb8ieHR&s(f%+F{hweemOG}qoF%l zI2EBnKXIz>Qpb{uEokN`r4D3ezL9B%k>ynP)R@=7sa#`Asdog0_ME?P{Vyf6w?4tP zx6O0NnUeXbiuI?uCg2N7%Kv*odAh67(_PADu7g33zYYdDUI+gJMdM2xn2{Zv00000 LNkvXXu0mjfv`4;! delta 2601 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 UOXa(plmGw#07*qoM6N<$f^nw}3;+NC diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png b/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png index cb4dc95fdd76bab1a03c4f96daa6e8bcea19edb9..46b220c4d8494de10f699b355aadce6ec3fbd014 100644 GIT binary patch delta 8204 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 delta 7548 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 B&36C* delta 6414 zcmV+p8S&=sHk~q%NPhrG0000;07l7cJ^%m%08mU+MN^8ywEzIO005}O;grN|MuNZn z{{R2~|F!@CR*b}_!{N690ki-Bu>b&DlE|_E0RI2~{r~?~j>coLF!)a-s&{d4Yg0|p+wccs7H-ESR0hPsWg}UKglgVM1 z%U`c6Y_&XqwBBK`EoHJZgSX#jozIEDUT3m3dav4Bt|g7ZV@ia2SovD|93Ib)g4x&#D>yyKI^YkRQUZnZvQn9PR1Tx6QfhQ3;5u`^VQ#D2Bky8r;N z003gJF1`{HUVoO%QHjIGGBSU&-TnRktpEUgv);M@0BN!}rq6|jy5j!&`o9?&O^3t# z@9*!!!-}xi!zd`b2?^PFc-@7CybcbF!D4u%(f8os#4Id?y;uJD`1RY{{q^)%tRYjX z8^IwVcdy*;zrXqX{`1t-`RVES<>k>_T>SCzYn#mQ%zwp%*w{yd zz{uL|e7;iDWo6!qibaCI=A@*dz~ADSn8`dm=cuU7O-*~N*6q5w>$SCYtlE~s<@x;g znaX$7YirnZbJAa6@X5*Qva;x{t*XX z?$dX>On<=Ms^XK9@z2lBQBiZD(9q|=_517b`PzMbz#Sd8)$Ov@msgR2pm=W@40z}oNU@c3n; z*R2v7MSi?=x#+vwqnpR*#pJTz@A*Z5zIL_alv#78z}}W=Drc9=g|63*m_?>E5}idA zmPuf`(&>-KY(;^;Z>H6VdYb6+;Fh}GlYu#^9|v@-JA9foh_6tEgDr(>i+`QP%j37* zxqqyYU>}cei=j>-#dKl!|Npj3RlrtVbC)X*#KPME02QW5L_t(|+U(eSOcQGs0B~m( z_(nR-$NoXvl+XYf_=kiLQj$KB3JD=VLnu^2FHs%^r9eV?stC%0D53=c1=Onu@j^fZ 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 diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png b/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png index 759f0f2b8025f08392bed361dce5427b8387e48e..fe52324214c77804d701f5e2828b37a104e9ed81 100644 GIT binary patch delta 7640 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 N002ovPDHLkV1gTuQ|$l% delta 1469 zcmV;u1w#6r4D$<+NPhrG0000;07l7cJ^%m%08mU+MgRZ*ZJf;g{{H^||NQ;_|Ns8h z_WR=Nupw7uaK>z;!j>2UB{QQ)~ zZ2$fJw*UaK008Q!fj0s{U1{ixKC z!r!m>`u*JK^Gk-pkHKa8{rUR+{!)y^f41OHip2f?{GG{oR*=VKvozD^!sznfiMrr~ zx8GN+Aa=0azJK4USdz)z?$TP5%3qetYo5>i`}y?t`ThO=>$te4&xZT@`}5Y;)^2XU z8XC`3RNRAu&QMU!Qc}%MPKLf)%R@uNEG+KD#KH^|!zn7zU0(b6`1#`E{`dEKw&mrd zq}`2;-;t4Yq0o4+-{hg8cdgvS-tWrdxW?eKiN0OD+JB>}#^0>gmXN{a{QmpC+U~m7 z>|vA0)91zD?$oBk-n7;2d9&W6!rnxJzm&Gx-0b$4%z4e-?n|Z+QK%SGsvLQw(W%gh z&*#8WsTzI0RKwTooyX_p@AzD;C3&#ig}LCyB!R2eVwcPH`22md-OuClb-78` z>d1hr)qiWVI%S&8`tI)F?9=r3@6zJ%h{0iZt=jO-&E1HI_W1k!^Ydq%&VXVZ1h$!Q_9i+Ip?n$l~X;DNSLwA7bem(B0p z--%rk!5JFNK|^?=&x)VJy$cF>nlggAQIq zigJ+E@63V7U7u1S;Fp*1+t%{Z(xe{(fx=kPMop~=0Lw;3lC4_GN=eX6PjsTuahJw+ zsDIaOkG{T2PvgJC(p6Oa`~1~(bn3jk(_mn_0d@EQ00MkTL_t(2&tnka&E(mW6$7Dfhk z4wz(Pg=;B8Np*7vOqzooD$B*-*)M8WUVp|=+v4OjWhw(RvMd*ahlZV|0-qH_ov+sn zRaGUhG*lKS$tSL$A*#^8pyWM$p0}#65(7|}2`mdV)=peg)ODdfP=mvKuT`73@7To< z1~)l^Pn<78nSnt>LQITx?Y8}AFI`|@$o|6(lx1ZINYdcbyw4B<^=Igbi+7*>{C_R{ zub6>7OoHLyY0-DjLE`J8q}ODmpOoY^H%~X=H!Wmf2fFUei=u$-nx*{BVc^cpI{)(R2Ps}*87UKeQ>}0_V*>-}Cx&^_|1*jie&i+dr@jAT`cYa~ z(!eO(IMy&hKVIwdV{<)T;{t|nGJiUTx~bZ_(Qh6lBZM>W?K~8$ zvWGze7#fAIgpch#a_`iEeGt!zMY4u&3|b$!f`J(*TX0o`fnmeeP3kL`1Al`G$Yz+k z$bU)TY-lVn1H)*Un&M)$1v8a_QDZ$h*lkXbzYQ=NK(b*B3@!|QKI)2U(-f^3E_FlT!cy X8|bAu7mu_V00000NkvXXu0mjfBSSKe diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png b/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png index 5e0820393627461c63eaf642212681b29d6fb186..ec81e49d70ecf5b8560a24d7e5052097b9702865 100644 GIT binary patch delta 1951 zcmV;Q2VnS$577^hNPiCL000i@0S+@l8~^|V08mU+MgRZ*-A5E!u|jM+UD~A|NfA|XZ-&BPKUu;kH*~S^Zxz)>G1fJ#B8zv0JH!AOohN_o6dWr z(Yw&+)#C7Hn97#LZ%u~5VX!a$|NcIFytmNkp~2vWtkl6HBY&*`0RQ~^hq~d8!DMB! zGynenumAvImdb><;9QZ&fwtdYt}3?x0DQCE>9e!TM@QFnb@J2G(OzD*007*FhEa^g zRgT78l*wb5%wdO`$~nur_P6$!{wI8a!{xjvD56=>Bx4k z+qKr4T&*UIz+#2GSkC10YPmk$ii*Gr497M$z84qSdVhMm3k%0OI^vp|(qm)nxw*a+ z6!zNL^Uu!2E-u3;DabQ2`|0TL&CSFkBFRHT@%Qb)-0!Kx;^FJ`+TrfQ*zEK8?_ZP2 zQ1PJ-->&-$#s}T<4o}ScaXYb0&=BcU9P*B!!Z_ry?^4HhM zCnU30W7>g%zy<@}^Z!(v)!5tUu+)>+?|q&C00de|L_t(I%Z-(FR2x|o#xENZ zAVxw24HhLrJWcT6F3pnQ?hD1WxEw09rQL3Kx81tC%euR}ySuyf%}kJ<HmVj{(b65_`Qa9eT&F#JLgkbjs6hzn-&LVbKamK?r5p*&_VB7x$vGRT_^ z|1;R$K`UJ-;1V2^1Yom~oWtR8xRY!PbDIqyDJa+lC`@m}IWG>RW4~1VKZ)#IbOrEc zQXquKp63u27_;pG07^$S!br|#8?bpH;1@c_q4kZi_j|Rk0=O?;(y+D`fILTr`hNk# z#|ffxv5jpsf9Z_?H-t;VwUV`SMQz~2fB;`&Mu#=^*){%N1gMoLCCd1QT4Ij`z5(Fo zflufVlO^@{^73!Y#*S`LD#OE-S_vE9B!P#U6C}Z!EE>j1X<0V`?2^RC=jG*vYn8P? zz6J!S$LiHcZ_mUPvL!y&qRrFhwSP1qEX)BO3<9J>Y_?Z=4K2MH6O(w_j>5v-g}a}7 z7Sj>(iHd=+F`b5uOrYZh!>+g6sh)-Ld-v?wdo!@k{_IIqLMN1XFz95z}nl#doIYZxGI0O-+X4&^aEJW|zb*LYD;*dohPfh< zh?}e#Je4z)aV(*@@1!v;XZqq53#uqC{_%(JzdI`Dh2x_p^Td@hnEh?kB;sgNyMM>aEA?M!;(eDuj}RCho+&i--HTw%=_Dd|t>v!<1diGR2VL66fj*p*;> zga7)QZ|{N>?9K2lOD=!`#4J`AI&VWHKZ<|v z7O)X*<~dRf@an#OoqwIVFEoSQL3F<>3GRrFj*5!rR|A;<^MTB=!>ZQj<8tHTVhNLB zZMH$NHChp6K?Ua<*A=xOwLpzHnL54M0aP-i_}&!}sfbiWcw<*B>TqP4Ty>mGCTmqc z@+80(euO15Ql*H9ViQJLumT-2<2K6#0-3C-5ny}WCY4IH$$z3)k9!#h7wj5yXOmhW z5ZrnTz*BB2rYfRtr!z!wyDka<>fM5-&1wuxa$}a&G1rluTX+C0L<(|C%smgbKKeAk z;}2VQtgD_+A3RbPg%p-$q|7IfuOISRj})?z7l+g}u}8u^7>EON7`BPU-hYDBjs
MFBtdpaTVsRD2mi` zhEj^dT$9PX(dg>4va$gIk;7pw*?M}s3Jb_OI@4of_uSp=xw_6#QSZgY&s9~{aBs;! zKgBXK#49WN>+1aQ@Ac2lvsq^A@%Zuh?U~1O!QAkv#DC)9>-De8=B?F}^ZD;yl*z-` z?CJ9Qim=yMts|?@>;3-!e5us3)9jDOYrEa1RGQVg+oJsb`_$;f*y_rbxZ9Al+Fh(C z+VA{rw?B8G&c)vF&gJ!Xx#xPfbAAeTU*v&UiQhy+2QTTsI*g+(BJd_*VyIq z`26qm`t9=hSdYf7)|Bt|`+U7p*6GLY_UY8)@NS&V&E&i7^yS^{&~v#)$=dBad%UyE z=0TwY%H_K6_4}a5=7qT6mCAI2z+1%Nuf5gl{D1xYa;Vni?e*{d|IOm@U!2j-^T=qq zJZif?@Bi~^!$p6d$91khTBF+J{o{~vjf{Moh<%-BzCY>k->Du3pfN#(l(?2mW2g=o zdz?0WVure4NtmHlif0_S%i_}X%!Y_EhpE3g1#~&L`oC~A?00a|BL_t(I%VW^gWE2u+zzc+h z7&SE+G&Q*d1UXqaaRL@jK>;qHLPjoac7i~gi;+P{fZe>A0|B_t@^f%BqX;#dvkM3@ z2n(_|Bee1(n9aycL7+D{**TDuvF+>L&wtJyIi((1DF-_z&`&Hdg>3BXHC9dv332S~ zP0}_I<(t^qrCXKyvMQFON{hZ%~Zke|KONkxH|8KTf#>4cJ^ zbi{UuN@Run?EA_jc@-3xc~wAG$DU9$G&~`#R1a2(q>zohv`mIq0cf6#$6j{!$$vJ| zGYo-1`ouAiJ5j850-DFHAX)9u1>%`6KOSr9ZfY1C0pgj!ea+8qrNXSBpr^MJ5qKA8 z%rKo{dhQI^a;S-H>@^B9dU`T44($ApAZIi2X6KwCJ#FgLX&2Z{0tzD`3i;VjC&)<3 zSah>@v9XDJdz(SboHFV0-8=V+KYtkKuin4~v6{`pLPaIPiCr9KZ-J5Om+X99Q4tX) zU4vZFf6KuNP1qk;Sj?V1=QdEqqV%8@>S}g!VoXe8B0Q;fAq&*A)J6Yq^aaH=EBl-G zb1dGy)L}QuGZ1BBViJ`TNy`k)2%PU&n7q))IyA%+q>#mXQTo?UA3uxfGJhHPh>H3o zC4XC)t>f=!>~9dH;kZOcC)7wI_^&I&`gKLdOrjz@Da$f*)fS3~87$FA^v}#zRkaSV z4w|Q~t|OPTN>21o2SZ2k?>ys>w3Rs;-l_9u886FQs-d=cRdAqDN}xfmpQi|qh_0O7 z&$$dhg-nkAS%Ln>qFH|a8GnnH2CJ$1sj8={iHI?YiRwOm^yK+#Hdc0EIIdsksS%_a znx2&6n5=4@l+PprR08x)a9W~{(T(XdXWp93ZVrkWt_=mhj52aoXxLeMiit6arue9- z&(E6W4GPT(m!^Apxtxb6WLUdK%}zv@M^u#Qp>d+BQ2{i_*}T2k1%K?l+$370fUyl! z=(_eth|hu-uiiepdF3)#i5V~sf!V^Gy-v%`#f`6uy&00sIKLONvtPS@|LR0p*&cT9 zvuu!z*UUawLc&Et!fi9V6f8Zmvz=v+>yMX>SC+McWHL~us*|^ukazI~8VFCg<{%?Z z>B}n1D(koPKoaim27gN}`&xO+7PLIW&mI=9uWW0p+^;_on7IynS^Cy$X~|nklz?QB zvqBfUgKVR+v$L&o)Jb;szVKQtKE7H_`AYQ61yUKdBTC;n+BwF9oxPWVkB@I__@old z>b(u>-PTt|FQr8g16sJhr(c!$XJfXfVJOZn9Q^Q z0B5o_P>8}(iNjoz$xMa8=kof0v)x~>EC2ocxdH-^!e_ex0DrIm0BxMj{`~x8u`*zm z%VMxFU9KpEx#47*&3v)kS&+wGl**OGZH>WWXr0enk;jg~WQV_9NrS(V!)fL4`C+gv zZL~a!u-8R_zk#*hW}ME8z+tS(<^BHrdav89007eE^OnVKUY5+i)9L&F|LL-_;gyw# zy5VWFI7x)Tj(@V)!zn4n+wNA6$9AsTYO^_tz+i5+KiB8;#V|1Y@9*^Z{D`mD1#x^$p|Ng-sAK>rz)oW}0`1j!N z)Xv`T(CEVb`uc;a)biBS@W;nSg1^W*n#@eY;V=8yme665;CfxzFeP^YiMhtf9<+`1}3OR#v_i7JIDNa;w?VTwKgbN}oGT z@yg2OqodmE%!<9^Q;o*letu4;6Zre}*m`=+PEM-E;`ip}+=GL{*zNP!*}u`|$wETX zU|{aNyMLz3==1sTz8Dx+j>VtH=kE6C%iZtn^7!72jb*6aYNFF?z(aw_UwWa;?Z3Z9 zfV|y@i0iqz@zBu1-mKj1(08TNm&bC9#%RgrxyItNsL+X#%yQ1>zwr0`g~DC$!^5x% z2esAhx7nVM$8FZ=#+%7_ceLSkx#*9(;FeKnsei=br6VxQMMcLH5Vh8tmc-_$(~WDG z$dtI;@AmTR^Y3|{H*vd0o?a@QJr9kZNvswgl%&MV?*7Bz^}NN~OOMRWEh$BW!Gms) zcZaZtdnskWKC2oA%=5;PU>}BtsE4#vj&F^2lfIOJIcuymr9Bz%!NiiQTC5=pkBU5| zC4UF0cuAx}8vpC)sW1}PTUfWY%&3Bxw5!3@v>xUF01D7aL_t(o!=#r9P!nku$6r$p zfwntoNJ&EsjDZe10!mnp44@DKVuBEc5dx$j#BhXTcM$|RcDNJ}4I|`#!$zG?0YAtbeorDk>q#_sjpi?|tukf#<9e3YETz@wsyG zakppEaj`r%KG9bx6!IY8d1cD<7_pBuGB$Rb`!i@;Y;2^|M;w!`EEC!Sh03fLAF0&c zN1pa*XY!K&S;;#erOAEVrBa`mETwP`DD*85OC^!w?L`83W(kV6iz6jcae=RJ27f5@ zjrWvzO19*%Z$GopqMR*gx#zbzB5*vZTdI5qOM|ZF)c^05Ng0L)0EJ@vpz6kygp~YKMCE~0yAqbT*Qct;HQJ#f2vM5m?_msvc zg`iCLkw|td%yUt>%>A=;sc2#14u6TnCtV4?G1AB_3-Mf3+`~TZL9ojT6)i;E5-E-G zg+#GboZ~zi7Ncr@>+S1Tz78%+;kmshZl6-JU%k}n&Oi=AB|^N9`*x=WSzPnQPX9QC ze;fxCE(`Kl7WD4zvIUR=*zWEV54lpGA}2r>7ZBaK?yv9 z=V*4oAWkgu=#BYd3m`34498<1IRa5Md#)&EaC5*{f@YQSN=o9q!W6)x*yG@~ZKnee z)!ju!RFbRfe4xjyf;>VB9Dj)d*tyLO+}xAxfr$6rxH)?^zz`2RB^-4i3Lx2?1un4z zqK`Dh+1Nw8B!Awa$2waDWjGK8uw*{a!uhksg+}@3Ujo%q$m$94vm<)2#4iJ?;G!)r zG&Edsx8d3`w(f2e98Jkc@LT6Mt92Q-ZPz*js$h@8hL;rX->_$&)qgk}Tu$PNgakhu zWhB}xb^>&PV^^Z)%EeXD(9E?6k+qGo4`nAZLi|EzfFbK{%%#yOupurq%8H8$4R^i6 z(k!;E8Lj??Uxr@@FTacvivdxmzx?&X{{F`g`yb;JCd<>x7=r^)1%GenE8;jQ@~?yKc33zR zzugtJN3_L#A5nNfKmZ=l-!GF96r-kPUFRKupt=&VnO8)!)u6@36v|YU#!y_-jZ-8^ z;W$AM7)H@JM#@U^dT~mxvCkojIDc~lr_EM_bELqLfx)3Jy^&y17%pQ?VKhTwguVu& z8`}ZejTmv*et(x$aIJ+0Mzq|4O742MG)-wH^2SPKG$J84GGvUVNQS~oWqNI$kt)n) z8evM0d=eP__w;jiz=oEH{QUfgn>XM1&PL=4s>`34%ouBmCXg$fz>z6RX6h^MsLO+{ zE`ScT28^{}#PYOxl#CkqbPkBZbGh5{2GY%6efa0UmVY-^0hCbVC@7XhBZDL%qjZMC z={`1@6ZJ4^f)UtX4kd-zv_24~DO$H;E@U=Y8{f?T@VD>({!h0s8BUUPu_4bWLy0FD zS~gx=3Y6_-$`H1L5!sIAcjPBY`BdKAY$SR-^$B#**_* zz!kRS^Zz`h$vkMPtANtl5md1>IRLFFq?$U=w$^H%sLw;MdYCQM;xTQxi6YR^LmX6= z=r9Kmw?69s%?&_@1)T-1Y*IgaO4E8UsDG=Q@JY05*+y~@mEb{?|7@sHlQhbF9-}KS z=_W9WAyG{c>|r5k;@0E-hd=u9_s_hRvCD!w(QJb~@P(S{uBfbpNkR)+y^$sxq23JD zZFCoO&}geb^AVRO9z9cD8+!G_7gikbFPX*sna3~4?3+fZN+T!J!MKY?DD zDm4!8*O^h@V7OY~P(+))YqV~liGS~|EBH<;fFE!`R>4J%4o9*_b&WOSG>tLH490CA ziFLP*m1{2?Y@ab@)3n*~*K0j5uge1ad-)I)Ym3zsn{-rDY+t8-_QCsu1ML+yH;KjK zFq5Wj;CW%oXMUB;h1_Zy#Yr|k>egRA_{C4&doT0#pZ*+;ymqGSFVX|c*MA3FwSGgE z1Mm=(s9Ozr^^Jx<{PA}`d>tt>Gc!86d7*2RU8xNA3ijd@ymqVOC~^oigSFO|uD*as zoHD&z7P;tiF0bWzUcqY)fWUFK;d5TOA~4^3mbmiff}=>zpINU0)<(HidOO^cf zrh>O#%zT+w<_j&&Ge7ohaepqLyu8M16)&%sPR$M;PRF?`&qr_K6}>Y08u}8I$ab7V zA6?@0HLta^ytFTw4^KvWZ}R4}$@^vR)o)(19XQ#~73IFVeAQZBtCoA6UKEIezPg$R za?s~reCO&h>u&>YBuwxn+GOXAYQ)4Nw1qSjl5CetumVtqYo|H_~D$J26NCzC}5W()7(_*ybAqMV; z7zioWq=2QwjVv#08NL>HuyP&bpTr5Z_Q0fx)y4M@L8Gu}7SPjPSuUVut(pNg3{=`hX)3lgW#~ zV1~Nlf3)3Vn9Ny^#$T^1gt+1U{{NH2YGj(tUX;pRt|(B6!+&3v%x1DQd$8Mqw%?7x zVqvf?&ff1vg1?T!WK4#_Y_&cA{ry&u$YQWC{Qdukzg_kHThVo6cmhG5-Gj zx&{VdmCBLBXs`kTcCOp60035w#(lEfy8r;sR8(lQHfNpBg16t?>-JNs8u0b{*Ku)b zv^hzG!0EBFZ-2Bt(OX+(u`_A2H=e!ThP_#?$m7^{cD@xA$v!^TYizv{5xfix!XhG< z#&F>8)oY&5iLTbgFfjAg)%M`v|NQ*aW@f-19{%_C%t=asx8bnWlvb-BXr9l~=)?N! z>U*u&O^L0)G}-9%#Ne;x@c8e(zP8z&?)K>V z{rI2A=YNgHYV7j(lFM=a`ucXF(0#p9j=JC4e0;YH2ld_E-;Irgx8L;n@QS_Uh_Kkn z+wJ(~=IHX^WUAif@!R+N^k}5kd#BQMxaWb&UxdM1f4We<002gTzQf=1%}q_tP*C22 zfvC;twbkys*6p3jdGq-F%;NKex>WoB|3-tsrhg+aMSZ$diNf>Q+4bJu>b14U6c6>> z+?T}Wqsr){!{S@5B!7pkgvMWTmBMhUH=bT8tQ`lBl0c8BQ>+#ql%&L&Q)$cY{=CK8 z&MhhMtEj)+r=q~%b-GG}ZjgPIGi9IBl1*lZdnt}@jm`7NkzgN`fjNMj!=5$_r9Bv& zLw^&gcuA%u2c$t6sxT6_w#-bD&!~czw5!2yGLG5+014$uL_t(o!>pKhToc<8$A?`M z+|4GCD4~dS4P7801d<4`AR2gzfk1djM^uz1f`W9pVngMDSkNnq%Eyj+^{LNmzqV(+ zz4zC9@8@hbg-E!*tG~ZC`{8_HruzwF+ z2opy6E0IWKX2hh?e3<|X1MR_n+*s=ta4_xfLc(L=_H}_aWjtb=Q0AAY^C5aOXg;`M? z@Z`yp&hF#g_iseI>G1yn(Wb3mC4Y%RG#eWmVUQj;-dV53LFaMX=kPClm%rZkOyn!Pewk?>H+E)5WMMiks%K9tju&uStaF zxVVz_Z*|>kQ!o^IAjb@8S0P^5OmMOkM4@t=xY;_E`0Eb}Denq@XJSUfU7qenI zBCtdv^x!0n5-u|q98S2@+<%Ezn23t~qX9**UhEOa$wqv8p9PLX9yqc+eln-{?VQu0 z`6F7mN@C!7h*!N1F(Vh1HD*M`5ng_zp}<-IMX)S2E=sRB@og(SjyQQaD`esw^s271 zOr2Z$yoIYGqJs32MD4T21D=$3V7X%TkC9d{zi{Y_lpP%@x$Q(o8Go!B1{A@$h#-kx zL8;3|;PFE9BO`h2<5%1N^#1R@Y;Aq;W$Ocm;4=kPGI{NDz`b{a#H=K#n?N)i6)DZ< zo{Nr_bte^nPEZL62~pVlOjVoR9&vRHYq)gB9Iu0 zrf8ZbNQzG|odqcjk$3qJX0iYq1Pp5#bIWPvcUgm%imzO~#t~KA>S3T!lc|AvWT~ zP^L_OGW4wR8bwwA$aWm+zJB`E^+8BNdBvcNLjKW(#Yx?H#Y_?8p)jDJQboCPIuD8< zmuMMmh9Vh1uTm!82D&OJB#x<5&?;;Mir6<_2Mgfgihn(=KiZ|lX3137pValXAv?-i zc7hrP34dCSY|YKjAo@VtMU#}0e-zT>1nBM?NqK zL{55UXMH8GC*|Ra|2`#&0;p^rfWpT^1f?U1a(^g9E~Pg^cj4nF?aF#csn+0B)wWk@ zbp%b}6vB~1hdF_kf8P4xTYwG=46r~!@YhdCG6!m_%PXlq6t%icq8Fv$Beef@kgg<1 zwDSeZ3T=C5WIy>sOHI-uj?`{8eHqz3i*}e<( zx3lR^LFc9nbShA{Tl#8X z0@i`*7<$p9%N)E~A>&hgIrfiaGn~rUnX;pKWvQXk;_}GDJ@FCWr8D*NoNa00P~G(k zO?nrJ_L*Q)0Y#7Cr*)-ktI8fV7>tre=JQPV)NI$8(^$=Py%0Y9US0>Ww9;a!ZdQJ1)#dS<33p=a3x(igA+P2R=T8kBuoIE%A3`ANV6Zd$!ay-x2 z<(93;I#BmM)4$ppmW&jV91@c3cYpW|YZr4ktU2W6>8h9K)E>jVZgLq*nlF`x@-F#> zgv<>=nwuPb$qEtiE;t%^u1*(5Xy>Hd?HvPK{6pq)3JE)W#@NZ3^&yjB&!MTVzMNdA z1{fQU5t=0t9Gn<3pHoQK+}&V-L^!Z@b##s8=8 z2Xoh{8n0L{1JKF!z^FicIlni<&!`#R{{34|m<)XD^r@*ev0g^S*7S_t5@X_~B{P0t zl%JpXd&&JJ`*1ZmuyDh)ni?-JC!=ClylcMJ+E{UL$&6@|{QUgAH*bL$I|#U6<7SRS zybUifr=Xsue~Dk1nWFu?mw&Oq8ZReDGkL8zHGGt^KAIg&j1KcRDSC+>=wps^bPC>J zF^G>cJZ?(#4x4C{zY*wWl;iXjKert0t&X>dxHUS_-`@n>!U3mqa&ruJ>aiR~M;pLn zU|)aY690+btR^Pvfx&JZ&dn!y(Shezea9z)t-siu=sj^5aJs#~-hbY0x=(QSX&B*S z&!`_U(8R;reK>LR|CWW~LJkKGWgp$;Yyu2&awHG4fbv^Mxt>Q~p9eG@YAgF_>na5G zFfd@(L2w`lWaPrm`Ab(QK@8+r-W@XA2$yk07zi&G)-ME?gC`J01U>@^4W?Nlm0#?l zas&s{s6O0B^#Muh4=$NfeNdMM!_L$m7zdijPu-z=>Q63EbNT}Sqe{{{CK+$$YWgVVBEEgTGgg#)P=wkHTe$yW)kq;fugw ziNIe}j>g;T^=q^|OohR^007+U_HDI3umAx0`~6Rc!b*j}WSY*1zg^(&_wMuhmBek9 z#cuih_lCY(u73akZk^45wB3@!YW@HJY@E$yu{6IK8C{dfxdQ|L|NfuLe7)A}*y;6+ zve;&q%KH5N)@*FH&gcC7`ugwh*?4%~i;Ki7E4&O0TdgI%5fRQ&QN7dY=<@pX*w|&8 z&c``9guGW)t03T#lH;D9_u}H{uC9r%*5;$5{PObU@PGLA-ro57{dc3#WR=RoBO}Q` zK+8u*%}q`6(b40Wm+ig1*K>2_@!XcU+;^_q(&6x}%H^KC-S_3?(_moQetyO^HI~EW zkiX-@C?~oH2gTd&{`&fYtJR>u;L~Mg+=GL`-mFfj6{XRLZ@5Bhz(nV%sqVtUrN`yK zA0Pbo_J8WKvhMZha;w;Stk<{F>hH?R>$tc0>FGp&y!z|w{rLE^*O_UW%u$QQ&sJ7o zlgPy}F})NM%ir*EvOdsTTjA^Us{jD3(~yJ1T*>6P@5jeik;%{JzktbJceCK6&Fz=R zbJ^?6eY{a+s^6MNTlMw$-0je=(Cgsu)pWT>>3{X(Wu@75xaVx4(xxRbp1Rud&CJy4 z#e1jIt`Qfo2@bp3qVo9euMh))k~F9+4x2y`n#_81hOmdR*rPK-gpIL~$8D-12#Tjo zlz}>eaFdK$cZzQ#wLL16lt`Vw-;rp9i+P!=86tk2#hYX-qedQ>QW~I8B6*=Wy{?65 zjeoqYrM!iIDv)C#n_DD*o5J0)wtk<;o3GFONCPkc01`JzL_t(&-n5u&OcQGw#~*Ah z)0r|1q*0m}5>k?;0h*A8OG#5qX+sNAh#fAjx8&%Eyx z2=tIPu&pLP@6#*UcVtY!9*B|M$-eTJy!@IroZ3U+iH$PlohXp&bOt#SA>IQ;Fmi)V zCoecrZHn?lyMd2t+e`zQQnfTdCSwdnwQvulHX0b2EWn_aW)1{KX^--OwWg?rY=5Ja z5zFLip}eEL`P_vA|EDgTYi{q53)OO&n2{Q@7otpBZ?Lv4zgZ{6e5Jx8&Bgam!yf7M z{o>{$LMf&$)ivk0X}5#5QDYrytgBR*U2JAAkR03-1+jCPi!%`&!KgdNqO_i1ZA~#F z6*G*mpc;qb1(LmT%o@Po)dfO^5r0bqifgp)U~SESR30HV=nkYHHVF1uL5NN{AT@|1 zP+)KxOH=F&Qv2gV2tZ9 z1Rpi!cVIiK+f(+-?xyLKb~QG4N51JO2i8V4tHokt=00;da;8x%RyVU@1AlTCbPQuS zWZrKsOEw=eFpO>i!)9xoEsbDw=l7q>lF#dy2x+zn9c!Zoj1gktfnUJQQK3FI4eFPW z4+zB(#(^j;1e!9XVrfAN1nnBi)3UpT2SG{!;xbKv&{mE6g0Om5hI5?IV{@;cK0fKP zFm^A{Tqq z?4WF^OnssT@(T<$o7FPir*K8LW74eK)exn~MfC)a#3dxU#G->= z)qwx_xU6+oAltym@B0JisNm$JNST%{+LAjsIMGe4>%2k;lK2DPmotV;xFa`ooCb+M zyRUOKB6sXIaGZw{;(sDXwEj#>;B<#Ueg|ZXvE4s+QW@fj^$U)ROAL-&@VBo^pxwyG zfQj(eTPpZwO0!j4K5%H9ml9)#{cJgGcSSG|AQqnUIYOLnxZnc&+L=`F8-JyUkGnHCI5;%+o)0p& zL-_-9+%%C-uye^Ai3|?q6GuMyzko4kU)*$Vt=@7R%CA`dmx~?1*jFLETwF=wm6|Qb z4oB?q(9q*NiVO?no7q1YpQGn|eU+XTuStJ6`NiDkKy!ZHaHu1iwwZe+R^ z?TCyF+ot353*K}41FPV*(uEsS@vR33$ph?1=RuM>_JoCierDz{%VYFRoJb z)b;+ux4&a8?}a%cV?7n-NGRMMwjVGCog~Wglt?o*$A7&M_1D0Ni@s-0e^g06XyW20-_J3A)EFL*U6%afax`Zest<+j3C^Rdw$ik-j4fn)G; zRd_fa_ypt9q4C7VXJzb$%WeN&ei=c zx*m|1Z_j?>6FgZTuk=v-+-|uL6Q0v{^QL3t&6_tHH~;nXhadj)^2eX`B;9GVmen?` zQ8c+M;RolyvFAyi*!rit;l_lIkB4(d`SZX1@PFeEFW>(}z56ox<@?|Lq$n5A1VMLC zchQu!7x=-r8`di|Zc=7U`LAz`3X$W^-hq|grn12=-x0|ug+M?nUVeBlAP7Q$qV#k{ zUssb)@Twxhd#3N|&?tpd(fH^;9A=4|CQEv6lnvHd1)LoYDR8myhoJC?q(_bMQn!>; zpX;h{j2m&*KGRrQ<;<0)IN~M}4@in8NPn8F#DMF1m)B_O3|_J{QF^8lqaZ6wc;7Nr zFy#q;@ff&Foy=ROo=i`y*I5b;i$%|l zBx~U-Z!nfPt3Ja`^%?jKV*?$AlBQB5+9)_SDm4BUW z-EwyYE?J%c)LCqIhprakSQ|af2UfwaUBG(eKYI4;*%XxE`EfX9)mP9++%oCP6%X{( z-L)>;P}AZvJ4fFo1W^~+h1p8gLJNHg>^8cG&1;k-Y{U{j`12PC<&cl+|M=(c|M{n( zik_xf3`@C3769;JttFT!{y ztzd)S)?6{;;i{AH^hE}X{Qj?h`|evxkep1=*g>5$tz{E7f$d|kY!_FQSCux-w02uC zT2-(8lC7w`1)$TS?*eFe&;n&DOg33lFXX$iW4Otf0CS&c~CY1=hO3i5p#u&XB4q0cLCzX(MS1q6TTg+6qgSOHg8) zhLT3CcNN5}bP@V0tO8ASgF6^?7+M>qFP0Jt;yXpMfN(85AN!TYM}+%CcR#Vua;02? z*|OV1cj+O3#m-6rb~BA>Pk-nI3Om%Ym~z1~+!}{&J+6{a+lyDV=mqrJ(8{%6ZGKyv z?kO6FvIjKgN)X8exm8I4`%vPE$~A@aoc=2JST$U&XoT>J2NsG@ur0M>Z?KWn^;^(H zE9kT6wiC@;x*_})^y!HScF1^dLpcUWTi$-=0)GWn0y{L~BSNsvLw~xO$5~2+bxlC` zoLYe*J=a-eZZwEc{w%g$wfgC=Yj;Vmi9cyo(s z<4WWBNvBpPo@9h%><72jD$X@o|k4ti!J5CptR`1CSGw?LACg(%uIyxiV}7HcW$E(9>i!0&G`J%1=flZ0!iB`U{%M6(qR z9H!}D96Ucg15q*BA~)e;2N^@ehHp%C`Y+6K1^KgD`Wgx?pddrA5pBXbImA#+@Ztub zZbBa0?Kfv2StuI9x{1QSciJyB4#Sf|xuMwSHJR99WX@eV8xO8Gs{U8&h&2ZAM;y^6 zs1luAxVjqqeSe416_cE5UO>x1RMJG_@D7{kZ~>GB5`G%G33U*fYzy|d9|8bkxtAtK z+Hjr5150w%27Jc#4!k~xCvS1^tA7qNa)v%K)Ol?I^2rGUTQW1y5*{IG+JihWI#6+k zqcEtn$>+I>0(A2nx=WGress32rEz9xgndp=fF|UzrhgI4fnkj!x%Bvz{EHT6Al4T2 zK#V0Pd-LPx9Hfbg;;w_E&jfMX2d=<7p=Y7&$r&f=icuj*S;mj%`oom`Gvs%WbO$#w z9-=eU;W|aq1V(a!5GTq>6FU|8^xJVLP+hn*3MTaP_nme~T%3JJXdIA`n3tDbp$-_I zc3gI0?0>u1GTcLk!%!*+sPiZwXI#h+vyPT9j0_%EB7tOICcz@fFFyU`hrfRN-F*0G@ z{C~<#xRMAthi>5Po1o;-N@{~>wD0|Mu69E1IE?(vz}zg`5b1bM^2mgfG3Xi{{R@fS zI{NytVv)5z-NR3jW#T5$Xm2V&zMB{vbwbO)7Nf`s2-guJ9;;k}@J>SF2l}v+SL5G_ zXM$|p9#o6KmeYczs!Y@t7Y{cP3#i8jLw|jjSw>y{5WHoFoGk-#Qq=#s;5qXC^3dgL zbMXl%%mhbEOZXjy@3h7FycMg3Tk%5h_JSU$@i=(VoNt6~?q#Q}v|Qw6V#)!*(?09z z5<4kgChyYbi%eU$23Ur=kjF7G14{u11C!tQlr>R#z)3neVF6qNuuEDu=n_w zBb=A)^n)Z=BK76hKmGW3QSiK8l68svomvboyS^59Tbunt2ns9rCh<~_Wd8EaPd|S3 z&y`D;E-CMzh5}*mWIMzw%C8n!tAF;y9^raZFE}4bDGjha)O&OmdX=DJLUKMkzS5wYB(l=jl6@UyWK!1N!*eZl( zvl%9(Za0murutj9YaOs~4GM&31~Iw9rk|9y!8UHyT12Kzb$H#Ky+LKF+04&MQA5@( z#na^}T(EA*U?ATz+fv9C=G%|f-9(jbN8L}$wQ8|x%crGpqC$A>{n(i5bA>^9aqVqm ztRy;WS+%5aEk)uS&c0Fpxqn%yNHL{C_lt+{R1Kx+8|4sHbz|jasa&ZMsyn2yTGVAJW?35F*wFwUo!e&R{uD6$U#H)B@loohj~yMe zmY1br52(wZZuBq&Z>8D{iv4M(P?+6{owx1{CO+7GeR@p21lR*Me&jXJmYPkXT|+t8kUl}qKSvIDA2W<9g<120Uzz(8Zw#D%!93}qD-bLDm?mphnnmzpVyF)Y}6&eHF=q^8kJ^gEg26FUgzNY zj!tLPr<*|lE-%ugn}5o>_551j${$>>eN+z-rtlgwfv0$I8r7;%6~1>S+fn`c;)DkD zhmRu$y;*M-nckfQzni16rkF;v`^2%V;)E=63}{G`Ubn%#4mg!tlvDYN1UZHT0m{9p zh)!?T3C!#jfb&GA$*X$z`ubc>fRa^m1FdlHq&s5Pi@>%dcz=r+o4a-V__{iygycqo z$Owje@Oy7WCvaK-F66P+yxoO|KFFeGO^A#n$*KVT@OyW}3rIIM0l2;}E*{UzE3C?S zt1hc{HzBK%E+iYAtcXOsZkC+{9|!Oo0Nq+xRdw=}54ahDBq3Q{eXexr+?@}V5rBJj zqIaBAS@mk}$$vxVk7vgUq;srTutt(t5YP4Yetzq=(i@5B6CP{ktG1jRn?8dj=rSpD z@9j0YTd`PhBl5^?ae3t6y?5S;&p7wI{pNK}_byEg&dVb=CV?oS*Q?WU^A}x_6-j_O)Mcj_CKbU4Px1C3D^^VKl0FTEZ)y~dE)(?q006iF0Y-wqwg3Q> z#B5WF!~OsNR*b}-z23C|0I>i7v;Y9J004ot-d~lT$0FOuqWnF0Fc6Fk;7>G{r*~z$9k{ZZM8oB`~0~B1CGLF zTdpUGzg}sd(XRjimBnpOhr(Ty$^HKRU#}~OyyO1-{g%aUhQ3>0mdpA3{ZWdSQy%0WTll$6|qgZl37 z)oE${^z_T$@b32Lu-29T|Ng%g7Hh#n{`&fVw&2j{z)+|b%SA3H=)xf(@5jgU*4Drt9^jFYxY?hR zxZJzc>%Z9UgTq|P<+!86;>=1)=BKCJ>h_n&b5o4Q)8z8l>&k-4Uw*q$WvkzKvfr9V zTcpnJ=c%ch#OC_^_~Gx?u+i&txkjcZG^r>H>VNg*t`Qi2o5FUa(t)eh+w9Jw&4GKU z)MuvIf0i|!L=~FMdvv+zhjo^)2@Uf2?(p{e%kBS@T^+K`=dch1bcV2!k3@)cC3dvp zvjYa)?$Jr54UxU!ilsf-fA36k#C_S=d5jK2XpK5{n};hm8p~O2mDG0YwW05JEt>f&c~BB#@9L z1M4Lp(=F+B#w5eKUlT=z&S!t_oyMMdAK2+QGnehPz8;n%w{|m;g9iQ0`uFC30?1h!d<%J-TOD8GTeLHtexs zk7ap}b0B)}z|oN7+++3Oi?GMKh%JTShU2hrXE&ZwDwQ4ssGZ%t4~{oT;EQ=`$7S2lCwD-pI7H$gJtC-sg8d4$StB zz!G-6FHfb)G^8603Pa)=I4ez7vzM>>_3mVY%J`8)@< zT`X|04@j(I_!S~R>Hx)11dwhVol!QERPUAopmE=YjS{KwEHX% z-6|A*z!B@f5<4rV_YQ0|g98Ic0rcq;y|G^4&myw+dn+HQm(mG$t+d;e<&0*-?EyMOwPb~k`S_eX5f{+P&feisb@tb}`snLfB197p&dhfaU) zFJjw+l`x}M7!=!pVF$qkGpPGOOE}J z!$0@A@HSw~RiaNWQuV61ylgjkb~fCP>FHRX3ELX1gm-r{eQ?tadVf`VUEf#Z?hDTz zyZ$6}RvQ``vq_<````PRB-@p`&PN{^461~>nRgowZ}5KXiFVcpI#k=c(^4y;PnEv8 z$ohnd`VHrw=xF)obIV$7Oib(sh0Z?Ty!KXLB|Ot_9#;ocbrROcp-Z~|+>_Zuo5(S< zcQ!4)rQ?Hn35o;WGJog|GwxHDuj3xTSnO=fA#cTM(>~sT<0$A$QDk~c5%+prepmSu zPK&eOEyRXmqrY2_ ziO78T@ZlTn!w-Kc?x;LzUwqtUFJ!Hjc7LVDNShN>UP>4blnY_MJoP6;et7fd&4*83 zz54OruO5BE#bPD@7QFtUey(NqH&w1}ot!v$x-j*8w2i={Z?ie7^0=w@iF|ypE>m zZ|O%r{zNehLs2wML_Xg!SnL-(VOGVhlPaU$U!lV^h<|h+GmezCnyRe%tiW;cG{dkg z%Sb@>?b~lDis3nq6DW$Db`1Lg!&5_%7uP)DgS%E&fcEOzA;*ZZli<=ki{2!M64UvE z#xDf6v2A$BK`|6R)a84R@%3PiOIfEl^Rx9}xvXJpb?s=gPg0T{o~2~TNJ_#=j#<)) zpZUd7`G5LOmSU|PzQLI32XRGfiZi=+IBXrUy`-zgWNFN2u&z8|JV@6E!ZWPE*s#F% z()mW7oWNVUhfPC0_$;jLq#wt14^q~HAKY?A+R1EhS-CyDXq=?i>gpy+K3RfK!qVkN z=1O;ISdBpJ0E>lf0M$!^SXd~?wZ9BazV`U(0e^E*#+uAU;}DfBaSQrQi}rFI*cK)#lsQs{pogX{|+Z@(5IlD*#4OXEU~q;I%rw-xpX3zjgu5=8TM+_wRpS z2L-!%X65C8i4&&K?!{&p-DN2;!{6yrfMERW`i4!86|8D3yIEsx|@ zQ~4smh*$;#C!tF$h81=I<~w=gdN5m;Wl z)K$=NUPtR(ktG;of$3?qm}r=g!*Mfii_U1odd?QVscpCl5`Js8XhYZrri9mR2(tcsM+g|3p!_ouL z)k#<#D-@0ZwDC;&D0CNALV>OyPGX>K7Mw1F42M4)0$GLiU^%q~S0A^SD4Kae$A3#i z){`8mDS6_IB*m|;RJThvG(iHRyG+&EuE6{x5X@AhPgF~c-rAwwR4_R@_5V3681#SWhRRT4vvll%? zM(P|wUs0M}kgl{leqe=)ip<6yxd?IXofVZm}7X zEi6s31V=7I+l-6Dw_Dn}oddb7oG*jgc{ssQ(gY?nk3Cr_kVf1%ho!NHVmO>i-PkOw zfU#~QQqMMvBPJuRg${^ZM1Pu=>&RW`YH@{2-SD4D+GeVdF40|S%;))5XI#&lN^1(B zi)KjA5tzgBHS!e3+e-6R4YUeO{t>7x6h)5jaaiVt3ZN7NfLR{onS3M8X@TQiyM`IT z7ZgX(Hn{+vRI3}BtQ?l#R@o{|p3xDhu*HrlYbV1C12BL=#>O;W!GEIibj?6JRPg!p zu!0*?3N1#9skpLJe$LAk1Ow10y^UC&W!$evR(dhVvo9^p6*l|O08R_{VNV_O-{Q?S zrpYUc_EEfbfaY=ANq7k|w(EGml_-?A@r&P=%nTB{j;5r3~fmk7@&EX)fh+L|h0 z>iWS}3cg$!9fo)ED=YIT0Z$4GvtA%87l6a?gagQV zTEur%269zs`G1A7u@qN1zXp)q_pV;Odapn+%j5$Vc)uCyGGQaiJp|i~K`E@pvi`xb z`c$5@4}8pASB5GkT_OkxU?)9^2kPh_!K#DE8X{g@_1?D5zdz{>AbY#JdwUBqS%*&y z_)8})U4*4j?e7G$u1n9LJydzQS<0iP4x=73td5Ct@PDy}>kai(z+)&TFY-cJL$I~- zo7S$TKtO%_AB^noEeMKr!^9NyDUe7SKF6!?6opgCu`ZN5c6y?%pC`!s7&(O>j(1Mt z85Rl66e};%*_fVd-m!NlPW4o63l~Z2pZ8`LuvC1vDE2lLRBGP69yOK=06f(ioEMjX zKLGB!4}Ypeet1o?=2c4Vs~-y+iL)`(o-#c2Y+*q*qXNY=Ypcoz=Z=n+?dEMmI~!rD zw+m08!_KCz)-lMx*j)we5FT_M{(;jc8ZK-fmob&#de%W+yMh20K4Mi@#NH{_i7Fsk zfX2JFiVpPErP8@R7zTJm$uZS8_*LiGGSWzLn}1xZ$R?zyWgRcF!5d(4A4(mlDBZC; zPYA_tu(k?C9thzg>^!*SIO80Rj|_pQ3$u$EWoOGqa}2 zqk3{Vg`xm_$u;PExyhtv$z;+rb3JaF^G4chxfmauCS&`~YV=S;fB~&)Mk{}3_>w7J zg`SYY8)5LWCwnb&b%adThbtZ_Za}i>NUmOAxS2B;0K+)m^Yt#o}I~ngB28Ni?8}(vRdgT|192?^s7^^%|YOU_grwFW$ zV$+B8wM$-cBv-8WUQXZ4LZv~4>&>fW|1{u&2ox^h@c+*zYYqQNO#TI3>EXwrS#4o%s`Mg6C zTUxp1#zF|36_bj&^RqF#rdGVvEI|i75{V|3BvuA&P-exFQfZrcu}jSWS$`FqtP6v? z-LbGnr7<3t%f&U!woWHeMT-O*qos7u&&C^-%T+xD61gW9IlqGe8`Gntw23eOpR0OI zK61scQduLUaxmbGD6r9Jzx_OZHy*ck49E)29*0Ip%E|)IryEEaZ5!V}%X9&9Z$LTT z;n%51G7D@Y!A66hi~C)?VqjG-;_vO6`-H4bND?vUA_a01ZQBm4F=n;jP}}>*;W;7 zBx`9_`~9ALm~jHU(VgLT8(z2Vve%?wYh~zVf&mRyFPy(5_doM{2!HS@_o|Kd*X%Xz zLq%M$FVHNA(P-h@;T*Zg|I8W!8&BF-)hx|j#uZK)r%g`6V7l_4uPs`Re?1&(K-uzW zi0)8CXp0)DXHRs^mH)f1vY6-ze#Iz zPF`bo(puS**1Vs*=Qj#Te4vr6Cn0Yh=1E~RT UOXa(plmGw#07*qoM6N<$f^nw}3;+NC diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png b/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png index 9066b7f816270d506cef07c69bbe53566c2e1892..9988c1380036496292e974008153d4b6a235ed2f 100644 GIT binary patch delta 2669 zcmV-z3X=7a6q*%~NPiCL000i@0S+@l8~^|V08mU+MgRZ*{r&#_{QUm@{r>*{-R$<1 z#B51}zyAOKgsas5|NpT70D`vPQHjI;{r<2309ug8XtOqDvNL6t%6OyDvj719{{CXI zFJP}LxB&sO003K($dbfrj>2U^f4$r4^<$aMwEzHJlgYUO0e`mu07ikne6ie-!)RcZ z%Zb#)PcaM1a2i{``~1ZDyO!@b>$DrqaC<5|+hoeY4$$x#4WIJnQlJ zywd5R!Qg9}%Swd6tpEUnxZwNn@VNyA@AUdzt|)4=If%RBz#kvj==9?6_{!ez=J5G% zp3bhy9Vrn@7I^a=I-|B zztrmU`R}97gHov*TaU)>z`%>Wg-*Vll-S|QDv&$ai!FoKU3k9l$cCn?7X~(wB65G zSm>;*&)@I!_xs7>wfg(_zuTwk^y8eq-)y`?Vt<~}^#A*Du;1E#euB(lb-L(wx8;I# zm#-EPtjOc9((JX&<&Ch{^Z5L*(CX{>|9-z!Zn!~zl{RdqF=(qXXr|eRd@9Drp^;%A zvknudD-4`Q6{jC6dW5TOl)|8(UWKbo^ziH5v9^r2T#T1PtFg+NZZec+fT2(#q%l9K zFnZd3(zo)i=p~~fripwl1f0@E|WN6a>00$#UL_t(Y$DNl4R2tbD$3GCs z<{-{03~@$KuVMjIo)NJVu*ZUFx(}ZvHr5uqt}(V~Y>DaQsX3ZW&nA1)dpSwm>}LCJ zw!Pka@4ep{KmpD3z5EXx4#WM;_i^WI7k}Kb*1K=W%#9EUlUFRGWT7Y`H**69umHdP zvo6f!M+n+)Gvv*kh z@-{L*@Hoqez4^vGKg$lx!uqVWmPm05#{LJRz%E-Yjn}XHqt*tiwrAScI-{Pje~ZoA7)9Tkd+ol(?}%+wskB(C5RcV1 zpPkV<=vTx@vG`KO+gEI%0UR8}SHIpEq7A{)HeP3gS|V{m)lgr;55gC!;V(feSZpu43)`tJAgLW|0Px-jp@vVvd&Hi6z}dGOkvH|TV1tF z;>P86!qA7GeEjhz+oQ#QA8ng^qG^H`=g~SiFe_6i6tX+l?4(4(#gbURoc!IVe|Y$( zzukX$91+zOKH>@d&26?yLzWOn)8G5^YeprpMS~ek?PWswgrdP zaO>{6l9G~jci#rJ%@Ef(KKF9y57 ztT8ZV2mviXRO#8K;eXLWeN*||6zFRU+rd-|(*nbZ*I28Je)XH*{{D}D{;ZTDQG4qM zC6}X~$;zo|b9-x9?^tb(S=V;sta(?_jVj|H-Bd=jGTRiq(>UkWT9t7e<>ym~CIpC< zBZPX&^<{0w@?(ZwP<2Yzewuz%HmNstL0cu5Ps~x&UtYTemw*2H&xs-(K~p3_Ql_!i z8F>wuNQA1(59uZfYaaCUc7bUUG$!cKpRMkyB1Sp}5YnB+4!8W{Uo&H5hKW2g*fl-M zg{lE#(IGl$fOy$R^p+jd7)(=ewCD6u`AkNwhNej>h#=^ZiIe!@wEVkTmtihC-8Rat zH3{1Fy5Yh~sDFH-uO0?e0fXaH<3$yS(ol#%a{Op1`u?w{2g`tYuE9Hx5(DsPZtx7u zm7@;mX@zp5zB-6JR@kh0QZZ>Lr3w5JkcJ=q^!~$7fA;eaKft@n#_*-|c7iG_?0S6| z#x(L~=r}YX$e61oKPcTYN|Q$;`{gR-GBSu`w>iZvPl;lak@)WG(8Db z-0~Z(WYc6vGeUyWQd&UJ^5&xzFAo+O+3@;Caq;29hl|7BWkSfFuQ2lfZuA-|&eR%^ z01<>hfD9RxRS$NV%WQGX#;of|a_$Z13(3J3V{+KRT(awFH4Jxm@* zBsjGn=YIr5vC3v@jNM^P1=0x+dHlye`Qi7!{hfX*#3qkqp?D_xMg;@}L@9T&)yal} z>D0tb)A$d*``+!_x8M7g_bqsfE0MUgwpRifG9b#=+7|5&>#bwLH@)H*rKRCA;ptLf zhQh+S87ajar;7L--Uhr6Z~9;?EiKL~?H0~LH-E>n_KH&39fs9iVC%)M#Z>AO=Y^H# z<#Pb{jJo+^`uN>&WtbAHJACJob=VE|#(8^Lm3qGa9lO=+FC8ujQwCy%`F6(xXX(aq zA=TR|uT>4+H!tEkel;;VQ0U8oSOsq^-8dL_TZ6avDn|ID!RHGADd9rjKwnmYzQTm3 zwSOxs>tkhCt@4RuP|@=?1%^A2R@9|6U+_MNDMqPY44M~i3CDWgwNPhrG0000;07l7cJ^%m%08mU+MgRZ*|Ns8|{{K{q#DuHVQ;Nfs z#BBcl|3`zsg{#!I006T907-+uu>b&qw%@V<0F}jUUX#hN0092{{Qv&`UX{vcvo>F^ zDq4`ojlp7NvNO2=0J{JHW3e%Vs??IiX-kH}VX!U!|NoG~XMg?v{8x|0W}MEs0|Q%< z$d1BgezV?&y5VD*&109$V3y1N{{8g%{ZEI&?Y+H#wch^w`)af~y8;4zvfOT*&8+|c ziN9WhxZuGdA>Zlq_4@Mv{r$cb6-R=gc-SGGP@y^bQ z!C`!`+ljm4{eSoN_~+;7tE>F;^WKVz_v7QDz~E4+7W(k-T&^d(2ng}`?S{QtyA2M} zTwU|l*Hn(im&S0v)ashZb<0CS;+dK3xVUV!Jk#d%X`IdP#l>l!(AH~f&QVdqB_+~f zVb4}o$v!^JN=n8vGs7n*$vQgl%gcwc+Q&9FhqmA0k$;hYx8T_7$;aC6g16vMi^bIG z#qRd$;p+7B`S14p_TY_;=AfT#vOCyzc6qVg$Sf;rz(Rbj*!=qYcDU#J>+0#Uve$5M z+=hnKW@ea5VD7=e=cc9e)YR5!XGej(;qTVW;_{Zm<-y>tpv!&d@Aq-IL#on@q|b$g zt=F&9k$>Cj^}-z-`TqaQ-6Nn+o$mL z`kcPs{QUWx#^(C__k_Y+Zo5K&xln4UFk+t5aeuJj+I@Y3%wc|jrJyrJf~3vMMn>hN zq(*+cwaw;@vDf7B+{50j%jLWD+S=^+|A4zvf0j09rrF2Gp{v)DhkPo~#L_t(Y$EBACR8v_aY^aeicbjM$_V|2XlR6`ma8t;k>#g01Y9!oQDk>%7hoMTq58|m{n756sS zV)}~sn_oE#aQfK#nB)+X8xyl~yTu)=+QHmXUl&tI(fq^9EqyzB?1to+5RQ1~N6m9I zzQfx@F6NMrtgx&p@?F#e$?+T^$>&C%%}R}g#R|SJVcN6@@v<0Q!?=&{&3~R9KN}OD z{2ufqlAB|q25b;bBLoNEX(gIB%J$^s+cC3~Gsx$h*d8ktk8T0BFp9+xVC}iNvAE@; zi+5mF?%wl9SD$RZrW|~%qHZY&7U7j!aAw4GOJrkN^ELa;v)>Oq_uKCS2N0t!qUymX z$*kJJ!-{l*!gmGOaZaLHGJoh6)|w>_ySC{R4UcLl_Pp|!WOzf5UFSfT_B zMIm)uAy1i#*}7Luj{3oHvC?t12#y#-%>kv#-Djen7gL(?=8qq2iF zUHY8zN?9EkwEBK%*1{Tr^cSo;_?VvP>uP(yg71)Q)DVK6_|Q7Yo(3S!si`RLSgL#dKzBHOA&T zXg6lIqYkB3L(`O4%rJCeFN^0@^5+iu4qaMi-$7Q}EEqP(Yk%}*(D1ZDT?42NvRms~ zTkDWiBSj2CWNPVwuhwMe09lAhZ7qxvie%aKAge?zVC;s_8L3`BlwAXj8l-}T!Crw(9)cd_hQ*y(|_xVVMx zaj%X^Yk#=$k_cgV1SY)16m&#QHRs`nJmTCjaqfOwW|2H+E*l`~v3rFPLQHr`8`w_a z%NKgPo5}W zYNF(b?Sq53ccplHd2@Jqr+CZ-cy#*GAlD!c*MFd;^R9GUnOqNVKMrrdg+vYaG~+tm z%CvDb2f%T!6mLHdj92IU}!nuwRN)-SA002ovPDHLkV1llQNl^d* diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png b/resources/images/iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png index 23c131b970760832e859d71461429f7fc7796214..e6c6d18b5dd62a78383aab9a12f3d0a96411650d 100644 GIT binary patch delta 3880 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 D-S>R? diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/Contents.json b/resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..80d250a --- /dev/null +++ b/resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "launchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "launchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "launchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage.png b/resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage.png new file mode 100755 index 0000000000000000000000000000000000000000..8332ab1ead46555c200c80bc938b9ec89c9f640c GIT binary patch literal 72425 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%0ADnj$89l7 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ⅅU3|@ zIKr>SYXJ26g^B%F6-c*J0dEAn0ZOp`1^o+PeKYT~ywAWmF>YGiv_CL9xB3vf1iz(9 zs$Z%f#C3SD*?Y~P_{WPYFRlc$HYF(~2};VOPfVW()+2?h3Ri)njVaBP2J*7KhrI_F zx5YJyyMqaa#=~=*=Q!|)jTjIy0LWw*!+?$=NhE>Iz379Y55T-Rxgfa!e5iM|_~H$8 zAdWc5(rkZd`$ORA6WJ-U6Zq52xzM5Am1e43EvTbG1L3uXZy3G-@=b@^9Bu_YqFm*_1oX{9}i5blJmFLTa=cdX*m4iUZ(M9MY!2VrHK}i8vc4wqzq}_0L zf75d4RU>Lg)D93Al%>j2z~uTKxQj3m=DKqZuA1%*{#U-Z@&(vD@+ag^0PFPpx%qR! z@>J%O%qigYVU?OyYJ%Hqfm;H%a7#Q!h3^aB2ij+SqJ5&lx-X|@PEDZiEhZMFSxWix zm^=n7kZ;O2LH9wK@@2|H#I&czJv9zQye>o+!k_6v{Z&*2;Cf0$yMX*BOfO~C1i3{f zIr@WG!E$z?Qx($EyATNu#vG(Dll=Vr&HZXVUf*F9zM1^eDqNa7)Vl!F&na9?O5x><8L6 z@|u`?fyQD`tV2Mv##Gz38HAT@iz5(fmYnu+KGw8N$Fe zuXslB3}B|{Eqa4Vlk`N=6Hv7K%%f)>g_2ity5@8Rmb!w2{=GQAKz3Oyi-B`4-=(X- zid@4Ryn%DYMxfMDD?Vm8!$G;C^VRu+=8R8{PY&q54ty~1LC}{A`zGug@GwT~j@S*J zlOs1rZU!%X)r(axf+omkjn5jmIAwCd&%RB7LbuHQ|`5y^{q@czxsQv;`_bt_n=(XAJiWN=}KKS ze0<4x$q2UZ^7rKLfs*yPS8}g_Wn8K`)eNS63GXJn3zpd#F&QxswrgPez;w`m8CEW= z+^q-QKFKu2GzC&;EdOTtH(*?p5||PQ!X?Z^E8>X+8ebO#2nXOmx?K33OGJDmob+Ch{usmkvPThkhoT?4q1V5j4KSd>;tGpF^Qg~apT%H**jaGW7!tE1W(Tm|amaB9SfR93THd<< zeoY#CH}(eoy3pd#Vz4Yvn~*jEnC?oqbd8(%nTuS6tlS+dcdUe?J0D#1;3BXTq{pVm zf_k!eN(C9_B+z_eoMD>-n#YW_ ztXn{2+E>eQKxO90A%F+40B8sd0mf5FJOT2ISWXY1A^*oTkOrl$aGK2&vH7~I>%vX| zb_1sXa2n*4+gQx)t~^**I?UCm*qY7{xJ8rQK1HS zG_TaXQg`s|9@QbL19+Z_92q$h+z(ZlSYaaQe=57V>}GK5=NIP}2b!n7Pk5gICW(*5 z$Jf0S6Rk(BMZ|ITyk*<2(wI;seqLScmTp59Tqq&5UT8%`Si@EL8-5w zsh`QU{PNNdpK!$n-29kTFFI9p3anoiR4S+h_GgQKEdCMXP{&TkPS95M?c&=7_|P%O zF$a_&T@_swV6rnBKE3PO&1*M9e!-DhM`nSgR=OeG0M>N{)e5SC{oCRN#S1`LtB=-4 zgRgJ>?E2ZD=eHFAx5onS54<1T_g1i0u!8Aa%ITETAW~e*#!mf(FV|^WPIZ1xOji=7 zCrk%NT}!Mb_PTMo{zws}v%=Vb=T&p8- z3p@)W4Uq=OTX6W&;Y$$r?K__DctZ8bvyaX`3gl{fi>IHle@CB5(=d8$C0mVnp zS3h4JN@8p__b1t~m z$!cOe0lKBxNv2Jp%ga1#+yeS>=~0Ff(6vfair)hL(9G7xDxkSk=xZ4Pnk-W%+X@g@ z>=thvM-Uk6kggo1IEe_ z83LYPR~c4i7*rZE?zwT#fl^1`K;MAtYq{STuKtxXS~~xY!%Ge?fzy0K_2bQWse5nwfvb1~!1bj`@A_`(WCcI5=_e?Qg4gzfY1+61YDdzCV0F zu+I4y-nO3WQ0KUqUIlCsMNNvDfYvEre}UUbzt(=O!F^%* z_sYKqhL%nNYOr0oa^(sXH9h5V$^*)r??^}I)8@1Yl?IKveimc2N3=(v^3xNZoA4YI z*ne*Sb9=}?bTss6CGD1gvsC&c;>IuSCDXZ505` zIPY(~zX6X`;nTyX1KnKj%`NV?aIJo6n_Il2cnA1(XfUS17|@%-qQatp5;DmIbo@18 z|2Og9Q2=i3Ln?isV*o6t3w`sdfc2%6$I=IZC#muI6+t{8ij{mY6;`h9`wBSLXpd_e zgMYW9{nG0}nA_4X&-Dh~g!ChZcA)vtkYr5(CDQVveLslz95J#kFo_j%9PlA?i2^Dz zLu>=-C9aSFbSH_IL6#`x#M{oEi>HCQSNr<}%Wy8I>eQ$!^G~GIxA>&eQ|SpZ-M-eo z7L3)SJ)=Fr@SXERKv^=#0P%t|pI+%NW{FvlHD$}$EoUKLcX<8b^-wZDuSQ-CV5Ar( zh5@j`m7DDRP-&eC$6vsW>1rqGPk&&C43vQ&zhNaSfu*j!T}vj5wa#=WrLp_F?(c#& z(x;_QOK>xmSzcy2c<3uUR^c&lKNJxb5eA+;BZo!~1+OQgnng7O_txRv!n=WcMuk=t zT7l@K)oQhHa^rxl1Ga+WP4gx5B?wzP=)#~2psnH?9*LA0h7yatrJ)$Z- zQ0V~>3!Ldw@+Idoy#du)t!%XtyxysLpy~nOEiQAJUj&<#lHGIXt2d=N`4AU+ji#aN($Yx&u_;uG-+h(uTa z=W>p7H=MdT%|V7b3)~pvVm^rZ;JUy5@_XV`&>qnC)%FF?sg+k$UICPrug(00;Joo6 z>hDZjwY-{HoLLMd!P%#>Pl1l$R>7@qJ^1b$!dis20Jl{CBL5<=ZOwPjcL%!4~d}32-BDK;W+^0B%S9pYeYNJgQcFz2fUo{95#n(LchK(ayp;K6$k_*WL_X z8>(BXTezmMxqRAUoHkpV4UsJ;l}svuORr3|PPIZwi|pj=> z>HU9GoDpZhvu~7Nlpj!<@v!F>_xls^z4#ssZdYbpnE~gF&yRk7G}NE`Md25P;5N5R zNSWUf{J#uJ{Ga&eC;-=dfxl`Jye*|K>ItV)Cv(BZ<{O(s{sTuF9c=`bw^N&@4S?c$ z@$F-tfRJZnwwy_W5LvLfD~W4$Ru&V_E3=i^pu~IX zJayo<$M+rIcR&{u+CQ{EcpMF%8$K62!YY1N@iXxJvdW$+d%*L(${Ce2!2OX5+be7b z{hOiLq1m9_;`_7j&!7qL+TgVT{-3?G4wI^E!}#x=p4m>=PP$VXR6q%l78MW#1QZca z5D^g!6c9laP*5pFMOsQ)>F#EOEtc(`+1Z&n-yi1;v6LO3dtcZ09mYNJo_wD7iTkDk zuk$*v|F#ia;u3I)kNFr(pGMdt?2z&NwuEg7V4ahuP1Azr!@GPh?oz#u)38sGo{^pb z`{xA{3MN3w$GK;6&p>fOYGP_4m^&r3PG}A0#&MhCHbGHX?9texkiB5PeZL(zq@-MW zNt>iiV2ls_HuPIynsUGIL*bm;;o#2)e+KjAB(Eed5W_`p(Hqc-uf$it!s`Zj1~YCS zzlc?SRg(#RO7-gB`^l65MdG^1HMS_W2zb;n(J>L&r20Vh!5yxb0#oa#W>L*R>{h5^ zqvc{RRCkFywHB!&6>L}X((}^65|s2r(i7ksP=zY@7^L>B=Q7V_VE8cLTEI0Z+7~|| zegcT6I%rGiTZFinqG60rn?VhHoUKDGMP zYPb|N@#@5@P@~=aN9I2Q>W!{Hy8d|6^P^O?8yW-~f(;O{WrWWNA0S`RwJ+U);549b z$_CN&O60uAdBCeO|Ay$#9`-=$l2tud^@M;S-Jk6KB={=bcK3tZ`C8p-b%WZ{S8cv( z0~xJ1pWb{LGP-W7xUC|X2gWatUk;9v;)3D=P;YeI=DH1Bt5?jgm=EP1>DsYtM-W}K z)3h=n(=2Xw0833IO(Bs}BBy}LMb%r?8>E$zSuz89Imdq;<>lHWX_u{ztq!CoZL)2$ z!L@~JLf3?X?}KgUx1A3qFJ)RYtzaFHc`EZ17~c&sh8V$=Tj9+Lzs!OEMffWnfM41# zd*}6(55KhEw%4{7a(f?|b!Zk8HoesLQd>|pH5@b?1k;v?JrR4rI3&Dhcu&v`_I}0t z72vYks5U}wi-S`RPJuJ|FS)NC9G%SOP2)jYK8j63&X#xBtRx{QnQ9!w{$#mSLqH zr@xpBU#c#-OYYzk-ePi#$q+qre9!Sc!SGh_>EP3#>)^A>XBB92-R8T^2hm?wLnlXb zpfUjsRT64o-{Zc4OZ{}KwhY}Bg z?Px)ALGt}4V8*IpEy7xW`bFah#t*>U~!4GvHyzddK=Z z47{`f^@^GhH33v6wTIdRq*adUj_P2wWh7@L!-Wy!qsB*p@r|%`Ve7! z07`^%)b+jJ8u2Oh+ZY!9Qus@t?&^Bj^)T2DGogIKHlJx$he z7tW7vd%2pL*`h?00OeIXR6A}`A>4j_&+-RPF#<(B;;zPB1u52E(OwZmr23-z9tO_C zuio@})1m&P)kjw!g}e?Ys-CC{g_AGzywDTOhp%+K(iJTFMGq7`093il{6{UPsH7@N%3(uHXiO-`y?ET!011`)4fPvf+7j74 zvOD19G&si(`~dc8g>?(-g897!j|7i94)xZe!qL%b(P<#w)AiEz0%=LfV`z;-adZGKx2lE@a>ko)?friYrs=|)4x4;>HHD$Tk$>ms;bs9v#p#hcDUx?Ur2 zt7d>RrPWxDER-%ap^lQ$xBH5D=3$J#RYDOsPRC z4QDMw4KZKLhvGgdAt@n%kK7HyN|v)6Bs1OU21Tc1SH-RZHcHi`YQR9zLi~d6j{D({ za{!z(i9NPUwo6d3_uLETUVvQn;V%w<0r|C0r=Cs)%fpEuC4L0f<{7VMyb6YIL#KyM zhicEvcwxp1py_>`I`WP)o}8ikzuo^Wm@6m`bO%L@BEUY-J`hUgX1nX-Tj8{H*{WNcD-UddA*3-)UEYEYCCvo&TbH&=?>F}E)^X%A};gDD_lf5d(eO7W9;K&f7L z!g*f=)u|4oOIxL_z)DA&BMn#~=inu0@!|^cqxccTG&v-l7kT`{;~#=$e&UOXFM{zs znaAl46Np>hf8Cq@b^YstFKz0!sSCcn+w^PG@1}8eaV&N$23vf=@q*(}tWWKk+7q&p ze|qt!7a`HOVEKaOkW=-*q63S7Ez(QUOF&ievG|x9hNCpv$z3fax}2b#Ah1ll>V4H4 z4D!6?uFyRobKL7BzdXM@u*^>#nK}~0&b!uB$mgrHWfnDv9UeOzFxh{y{{$4NTdHqn zAT2$EelRL3Dhk925hvmRlgz>E$g`)|Q=n*k%(R$kw;b(`2HEHnRw=9!XnowbyKe_; zy9}=kFW>{!Wz}V{1f_`z_ zwZrWPw;%3!h+oS*D%%~QEcePaAteuH49*w~c^yv_o+yO0#v6Xz@FS$FHdfhK1xj+W zresY4`YWo5_k;7fe@Qh?HSVV4q7W1n%D2g~C23L8BCu2VW8sh2yRCmW{_qrl{j0)H z3qOSm>tCz-T2)A^wSNEl{UB9TilY>EB$xQe9g#c0`^6Sdws;a$FBzXO%Ec*bS$oTc z03grrsLN3oh;2V@|Fr$!I9^<{xF#@4rBlg-F%y{x^ib~GG3ACgDmB1`*Z=iPWn;^5 zZ#awK(xr5uge%G>4VM@>k zK_7rIJM_!YFTwOkRD4uCxM(XLsdxkmXJ3lE6bYB>zdPgI8Q?fq{7UgFKqWC*O#TZ` zzN<`OYRymIo4yyUBQm#TZo5&$D=n}+VtWK^HS%rwHn3LAD9$Jb@tvx_sz0eY@mv4^ zfB;EEK~$KYiRuv50no`RXxt^lfA#!#2fjN17n@HQH(?w|S8PLULqNK~SjGaql<{L8#-6n$0%V(j_LQvN-bvJc~0+;iy=Uu_^n)P+->rnJT%+;8ykgWdd*jL9O z`s(-%<2L{Sa`(es4anW#G-Rt(eN}yLgyuC(-6yzD0GGZMsR;N_>-b^E58+~mH@m*s z6_U;`_kPgzqvRePJqoPe{lX_unbN7Eb%j-;{(?x=XZj}AkX{_ zp21gxuR`8}Q=EePm+UGj49mzwRiX-PPZqpa@E&OJXz6he3UZ?+>`>StP#-Z_O;)gb z7Zns0aGkKJC_8p;>|Ed-X|=Q(7%!HIWw-ADvp`J0$M9_6I;}gcgHtYpULW*2Bt5;T)uL8VKCnx-F5SS( z(!{%oHyG*%+k@?(e#T|0%T!R!(Y>a74d^IxL=H&1Y;m?Yu(vDPR9h6MZe=+|>ZcGZ_Qy3{tO6|w* zOi2nwcg1ofc|-CBu+7S|=h^?k4uEE^$8?YB;JLn0Orsb`duDy~`e+bJi;;Kx7VTQJ zgX)_aDY%^b*5S7fL&1UbtUf6^UO1jCp z)+_U7=g!Ur^-Nh;y~r3lK6X4jb-`5-?`q3y z%isMlhBpFN2d)NbkE61qGH^@`5CcHy#W*pJ8%&HJD=7o3GIQvW@NB}fU~f_QW#N~g ze#v#T>%AO+*Q3qRW-vvC?hV}w>Wl78-J60jHKbukLon6|YZlfFOq-)FMqLEc&k>s< zHi4l}@W|kiV4Nk3yA*p}>vF9N9KO)Wx05eeRwrjCXM@yOX1t4QGjr|CwV-e5Z}K-m zuzSDV{dR*mtZSxgcE_RJxhvs*21c3L>qiHS3K#{IGp4MavKERfT#dXM3D>%;dt%)a zAPy?Ud8KOvd_+sp5~LSP+)Lb{s7~yd*fFJ!aEC~x>T|;t!xb=o8Ws^20jLxLp!+~P zgD0L~nVr%tr5lu-%r2i@{_a)u*Po9j!KuNipfS4lbnglFrE-k~BjmrE+b2v&m;m;t z3p@%uKt0}#J2k~5r zD`Y~#U#s<@DRi6SHU*5cLo^{8$VorUVSxIjuCq!QgaKG5ixAn5S%zAMLVEKp`?lyzn|3C5No6+$Y2ZgaUl<@$hTk?UgD#lVvyQ)GhUsLWVt_09~+41(fL z$!W=HU>%gXHFGQ2TFGsU(sU(4sqiU?FGVBK2*g=M=6mJ!=OBzQ{d3E!BhxiTws>#Jk>I#a3g8-C zrDv6%w`_ll$7r4(uZ~wk+y~R&n*J8#A3dLVJ`qHmFbgvvgjW2PZh-$9oYyr@nl4QT zwk!JPtL1+A>;2|RQI?pYgxW`Fd^NtHS?w0#76F>=o<5#FU>FeaNWddtyd0_uRe^C_ zu6tVTX$66)PfAZp;7;vBwGV;rZJ#qfXF$x>_Sg3R1^1(L zSAnx@NNGFO`g(Qp>I9(ygXavM1DWG?xb1KQdstD|qOL$~u|zDnWq%GFAdQqGTSYTt zbTPM9@!wM{#?&>cMpO+DZDfPV`<&p!js4z+M}Au~4yMyj&|4sgzz|!^VnyYI-R8*dW3o`FP$>iKgxsyPRTSK=y^s1|JP5vf-FpZ2D zA2A-N!YWqXem!_ZCi=2>F0>We;BupPmcO$c+)meQShFE`RIhii-o0v0N5qQLMw4mTm)NKex3X}U@;}{ zPTmdf)PA`3Kgt0p)y7lcIA=X)1u0K%Pttb{2n+}Wj~#U%sr$$sx4*?>bcw8(Suqo; zSDkZe&M7$Fy7%|JzlTEgCF3O{F#i|oF8}{PzCLCtPKpB#D)N+Jiug(qm$?j*tMsAt zAvjBY#cG*?RrR=juzoOTLft=e{|t2AzQR|4;cU>bpkZKCg>4Pn3Z`XIbED>hDOP5J zGiJ;B*!pvU*@4-ht?IeYb027~x^8sc2G_QJW^4J8n&H3K>-azBK6qR+5DQ2xRv-DYdC_b2aBJ~6q2yPgBCz2Ay zKx))(o7^^m<}9VB8$KHFPWFCLiS}KpllCa;$2e zY983XE{rOSf~3KV$1WZVshd|CR~o@|BI3P>_rUZ_^c&G{fXP2BI4l^9v5|R^dEio1 z!MlPtxHYSqS2Yg|gF}vm90Oh!6U9VsFbX=Wz0|lk1)=~veysa^-RHrm3VkZ{DJYn5 z?wNDX0Bi5^T~WSmX8Vx#M;dQc2fVeY?(2xg5sg87t9@4cEJ%lJ zXKiP>(UnjdO=SWrn_I!bf`edrDKRxM75Ib)ogE2xg2v&#)_pA)8wIxsZUcFJWj}+C zaB z&T!DwxFC&}#sdqaCDIbGH?@qii~{qVxM6X_;1^w!Uw}V6cwTfR_WjuRA$|4c zp__*S56Yq)nh5vC?u|jc!sKVV7qyj5VPtw%uAWqTxbAS>0g~DAq~l3of-E)zcPZNW z_dtF^)1-CMI^buex^shET_k;}tmX7FUsXg`s;S>nzXj?pE-PGCfFsdb-&!BUgPIYV z5#aN4tIe%8gNvo&mleMRQ=h1$s3b7f2|FHk9E=YH_YLj~x{u2pDR%@kHQc@3y+N%q zeP{X(a8ugO8q<=Na2p%kRl^#tqL~Cg;I*e5KS% zsi4X7I_Gun4p+xnOHg`h?DYJV>nC2)?A7druud-&zfcV6b2h)b`CTyAjnl?yfiLb7 z+WouGR^*91uzi+$E%zE&s>&fp6Vd+B_aFe#z3Tmi_ZOf~E@vxe1M@dY`XoJw^LGig zDl-Rr&HT{(P_Q&gYL(OqJRYrIRKMsB>pKnPefsimg458+%MJ3Mh$_p{m*GYT8Pu)G>G%^49`FszXo-11wU z;~e*>@rqpyW(e^Q`7T*Sk1w z9-^M82h!&@o6QDAePh?h-r7cY=afS`{c-(qFs=&^4G)Fu^noqJd2t@>P4ivzUBMEO zG(BlLc+6<&%?AcceWX4hO;^reDb!TO8XFiJfc|~I)_$$QI5Tof$hpeQNXwdMxq2H?<@94V0t zQySbNtLywAXynk0&0TJ{xx_^EL^Tvuh^ZM<6ZlB}fWm#=yuS`g->E|Ua873QVyje6 zDhJXES;Xf02hda5XfD0z1!A{uk!}%ayxb1B9RO`tuO?nizz`c`2r_`NIJAFge=v=W z{5kSxFl~sQA3Yz81)-xuM?+lInS*BzhMc4W{s;V_%EKRS{BR?37b@;CEU7)Gt-om{FSl==Gntg$2h2Uq3>@c`JQgc|%VIW-9 z+tk~*xgE<{b=!g#ko)SP%7-e0Yii{Yl}CU&-mRJ29dg8O5jFHR^bq>^pv{9e!-X^B z4~#zmY>@Tk@e)nNJs8#gGBlKDH1a}Ui0RBUA{h#!>i{ez;f=nHr- zpZOqSmC$-4sP%M)YlbUa zoG?CZd>W)~T$#2q4d^a5iA{i7Df0UJA>Ytq>8f-U@RZfG)Ef*_3{ybk`K~|1ex8pKE3s6uy#qCk~RfgCRg~d!iT@(yh{H*Cf5u& zc3TEp27}F*-y^>VSl!dNq;COBNU|zf1$hC-njdQp(mvapwl@Jkx&4b+IW?hr-(WFV z!0o&0snt_&Im)dw&Nm$`94#R6rv;u1Ji)(NyC>Q`0scIe{8%zK+Wl_idex{QxK+P) z{o28`=BvF|dqeihgB1=|01+z}4c!z$_+6u^Y*Uxt{^#U9GnC|&ROCQ;%D(Q&_KK*UV-a*Z|6)XUYae< z298O+q+Y-ya&i{o_5n=@3s>nItt)9jiVN#Mx4*lu?R()hVw7Hy7|=! zVD~QCTeKI-?dg=*9WI#^G zL(d#~1`>QeOZY4SvfkO*d1q&kUUNh_qJVI*KrG+}F~cu~^8*qu&5~vTJERCH0@%xA zJO+}p&)gYiZmm#?J}K&oy4=hlb}M1XkCKbz0-9GnhIkBtDBrPF##RB3mUY_JX$yv! zpwmI8L1*<#^-BfK0(XbI15`&0#|_7C8DRw~0DDX2_$DjztvBHO5Z)4cH3dYDi5vs= zW5sV4zX=v&VqRh%aKBc#^GamGPwuykUf4M5#M1fqrDbn*nb^__pEk!{Z^( zebC}Ti@|Zkvca+esB`D`r(XbPq{kvzfQw9E0&ri7a{}oXz3iIe8}J+K1bo z$9LtQMc%QKVkZG7C97lwM#x2lcY~>GbdBg5Al4`mv-V0P>~2-p3bB=WZ~VCUap2fk z+^Dz_sM_iG>-XRNIF8!I&lf)rx%o%h9BBh|kZMRZfNn~y!$d{|Un>J1R34fT!a zl00)QUGSD9EtVF8%B=rR{~f6POiN5l!1iSBx!iN$xGFnHP6DCpBuE{VRM^AnWOXv= z;(W*Xj)Q;?o=`oZ0`E!9lA9$1vr8SXRBFQ#mlTu~1cj|Gx47H_#8ev77?`YxNR>tf z`F=YlSlU_If%$0sy7+bXe`qw9-5+s(1dN5DheHno`v@Y4`-%gJ4`tQD!mXG0U)~Q% z3m4@q%7K!vawg|YhN71)Z@;`9%%&?}T=@db_N01A^`Lm@)y%7zAT@S$b94jFD^=k`ioT0IAA268=-4B%M?myaYHC_5k=41(WF}xzMW`YGi7)w*zno$7Uk_*TX}mO3 znhBCkHvAqrb*9vr0?{qTZy&!M^l3rugW3bmiQO+x!Tlll%?^O5FLOAX0}?tVsG#IR z&eJ(lK)kKmq}l}8!}eEDvd&oN0VwTt@wgG;Mys7iTSfw;64LG8N!Zu4@k{3wdvYOR61#+&pkBF6Ik_oC- zhMx^TgQl)qOShJw@pfdPPEn$)~ySsM2&qPhd__;>x*@{P(j z0@Z_hwO$Q*3s3ev*%v%r9xy&&1oJBi`x5qnxkAF8ggsESJZ3}82CzM!zb=0rMCFa$ zI(94QeD19}CY`mZY%0h)_fybML11l=y*+z7i0z6YY%Q*etK3MUnv{^Qb0#{O1uOvL zs_+`&H9+qdP%og~-H&IB$ZnI}28v6rauvvb>~!4eILMy0XZxP*;Pd>$BOV^X%?xC> zXhf82*?Dy5(cqW9!m`2wsjXJ6TeS{EzS2f?gD^-o>?Kl`lm*O@=1Oxxny&QMf3NIN z;ja*T#k=BNP=8?j!T1Ac3`(TOt=yz?lR%nVGQ4Cs6d2D(pO1#Swj#S01t{75d)xPibIyEQMoB*yXs|=|!1jKILGTkz6h)t=kJ4m;DP_KG_ zfByUPV4jgUGI1nuLOd(vmexCy?<-wLQfrwPp=ej^=Ge^ucTQ4z6eNYM<#V+}K zhqo9b#sF&NdABRynfFx3RL4NXDBqKJJswb4ZkQtL1139BJvofF3;4@3bWTY_rJ=yv(nr!qK#b~w>H=tnxb$`D3z|+In>{vzeo(oe z%KZd}$3or-c?XP-gf|Os1}<}=(xTG9=oa2IyeSy^1ZM|lgKnR1Ti>>zx}uBJMS`@~ z@xJ4IDCw7ZCi4vB>^V^5Kn+NWT0Cv>G{_#md*1GOAib=JfwYndF>Lz$i}@G9+&8XE zTo>>dR{y5f)jQyJ#xwbWnTJmgU39sBhym6JOrcZ8CXoH03Lpd=t~Yu;8!eD=$d zFH68Xy!o`|(?G=QM(b`aic$Li)uUa$cljP7-hCaC&b_zKWasmubhkO|FA(&o?=p4}*OwUIjh&}+uWnmA7JqU)1 z!7jlrU|14ZIj}NhRM;B7H6BiU-gj!>so-d8HCxR;hI@jwQze_$mIXle0r<0~F`QHE|8pIdajxrkA_X-3U4_|Jwew zLBHR>wSQ~KtA5;g+z7=h(n$xTAMG3M8^K*$TT@#Dx*z=={x?SpoZZzV02N7B0dC zI4ZZzN@EnYNt5c5>Jo_369T7{bC>&gcK-zkKrLA%GfL_ZS&eY){+R+ZAx0OiX1vw(6+voL|*JI%NO0~Y# z`hx4K%2O&&0iPBvbuD$^SEb#Wc56V}*eB2DR>S{GHFEwG{B{Q*pOc&d{rPg;%Xa{E zC;dD6vtS=?X=rH(c*!3Gd}YD~N|Y1rqViGsfViwYz_YK1*5#12^9B6IaolknbU}VA z{8m8l%znH2?E<$atAA4c6EK_)nGrGr3}!{&e4=-lcNl24yBE0^fp|$fK|2BX;V$D3 zQI2;5pYu8BPn4%T;7T>B0se1wtktm=T(FIMd)(WQ*lt0?1r33tatc6twPa7p9w@3G zcP>t@W*^Mpd)!#%!<4h|z{3X~hII3$giQ%hR3)}`Y-_N*n=m(FE|}{l8=0J6@hm#oV!W{X{77dU2RcFODoB}X&6Wp)GF%Aym@mvcuV zOY9YU!Cs;0lcG<+av_1}>(%p4-mjBS_$V{9z?Sxi0lJo*GZ6RPwIJyB<*f z+is`3od$KR$!Icycw5t1(;0xybiTuRDuhTbBP&#@Pzf{_+`f1F9<0`k!i++oPpS92 zqbvt(ot%}Gl?BB=rGB6KJs6q>4+yR77N1v`R|pm1AvNai`zP!RKaQ$9nDBA@p zsh~i)E%%Nb0Hx1Nma%ph?);l{TmM=((4qrcN@JvsAhtJ?hR_3sc{B!CdfsL*$ws_-*X%+O;Vy$qQPFi=v>h` zAX@Hz(7b5cZ`uzApOB)EBJkPR>UgW;P(GmByWQRe_v3YP>g0f?uY0I_DDVmOltR|s z?B-6|9)FABcjC7{R^Llkqm44Pv1H{9QV;-=STU7H2C zTn`EVGVGG6M%5Qw=eo{?@a`|Z_~MIT*sApVI^oGr`~*sm>WvHid!fuEbrbyC__u+I zU%yr7tvZlrIazqJ5ON+lRP|6*u6vS&FI>*LoOR0{?s;Rg%K!Yu&tJgBJrg4)MgW;| zA3vYSs$jy|ui8Ng@l6$0VFk*m7N{27Gy`z9ba^XndtH>ncDe14vT9nOJT8Z+cyjS% zFuxQR9TyFBy7%Q!d$~+=nFfX6n`AV}0MS>oMziLY z`zJdDSJYay7Q&t$+Hhz?NUyjtd}BBiK6%mgqARdWKD^^G>(kb!!C|zHwvGl(LwB>g z8ED8;JjIdf|UBOx-BPJsT=u^r-w^Z8n8p{3rmPUzBB|Zfn zPu)9$q-p3r*nKbXqax$=ny36K)ze4OFvz zZ28y%s&_QiHPu0T+-s26AW(00+u^nYghstoy%gwoeN%JX-Q7INXb`7GJ&pxNd{f@K2E=g~d-@8+L6Njd5=jKgtGcPW-Sl48R@PS{U$j@A z7stQ8efggOJ30&?W;zZyo(J2v#xX8>$f{T|zg|Vic&pm%Mh>uU2>-F-T+^&ZvADRqO55_SL%(jFM2_3*uPi}itosy|w?*@}4 zGA%Li4Xk!#I5L1WGC_r;6iJD1l#taU zN->X>II@e`RmuEdsZ#@_xRT4oC-}u<^wi7iWNDr`)b6PB<(M3-F4(a$4LE89!t| z?gNK9ALo8!Byp(8WVkLsW3yK1Mx84N{tYjeQMBO{I=fM<}dw zY5Jw8d;f5JyVwPtgT;L|X?~ z2SCx#_)hV%6DIQ?+y!dM)XLNfj7g!DLMs88EMgIGHx2lCqf zl{x)U^_uE6a8YVh`SSW62QlcT<*(#?cTrV5T=6gnrTEs-&+KY;g`C2J(FdbJ)Q}xr z)j9p6`bU9axwz7Px_ET)Xt1T`W#namb$Xglnhz8Xy>#T#5y8b;ocC+_a;KxBrO5) zFe9YaKo6-S<$RWCP=#jWQHtflu^-cxJU8cuN5Ks zOYz$y09zzqd_gtf#s`2YoZmbA7p)+^(km;dmZ;W z4gn*&_wC*n+!oZ_S5uyq-qTZYFRs12_HIyLGu1QI16x!1J7S4RdNAohu*K!A$y;-O zf)L}-kdq-NK~v3jzw3UmKAZhg_DevbGO<)<3F0H!(2L31ceL+-#>Y+PrUUI}?{VJa zK>v{6M8Anp(C@>FY@m(fJAv=j*o8;-vAuO;#I|~KozO)qQ5nI za4WM}cBFr#KZvI_{WSeR%CnEQj|SXC4RMElDCr$J5+8dfw6+`=oDuUsCC6+*uV{Q`_1guNB^7MN_2ts+~2rlV(X&))Yq&r${|NXQ}R z)Rn6?t=a@x=XZ77)e)RgqoPMIZM?J*Eb+-dCjSVwXL35`bOiJ8#7`4H1@n>kHSuep zC^@!AY!4`UJWd~{2TQBOxruYZ(k!WRo)1jksjyV)J2 z`U=;6H@Q1Oj2AD7mq28zK2?1RG+`h6_$8tDGW-#c5U2omDM`8rq7`F#40u=?A+-Uz z(UqA%SK@sel(j?LQ7btPb%ZaC#)1M3xc7q2`h?&`79Zy;Dc^sMh!1SvBc z|Ij`I(w5a6-qZ!eyHb)A0OZ?u*q#P$Juy+W28=D#{i)6E`~sy?M!y+8qD!D~wpL#Ky+P z-m=D>KTs-}nIozEq8*ENK%D-g6(6ktb}4^%R&_6=A{8OC-S$1(_dvbftLChl1G;8@ z&-*=p%W-bmzqYzuW1uRp-=^ONqPFY+Sg&R5%-9LVAExQjboVC+(XR{aAJ`vUKCC#m z;#|;Q%pa6L2#m`@SBI_!qcLbc}z%VzYMMw)! zw{czPx(;lUbDQNhgF857vSDzO4U+4qstu|(0Cjy+yea<(;W-PJI(p zUl|LG1)%NZ(bc0XsID55j7fk|HVoI{jCd$SQa9Z_CB`p@UUhx^*7>c2h^a3<{nFEr z7kF&du~lGSR`5*0GmshgbN0{KaIi}2_glXYCAD*A>5u1-*`S{Am;Mh=ny!be%+Urm0Pu=}F zG+81~N1g^TP_tCC6r@~P{ug&qN8HKL?x@`F7KxP;D}&v=AiN+PG$ZaRG9w=^Rj!e6 zL>E0&^bnL>%v+qd7_5(7d-&SJU|yZ{Rnk{rJ`(>*{3}qjBj!@fB`BH@|8@M=VEHET zyTtFHcztSv)CN$}HYYA84y4x73(^a~UTLkg7HmJ~)yk^{w#m8ea@zp`Y(pl9n#C+2 zL}mgcf|q$2_)>AK+6%j|gHS2Y`yOTV)f6I}|NmE4j)Q2=AnF1ArMglv z@Vq=j=V$zJfHY7&NPP}Uf(*l47DCBfW3a0ltliu<`g{tOGhQ3~)$5@sAS%ey8N0{^#3`2y8}>6GIB0)3zxvuB|0)X@&=V5-L4yc z$8Ykwos3vYg?G`;*b1=~fWAsKus?0?MQUP93+)%$55z*JuCr>jYBk`i{J!XT%JCEw z=3VT6u|E_)FY9&R)*e-=YQLm;j%$u9IM!G;SvCQKW&Kebd2{mSfMrYKki;S2_T0S* zLi8EszbyYH)KPys_S>fvb|?wS5E%k=_FL_0X&6=qJrVQ-Xs>xT^=t~ZO*w`f1MrB* z6}dO9XpxenBoGg(&a2LYd-GZ^)OrCJqRhlfJ8;T%7LRIrX?lV2(TH1>Q*&hI#9Qvn z&25yW4S#8rN(uO%X#Y|BkHG)=j@LR~gOu9ee){dFV4Im+JGV9z6y!wYL;zZ*F%1|a zcd1a3w|N^xnp}&)1IqDJlpVj#PIdw)%ljE1rFhWXBWY98Ca~?xYn9jP{%v}OSs{;y zJPw+2u2o&DLP@XOh};OSw=3Ruzn`TtmBG?IWnRiWFuxt27M}*%cf2ZlRR&9b^4#RP zU>=vSGGQeYJsOu0mjOjPm8$l|3F{NqgJo}0pQJuueJf*m#&WQo$m^Te7aSWcDvJuF zCzME^lV$SnyR}ADAv1=_VIwC z75)o@=0ibdz^9Q5A-`+zN71oR_>TYnkPs-o;vxB-2HTTHjq7NzyAI*bAJZx#$cGlpdAxfu|%dNe7}8qog9BhV+GW8pKbIa7PB7SUN(f+#w477m z>Zgy=`~bR(n$J`|z#xW}IRH2CdumH><&OS5dQkKr5W_V(jSi$-ds};3t{2VxW+((b z=Bigdx$+6v4Mk^)&VU+I8`C`;0MpkIz7f74mg-jPR)f^qsX>b0|J zO4AfDP6^2i$>X{X`c0u@xt%Cg<{8Lnv9-t69$;T*_BMNST@Kdqp=E((0hsq*Ie+Cm z0JCo+Ba!zj8@fj{gEWJ{_(=Gm@Ilp|ZmU{$~>C~6+RD}EP7(ox9r-C4M^5Q<|{N2HDbR;x~{P6Lu$D{&J_Gn)M_i0+JMJXjw~yOwqhtWU}O z6Zdrh5*2Zv@4Ujj!lC539BqykXr~m5mc~diNlb#`A5u@Io`mBOy?gfV3AXu#qYFoa zt$j{TP7c^g@=xTS0I8d;tF0?YPU%}GhySxO^PcF+GL`|Ym6`bCs!^&@AS}v#b2_M( zl;xYHROSBRxzT?SAa-;my={(zXG>G8Yj)-BDlI4Hfs_UAfgz&&pz?#jana^xa|6@G$gPoE!EfRt)<>)m?9;zx|CXTn!SkZ$ zMeZ6(PJ8-?p+5|TWuv^k z{b*s8!YW`JoqsI<7)Ukk{p|ffY*jB&F9FHoNOmLx1`#BJ?yy&dn8|K3`y5A`~?#cqqiI3`3LqK52XWkO%Nuy3y1C#!E3FfU*p7z4sCgk8AfE=yk@6)KQY z><`)>1bcg#a=0Wv`+W9!uuMxCkTL))0~5z5j)$U080d_KMOn_*{C(2cq_JTBF1}@aOUUne=BG11f$g=N zzBzq?jrEmE1d81RT`D%4h( zymo@o6^h;5qP&+tagzH6pAfM2aWC@j2$oMh-|-y^#T7gg{CEep&F(6)5O*ItwUg{#%1BOYV(pnImr5~hIKox17 z<8u)E?K2$j1N)V?ypb|3F)OjEEgVp&ZU0zzu%75oP4GPEvQ`@e;+V)~1b=ha{XY+X zm;+$Q2r3RL25o2Wiry8WWJ6{M~dr z0B}86xoPF5Q2XRJJHOcpx`{qHJ~^Oo8E`D%7-+`J)V$Z>YzI;dzw}s1=aSBl^22v6 zziSB>I=?piwb@WS@LIQP-9S7oJcI|JQVjYw*`S-Z#?_0f2U0hi-lhjJQd6wC6ZgE+ z@Eh%`?5m(;bKdy8@lX<;-66XJ6pu>@O$i0FSHh}XpeP~cV$4M_4^7;X zxCJcVCU;5h0@k&1`;&A?Iw~Cnu5#~KzS3VTMJm(<%V*}?L4 z%A%A-Q2bfSnv^wA(lU2??sTyCDDW%r18Ifrs_iOBE#y$JrkU$n*R|k1qFI+_UBHj_ zw)Qq|j|4bVJLAP1F$Y4=4X!r08l;U|pSC^?@++TNbY>BV?YA)p{;^PU)%J(YDdrS7 zzi{j;V_yNLN|Gc&i79JJ))cV4oqsL=8aQ;tnZ=nPxhbLbM-`Ey=5i$JuD$F|@vics zi|7Jklae$4_%ERKugp#IVL zknthV)O7FY-VyZvt|}WF(ljMtvUjIk?6}wTM~^XU|wOOg7lw zKEd7g6_h+`On2Q5_Ko^6ria1NPBU9K7bIWRdC>u=EL5s7z<6d;5x6Mra!dy?P^u}- z1tKUfX@M>1sR%;va5!cGjT|Q(2ISON7BCJdhpYu5cUL_1x6HJKq7qt}Q_?o@e$Hi$ z&M6)?f-=Kj3V)abpjqLm_0)o4c+j^&-$LP+is;4ft-5_!B#K0^Y4S$qjRfQk{YW2Ir`bv9`x|_==mr>wFlTl4ZasLo|DZOyVvXa3igTc@)z$L&1!uJeYHEb26 zjoYwx!&=CW*mrv0X^=MB!foNe04{I=%+Dr{OB@Hb^LaD!X56l3TN(w9bBX5?;dIc8 zE-$)3QC3W+m`-4OAulK|2<+nux)*c@=_h-DJpiPM%7%)Vw?bbEFUmwfq#{%Fsjhcl z-21#2%0G(w$2N>@2$Zv5v0nkMsl(J^H?3VNByZ{vrH)dAI4KT_gMf=vQ>qDQgqv{V zI%m6^s``V~9|V=VZi{ZqO~)B*>RPYC~G-c36*C> zRef{e-+d$QiNnN_4Vp|<9gzy&JzO_w z53j>E-BF%leWEoO@u%>MD(crDzu z!cMJ(G;gQey&LZ66RM4-cBXdVv(c%Q^KgrYTR_OtK??>gfY>V2k4!%TaqB;f`7j0? zwdILa@qyG`sk@+LOIEwAcA#zR?dp9GZdWlyH%>PW3RhnkbYT!!BCa;S+8o3#CG3YNwRqY_4e%7xn0 z2AZl)s!jsaNh0Z%P2?&|r%{*W8NN6uhq^P)Zy&sUFr*D#U%b8;0%S2mc-E2VNCex5 zgHUV9d#!}9pFy}e%WdI5^JrFy4&b62X}KLEEfzAd<|d*fEw z>@xgb$c~d)ij(4i!wTj2Cdnk3Kw7LgmftCBE2%9pP39v|9o41kQbE1k?KQX8KpXGz zqsNb+PY-Yla06pd*y*s-;L<2MBRT_2<)Yq+dIt=bLKcQB1mg=KS3<6U_JB{kPdsRj zxp}&If_O(0rjZ@)gB%1-+&1oUjJsud3oI>5x;SdVm9A;#g44hS>8ex%I7Vw0g7gfV z71J#gXHkE1QSAQe{I_ac|Bx@yR?|6ady=l_TJ;|M0dl)2PR&qf@L zILh_DYUwdqJVP81GsR49%(O2kIW7ai1Orw0fDZsa(O$^vNb-l#nG^0NH`W)8yllB_ z0p7mPcof4gwX|kfGoU0kdq(yQuy)9JBjXLQ_R0Jz^DB_n+oss2fN^Qau8>_|dNTTf z=m&uJ#1(Oc8@YPL@M@p(?(f|nqSuaVG_Da8j5*iyTu(@iUiHMPC%`r_RUY!Z(6)I)qcEy`SS7Z+A(mBHKlpLWF z=@1_&q3%yrMwJn;k;fgxC&V){`MhOaO6`=|P;xA1Le7NyI{=2TU~8}yG%ELS_i(Up zDfBP&2fXCtXd8IW^_&YXqbrA1mOpHFJiZe}?y-Af_kguW=A_I?fQP6jWD3oboctBf zVO{aP_#PZC=Edg45cA`dq$x>|*ZR2nxEjn)CVY_a0a%75^-SssmiEcxlE*=bOLl|o z24FMFgg(+F+dQY>m7ve1?l@+3% ztDXz$2V6S1bO6mNkJmk32g4HqB>^R1s26-P_#_zILp}}p6pX#Y=7h}w)8+8i;jO_i zQ`ThAmy{n?ei&$S+&8&z0?ksllUm z{}+!9cx(Xhrc4!^yZcD`k#xx1x4n3KF%Ttl<*P;+cNup9Q{{F%dnd~n%NUUAS=ClG z&_h%bm4Jstyod)5$ur!dN%3#RzXej4l4B*uK&;Yk(B4BIIjhpH1G^5u*^VRojqC^3 zpVB{0{}}8C%yZ0hKw6*PS-_Oy2}f3NURhqLH(n#qp>4sYP&aaZvwgk|F-^Z!MHKR7Gi^nX#~cnWKpoYK_~gW?DsP0y812gTLPBB zSEH{+gOh#GkQx#l5)H}g@NyDaY~#5e8t1!VL&BQTbJQa z$E`W@V~WEhU4=uG&DY%}cIoa;>FzF(7Ni>_q`Q0RkdPKZK%_xHx>-WHySuv^_T&A1 zf5G$2of|WE?m1^i6aV=mQ?p0JB0e?z-}k4ZpC0zxZdP-f4p*1kgsdg5Pfu6K(R`#F zLKYzxy8Ef)ET)I#LY%Ht-$&n%MrXlC?5|^Vl0(lweWUFMF7AkH1QdqsLY5R7lBx7< zXKiQU*i!Y=_fFjiLcfo?2ewJU>LS+SWfY7`v9Ms8i_={Rzs~uTvPOWLNNdTc-e!+2 zPRAxOij$eoNaB=@;zgO@LgZ#-+od(J;vn`{L9isX{)HxA){HZOcRRgEbN#6hvJkTK z$&d#}g&#IA;fnvVzobB)z^nj4zH7ay0cVPTk{G)m*|xY>PhbxQ^6Qo7@Dgyga+08k z4fO5}X`S{rx*In#l#O+aZ4ABkemObb*j~#?!znZmyw%+20e-57Qwl~bW@e6wfeH&n z>ZfQ`)tj>QJPh}LPXxY}32(di0|SaA6QG$H>eCJC&rQZ9)qe*+jI-X6?F(VWXiSpX zU@$i0@$i3PopZZM*$wlIcWS$pJ4smgt^Z-ir^6ZGzdc2p6Y@*%oTqaP;-VVG{~opX z)zzeRXm~$&pNg|oS|H335Gvfm*Msja_x$6L577aCY$E$N^{mI^(UeIfs)4b{%_38- zK?%PILssn9&ku$ExZjO%GU@r@RTV!SrG?yn-%}g=_4W!bhU*Kuj7f=ZR+ro0=2oOE z05cgp>OYbU*KOAKIv@_UFmV*MqJ0VSd1qWJ&@0eOsGehh-^xs++v`~mFTIg?|8tC1 zwTz^MB)Bo((5r}cb2wwHqy66>*k@B9JiAith)Pbam^b&it6{nfcn*N{uh?C=4tWb#T(-~7F_wD-UY8DggSM1k z31zsRJt_NiZ3wd}18*`z<~mnZE_YCh*YL(_b_*w99b3IC7xY+zKHeab2*_@%uu(p2 zCG=@;^Nk!y5&Msz)!>hv>|fcxu->2Xwar023X&huOrdczUvK-h_7~djl$UtW>D&ei zlT@I|W_7ygn+gXm2QG|`{tkqZ&LEwR-%l<*HzhiZ#cqg+2G zp!`gdC;%HobK)WNKY)MBQL1l}$UU|WwfrQ!KL3L!^N$~yS0;3x>zgh?>rKCt;t=B? z7vd*^X)qxrQq#@F9;V9#&AjeRM7@Z2$fxklMFC+6fVi^EmQ0Z-#O8(OOdozne41W=GKzd*jT_A6R#Wi<#ls9$m-xXPQP`{J%*pl26|nw%LN)tDaLYb)d^yvv^o5czlZjJKz2?s~YJU5kG5@ z3%l-D_SjVa4ReTgr4@haH$YX$$^wCMlL{jCUq? zi6mz{(R+kk{v7h!ji|UgIeMYt6J}6u>yqh~k(ydmaZS$c`DVn|!aQCweK`8U{Ku3y zt{!7v81TNmJ-8i+7uV!}e96V>6yt=qhBUnPj$P3ZVV2D%bP6OhP?uHYnhp0EEArpx zb!;Jb$5WzoqI4u#x6Q(TD)5P=)7;9=6-9UkH)?-A4e;P+G#0;ccQrYSOZZGG9MDyz z7xE$oYHt5YXZ)8oI-Q)>!}|AiBF;eK zNxpoR?<5~aqJO{_I^_w=dcbY@QU9X;mFt8{1&3gr<|BG~A!z-siNZ?^gH@YPiw{w) zSL5t43Y8H6dJWcDr?ekGLyg3F)EU5re5KGK#bXW5a*AoMu0WiS^Y0bU70sT^>+q`z zBG2ELWW|6SKq?A$(UJNu(70otTjXxW`XoMB3U3DoR^Irb_xvs$EFHvZu|AwEQR;jS z%(Kd4P&3f}SJP%}%~Biu@E0NR9M#xjgh?PX6J7Zqc7m)ZDEt;x)x?|Rx&rPjY?qz0L~h#Ui-pnX2$Bo>NF+?Ua>_8SjChpnYhx}DbEsN8SJYDRfWB4 zp>L5IC|`DK+LL6PTU?2M@?sL4YpEewDNg!BZ_r7Q)xi-&nL?JkwLO(=qc5e;d95`IS(V z;AGsZ-nN0gk7JYrgO~o)<7_?i@(KJDO57*A&qAir$VcQ$m6hkav_etqkdUzI^eV)*fA%WFrk zL@!V+CrQTdbL+QDX_W66vcu8e;rj@0#iyRoQZxq~6IbB!>yyg1QDk+@3jZx9rQ#jQdJnf18_YZzrIM_>ZR_uJ^XHEyOR_v)~MCjXGDj)G0sRfS}SjoU})Bv?5%6 zIAC{1r>i1N%IuVo-J}s>UiTvQ)U!ik#!)P+1f`IlSZ^+#=;4r zd=8jF1Z6mqu5SY7JgQWV_Z-(_sGZOYPMknh2Cs6sHd%`9qg_y%=Qzss@_|)ul{va(K?{& zjgO~Fir_`6>^dWTqcV6Z*HZpJ@<3HZ>}3+!)!7W5wMtg}36@W}`X&0vhacGy*%5PB z4qoG*L~^fK=JE}3IbZR(xh!aijJn#9pFqkSvOaP?p$ApU78Ya#W@ua?r}!}6*BeQ5 zcY#JyNwIlZ*F=b1#aHhEKEYANF;X`5H}S08?c1QI;pa7STUe14*RwyAguUzU_Whwy zr&=+4e1j^&3<6i!-CMbPMQ7{^A=i{fvtSDg+TYulBzP~g5t+I~R>Zv=)3FLvi-C7r z6XAcHw>~FZg4P5x;9<7AZ%!g}PNND^I#bjlw#x)WN;lCb@OhU5w@)RmyMIwi+S0G7 zUR8yaAZv8;|1tg8nf3IB3ruHz&U9wkYll19xV||!qNcS}Dr5UY75K=y#Y($fE3A8F zDn^y{3k@-rMl%c!^bqXkue)ioiAm_yda+NM5OS~PA?X2745@yyxC1UFg;XFKNeOEw zeM$mOvWNHg>3Q6j8!9t4SA7eI%Frm#0Y?P?F<~_^*C~#~86KcdqdS^k*md5UUp9fIwzTT{-qFh^3&=Jrb=EN2ApI) zQ!laZb)7__z@xxJZxu$fv&2k&=qzmp)fuOaNrG%dw;Rd7dzcbfU z%bA+6@!-Uqm<8(szP}HPTED$*He-@i1YY^MUXW$DT0n#c!TSG^;X(UKdrNz%^3^F9 zRR&!-$Asz4@s&-xOakX#gVuSi7bXL3B&rNb8D`-52WX@w%?ftS+p62Sc?bw)o8`fE zWj1fR+SZFLL1(XG`@Q$=$4}fu6ey0^%W%q>JNmd&Df^%abm({DS?+RrA`s#p;$HAZ z88i}(67Gb7;!UFf@<=>KT_FSE$_VEV!b1X94>W3{fXuRzhEnsL2!AtC602TQYArf`e%9Mjq3G?uuW<{%3s&gXiM7 zncmg=F<(5F9CaVrn~x1!j(wd$pPzDXrM|5=j|Gc?bMvWKI9afUJ9Q>2@`HCt@2u~v ztLg{6X||9VDN;AnHbJ|i(Uk83kz}>Z{rYYr@(R)$j8;Lrw#Z93^}&|vm$U;35I)i0 zbiWbo%UqxKZozUQ22KV}j@Jy8*iO+6l4NScnjk2n8)R)}&2x8}!6Yd3Ed{xw^7RD` zn!pg9aoFEdPCgsd^519M-1q#NF@j?w21ry|`t*O`0@F$rwSxKH{9OMbT!-EoEzy* zK09tQ)@Y%O8Emqb{Q6d4DIr2D@?NQ=pD4=dCGRe zC)c|#Od=Ylc)A?<=_Oc+Vc4_?%+Bk=v)XAy=3@XSv@!mvv*K=AG%T8!2ccIG@ic6FR zwgg*-1_qjHn&Me^+$vuv1M9XgYlo(wnt|JWnY|4sj~(LMGLF-l%9?3!O$p0;mQST) z5-ZszOZpVIBOUWJZlZ$qf8~frpLvQKbt)836O); zHf=1O);PLy&HyR4IV|pCdv2rP>cf)j-$cy=R8uq5gB>Fy~= z{5B1&PXT#mD_Y8N#H3RaQpZ?lw~hHhWu{nC)E1QK9jl>Sgw}z1iI0}7t%OWPk%uZ0 z?5Iw!4Id!H5P+Tq#zq+?yb(e-3mz@3#Q0I-C}JoV;#sDetx7?(iu^2iZazMST#KL& zZRESw-RI&&l$(w#Mt!C9crMve&85^8ulHw7$y_+FF8ZB2`-Ar#dXz^qjnM?#))4hx z+S=b9xUDm1ivL-qNSf=}-GT)Cd9L_sff${7$841ND`6BeP3&JPzTTUhsh*cP6UqbG zRdd4kb!t__p9hgC{wA;f6%<>P%A{RdaZgcrs3T2WKYaD$X;7dv| zaxYk*0U8C>#ugyzREKmm>)tN4IlV+v?1??SLRj-r`-$- zo0Q=TW0W>0*|wDT-eEYY=#1@VkHB)TI5J67HgY0xj^7x@Z8fn3L<3wu2h0mRnuQLt z=9XTQR{}wQL$W1TgWMHsl56sVZ+UJSHt~yB=>_MF5NQ%5d(~!d?^rJOga8FruMt7B$@P-XI|< zzvMbebcRz%b@1?;$EifJso36R&(qXx2*?zThGARCIGlG_-Ga43tzU#V>aB;MU znC6**jDb0uHF!$V?Kmw_q-<#@W_|E{Ep#fDC1UL{*ddjcqTc#rMBxnNSO9gkVHPm+ z<(D}hl|tL=??OsIpQFP0JA~K^{{>Fsyyd|-_c)E$d#<-5jn3xSf5halfl2d8^Kaf} zosEcFxy4TQu=!Ug1C8o-u(v7+BYN2KUIK-XFT&+rPN{P#Tq9=XRQpH2@wlsuO`dR4 zWsA@GiJ;l!gL-$;bB8bfUqt1>WUm-Oj)D|0@&1HA9|qIyCD{sHLGMWqTms>mH6ke? z6jXl@M?;DcTB)X6G2?akR5a^4X9qcz$dTz!j7aTPA)7=wOpi*Yy%MYE#CQiG7@20! z<-djkG67Y_m;Q1(fLRg>lYREk8=1-8HSkF3?dcVe(h7H7TT})UrHWS#IL*TykG#>Mac33hHMvv&*Z z9LcOuF$ON&p}*XjE^Id}kCVm_q+;>~0@COtBwm1w6~{Fnf-qug+Pn^mAP&hxkt8hh z+9af9L7;(B3TBEo3PB!XB!s`oyi{tJdGD%pg?q5DFekH5B{*9RWso5WTaY%V5&SjMnuRFQ=i1!c*UF*e) z!Z+t!n-LG5!{Au>$sic$%<@K=EHN|ZTOqi5B?OGGgPwyIg2i8A7Bv9}3iPt)l;OPD zXM*S;CnGBlq2fB)^3*+?T-+Jm4|@ABflXB}z;s`1W?ZI}0Ca5K3c$}C6s0cR{>Jd= zYsy(9gnqF0?0wmn>`Yf{*HE!SbvRj8sH37r>-C15Z=oLLEn6u6@@>&C+$9{FtcF#K zRSVMG#TW}w`GonjMJ1v3KmLcTT*?>7iFy>FNswl z0mT;#BebS1>(!r(kp5A6$IUu{h6LJwJtnGM8$Z4pZ+469oc>bl2WJ zGOM{l9a3(Q<}r!JN<>0_|EPbTilJVAD3gdmhHb))v(L!4Cx<0gpk{-3UN!wQCzxZx z8PC}xHdz~Pj7ryIN^kKV1UcKunUu`J=~(eO^fGKM=z2#1DI>hh`Ra$jpVM^xs3Rdc zHo?ap?~CvLdKmM_yG=MB{0x^a3-@Mxl%ij6GgdcTOL%?kx_AFR&6NquEA$)N5hIm0 z$co|u;TK`m8y&{i0>;f%5GRN!^HH6c3r!+sCsARaw<7M)Ooz~F^60gq3=@n+2>?{} zli<<5T~9VpffNa`C3#BlaUoPTJUUWjRSjviknCA9=``HiH~l*pJP&|aSv@U?EoJxk8a=$=L$}0UreYBm(M}eGSZUJS!G{*`-C3W>to){Wnfi*Nhg3P?yU%bG zi6{lqjuo@%m$kk29w&;z_NP8L zU8l7uKovD!*DXZ|MfXpj$_vT--WwguIq&>c%tySRfR73{1&_Il`F>h=%+?N zkew?rlllP*liDL-ko?-2OF4wZ@mKVzYo-@;O{@n7ezwGb{Pmni{mcOw{1s#j6BRUz zu_72lpsB2+>7Xjgr=G+zEf_A~_+yT42Q3*+e;BweYLGx*xVoKPFaS$WMLwe40MEj- zYxGCp`o_}q)AXsdZJBMErT_XJT9xDkTYkth$)l79-b&p{e^z6Q{kHFrIbzX(Hp(roxIU2bJOaGiHdl z%5hqC@Rq$C;`A1ezDwv;0Buof&`SrniVPs#XH{zSZDoQikPUve)uVmP>MA$K@8>6{ zWB43VjY?>*B$wwfgo3ZP!*Ab`vD@iA7rh`rOkeYxIF*yrMWC+uEwoQTyT6*yy*?W- zqvwJm=8P6chpO~K*z)WoN&P-)b)5t^w_eQfaymGtvL&+p*zY`YgTt>MEp@1YV~t`O zS7j}u9p0~W2YrYXB3u7tmR-(M;dp#mH#Cx9(UG(0pry)qeQ< z@b|iBzOV0%d#?qpJnwhh-1zEh4X}%9Dndm(>%S(Pa-l zpI&_d{_{PsNaruBBvJk&Dv7yA8&8ZV+*YdA*V3|=gb0M(AM~ST*}?bES;sXd(8c_# z;4Ay{o_>B4AjZ~f zM$0&vAdnt=YPWB89`b!VP+~$&2!TYnRjj7O(+~a&^OojP{=eV)>li=O?)>lkvEq1* z_>6!eMhCuA5uiV!*B;Ec4T6vsu!u7b*Jn6CU<#zAFXTN`7Td+NTssAD@&je zfurw_huoe~_!AH2LLg4X;3R$3 zH(oj50h3$GmY9wH*8S5dl2f*+{10ddsd`yEZrf+&2*vn=+uYCW&mQ^!laj--!%&Ph z+4irH*M>h{P7|q<5wIK(UukCLmmbr~_L;3*MM{Z)Zt%LAy6Z9lTd{r=!VSeXxM};0 z;#vYpq?pQ6MuDgA8OQW$eyF*U5_F<-_$~tF-1J3$?ewb@**lq;bZ)s^G#J`EUTD5l z9DqrBQI>MP`F9|{m$&L4~1su2y=#ZfB zRfLthogsZf9cu6}!i384=DochcHR%w0Z#v}!oav$X5V>LG|}sLa-+F;Ys}FFNpr-n zpdiLWJ+rYhcrzw3C6~2yAeIhs2t`azU5CRekkpl<{`nF-o>KhII_*taZX^5WUa+8a z{GrgGI=tn*pIS_di7gZPp3nTneg@^_VD}G~NNu{Du+2kyzms;VYeP#MwLCn;v`%Co zl~|XBXYf(_WAKl(@vcv@dsgrxxTOd#5K?S{e-q5zl%X)sf`go3b)L!M2yt}VN0~T| zA#|H+qFYJ@`(`fE9-GA96tRZGmuLCxuQjG%Ea6owYSW3ucX$!qi!pnd!)2)TG=0Z7 z$og6d-&fm6i$8u%pJDm-6_Ks~Ur0p96W-u?&{uV|Ku@~3ZHNORL-G_x*C7LD+mB`P z;gdhz$0byv|9piZn!|fNuPdQ2uyn?R$Z|ezY_NV#c%OG#BuW5$lF=H1mC9P3@a?cO z0Y0Ac<4Bl?6S>&;YQz``Hk-|Ryf6j(0!+17#f*z17za&O5MBz7_<+jcknQ<*i)y>F z&d`@qhf4$WLx)m<@E_F~u$)+K@cNi^iM-@JuCYd0UHD^gu$=*ABspd8tkEn|G4q$N z4FE9`<)FJR6_-z_ShZToSct(W4cF9WGn6wnV9B3$0nZCnw4dR*g2lQpM)*D} zQJA0?wHQD7I3eZ#BM8iDMC-vV*LsP~!eO+-Z55#-`3=9M`NVIBd9Q$f)=-VUZOo1_ zxD5IUU&c#OjpnbR{1oE5T5FUsD@h!Ptaz8sa%$deV!XCFa{jU$aFxsq{X93{ypRxj zU973~19g)xyMSGdhOaeyi^Ff!F_LFnLUxjicyR9WntNNaEPiJ9o&({Ng7tT0y*ijl z*nftNAaS|UVz+WT!JQ@6Z;ZG*oCIqJ`qdvCXHd1Vow$giPt&W3UVC9ann0|g@k~N$ zWqus%V#wtvW>g2zT8uK=`quHd`?Qw6J}{}d#HqTh=rn!4ABqYebY@5yJP~mTv{LMT zZZOsBXd7eT51Wski^t1`Ph|VSjcYCE&?HcDL2}*y?Jc6mZ;BZ#nrqGo7hPRVel9aN%|F0 z{qWlM%g{uQ_5k7MufqWa0ewhH&mT z&Odt$jyaFtT`rWft4$8I&rTp~ItY#-KxL{EmGwGLIl|RLX|;Cn`Gd<6UUB1qi*j>+ z5gJ47!hW?E;#@xM(Wx`@yaW*sl0iC13La<5=pJ_Xy%9ene1nP7U}@I9?M7* z6?f0xFz^Fcnj%%|xvZWeOn~aAXpEF^jAf%FPr_hbK#NQrrA&p-Fo33bY%7KMwFB7_ z1G96eA9KaB_==1K#}V|waPYwB25qA?8MKM%v+6Ft@AU< z1FY()bFUrRTj}GZS|`+?5S0W9iOffQvL{B*pj#O=!+*CGTL{JV$f|_^3il7_{_%O{ zdbfX`wZ>VfVN^B}p;X+{K}AYB)*@}%HQ zDiKcjwcLGn8FW(uhR=SMn8q_67;*x7v>(6H3`T_pGW68QOM~lyx1vX7&ekfEP_~4w z0wgeBhV@LFMFQT~CG;S@6Q~4y0eT?Q9jlmdrTK;8{6lw! z<$(m00(KR^%`Z6{8NTv|n(8+CloxTPERP2s;FL7f_0$26l2bOV<{Rg*?y8pa>lK4S z#IVC~o#~uuuW;(7-R9*jVjJ?_B9>vjkTCa)c9X*hP3}U-c>l*wRRyxcc?Fok(^0=Q z!88|nB$h(`YhR7;)eyt5TC}3SZB?b@SB9v_rqd7vA@-%2INVPmTZ_`tHND)8J6oMc zI(V$N^$NB9b9KzXS|g>H z*j|L7`D%tR0wJWIue5K4&0!Rx6;K<|r212RO<;^j6DtKhR0azh&=mTn0#@#$Ry*z( zE$@H-7rh$m%E+ShBqi{<9+CU;s^sA;6HO91K@_8^ifi89XvOWg3v)u}Lp@=yoJgI1 zc}PfwQSY2@I-fsYn18-Gbp!8>Murw8^}gPV@_KVODv;7nuMl!xNr6-R7Wo+L+0WnN z*KG=8$Q%4hlrp*@f(}EuO+qU9=~k+nwBcOv{jPe_^ep4+LxvsogZ&p+9{T!s4u@a3 z#l2Cz$_N)p-xDzMjV;-)DN%}0HhFE(S8{D(>%pf^(k2bw`HM$<1haI!7=qR?As7S@Rub(8LC}whqh^g$1%xy&ZphOZ|YnyMUK6-@ zljZu^7A@qqm+jVzfA64jLVHdB?b)xFQwhsHL1>Y^44JN8WH)^ZG-{E3^d*4&+QAje zIJb?d-HOs0UsmWHTxUfpJpL_Aui{etAslVP18L#JiYEx6ZHZ5z;v9gGbsIR6(n$HzmD)`g+&$$qiL;ZY6ye zm#;{mL#&TH>~ykBFlOvwB{(dOuRCU}cxcS4Sx5 zY>zu8qH|-yX7xd+s&cSIWv@Mq)@{;v$0_*u`Pt9Gqw@k1`;W91IS(#blGOrXBv`hh zA-&o|&m<%>bZVAL#5qEBX)041D`s-|A^g`rOX!5YR<4z8gcwMlsW0SWcEF1lb4t06b*Y_G^6m zsouy+i(OxYhi3djM)$73zlERBpCD5Qkri@@`;5aP4(3vV18E(h{QVVNcql_v+8h*^ z3Z}BI+qoSHqe#az z3yOyhJ3i3buXP>Z>XD*qOSz`T&aqxN+ne{&4F$^I^s`&3M7A!5=MbC$`jB3vh!ONf zT;xR&rE#5{DXr!H4cQ|!H^L1PTE4({C^V5U9gthF|IU3S$B#r@qMobGD-`f7LfN4hCrS1=x>$FA?YR0s_~jzj2>S#G%W z=JmdxY=fTq;R9J%P#for`}Q&v&L7yKS6&4Ws$)>U6jp*9!gOgrZnes=vL1D^(0c=; z&b+bM-J?EWsThp!4P`${^`BX0=7^DB9^#J-3H-NNrfEj?=5-8}YBeah{=^2A6fv>o6CV$bIb>JusD9ih??f^Nn`7wQA2k}%%A zrtLY&K;l569kcB3ToCb(i{3!#r6)0qK%7S}`vq1{`1cMds~dbJ|BGLp|5l>8>0^g( zUc6HuJ$@uP;-(7fS{`2GDU1aw4Q+1hsY_|D8#y4@%C0Z&J(tAyQbMff2Biw+@gVd2 z{yk7-ZUsc~-&}2jzWr3T8eb2onvrmwg5@_qCt^T7#Sw?60p9}d+spe(4H0X2z74@w zBU6T|(vGdg;;*mP?tbEuQsbfWjf5>$Q{-QIl^{cJ-T`8$qKjE=@Sg{=n| z7mNp43r^#ld-Tur%dIk*SiVio6KC2f{Ze|0xcXf_&R#KkeU43q#`}vr{d6hU@P8(^ zk~Bq#`MHEf+V$`01JClqXZ${>r`mO0KxG|9`M&e~rItz+$K=>NX2^Y*qZ!Ly1A}%2 z?tsOhk)(&Va1BziVOn=$rfx9ew!ToJ1ywdmMI_PS4Rrf(RpQ%$JxC_y_HQw&7hfgp z^8?<#ealTvKbxs_Q5zkNi#EMb%@ew9p4W>8E`&6Epl+nk@kc0dUR4%~Gz!|9E9YBDD2P7(F z!fzeeGd@*==`NyeK8~eo%I`IWs%=U36LtfrB7CD0{EVfv&!DdM_Eit?#5Ow>ZoZWs zCWwK3LX>n(*(M+ZT$^z!r(f06Ha1UZ`>{3f>%*4j?^IblA)Ear`{39#7cQ$+@Z( z-dA*7P_$X%`yEktotz6OF!IR5b}WW8?FV3aUzD@?9o#5>a5{Q`sGM{I-%Jo0H{tMW zghsY%*X1QR=dqOuFI+I2c^Q~TGgZfBxX)W;NcxyJuqNp!&Dl^6hA(#(kNP&U04FIr zVJSvefbjMQPZqS|a0yl_m3C9V%Elb(i>)?JL(z5K*C9@6cC%iH1hsDI1j8bV-fWI~ z7XuNI%l&g3E`%*y8Ao}){)QHZT3py6DIFfKop*lj$E>!@If7f%{cAk*J{8kggxdxM zlE^ye^&x%3nze$i+G3c<-c@{9WK=&p*jnY9haszMyRiZ;k#rL}N>N)t%u$0*h z{Il>yax+#Su43z`QD5cYgQM+R!K`t+!)B~|agJNAdX0$xcCq4s}lTrcT3EbUwpGUTV@{BL< zN?XAcLbL1h_XSn%3hH;Nw%w1u0~23aO_SqK!zn|(A^#RZS#jYpN_cI`{du(H^3iBVeNMwVqAUBAs5TB_0xla|4Ss_F07*L^Ki zZZ^S8b!65{vdy#LV#TON#G9z~oU~(oU=`KA?rbP<)ODJV-3lL)fnq6^PZ}d)O1aM4 zl&dqP!vm1cd* zPuGQMV*TviZfLzh7T-0P=DdJrv=81_FR1uv+=hF{GglHLP3W!mt)n^P$%C|k;<=@O zSITA8?I|HS?ESiJ{RK?_dY^Iu?U4Gmqn_}-t`&UJ(`Z*oQ?H!GLMNrx)famc%PSV0 zH_u2Z)8N(tjNaiR=^iH%ERvtTRLq{K-i4J)b-LX2b*URnLK8%~{+8QUwxL2yghs}w z;?HZNWa%-D>3znV;Gn){2dK3m-_#8Vnk3vh(Dkjm_BKI-aw_sN=*l<*F?9Vaxswug z=WivIaNdi`VjpH8plM9(52`KtN8#GkDA3_sU->Lij10NFYkWd!OoG)q=2aAS|9L-2 zQ2d<&Ppt<1d3t@^pvJ1}!`4Oa*;}WXc&RJPMDj^C-#P$7&=XZ5IFx*B`SPpc^NW!X zpf30>Sjti~+nf&2uUAb8sMBPCcF>?zsCe^NrK640ZgZa^cH9_y#G2>c9P0nufy>23 z$Dt{c*=L2>QkbL&29rlNPwBie*}~;M^Tb*QdEc`9R7#@WFgAH#9^Ni7tw3S}Y4&{| zPT;ZrY3vv~3 z4c-<`?Z;DlD};t@{oZKN2ODjtP7oWpu7-K~JO|OpZuQpi`nOtx)jumZb172h(!YDE zqgL)8sql7ka^C?4J7gMPubXs0!e4EFz#poOPNGHmiJXu8P?hZ3#Pwo5f@8TO|M{wd zl21MsL@$Kxo#Kmz`0FZW7FkPWonTiVs2lBE5Rl5Y!3;lbXbJhj4399%F`#7RX@yah zL{1iYsS$!AmM#^kadVdjL($hNw-637?`q_?hKiDDv<}yJ#2dO|E zRI@d{UF=|<^^c{TfZ{Erv*}GAU7kJN9UqU4xt`?Up(m-)4@VU||EQXyeax7mZba!~ z9?Uy}GZnZqhJmch(ynh6y{eG}Nbbc4ciE&+WK$u@mN~#x4tS_TGowLRJusNM=HaDO zdr7Sla_$Sb@uw9J@Bi7E-1-5I6S;9bX>KJ$6)|u};y>dA4XuRC-$X&%)Uj;NdH$({ zyviMpQfQ(77>-Nxvh1|&_|3J35#FPto=~}h;*&riyTb~&Xw@yU4Avcir^!KOi>nN_ zya<|+;@;u^=AcV$02t3z?yKpVL21lr4LuPY0yss`N$N0&EkwAu^7X&fKkM_S zYUD$hLqkizJ^v6MrY}SC^WH|2lp{PS$&RY3-gpc}|J?LCQ3r)NIF5p_9C}zUn4)T8 z32t22J6EHYGAQVh^(4s%@*uvF{>1TpA+o|lfP^77K^=f&J~HIVYx?x~C&!D0$!@Un zn~Dymzk%N?)J z-eyO=ku-%9RTR5yT5TLUNE)D`ymqoc!VQiiqrrtcy7zZ{#CBZJ8o*jc*MFMPS93(r zG$8TGfxWTJak*o&0QTVob9Rmd)35n7F#~sgIP&O1ZV#g>`1b>oYK0ayflC>@rTq}S#f3H1qdkJ!!Nc7bKD=Pv9ai%qta@-m%m!FbLto_5DG z9!g?HWPSIQ-VA;`+WUfP&Q$_#4+VhqF8xLgg5ZM&9NzNa&BBG)ajiFy;@!o0yus4 z&{|Jt3ywgvA~xk7<%U+j>0^T*&*lf2#)A^Id`K-~{ok|0xfQxJ&XVQDgW@i2Q9T?J z&{6D>(aW?-h@Po5iPgm?Ignc;zb6na2e@Q-e6hH-rQSrtrzxg^LHrK66=kxcw%RQ>=!+U9R zs%OBZp?JI_uq1v+$%(S?v^e|)`CYVzBp^F%vt0UKfCU>v_zvzH0}?q$Q;!q=f~fYe8B{B&8Ik zyOCJB1*E&XcWGJR!T-H4@6&vk^E>C>x%d9=ow;Xbo=Nt%A=Cp=#8Vkqf=w8`zF^R& z1y25!HPn50Pw$>PKU|3SVAp74^=qx8LJry8Pl$|{>(_uS{K-Ml{Ci6{@b&l*Ij-Vc zyjAW7d@{!Nx*0p=fO88_mg%K?CzM6Oea73ah5z?d*1LpfMrm0oxP2tm6eqF4cT1z^ zbJKKRBy2C$&Oe>w-&|#1;~{M4G%`!@{wd$IT2V!!(UX%X6s8rwL>(?5RFYNL;4KdR z8YH;03P@)L!WubF-zFbzedT=Ia9V55ecnLc3CMW4zEq- z4gFptqRt#LDoMZG>lA57=5*?S1qUnC!*4;8zN{=@SK2qn^i|_CIE;4zJKj<_oh&Jp zE#0@V-$h;FS*~PRd@-gnL6Ulj?~xjAB#& za)^o{nzEn{rOM=-!dAv#RkR-UsEGOaHU@s8m`9~W*I^~b3UD4e^);?+tlrlAzGm{+ z>^?XkD10lX%+lZChVe~S#2O78GHF9`^DGi&QG?d5D1$|+y&-BxYeO5WXoF(=FO?;X zVBw&KzPLW>^?3|*@P>HlPCBGNy(6nd0(xSb9TTf(dUAvB8h-#gL6LBSP?-&^;66hn zfBT#PV8b!_?IKeYt|;B}J}21ryTJCj#HgH2NFlI4VUYV5#U|Lv56nt3f>%2%9l)AN zo54wV6iN!-ITsrv)iE1vzBA;qKCg5gq(NlNI@mOXb>{WJZwTceKc$Oyl@io!z;kq) z4CDj<7+4??hG?I2#noh&nP&POzmIkpZlBWZdJO)#hwgIz}r7&!REx)0bR)5+eS&7uG8V6<)3%{2*Y z56pgb>Nk5(X)kS;tcZGGVzuiQl|y6V&ss5fO19Nfk^^Xb*nxMK<`WL$Ynp72j9n

Nn%vP~T*oKl+dg#!<@eM&?U6R=q;A+$eN_=2M7 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 literal 0 HcmV?d00001 diff --git a/resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@2x.png b/resources/images/iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..0cabe41372c4bd0d14f596b2b753ff7b3d9acaa6 GIT binary patch literal 160535 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%0AZS+K&%);T0~OK4asK(rdha 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

?;7IlQ^w!aV<*508QH$k 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

(AHAd!e8e+vXgdmF#~*O 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 z zo2LI9x;vU}ryeV%Cy8Jkx?5mSbtjyNBs$!Ex%&d;dsE0*7=8e~yymyl`SW#L@escW zHa1W>REc$dBAh9n88)D_ee|;q#d`2(UV0w#p5PE|iVOfNF<%3lpn;f?@BTGg{h+<|sXyAOL08VLy)Rcaci1R2{i+%>@Gp<7`Y(;NO!V`V zP_h8afNGTddO%6Cqo%-C@5;bR@KsiaZfF&l-o-0*%MQG%x?p9O2i=t4E#vG58qer0 zRes@JeKHLWLPk>Mwc2klK#|~P^^`lsmrXsJ3mPE~ybA3I??A;Zkt~!&s-{uybmFge zbw-Xp-vpf_#2MFJ*IpxU?B?vtO-U>WRLXx&bWX%>%zCGujsEoJl3exfHtaquXm7%G zya2W^BLDBcUBIZkxVHF<8vAwIEH&l>$2|KyY?i;kMa^PVIZ}Yg3H{xcjIq}xkxBC9 zpG$M8S5GVL|0uTGBdYEQ_{wL^D}N8^L-klqtQmfl`{Ka6?W&D{$Xxn~V(Q>R-FAg- zM^(b)5Pg-vb;|e9D_lkuVksT6VAG~T4R6e724TFU7 zq6l~^#`~FnXVgN8DwsO|GA<@LRz89V+Q77&!wTV8u ziEM#v5p?}o60U35-S5_jDZnhO@Gp7PgBI4P$YjK1`VLrp9U)UyKKGtDP*N4!6kYTY zU_AS|4kzZG9EeW`V8WgjUsw)omU&W>11yr-;$Ia!w)1!J19=ACbHC$;_)qh4XbabTG!0N zpHafiB3U9?G8fhlUzO<{@Q*pra7sqw()z#LdSGgUJMLxelNZ_J(yydmIPTvs-z~X$ z%peKQKbJlkuCn#XoFmwlPVS!*mOpY#{1u#C<}gsJM^pr<+2l?)wirHBhJP6UZ1r~c zB#NArA2-J$v9JHL;~>Mg&dAzhen$cBg073<(f<`GM_ z-fHCL_0!@y*-04AI0z$SX3lO4j=RuxYIvDHb6;ffzy%;k4!!8}d`=6Joc#TkKgaMl zWs1vmjX`I*{l6;{HX2zTlOH%xu098RZ9^``*%Hrq5m|Ijr4O(;;FJ+p@KEsR9TCkG z$qeZL$t1`mtk&hjhdv5{WjSl(r_PU5_J3I4s!c~0q@NPCu4q$&eF$3Z3MRcQ#{8wW2+`CF_>5VI)dL9kXd7e zj?a-`8wwz{2B(}@wW1*YBPMLM4W`6og=U3jw$2!zl%dSmFMIxev~wy+zIZ?*iH+!i zP`F!VHiO$(+AzA~`%W0za3UOvlAP&_R%MIY+6gf3ooF5gPG@4 z0RtKn{QVbQCr566B%0#vi#JS>eH{qbmv4x#PdHCiHczEu>#XkMMaM?p8N9M&|*-W*PM zh4XC4`90DqCrd=UGMaH_!SI?VxJ`w89#CYkz~+v9u3tKXaJz=m@0T*2GMy<#^lzF! zKX}@CDmjWBzDqeq&Z7xuuIP7`&k6_@78rYV9nI%#u!#Li(NrmntP*OO#Rt=h{rQn@1B1R$|g>~2)~>_ z)LAauM^T`}+M z)eqj6+S^;%qlug`=mQ$`6v7>d)CtvL7rzP>irA4p7z?pdB7b>2*;uiXFU&abE9EB~ z65&0cly#h}BU*@*uyu?$)MNTn|9Es?MoZ;Xn^tMZMqwyGrbwNWn=9Cr9mV*&qZ-Fk zB86oL$xq(**R2qkjM<0L2O#~uwC1Rh+-p)$Cv}s5zyW!CVz1Vf+*9>Q@21RI3M&2# zE{;@)RLCqMdyqUNF!5z6uvXKIvx~u(L3=E)m^Yq~+l&z5^iN*|Hz3TaBv~p{J1S*# zz-N529(*pwW~Y8*H&UZg(uNU@!1I47XURDy%C>C!Y+@)4Zf}xyUlDAP3C>gYk~MmG zUcVs;uB%*re?Jo$=kE_1TCWONUhTpodT9YB7s68T}-2V@^)-rk)rr`rd+TI zXHUL<<%EKUAXfCJ)f)uJXD=WEt>zD);Llafh&emOyp$_|rBgN!3A=xrwbR8(-eLDV z%}##--A zmw{A?`hLEZg@e|_iTu&4W6H5VQbL|Sj5cPvWu9Ny?=9gc>^w#LORMTWO5c73n2Db- zo-nFD+)|zj1HS9NL_Q}P&po|<@4vO!GOX^~ZP6w;A%2s2Y5~Xe1*+}TOxv(oD!#UO zKO8g*M@(tNtMoDirg&~(T|Xr`DhTL!!wna2doK>rn}CwMp@tvZXkS3b%FnjzeM%~6 zF%552;u(JUz4fuUMs|rBB>Tw=TYT;Iejl0BFO`qaj#Y>3^ZZ*o6S5R<<9$C9s|*jO z6Z{`WP4nB<G67mB{qp4EZaiJUQdICZ!rOh2WizvI=ZgOYKqYL*s;E z7G0FVKOjl~3lgD5wcE=_DnjIsfQ9b$i>{saNe(;D`7-WrEV2)fXrhTOS2$a4fx3=b zvU$9)8i-u#T=SdcD1Z|ts57!-v278ww{*F**MvaYnHkBgz^aYN6a*3Hd)~Xvd(GjZ za+t1TQdcwUEewS*D_RKY2n({dkQObl#Q6ePZcm(nV^7l?X6SOL^AtBLo7v>|udSz^_jknDC zGQuYur+LClCy&kc?vluSR>p09eyCB0;`uM&ax;=vjaz)3w&B!Y{N$6rSeA_Uo)^US zUkvuinIDX<)7Ax%E;X}>rPzYje{UqlY9psNZ2=N48n^y&$V`jfQryTkLrx}-C*OTB zeNs6H2r6Gk;6@$yAmp4P*F z(k>|3@MEE;zPx=(-cy}@X85au%-Ap7c)x4?Z%O2BV4204!*U0$THnz2ccu+6D?b{V z7T65Bew8tZy30LqOW}6>ty5ZW>?H2_xyz6GM%1&Wq^aT9{M0AkD{uQ3?B?4W6@D+W z=HzK%{S(%3QaFC~I8aT}4M+vir0K9hPKlYFi6gLo~qB zJ!_A|0Z+~{)TyvDayPeKKa-)}1?Xu9#H51oVue|;F*ptOY1|OVs^WhUwUBPb!p9HW zZC@aP8*CH7e^6e3+)kx;NP;+(n7YMGA^3<+(EgEuEzjV7Mg=~w{`LCnRUXSaXH-d9 zJcZuMe2Z@DrVyJvUNqukSY{mg~)2>}maDd834dq&Xf{Y^^Sku@RVJGyLpJJSwd zS_hMRJ+M4m8ps8^4&E?3eM|lF+6EQTe)f8Ct2BuoPVj`TVzBNex89UEvVv2z5zb|G^frKl$U=L2xM@JSGKoY;c%Y)xAJg@Dgfqd#J* z{&88g4y99RNP?aO<1qf#(AU(LfWMN;y%eL^sQ)AslVvCY#E-8mJ35ZBnnfwp}Ar`R1d_HN9W$_JBVukBpP}9BjY9I_DbKINlQV+HER~KFv9z>PAc6AHWGCSsw(}A?|7OVx)`N!OTH0 z=akAnJgEq$o%Os1XWfvm*o9ZQm~lRdiRd7)IcTFXCnyKF+9j@YTzR3Q@XsWUlH`@-6&GJsbvE1`m(WyywLY!twUIL% zFBD8#T+MQ{=yf)Kz?LS@gmjiTuYZK~E%l2(_a%96%%WC#34mg1NOVZ_B$Ki&xH7&+ znCc|Z-OaUZ*9aWeG&uZHb>UjmAxO(G&}WjWe(Ko%H*WUhT6O3Itge3V&!1G-#zmpH z))Stm#v;eD?dnz%n+!l6h_?Ac&y(+?{Z{j>1o+4b=T_X+;lM{fIO}}tEV(Dx$#4CA z1P=6Ud`i2l75xuK>2$Lm0jpn?OQj2}a6~*Q0Mph+{vdH02vTd=|ayK!@l&Z0)8i>pge39N@nAe@fokeD3(f3Vz2?iP|x?ZnZ?pkhD zwY|k0m-x*5qcesWafIjP8@J}NjhB}nEm~*u>oq1t#^(xs942k5=dyjYCO(y$s(r7^ zDVZZVB2gAVUFwl}fr7NzHqzRRbKcTIv=ZgJ*Xnf{F#blbw(X~5U`Zl+2mHk1()8Fs zUKz>!sx{)#0_P2-Vo)^4jFKTgk-Q8YG6Qn(?Oct7?yHI-BQ=V3o;;{Pj1#70AR|#O z7+sQl4Ee_;IgSYun4ckpB#y19W>i97A?EwZFKyj^2a3K?$H|Jo-

mmif!w4*!pD`?^NVkA9)cz4a&vz{vDFid_VDILkQDd)Xh z7-T@45A5{!DfjW4lEnnnET@V-Y_H%_bFT>I%%zZ+3v^j2KB;U4sW(@JwMzBZnk~TJ zteLF?7+I=*nm#76i;&ShKu%;Z!?@_uV)jlt*)(9r^O8o++Usk zt^&#?m{EIIL>Yn`(ZttK)kuDJwFDainjMETbX)(}0l|bP|k@JB}0xh=102f#P-8f%;uf}KKMD8SB z0WHiWb3{grdTIIfGd_+$M#dy9s20T*#jW&3^!X-`UbIM0i#N{L!}su(bo3GGY463Y z%0r~o?%nq)juT5E^*i6z7dGZMkQQlcFfX9R0nTFO3)cvh&sx6*;hVjBEZxVMs7z2` zf_Lqj>-C&?RUi9?T>?^4AA$YTVk-~6IE`tRF4eCvGu|jErJ%3hvY8(y59J{!=m4*O z(nIN?j#m|lD#gCQW|isK5^9Wgv{GP1VRN^QhjS2nKk@kfVCRfmROu^20_KwAOGq9H zWbcG`z=jx*6_OMzYG!_QRlK8%^(sJE1Y=jrDs_eMfSsUz~j~6 zwGn}g0m@PqV-{)uw{}VJ4PN4ggi60ph7;dbZqoJlMkBE>vzgZu1v~>5x zT3KVQdif+o#Ex~vHeq}MdEmKd21O-N`

EuhB;faAs=}SD)hGJCd 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�A>cLoBHTclSbf0B@ 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 OLG^`}Vx_!g=>Gssfsnxf literal 0 HcmV?d00001 diff --git a/resources/images/iOS/appIcons/npa.svg b/resources/images/iOS/appIcons/npa.svg new file mode 100644 index 0000000..f8caf3a --- /dev/null +++ b/resources/images/iOS/appIcons/npa.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/iOS/appIcons/npa_beta.svg b/resources/images/iOS/appIcons/npa_beta.svg new file mode 100644 index 0000000..4df587b --- /dev/null +++ b/resources/images/iOS/appIcons/npa_beta.svg @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/iOS/launchImages/Default-568h@2x.png b/resources/images/iOS/launchImages/Default-568h@2x.png deleted file mode 100644 index 9ea220a90e348034ec9f7865d157fff784450bc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8608 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 EKScA8%>V!Z diff --git a/resources/images/iOS/launchImages/launchImage1024@2x.png b/resources/images/iOS/launchImages/launchImage1024@2x.png deleted file mode 100644 index 49b614d8f8cf16c9167ddfa9df5a9f82d113a91b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17252 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 diff --git a/resources/images/iOS/launchImages/launchImage1024@3x.png b/resources/images/iOS/launchImages/launchImage1024@3x.png deleted file mode 100644 index 49adb8398c8c5c71c0552f42d6fe084484cb0ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41445 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 diff --git a/resources/images/iOS/launchImages/launchImage1112@2x.png b/resources/images/iOS/launchImages/launchImage1112@2x.png deleted file mode 100644 index 97f41a2e3d5b7c775a48dcdb9c01e44573066afe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24985 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 J7w9W@{|j_Q#mfKy diff --git a/resources/images/iOS/launchImages/launchImage1366@2x.png b/resources/images/iOS/launchImages/launchImage1366@2x.png deleted file mode 100644 index 82f716cec4816ca2d83f5a50553e9b9476dfff08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34328 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 diff --git a/resources/images/iOS/launchImages/launchImage1366@3x.png b/resources/images/iOS/launchImages/launchImage1366@3x.png deleted file mode 100644 index d3b039e53a21141f8a150f7b87b3ce9e3f901979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65669 zcmeFZhd-6!|37}6Vb4fp7ex_TM%HObWHgZMB-tY?^KL7J2+1s=GPAc+%HDfB$llrO z+~50fyg$F+-|&8WJXG%Mx?bb?dcI!Q>$>ivSDNZq7-%_Z0RRkFl`q`@fEf({J)p)Q zPfS++eMbJmnx9uY55SKAx-An5}Jn8D~AydvyHE zwcq|RP80Rc=rw#_74XZ9l!VElzVEo*^krj${rYn zRBOHY?Ok~NVeUoSFD>^Y>n&m$Ula@m|F&{WY;(%J^dPzs%IY%-t9g(q>HNLpPKuyM zTDN|x&?~%=Lqe->sp0dIJCE{JgUT!|Gi4ld&KrkTTW84y{xUZXt$A5EbmLXo%Tj|E zC3?^E2R#bZZL<}g7VA7N(z^Gt?ryroEx+Gx$z6^)7rcJ-nugc9CUxG=IAb2wV38?p zl77N9@2Xd!rgfIQ)7N(Qf@`Mf5^sOrd-K!OE*tme=UvByHp|#1D68MZTBg<2^HP4if!^O8hV;X@chvOW%nDsueOP6@yY6YoYQZSDdm>Z<@KY- zIZw$uvoEO3;x*pbFt`dTy6KhC>svgmoqWjb$C>M|%KU$t5n-4JZ|lFS+$O^7o5W}N zg!z@trS+|r;RU-KTuMuzrthy8g+m1`lZ}H5Gm9IoljXGo^X+3x&Yv5H=Q}4B);tT; z*SA(aVWZ^1itzNo|YkbLlmsA1WMIHW$0c7DxZ}efl|=RQWgI_mD|&<;&D| zzaO0uB?I?Ds=qb+1>ygGt()wct_}Y^5?DxhnAo1tGX3YZxtg^tG*jX4U`CgSwHzz;dgg3fmj6e>;8acwgnH z@$#2l-i6j%Wsd;h2Ujnhzvb3F{S$>kQUnSlrp;25((Qj=|FsA}T~9G2G5~(KLrGKX ze_#L22$(Q2Vo6+pwv4#W|2G5iKi{>U%S$tpxB&k7*kJ#M$A2{fY%2uZ4i_rn?0vWX ztD*Rx^PS%=a#21;Hi-~6>e0IlPks$1h5yxJcrtVheTDi(Aoxi0JpxagQph#5Lz(~m z@!x>}!CWD+Vq!b_rRAN`6LuXxrXmFDGK%RB9UuD3I4^Zo|I(rN9-;A9T3m;_M|+B{ zwP}{xc4%~H)l-&C_Z9m`Jm4yKpw0SZ|MQsr(bh=H&p-Uw)Mwlo53@B-y>ST?^#y8l z${epDvtvUw2}-ZCM&2iN5UTDk&qnmAWz???!?KSjY#Y4f*&C3{f)eLNKH?{T&jFX> z&y_8$UE0nv46ZZjFcS*bamJOk<&4>LYJfi`04^)M`B-Jp;&hQ(;tQCul{_(Z{9*GM zaoUD#FU5_rapd*^%scPH-(A?>b@`*#%Ri-k-0j3Kd>TZiBsgNk@ov4Dt~TQt7620K zK$b~6w^Ds?q-dDk#{@1elotzjN{vgs=C~@Itovt15(zvsaXh{P+N?ma+F|ky<^lKR;cLycN=!qNy&YPT2hh_E&fvv4k|9zgL;e;%(&ll2 zode%IhvSb~O^(gLk6`mdsQJSu@r(SNFN3~TjXG}O_-Wd0^3pPTw~HC^x2TZSC0Scc ziEygU-+BkQgX<3`6Y*t8OdSTFpMbu|DM2q1-xP2R_YwZVfPY4sPJ9pOV~AtAGFHP2 z8Ktr}-$gSKuL2P1N-3d@7W`AhB~JgQM>lGuYy{jxrUN`|3u_E7_)Ol~lu-Yezvj8p zV2L7p{so!x;UZnHa);^(osjDY*g+J;utI+>q%YdYSarOzJ;SPd;~0#|>kUBPQj0$G zB09N8H+&?=zUUzIhzTh&dIQ9li#|Ofkv0d*z2e>^!pTG+R>CNeg?gXBR|6gmdKYj& zRiv3*{@}n9qkAux6{UIMhZ{@;_ioVqgPwVAMQc*Ylzn$nPcJd%*?7x(slq#HB9(oV z8K^q*#KlPFx%o}fbrQZ#3A`JVi-99PR?hf<)RP#^6Iv1CvhuIWx)=QIu=8BVBq-tz z{1T0uZOt5BSL{)QM8q-4S@FCL-xuzH$45zU*d9aQz7&1)r9;EIBBbXFF14|+WuDwv zwkZJX+b11 zA)X$W{bfC>DXpyg$2uoThE6H*ipx9O#2+S%QXqXF$jj%(X9(ULxR!e?jKo|*wE$FE zQ!UxZb@S#r7T|5PQMc->myA#M9WbTDr;#qzQth|dJ*D^*P~$I_W8?vT=EezC%O?g= zBWFlQLi>$m_RX5!C>znJ(ATEF+z>+9hslz)C zpS=X$NlAiGTI8p-o2>Zh4Yz{j!#i;4uWi7BYle4bSP;+Wk}I4L+yGX@x2^hx)6LPBM^RAN;&hEMvP|^U{hBSgYBOn;M$PAvlm0>Oa7y z`xaSquGZ9p9WWLmzJ%kF4OI5?It2xZSOpN3bw>y%3w~d%R8;_X0LQ--Xt@-hu4%@z+RrMzU^I@s9J6`oC5YV?<+w|?GJVnv-TnMe8(|+KvINj6w z)-~jEiTL&~bl>IthezavqJVkpF4v^^LxxytAhgPI2ojtc%$cXzVVw3p{4b4~PKhH6 zBP@Uos1J>t0@qKyb(>q;4M}7TQLzY1m>w>_;e%KF{nDo*C9ci#?AB$q>-%*>)qwQ7 zGG7^bPPL#`hk5R|UHGb((PqWEb36fhq#G}LNgDh-3$9r>5vIn;&B94>1KxTTudOAi zqCR2puQ>W7%&+M-y~uy)bPeT=Z@t+sSlB)6fJ2~&ybSoMy&ZW$hFlOCxh z1)3+u#fB9TIX13?Kdotj&?&Bj+F1!($pw>n?sARhsTWOWRd2pazG;s7epagc`#gmq zB?;Dpmw@*<1Fl3*8r-b_Dmc_Jk;(ztDBL4tCayGOE7E)O7Ewa12Vd4o+gf*QemK{a zBbI2wMYR#-7^&WVOej`Ts=cLEh?L@ZKPpgm7X18s1_gcPZ6FHOxy_gMPbZj#$neQ; zj;#jF@y;3*yD!J+fcZG?qxIWmg%zucJ^fdNlBy?cGkHZ&b$>glq??3WLw_PszkrAY zMb=p6{I1l}7QuykiEwDIV1&Jq**9|^x9zFTiVD|KIl10}Qm>kGXhMa@<_eKGI2h&{ z5HRQCwf%FYIl22~#Fuv|!P%%wSM#S_!)t~iM5J34z|H&Fd=-J+fdnt?SMAePXv*{F z-C6oFY%*7ufAQHvhpdVJY3(3%@3pi2Gp=Z_<*&v@oc z?)y7wcN?gMsWmvQZt6eNT3+9TE$_L{K8K6pih66GD8_sbu+~PO*x@zUdjo2$>Cufl zGJBnp`9jO~TDS?xzpdZY#_N&O-J|j>P}T2d_4Ag3*G*j0BK|y(+xqw041-VWpj|u1 zX+P6_`8|h)eY5RA+T>}dpsSxJX6zD4z?v=!@9A;v^r0joEPi(J%UFN4;_pA+r-?4r z-bme;7ui^GaNn4*DEi^IW^efD(dIqNj7c%*y{>z2GpXp}8(x8phhr@F>nxe_e|@|* z$>3!!XyxitJhNr`mk+=B4Wqw0d+wymhRyjFSf5KN^k#x_GqVP4%E@Fem zhm%Bs=Qhmu?Atze4<#5?bfxT1iSOGp^xcVu2HLt5fx#8?L!F`&NFw7St^hCDNw=rR z`7rz2|4L3<{?^+xS)8d-1a3YD@ooi=(sO_Ouw1YY|LuEZ65`Fy_X{*=9q*e8cMR*zY4dB<7+7s#5|0{Y$6RrPBl4i8wqa=pf*1R618*Dhb=9Z{l9*VtLcd`bshjP{ z3e6XBmph!r3a2F*G_Nz^TX(&vLqmF01bsCsobsn|-SmIKT`$l83OI>!NORZc992Y<)p;Klky~!dlk{+g;lz978ya5khl8l z*(X9s(RVT`_j{>3Jyz^aaq-rTslFA|(oT%+I{?AVLMMX?SG}=HiT{v}yTp0%0skz~&DqL%tP8`M&)1GH{`zKQ|(L@TtD-``{@vx)1+9i~vfchIu0APJN8 zo?wImLnRx_)Gr}3%};kJL;te{AAOud5Zy=*S+)CxV$UHCvRjPk7CZ+uR*ng8_ENIB|D z8}+&RA|<3R1Hknau&$WrJR%Dm9X)C-S0s2GnZUdZ!<7yM?7CN48B~q)V)c=vO$@kF z1IxvkBiz^SePc};H!~5M^pDBIg0=lG{%~8xe8z4RWG{imF;i*bHWc#> z%L2Y0Q52Y;I1N4Lab5})UR7)3EgKHqG5I?qu&fyqtgChc&*IN^n^a8vLpt&;$)eP^ z={A;TlIY5+WAX~(JB*3#rZ%1^FHF`Q^$9t95~Dao+A~8@qATxWB9NKXUDYlNZxTuS ziKZD^Gb#VwK8%JzHn7Zns^Z z+|0a2+gL4brHw|?CN_gQcE#Eavz+if>tmN#j+8ah5|p}gich~#_EV6`hi>6 z6J+n+N)aDcbGR)Z>UI!kmH4V>XVbw=Ae7RzWQz@~vvw9vi2R2l#Jss*VNjSzjGFnu zLTWhLE&-&#E#0aB&&;y7A1KBn8sYJPCWXnY5LYy93VZs_v=I!{?dU<{qoaT8$YeMF zYSha^RGwf>s_bPpAAMGVrhb9@9iHg09d>Gpp>Nj@wauN#HoAGiGQl;{rd)%24n-J{ zW01;>Gq?P1)YERkR+x+>L70yep{*Q8s@Ra{R1xwJn8zrs9ICxjEf3}J>+Y4AN~ngv>QV8JOVcqffq729N+!;a-L4(24fT;aq{+#8mW`rmms~{oMuS3(%C_=YdnB>B(!_fLl5M4GS z9)CK=3Bj-`E6)v+?FE)2uam}wFM;hY6X&2C@fZnerr9OB3OAs+P|+&?43o`^KPFe} z#zvZ!Mh8j)P}H9?sPMA;1sE4VtmQ54_wL|=#Lj!h=hVhTArEA?RsQ%K)p_3HlCecT z#lY1+&Ro8~u?J>59gKb}#T#;=f+(~P%1{V;qvE&)KDrk~wi?#v*|V5QGL$z4sD}|B0QSt~rjY zAc;u}0Jar=h8Y)GwQlr>QuZUMkrnaNVovUr%Nq0Q0n;R8PSH7ZUgd${I>yVlEb<$@ z3%+smp}gJM38UW(gcD`oXV@O~OW2tw2HX@T>9zkj+GCkV)M;nRqki%b)cR5MI?sdk z=M$yH*tIb`6HlS@>JFrMW|UD*{&TP&V?cKDuWu*=YJ%t4b*mmt9h&k*)VgV58zXb1 zIxOt5fj!rFz0YQ0ib9O|jz-KIhAtI!^0r?l*>)Vw5tcK!nRwl?pD()Y%`~u!Uoq(v zr_w=}PdKEVIe^e^{xyhwC_BwNmriNl^|9f23~5#_okT>gSXqQ_(D3YhI|&L!e_%^B zWwXZfUAjZBHEGlt%Dt5$p5wsn&0$~2D@~8wtON)^*8K(v4&yTT#k;ae1_wJ({moiu zt=Jnb>SPW%$>`oYj0p0654ah4rPdqG6DO7v`Z$m#q5m9)gF)p_2Vw+rL*bWS$yrn(=Oo&nH`OXp;0F-`aapWEdkqql85#I zd{0vC=ypxxaKy_siX+pq>}|t})eL#i(;fy+RTJV9guM zdpgNZ8%94n0Rwjh zk3zy?tLno9ErGqy0!*<5AhX-F;=Kz_ygXs~XJT~WJXz$dYL5|`sy46FwwI$G)!(IP z%Q)Q3oO+-bK=8q)ZYu6p*rfn=}Ew0q-K(ehp& z13H6~?qnLs1w2t`6{@Mi9Yl2a(1U2%WeX7+1*x-HlptNowWY$0Fww4Wb*BS4li~RU zAot-cW-3Y4Qi3@G;7Wp|$N2Lc)P8lY9Y0L5fhP*i!zV5`RaI0Zk8%TizkXXrMZozm z)bM}!%!ktNO?!R5B7rEcy~5779|fkH5}Evn6|s4eV(dMu>?GC`*-7Q*#kM2MQr;P{ znDVlttuMe@^yzXfzT1QgWlYEQ%PLE2O-;w7KQlP}pm7^wRkVAp43^jGSk84?l zTIZ^JSCj~{MG|tU2_*)?R}Ps$*XK+|`T6nvZIdQ`de`;EvgSwy!;=R1pL=V2`=Ifx z=fA(mIMF~W=BSC$^p{?q<0Jv9*v2Z}91G5snC6M_^V|gHdUd*ySV_ofGnSbdK;rvw z#n+Eh+JqX~bu*{|K;_VJn<57#Oj=sH4}aPIpmC~H8y47eWOrTEZr(m_$pSKd^ zPeT~)=H%k4D`||VA-Aq5b6TV$yad>XwHEA9Pwy2(Ub|9m2VLZpf5!dLnH4d;fd*eA z4;cl;zHN5aKI@IFu4_5>_0JKR*#a6Q9Z}T9RDp)MoN=!gxCnvAHN3PyP1N+-C$Lp@jIFRJUQpd{Jus>b7nwx0;0?{NZd*c0YCE_c>%tX&Uv!H{PvIcxUcEG%dol`tId$o%L7)p-`orjYXjbp-+Isaj zec+^Y_*j1Z@~l|cw`>T2V?vOp2+HRme}`>hxh=%uWY=N&=x{1&=+(~9oS{H*$0--g z?^x&Pv74!dt9i-DL0VY`WgVRw;FydRWiM~(<1v-O(Yq8>3}0ANhyJZRsJnv$(0f+= zlBF(v$+hE2$%ff%0J_bI+ng*`IZ$%I{*inLVtKO~5Q&O=tFp%W#oc+PB%F)?z-q_$ z<$0<67fG5Z`&W$2YQ^A4@AaT)WA$tdZ_6U z<2avQ8_s;x-6n3QjknxZD66uodWd4>GpHr8MX$^5S!n?LZUrj=#|QlkxN4FfX^=)w zBkuPvLK13RctNc_P9!XiK`-YU_Kua{oi?rbC>ZCZo+;U{RxAb7j z3)sISsjNkf#PT|S_+=4}r+X%T(RaXToWzWXI|h{rvlArO`hcVxyb*jQDNG)J}1NOx@Nhb2;xhF{YV z+)_BB0qq~%&Bqp8{9;VqncTSr(^_`^M-burS#chxlArerM483^nUB`x;+GsNlPff^ zBm*abnr=u7{YevBbgsb7s+H2WZad<7apdzf*QhyF1p0}tX#?&P)gz5R98Sv0p0vdL zzAvG8=gcpkngB762z7)wODy<_?gz44Ro87g4{~IqKC6N#Za(Lb+)b&(T?378rIUY^t>#pWdHTH1j>qMq+sw~EXV{c1^G2a5=2YhKq(?F7ac zEgjt^GU)e3DL6RcIv4*brjK?)aq|>uA#LHLz}-W0z_%EAI9FFT5N2m03O@D?d%K}4 zj}M!Y0w@16iu`5P^ISD=t=i(b+7$7%}KbyM0v9NFd}qFb4% z#J_kNWGJ#=a5PobUMHC9mv^aw|m*wE^9#@j;1nPJ5D^5uYU)W%vS{gB+ZI1 z&b)4q78dtUjUq`6Usj|Z5a^4EJVWx(vLp&C1SJ=77|D>le|V-FS$PhFfL)K37+)%5 z#cRWrJN7R`$k7-V6q=IoR9}_8g6`yfyCd+R)<6xK72n^#mU9FJeuslQxx>Z9cx+&b z_T~;OMc>++t4O`wbFel!(+j?k^{@T$mO;UK%z!rM|D#SKQnqq!$aN@lYOYd>j zeBZ%4`|`;%s52}6h#L>G11`*whWtM64ArC%u$rm0^=~`Dk8?3v)t_i$^KS3>p4lnJ zc7ZJoS##UV$y-Ylaqq+qllYP;g&-9JH1J(J0VTbSx!}{J+Or#joT*PV{7B(MQf8kJ z-*O`;M{s*gsyyD%_K=EdAXqD1Y#IyT_1a$6G4fg; z@nhGBmRleF6X&|<8qpUVd_K3QudmN0`%c|xy}u8gAhJdftTn7}O^F-Ht^ZvefHwks z*6P?}yf?ba#G^fz#E7#`e=fC6bwo`pIhA^)XFO`|v#|gOVUh3oIj?DWz0VXbm0N~K z=io(nX0f8dumqkDb`1uSMqX=uu8MMA8}MG zPh!_lSnpdc-EI+w7vSl^GP_bQ;@0|bML>+a$I8EvnpL0WSr&W+pZ8jyxOd*-(u4uM z+w#Wpf`uJSuz%RNd;=gw3HjbStwH454lgd$vpC&@k?zeLEM_Tw7FkSX80H%2g_5tj zT9flb*)sW3>jzCy--V~fl@^~FQ4~@){Fdws`=wrWcWWorjV(G^CPw|DzviCqJyqIH zTd}=*JY;lcvUK^;=7W{xx7UuIj`00lYs`u>I<(!dpq7AkVPp&o{scK4#a|*DB9{Tq zScWwJQE?sNTiGrwBsNW3yDsy!!%fH=AER>z8o6jYWwtn!(EsR&e20;Cjvs{=S0Z+B z6-UA8TjF7QTs=*FHt;yrMGesR3A(^R`yf}N@F0IUb>*1BJ_xCi$hTs*<@DLI=2BOJ zqV*QvU{)Ejtj37)xdBX#)vVlWJN2=D_X7A@`JGAz#!&TpX zZn5IGIhk!~#;3W((hL(9ffzLosoyv>zTao!u_U7Q4Tv*77O*WR|0Cse_ulo!2r3E2U4!xO*&z4$ z!Zjujc)|=0zcRbUbQZN0;qmd;3=Ze62st2BB+)U!d{t3q4FPK+AFgfDA(kmnHq(IjMH-H0E@H#dT6$3L{`6cMtgb8EqPVk2$*yBjjTOtbtSh81BSj zK&Qa8OV?{dvp$YXu;WP2>}Yd&ll7?csEjK7Nf7!~cer%(M33H@c}vVn$pF#cX@qZJ z^Ndfl`8=?1Z3h+F9{}D{xr~+%!Est-2pFIRfS7&d!OiW=>py)iIUj zgX}}SeSE(}afkdjhk*&Fv7#O4ZX}>rokY7f|$PD;F>h`pXKJ;zHN@Lu0pb*~(L{Cu0~GQk}F zyIF%8y2s5QPN|$qdD}btJ_p%Hhj)=g@hH!p6S+A7_l@9?KKQ2)G}UtqdKtR0pdo-~ zQuJ7JhnP9K+v@#I_6)r2xZ#r-IZaILft!8{LcQYJn*k~4g^Mq#GPxgKOZ-r~Ws~FQHr!mT)kzF6Eam+@WYi-k;H52CH$R)Fj?o+T zxx<3vpi;h%VjM6^V=E?SKb}B`i(@H=%ZNT_-fY9iR6vy|&QTnaLX#buC;G(YbQGqBDuXZ7g_!LN2|7@m#~^;JrvzFOc6km$tD4@_Bp zVh-?)fPOs^@Nl~h4h(_!^U z2ralb`#4y>u}T4@!{Vqn*U;l{(TKT$W!lj03@3rfdMkoLcVUwOYS3{O6X;BHa zx7_>yq-186+q)rmgB{uBTm^7q=KFDEVBJ;#&JAsx>HPlS&ut$Xf;v^@$ajWmKZff6Mrq?G2#(lXmpjB^(a7%k<8?AdSzq_=%NtC3nAlY8YKC1S>44JrxY z+V;@r>wt!gY*V{c*nng(3VPu39)Z+e2>rY7I@C7wL?a!$OO<(Qy{YBuk@eZ;a_R}F{iU)PO(q?XB^e|I4$~M%vf$iB@D|H?57(+U0Sh@)X`%2S z17uHur!GZkxFv?EWphj%e1{(z`o$Gvv1ifwsgU5zf6ZevaSqZ*jo5Nx;g3)ir?~x) z^FQ#|qhlS{Z8EcYig|-aO0n}(7}VemD0}NO2DPJ$AEgX>JCxG^$GQ{{gszk_F^f^G zxfPF}fp(lCS?#6w_Rh#*eH61<`Ga+F)K+($kKOFjnz3`~1D0JyNT{IMgOK~g)O|+^ z+?o3b8P}FApnLmcAFfp`?s`Siw6)lv?S>^J7oC)p0xCeGct62yY`f^{F2*EEP{g`8 zXxqjIfJ-d+FGrwG!Cf=>QGv-Ymq+|!UHr@sZX_3Y6=^gd=qQRBrJWGV>Q_%WX9^Fv&&X zBX*aR2)rLAX&_~^+a)O!--kBA|L4TbTw>Z>NPUGj8i#f(kf52jtee`6ErgXg zOJO{BkL4%=rD8O8{@iXj`BB$uc)(ahigi2nfTE)WSz8>QE+qLJj)sN66@ubrMFvK~eCM<6znYJ(s| z)BeD_Pk%%1JOaL3xgc(AzU{Lj>rR12?0Urtrn0O5=sq%i(hjrWPa{iG0Mhd)1J?V+k9dy)q?xDT53z~ibq!r*-|E`aa5bZ?v#{v6U2ifRS9KV*m5+Q) zTa3+XIb285dDn`nV<6iv^WSeZBvTv0tX@{2UZ+yLCl6lD$HwMo^qhNrDmaH21`Lh& z^Ve(1)-1y2bKctBlP$o%W;)Bm?&m5?Z~lB}uRGN{u>!{yH9Ah!2WKfS5q;+6fl~zX{krk z5razYro1%yTwTxZjr(q5acPp_VyI4yA-EJP5rKKkrFY&P7ei1cZroaX5{yVRqhSP3qVmklB)bvdd%EN*`kLve(%x=|v0s=0%o zP=P802Hx((6W1HLY8f11DboZa(XbZ5D=`~-pWx;3oL}E-_k!)wqQT+ZDVDx!Sr3x7mv1JNjrLoHE=zKv;A- zg14wJC67wK0s7euyx;4H-v3~jJrb-iO5HHtlwf_<$CiuQ-Bmx&P0lJXsDjXUU?u0~ z;G-i@54m>jbM@AW$Z~vJ=d^{Cw}-6H!k&LVPnJy04*6Xb>97{uW{Jg0xW**rqDtMM9xRs@ePx7g< zKlL>G5G0FWfA^l!a7$k@=J9UN@$Sa=KJ6DH-mh~=E8XZNc(B6m^yG!{`=HE3OBrVp zxQAEJ{)GXQd%m4U&ubo(Y|f_AMBi>Tg<=(EUFgxfm|wbwC49OwYnLE_h@?x;WqZ~a z5{&UcA(uQzWeQb92Wm`FL)dicmpytvoleB=c`p10d|85hkZT2@C`Klx#HT>_DH*UD zQSdZz(g|x!ipFRcNO%hR{8OM^7iwsM&P?H^zNzyf6RGAr#HR1ttp>*7sgxRR_bqct zzS#g-y`RF<-DFhKvGIO|5thRNXJ8}-bl!~frUFn0S)ZS?p~nYaM3*2$VTTpwBv*&q ze-A)>FTqB{F(w4b&r)b>tjTH<|88x;qxn#+|62AzZLRD`1*PFal_&D-IY8%*X^ij( zYj79{{l`g|ui%H~NS8`Dv@t3Tbg!$VHmz=!u3_yf2b~0PUY?#q=VEtziLEPuGPf<^ z1W;85RxJ3;;^Md0-8K^UK$BsIR-Dal=TI2S&=^O3D~`IR$;Y0t7pBoQO2YThv@<$L zPhecN&)CcKjKVDUE3%i1&4q<*g7V*h_uawTsik&U9NPC6 zKi=^E8L>zXG72BApg4MUA{YV?bbJM&nQP33v%FsOHl({zWl*aR5|B#NY>xK*}d5dh6emCq`ig5_kQaM&s=4^^lKqhJnwk-2Bvqg$Kxd zs;#|T5+bt7h7?nG8sjoEa-xK;qzQJg2o25`rr)Di7H!eh;6*ueI(8 zFzSdPJe2~RQ7|yPJLA#WC;yLw zEbxeXM~Z%28sfjh(r8`%>PFawc30$sJxCpy4>}7%Oa|z2`&sc^hIehOkiff<>%qKF zWJmP(x)N2uf_sx<{v=&*=>S<`q7_J`WXgYmNcio^XgucO*8PJV5P~@cA^EJeGzBu$ z?{o%B&Lx|PK#@k7QzO8DFbt-mTUfR zFu}FYkzNz6tdF_f&|2|4d5&~Nk3$oT{DAmT5)8BVK137WD^%yDeL6de|=iR2I$tk=j0(E<3TO<3Ia`IdLqUi@@ z+xXHfnGT?kGmZk|hi|U3jATxJ69@4>)lvs_4AIIim^DLqlq@K4 zRe-pfkYqBLUkbpr<7%hD$*aI_U_BUi4xezqk@=&Xg7DOG<82sdHntJxU{@C&7 zTkk5tud>}WQ2mhY&@V03;^U~8CwGI6KEnzsJY#l<_|3|ATlw8}m9Q4mIf;kn3B5Vx za^4DdKPBx;;DL3%9Yc(pC4p2-%ZLTisC^JEb$+dLQukDgFVA0P(2O=|Ow;zv~JEYAvEz*GCn zR!C;;{J#J@8y0@e4ix08m|iEDx1j*`l(9&Hmy!rIni!3JdgdPQltl?57tla%34aez zr8m-^cG+bP#DHkd(~B{9u;-T~ptnNbPIR3n$6{fC)D!%`?2@+J6=QFU5O$u=uwrI! zh7<9S9Y&&=hW{99$(@SXE<4~qi+e!tXeP-NALQ}gf|I@Ao(-~?n2Xv2LXw22Js-Yk z4@W~!I%825yyY815Bbw}RJ)1(riC(gRu7Rj@Bk$Je?7Q#23lU%_81_8mySZ>@{9-f zfV{2~apBr;FYt*h-57%e0woK%iHPpG9anaYvIAkQM>M$dVM9wo6iQkAz6Em zDxLXRJkK7;P6nc9v?*+ziEMPsk!jT5z{VDZHglrHn?N4IE@|O6c~heb~XCM4V%=V<2V|qzlb*dTnp{#|BQ@K5|;A1 zvrrrZSmrM`RF|$hit$dT*yOYBwr3p3Z`?7daUoIeKMUQK%e(XN$Zl1a@Z`e?%l)mX zQ9{^MYz4kuDs&k-N3I*4wD^`WP@zx(~l@BUbncEOiYHm5Xny zf{1VTPEGtMYLJE0^QJNpQKT0jnrzV2W@H13F&2mtXTt8su;7lZZH`7#HqK!KBW<3? z^N>qB2k-K5;p<$mvGy1Kv*Z+az5ae?egshv3Ybw(4EAj(554g%|0{(rYWo#XP02hK zL%Dl~e1WipD+V)d1#b6u-i{VCkC@O;b$9EJQT+F_$*@z5GUa)v(am=<46zzWzNNcb zkhdB7S1rHd8c-_>ewu=9qhFPdk6abbJf%EgMw?an{92xMJc0}6Q@u?MS-_PYV%mg+{nsJ zlxlmO1dOJaV7`&WGFX54p%b#WlejhKqOP);UA)pUh0-21y?TgnP|Pbu^3^tdAVHAEbf{F#rGaGLV9> zC216`4cxu9_@an9rE**BCDBACAJke+#K0K1S(shy()h~8)>es+E>`Ep$vvf*654dV zx^A$vv{t&Wcq^u%kEfqKb-=&B)OXwwip!KJ;EK(Z$lP#JjU8K!J_FUMf9P6?5ZFyV zYb@b7zMmHsm#nVaYN_*Kk8@aq-`1eS6wUnWyU&}uh;d@vJm;>WmFseTX{2IzIZElw zW<1!W1<9X-VfQUQgKfBzr)n66OSlNemhka6wv^+w6{AJ_8(CG)&oqZXyQyQWFZZP; zdcfl$QPF_7Jp=nK?vp3Nil$JoM)>%B==WqACr(4~bvC9{c6R|NN^xDJ#WB^xi81wX zTrMnLPFRBj!mvtGnCZ(gG~>U`tx@idM+p9V6ebqVYKuee`s&o{42i{Egz&__F z*KT(Qh*A1(PZ~mFcWj=A^OVYyG{E=f7+socI{+h>t7Y?Z8r#C(&m%G)o(?0(FC8ve zX5?&0Jw~T(!`~PvtRjeh&Y?_y;}uoefk1J=k4@5X;dyd#Q8_EOWFceu;YEGS$#vLs zU^N) zZ(My0zbObcz_6l4y9<*-(WVf5yT3fOgeBc;`5mMq?kPY}U?BX_w-A^T+^uu-=`Vpx z$Kr_ZA!tw$%%4I2_oqHlTw*KZua-kPs24V%DK;}yl3X9;?xCcmYsQjM^zuNWtup>Q zdj|{;xUb&wKGTs262slo_FpSGNh>jZ9PiW^?kh{PTb|_z$MB=q%~Vhvlf;2GfD;KR zm3xGQy|fDz)RjctXjA&p!(_klS88UJrVY~DH?sv zT&UgU+>8ujTm**N)ir}id3C4vWBOY*`{^cBW(XdzMNa~}lsSsnna4}<0Wm1AD!+O2 znbvMqAec<^jXsQCx@Z7|Z*`b0+2|IcRTeis`K`V?8LCob{u%Wa9eqs-|m zmt+9Fr)UF9I4K@b4f=R=G8wOEnG4v^?{=Xao1FOj3g!&PvDkSJ5g&*9fZ$IVc+Imn zb+ury>p`n1F6MJnRqW|~u6u=SkrTIAbSfUuyPyf<>3JiGi*eVXTJ=P(XF_SG@Sf5od9PE6GRf5p8pvEn~|C&q!(pL7q#^3jQ_hVP+o?8&J9oh@yXsDPGe z`?|kgBNB`kq6Ay`PA?m-nkl2lRloMt+$P_YmXBUs{Mz;*m#VP>i*KWWCfyhD0rz9$ zK-X$gRO(fzL>m=4S|H2!mfX4z9|zgXx5_Z3F*J~4l6#TvL$om=4!oNF{o*P_-%Xt-PpmK-p#TGHpf=>iT%7Q)6N$!H_0wIA{Ev0+!&{_IX3*2Prn zaMI%VSi!nq-A7h%Q3|@ZVaZ}#FNhyVMPJMHNYqA=@k>T==gKW?egx8@w(G^cN$4-9 zV{Flv)X-a%Q<|=2$H_$TKMO5is273lO3{I(at|>CA_HOLD9)o?7thy#s-=u#NFp~3 zUyFOXvnc0XS;2_Prvh8Fu~RUJ*N{RLEzenlmYIIOgB;aZg2O-je*~sfk34SWLSaeykvCc{grd)mC<=3s7pdm{mH3i{M!n!iEkI` z0LPTAA2iT{vRDV)!eF>@i4c`czVC@Mz~qU(uLHfdCz~IPbVL*$1?2*v*J4ta3m%Ga z;&~o|($LAhmp2@3ocN!*pQaBGW<)^86~O3<{Fb6FiX}X1Di|Ec+b|fP8n+fQCBG1o zV44?x|l#AObOCEw=Y4N0W#U2XwrDvhh{4|v3Di8Ecf6y^=lp3$mNvWJ5G#Sso zWc@1Q^QYNhLvn^GeRjDnd?gvx>jpP8NL8n7U2dYqH{7ABY?tlR369<#a9hdJArt$0 z3QE7&eckf7&O8qkGj1by^7xgE<}F6X*_-ws`Jbr9E6=IV&AE1bs$9GdwhGNg&zuo+39|^7?2&BEv0NMvX;Tl zJ7bNB?pR~^>FR3SZA#@x+okSQbiW)`qgTdWUTt>(f4Y&ec2Hu7Qr2R!LgNKEv6V|I zV(8wj<2ZAHL*%kjw$@lX#z~7069Fk(CQa1%VNUE?Ub~e>A@zKhUu-USF!?xjh!!`~ z$%$w05CEHoeF3#Szc&q~(i!HvtX&0o!pM^z&!mk#L{hYa9)C;BXPOpos!y3$K+XIt zR9g;)voiKOwX^Iobd3|2eV2idb{ZPd?q`E43K#;t2c}-I8>SWAH!~~f+vM0&jiSTP zx_>`uMr-V?z!F}~CibyV&#)(8`7qwGc>l9#3*hrHN;Kuj-95>HPlGLI!zzb@*YqPiy3m2`Y5lQiter7Ew288;)hytz1r#)&y+ z9RpiFzDI;yRDL4A2ptn5xp)>DJ`xc`D<;U;_e`|nvQ$@o)sZDiciXt0hg4-<*@PkM zgrGoW{07w@LC(JnzU3;M6)CT1P)A-ThTN#1B-Cmqv{+0r6t+0<(|M(O?nlU!am~nH z{9#7P9~C(pJm1v=E&PsE*=4}YQ-G8 zH8{Rv1`!f`ta(HBYJ^yh#$>jw*gszUuPy!D_BFSmV|b55r@VH)glI}Tpz*>E)_qSV znCyONWzu4P6+B#=XeXL^)X?L%dnkl$QpH#A!)JNAOYc)zi5wxP>so5PS+REIA4X6$ zLCih^Z5Gg{%W}RkzleN{+gtih+FtQ-ote(PkcR5zMO*7fy3r8&C86rUI}hc8nfkzu z;t{nyasGdXYb;%DO%BR z`HJX_N6#AZN@Ly9LaIwenG!PIap7C~`=7ohL+^QW)AVfB$j|}E=|*4a^xCVEx#NW% zbqm-2YC#T*4=$5ybcxyjW9qsCq5l8>>wV5RB|0-I;J( zy&}74$|jpDMKVifWbefNkvh4M&il~_FHs(1x@L)1_?+^=oPd+e_fJY0rMB5vYisLuJS6T z1*L{=v(FgZPWtG6{-TljME!9y+TRu8Fg*_E13alsY<-!};@s@y#ktX7K@@k9u6@tk zi$oYQzwY^+wZ)@_y=r z=|gqj3=11GlI|X)F&USw&OI%UTX^eZFpxs_^_LHzgoM!?v-P5=sBm`XQ|3rx4J%>(;2kLXK_jV zb)xy+mD7nlZ1Gs4*+h zPvtEPy&?RMTfcylXC4&L>uU(N#O?71!e)P_UM*RY6i~1E+rH^y{~E$BJr0^OD9|`R z1=y)Kc}1-oQhmFLK5mBKCpK-I zylbczEI)5Q-3l1*rIvRZfDbZgTgoNXtuo`V6(R*n5%xLy!RxruahbC~3!Tmj`axz7$#q?QUe>ZUcCkUhg zG*gM%%0CuNeS_yVj%aSGlH6B+<@o%GG?r@&eBE!%Z*iDg3G3u&#Crvqn5OMGrNg}ojVe#2v;VrY>jj37pZie*tiJ{Ds`Yw84gINZTVz5WzT`O{?;aoFzYo98B;rgHKMXHnw) zby-0N`Rtm;sbswFx%3v1@nw*qmn>@AnjOqA4-U~ZIdts@UPI@huPCrz*}=DR`9|iZ zr)YrQ7FD%zx>!UXEZ*4BH+3~MwxO6RN*#C1h3z+SeMSWyKF`3^;BHb&58vEAp31)| z>;7BDxRaGM|K3jY%XT7vw_@+%`O4a8k&@c74zED$)Z+C?*CMKy6G>QSuQKz1aPTdE zxoY}ZuW9)?SaEbeH^h>Fa#jv@Q&3L>Agsg{Z`m(`=+Z^+`~jQj3Ij6_rT86(=pwSjDAXvV^&jhnSRZpUGFHIkhR-C<`@R1>K-;-Bl6BUVB zSZC*EcTNH1re5PM6U?t4CBWa)@7x2-)a5P{QOX|Gdpt>3<;k|wa3!=LoJjLaNyN~} zL#hf`-%mNVnd9U;hq=&I{Pun!?c&(H0_or};8mUW&Ht;j+)>QuMwvEkSojYsDo`TM z!hYCWbXJUreEvS4sl*6+oxq^^$x1#Lz3$MaP?U^qGD;WTh*`x>i7lwjPgux?-Q3pa z{#jhcYUlRCodx2Upu6|4&0xiI4DCF7FLN9iVHa^W)&1`b-TPNZPHR8U=1UQ}{AJXN z<4DlGLTfn&JwR)e85?*Xv*)CE)xl2oQ2F$1&iG8K99 ztOFzYx2G{zThr5J_k%Cr>tyzW#caCJh8-rRUNlo43(K#S$vi`D<}|@zyzR;$Cn%@+ zX#a6Gz2B^9G%6AN$2(yyMdk%=2aJY;FF`s^OcUVlcu%3RbEW&(&y}=9pU^AAx#@1?Lv0@Wg_1+dunaB~LZ*Y|nR3xS2Nc#g{H? zATWcRVIuQ*0&`eYS%_J=f^m4-Sb|*_`I$cqX42Q+>8(nk5&c(IBdMfu6VRix&tKiW z$B9lEWPdzBEWO0p_eb7FeOZ&Z)^0mEK-Mi>RJQUVdAwTr52mmz!QV$39fpib&3?Lk z*_i~6PK-a_qKpYobm{uR7@!OKvwG!tJC!jc<3xlj`n>#pCCu-qW&P(9DdVE6Sm##R z@ye{LJ6q(;W4-9m0$J26ZJD19@55v*1|EHEd_C_Axe9ZVkl*|Z;`ZbfG~9S+Nd&QTmx=BO13`iI!9oI!r1<@k zXFO=e}NBY_M8#+`xi>}R9kwZ${71r&U8N@7k81%0OP@z@j$_1 za96-CJ8@L4BZ_@F_;n(+g(gD^Jx-g1@0kp)M?;RHbg{hxu%u zYT_PdtjoOcQG^u58tKC_6-yO;7goPPkS1IYIlg*!wumGE#H`r+)M#!Q&xoK-h7CuE zRMBsUfuKOa6+D^{FVAI`&2=(uWaK{{;%|-r*QDuoM%!^=5F(qIMTgQp95(h&`sIi6 z3+IPz(F{)$4QU$hj00?+%tZ&k=ww`I7blIic0cyS>oXVqGiu^h%&SPd4UTwlt|amj z69_P&g=(qhH+{=$6DdsPUmA%_ilDy{f`}yg^`zEt1CA0#N#*I9Q=oj$0eXaL{HtX^ zM#$j!Lk1YVr}bQcecj|v3X0$Jz7hQO_v0;R@IM&~xPyEt^|O5csd- z`rgi39Jt&D0brB8$9#!S-AF0`CpnUl$*e!>WG~;>2bxz*eU+ zqXxwD>`y+l!ldwppCZIw;djVbkNI<|R2j5^Y4bb-6BxNvUw0a0$z*qsn6wl`RHPK}mIs7AB3q+l%myku+Dst#h_P3bBN9B>=io+@PR6D+S!18G`+I;Pd0>?>zhJRFip%?wpwU z`p|;PsozTI%Kw~M1GE2Tb-s5Pj(GmjfQkP!TW$1WJieGQ`Tr{?bW=G`aC|pHy~d#D zus;xN@c&UPxkUv1$y2RJ`>Awq~3bNR&2B?I%{FTwl% zVJ^yS2XMILF0TV`_DLY_FRU}_tR6+lqCt0fB0Iox$IUI1La}6bSAAHD&5DYbkI~Ln z{1f-|a|j|^f6C#X%V>~YCP0~P@wMCpS>9T88C@a!cu=L!+*HP}1k}1)F|?4L{y;RxqvUv{)AwXlLWN88PGb2kG0k9SaR}I8(>g zcH!Et2kpzuyEQtQIM!)wvK>CY4?|LRe!3o?wLfN>bL99bers2^_mYpQLR~7wx{7=& zuluM?dMmF#x~;aLwckr$rls(vT^UHI2x{T$Cs-@C`1Po>ufVPLa;!7dzKcP+zPy* z_HMqD8Sbn$CCtQaiVjceUH4+PIM|0L`c%jbA0bZEd{1j*#$+IbHEI`A=JkHF4S%a(u;^wr}A}6o#~xiIl=Kr6HB?%Q0NOYPpou z4jgQUo$q!!QLvO~XW5Ks3AKVMm!f`+8{IXk+bC^xOcL&jg2&+V7jDwuZf@c$tmLZY zLcgH|WgIqNwoIAfH(#s3iq9LL&cA9P2W}1&HghvQ1~=esHMimESh9SYzP-O)xBwCt z&Se;wBw1N9^-c9NzsD0_=9irhhhl~Wka?cPrMzOuuMJbv3?Z)KKi+b#M^QpiV(VfpO) zm0u%P``hJ#-hw^-4!xX#nOEKHW2ey!nWW9S!o>h#^kH{VzJ)ee>WPRuWh2}nRpRZo z$DS!U!ZYbtE=sm8-)U^txeB9$bUZXB4koe*3074BGe3Ge6Lg^@TRV-!C`R_s)=bQI z`(rTE!ptK&p?m1BQ`~FAbmvCQ`n(I3^|~tm&gi46XMlUpStEV$`MV8>Fy9lr!7^$@ z`k&%IUXyF}U|b?Hs@Mk=r$k&cinmn>{JV#kF*`TC{FY*hj~_12tXrhQWA+nmLv9K2 zR<+-2Q|QB5p~fcWdmd97#oYVST&}^3u&o$6jcDuY<~+|U?B@RS3$x4n?{Y4+qvrwn zM_+9qzv%VE9}C69j;w6g-`XEO1LMt}#%PL(M83V|^M>Qt8gt*Dk(oPw5o1MN_P6}C zKtgL;2i1>5hmKmxo`J`rJw)Ys8cyZdxUGy8vx*>jZ4$K<7d`5xXTS0kPn@L0R*do7vFenwc;bW3fB3tt!z0A!p6+4wVFJVlj zgG0n`N#7C`t^zf0uKJ-VrZx~Z$T(xABWC)R{c;c@Zq7wRNcq5o2`){NplJ8?g^tB@ z2RQ}^=;g0me7pA2#B|#R1-X9U;;}D_jipq9;J+##HV=vfGslEEwOMsf<#d9cy|jnw|_K6K->o6t&De|U(MS?5f!GV zjA}3?yR5oVao`yk^LaJTDG-DtIw?xkyem0E5*E0gNPDd;eoGEycL|CB6IDR(Rzi%` zk0d`-@8o|_R8A6buYfFStV||1FO48-lP2$a7Fe0s+Lx@2Ux>s`S-n-6-EtRFmC3kv z@&R@JP4bmG^fvhsqX*OZ=~MliKI{ z=c%rOdZa9$iVp#a8RBi-(N?{!ac+h&Sjm}JvQ!LB4Fz`QiRw#?$rr}byBrTo)RcFO zSB^?r0s)%wGAfcF+oIlk#Y>Ua1_NHqhL4FhR@jEzvjvqQJJcvCl8%BK*#=`0bYC~F z&AByu0zxu$wnwub3~5T)wauyj~pXUUW{zW|dtChhK++Lm9VQ7P*9wzn;wK&8{*W%U}|) zv>bnu`Gumqs_}-F`4v9`y1w4?MR*bkeW2Eh@>?f1L00J-=)Fe#9lj;KXug z1rvvdipxK3RL_>nZw4UmBQUN!ly4&|eLTV&D?3pOAeSN&O<#@ zON^vN`Ff@W@L9vMY~xBKFGh7`WqJ=~1cx-v?!#&{H<{5=v9Z0(jsFqQ+?t-a1C(#C zG%j$&eXZk9`6Yrwo6UfzGx#Wn6k6M|{rONPwS$?KcizF`DrQ3}e4b*X(+|GCj zPqHYGI!Flv#++{th-hKBc%8)e7Sj_?zOWu%i8zfXby!T47*WQ#mSF!}w=NQ}-F=wiaJ(71Pda;E||#x;4W;Bw$`N$*Ik{+<$7 zeCTe|#O;1E=+SgFH6_X{kQxg*+Y&B6h(lZ6M4-R^H0GlG-|0%WHB%(=Y)7ijqz#27i`%)RPL@CweI~`ZiqDHF;T84fm`T?t}c0*SxOvI1t@7+5oPF@Va zvmBj@lRZq~V6STeme5Q$^0d+xqRaU-@6*1#h=wx7^(TbP%R+EO}w4D zC3U=O-VG%Ve&k%5nt6Wb3&QQr9$w|(>Fs^fQ(Jibk7wZ{!y!Isg*K4UZ z-k@n|bR#g)j4};Ayf_ieS$&KwhPYE_!<7$08@7bEC`9z!qKGNhKq59u>j753$f4|q zv|vqhUBKF*c3V)hMJpPN^;!e4fTxcKqml3RVHs55fv zB7?>3i?au+G(bXJ{dqXhDT%RpduXw>RC%4qgvvStm#SV1BSi-^6MYhVzJ|;&T4XiH zQ2q2~Vd-@!pmV%srgDUuwuGMCqtKBTt{Y$|Q6*VnRsMi^qxgo^$?(kD=KfqhoW&ZY z@)X`fbirgv8}hOGwAn5$?AMAQ(b9J+lM83zen^dCZiK6|FV-a0U%T`m7ajb%ZgPx5seXy;oXcIT{sGg30`n)36bbZCZT^viAEnW- z_r+A1rbKx%2O#IP5*9qu+z3mtv9~)y!a(8}FJhZjeAUsgVjc_kwO9o~m7>pSx_ zKe4~#pJOEtIzGVYi>Z!?^Mw5x*PYblziU$#LQ(2}sxsQo8E7rMp7~fE4KJu22xDPN zHkqiPNc!9Ch$%#@T`Q&Ek%4x2eo8Qxb)mn24aYBSA z!f1E%rGp>+fnP#Z9z_5#l_^1fX9SO83dwc{$$)mZANS8a#SyRe#oYpkSI-4i8Tjp3 zLeUW@(sehp%i61(x%%Szi-iY_ED+?GSHG@8I-jqX*a~V|yw9czc$%jI8Q2!V~E| z8F}^UISZp?VWSvl-_#27{mjsuUUVyR)v6(pT57j0;sGMlN*`jskShW5tNqp-D5FTJ zi!SUv2@j=o&mNo&gDLy;g)8Z9YPa%VR{N5eh9x{- z_0weXaIj6AeCR##9rSdZ<7dwNx|WlLH7&+#r#^NJZ)rlFp3^WV6~;Nlm>&K3z~Xyf z<>4?WC9mTH1D9j=HJ?ysWtEi^V%cvx{P(71fAPkWm)VCgAM^D#mHa2&)k6Xu3szoo zT9_CvPfDp@>P>8x+nInV7K=O+1ve}a8&V|{D}^W8yO~hjy5{Hd`SjiWE@)ZQLY08j znC!NDW5VcBb$fdc9ZHJ>h**U}NGO=Nm0tHG_@kr=FXL1adhd+Aiy5VX2r`ygE*|YE zJ(Zl?!LAyKfRSFfnfm*x@}6V>*G97C0lN*FNUE>wPeV z9fcR9_dLAhF`F!X9CO%9h!VC$0acwIae58FE38KV|8XU$D2lQ{)uvEmme*Kkc77x> zAn8r@j~4<*;3?lqXuGM-ZdtOFz$Y~lh;!efA)sBu&kIUk2uLY+|4L0YOWS0S z6dO$m{&Gq$-sa**;?2dh!EsH%6PJGGF1Cr{6yLOfcE0i84Vc2pU;nTvgI;)>%5p4q z3o;K+8l8YDHpy_yIf$@)jF@JD^k?Q%XOk%KCdrb3LSx$GuDOE+*JoyLL!AUZ`^=p+ zgdSA7A7K$h0#C^Z5YUSFJ(O7)O26iZ>EO)Os=;MZr!pEoT^jej`;hGv+;}aBzE6ZX z3B%h?^7v}A2iU2&h7_uOK%tKM3~eJ_%`QD;BZsdJvgSvhzJu4jk&_s&u}!~sKrMR` zz`k7>%qKK}H^pSm3~`&5Jz)leJrh;s9U8k|&fV#y(*O$;xQ2Xc>CHQVFDkw;730G@wRbnS^A_;mT!DGXouQbOw$ z^`WTFI5mo#@FZDb)Hwe6UdA!*xfanBL`-6(S=$jGa zT66@5UcmKTiGhbvwaH}+@VOjhtl|3%nanjj^uI^A5TA!N(VwVdzYxF7WZF9B#sAa#4;Y_CSqDD*KUIN{aT zM9Aju#POAhqSM0v<3mCit&>ORscrG34SvKc6g-Fo?{+92BcN0WgY4}QK)Rv;!}t#~4(G>FVdCM)q6239w;D_^A+r^0%nQEZc1dtoSGhyo)J0jW;R z9^ywpVf;OfCzepzHnD-}ZQL}x?)yueYi<}3T3{%4iaM`|A%AU5*PmjEd06KIRNH8a z0~|IDzP`dMI1)R^u2a_ptQ0*F6>)uqkJqrFjlJREK@@lq8$JGHp)Vx;VfIH~+f9q! zkF1WIc!14vPRoH7AciP2z|dh`d0K#C@FIw^4-cHIwV|WogwUZLflWK(+XKVi@{)HH zUoN$StDn~!-^eoUJ%@2Oe+V~P8U(?-N6a_jN z5k{iA_k~R}&^Um+4Yc0aL-frq;ot1o#LcP#MBb;55`#he$-cO2$ zRzKW>FkKS$-gQZ_-)T)}Zxa6BFr|x2%RaDoi zZV>L5zyHdDOU`x6qDvM-Z5q5u6Hc+8A1{47rtRXgOs;Nw z6bFtM(M!JD`IC+4=}KAOe?EtaDf8jxLw@l(8oWHE{vQE-JqLgPvaDE{f*Do^kVwvQ zT{T2zc(QRwkUT>E^NTPv&kUr@Xht~~6K`|uLn7gf^B-5~?$@qcWvS+gpn+p!FAPPa zgm3AP`<{GkNk9jlOHqu+7?&&s*9Zw^?T7Z@!aZ6&{KOy}*)mJ`5 zD8p#u`c^k^eQh6Qhj}=i3^tjZ8}L|u3CuX{C>_1K78IR0Jo^V0v`NElAHEkSMdsRI zB>esrc5{^s&HUnW>4Dz(;??HSj@!*)aB*7H31{_d%$m^9HNX=sz?oYBfA6*a$y5{4 zn(uefM(-{*t5j(}LS744eQszOGrfBjl<_2^)Xd)gE%pD5{3FS7o=a z+G$mQU$fgdUkLE8<`^GfD-JjOd|tka;x=MWjF+bLx5L+1AGN(~t`gV@k3{Lq!lEyo z?SCnJ?3%H*Syj})9Pah7R1GgLzw;2T+w#mQBUqd?zYKZVtOaP5LYw)ZRSk^9FKH|< zzibVG>U~-V?~#E5(-T9y+_G7I9zbSnLPR&k9c~%CQ{~{~3Dk6>@b`X?4*(N|hh2eFs z~T{4g-%CY-WRz(8Bl7 ze_@K?$6ksUbF7Ci&%=1@sz^_R*?3GSArZJm+ZO>RxI>#i*h^1w#kVl3oq?H!sZyEp zD@ViML0_zgPVg&-Y8x?smU35GFT?oTedhY7y95VIo)vNij7fczn(-ULlfG21Oh9n? zGx}ua4NmhX47kt0yvUo$s%0vrw{uVopOqH*DjI4#80-qpI(*cm!`y@l*;CE5GUpHv&pk6W;M_wo9xX zYcaX|5-^7RSdgHIV|yo$Pp<*=q>ClIs&DI_gr%lASq!}5KaN?vJxhsXK0jOfX6htG zq`B%)COWA=NBpoXp>78koi+}hM>-QF^2HOJi%oA8xMBjC+L)q4paN zx2bNO+%i+w48z~Gnre3G@S8ynV{MiMbb0z)3DC?<1SBLH9<>0^UJQQ56oD9$C*3#qua00!5zjH>E;!goD78)jsjRn}y z)``*SKl1kpwj-mw>2fl^Fjp7n&9&`egiQuIy885enetn4X#X@q@sKLdlSXV}NQ&Y>mJBj;!|OYtz=BA_=D~N2}+!aC~j&HGfr5Fh&Pr zjM`wp&b;!%!~}Ub()Szr(i+HBwQ?%kc20}l#xV0Z=55v~4Zk1kA6kG%q9$tVsgrZs zkoH0u)arWNCrwC7nWE2(;&Eg#d-m#5ziH4{wjWy_lKwe z*)>+9%Svn?io%_i(!bm4UKE^74>+rRjN6(sR5IY&4z7!ep+aeq(mD)<+d5iAYTg*q z=AP2m+KJB>ekZZh65DGmIDIdhK_giz;T8K?D>h7XjhBDFazWc1Qx`*H$k_$nP{3$6 zXt7?P^?*+Qwby##QzY~<@+xGU_6b(3fZJYxBGDrbUb|J_oV!dwo1drS8a2abo%^P) zOEZUqA-C!gN}JQHr1ih~`*D3&J$x%Y!~cHwcWX`YqRlE_noZs`MtyyWBwcR^KEPXvd7j3=}Nh3i6yl47}OuL{LD7_V6`kNH3>GA)wv z%^B0wym+$pnGVJ+Qlj*S31#WWcjM1m3&#Bzf^ zCBoaE6a49?fr zE#NgoHv`3FE}q5{iXGFy36nB*F8RQ^^sLA4&VR15i zYE_q&)H+(LB2`ZF>YRsoh0lnQ=27OaRSV3|ys*v%`Q8+aXH!9Re2ckh4u7oTc zao;k1Qr$Y&kPRq^Q%a*4Jxf^ zewMS+i`Ie_z3bIY^SPG)*X^`yIZ9HHt*h!se?#mkcvt&M?_P2OszAwr5^FI|46eN9 z&5^{BgutH*-L^i)J0d`AKqGZB{4Xv>;c$Jp1;MPnDqY|Er)23qE*mfWnD}=4-Yk>do-bPW@F_fCt1 zC%A+sR*yB};7u%0{Vs8!Gk7?29-f%UANwo>G+(K8JgKdOF^{io_;Ti^OdX+2oox&w z8-ZPZKm;7<{pSyHlLI;!pWJd!ia-e#)+1wP=^TQH$(l^r;BC$6^oh5=Ji>@cyYX&n zGA%1d=5`Us5I1pBB@Ph!`qQfJ1s{$;)2lvE3^5cP45^HUB1vv_U`2n9^6vKJyvoey zG#=bSv1RPF(j?U{M;$QNItG-T&|~ z5Y5lfhVMP?FRUDI^@C#lY~vp;vRRWhd>F~wqvz&o`1AMeY_)zqKH7O_i>q?_$mhu} zN5Z_?Ci3qVM$`KnGKfjYcU@-d-PlwTodM_io?$#OvG<>YzE;H%XC7J-pqnQxnG@zr0@^e9Liih>!1+-1^~GDUyMu1La~NjgM8ooox>2)BIMv z!4kS}^hZJo&u=aZS4W#yl>Gt1&%x>M`5HLV5#pn%@k@>E zYc^pdG9y0m?O_IuBTRu3GEVu`nqa&jwjzX@QGDnwBekq>2J=~K2j+~)+|z`jc@12$ zx6}S?3|XqqiL6B9AJbNP2OA`ioUx%)Ka{OyaX|h~Ffw#|X(Ddef#Oe!@660s#cO{O z&_rE&M@E88mGM#=(uc|lRJAlz0XkX zaAwARq%%q^G#t{|9Bql-VI=nW{6DFDCQIcNHq>>^W$}-|XMH?MChcNzX&kjfe9}E4)({azZcGZIs`Y@Rh1%5;FVPX9PY&>r;oemq~S-Rf#G^y z-XJs-Y3IelU4NhrMElwi7B_TZnAR7+X(@>?Z}@XGq&6|0t@d-~kMw!FRIKwY?**!^ z>gv7^dp6QBq)oVW0 zMM~|u%FhP*zC&jbUte%Z0zP{;^^A^!h)dm9go-G$>`&zq((vDDKEh$!G z?WFY^f~~S>%AYl+M%_m#s(I44L=7;D_AZxPiI8xZV6V$1Ly(0z(&d{iGti-VJy4>- zEClAZTgtNE`%rq44e6=)U4Qhz-1_|TYa8KDUkkcDntJvQFKtx!&h%A`b)T}oe47KE ze$M;!w?jZ&?3E+j;<*PNd@?n;OSBWZsrgRmb=|2W9REd`8azxhTSD+`LH}JDJ05s) z_kfPqHlf9EmJ{ z=fU6fs?+4M4;W#h2>TDE9hY!Kp4uJ`caNX9AMBR#%)z4>3$gS&$<_{63UoIMcX=Ef z7wcOru?l)Aoaq1U`fbg2J>W6qUP%TBxIiSKBKfP0u|oE{P#dpdu?9JyOk-aj)TpNO z8RA#kpmUA-Rzo-D$>m2`SPP#HrQjic$>y0O}mpGyyivv7UO^p|K!S^sMiq20HDb}rpY(f_RRQv* zSFD1B_n$0-j~Njl{%4p?!bLlI#89w37PN}Sg;-x#9=JwBx_X<2Cn-9$9=RaK8lvkXhMVM_=m5B$lP)h_v_KZ0FWpM<*-}dH_oJCU;RZnF%G)^-B>g5U z@oX1aNC#ZbkmqbN<$c&tt**CMzj0vf&Q7+|p{I+L50rdj2i~H4V3-C!M2sYSrlu>u zf&KO^W8`I0K&nO*D2b}WhJmE6V%-kq8BxaJ^sYe;3} zV?crT2{TL+n@dH)quG6*oR==sw_!Mu->@L~;o|?=#ke&(D#wzr$$|M3hqpiApS?Ar z0!zqU4VMiww_NZmD{8A$GP3h9E;(=^LN*v<&PQ* z(cVq#u8?1FTZ4uqxeZl|b(7GJr&)Y{{oIz)SFu?Jh4qSKczBaz$!@xj`m}GG>6)tSzOS?Y!(KB89XcQg7MZO@Z)%;P}k01(f2F z4@d`((W)bodAxRBE!KK{M@So8G>0Ys*IBPDnj5$46oJ_vky0-I=3{yEGSU=n`iJQs zk9V;aZ}N9b@AIX}a^YgBWc~BqQ|<{T;#pO``78=q*-EcJ4j4a70gn#-U}|xXy?j_a zq}DMk4t!6)DZX{63!Ve%%C91bW53JHj@5JSpt;Po?#(hKUt3Ci)2Z}unTie!njmWY zc$-~x3}8!-EA5lyyU#Z@diu5*`x9_&aO!yoRpFu7EMxb@HxF005wkPL2G6e2p?8c$ z2frD=sl!V4K3FcJy6s&8XkPx*5NWitCO5~$;3;C!WC`vB6{TMZqqXSynV8013Y{B% z;1P1OgMaPhxFTb~fA1YH$DIb-J+@m&8M-N6al|YhbUAZq>kwN6c(hc;{uD=AA22Kb z%*yV^zU^f}{61fdvtmJyzW{Y)tRPxh-&Azo3ZwtuUiEpghW&s}fv)ezRoxORM~rj% z?>$b7TTE+#>2u{PU*9m8(l<3qGotTY81v#7+}O^9nw36JCU~Fms(7 z38>mQP9<|)Tcm?Gx`;*p^nab+O6+ZVAHts_u%s1MM&3{!N$|GL9@Qr;ync84kqs)hsE^CAMRd zJI$z6nN>CR~Y>3VDIOC=?C1XngoJfZ5_#|L4H_;9|$humIAm>y@m7~lKChA#ck#kApa zpI)L#Lcq!rz1qYs;!WdzLr^Ae=w>5N-ui>+K>Ugg6*uWsJg*BHk_={*X-Od-bS$RX zo>97>#afJfSsSHQ^7BRm|DGKpUGOTQ$bjhEj3_T3OJe4a4gIAya8gL+Q6NG!4fpS6 zBbPM>mCz&AC4;$#k}}=Prp6lFs$YE(DqwDqr5fXi5LzFRYW_zS+}dcF*=qyb*LD)G zTV6S3SOk8%d5dl#Q$JQ;ReLT*H7W^ncsb(ba~bn2_bUiPy=QBrDyE6awF*#`scfxi zT39}MW{IDa+}s_ZC^C%;Xv2B;)QEV~NGd9xv9H=P5Vmqm(>I$M`5n($(aFhz*D9)) zrWHRWjHLdg?HkBCWQkG@DKUAKudnaN)3nSuC>K$zWqnl5&U{wVulXaV$u%0#o0Huz z`%Q);_hMH~+cN#lw|Q0l9K2lbp*@XB{?5fmwSVDA@o3-cE8l$>n{Mq?5S`5h?oWw} zvp#M*X|He3R06)T8!ut{ zxN8j>T9zxQgS&sT_Q~%}_rOdktkyK+osgymQB?nOyTLjGvCW~;gL;S^g{dV)Em^UG zWj(~_;YV$+)}Kp9A8NIxtumpGd2Vi%RN34mpnr$v5|%B2s>^RV*CLrp|AUD(iiMu~ zDy^=AJZM2{Al!w9ALz82;Nr5F!j!=pon+gsMgm{rLHE7sYw3n-f*{khm+30C%Txk5 z7*V|EP!um#=AiEcp>j7!l*j6uWd69nEDx5iyS{w&zp0AR+{LH%+{OWP;OtBuk%r{L zNF2Mws82+i#@CLMlOE*o39jhOKARtos(@3N_rysNGm9OdmlyM(o;MFW1`2Psx&2k% za#Vdx%z^667eihn(l5n#G=7l*UYP)UOSD7E6#Y6K)nTz^Kgrl+ThFkn$R7v!Fm-!o`jp>0Cj-$=KI%OXoP3&G|A@6OFr$8~JF4A#AFc48z zrkyf}+8+988*n=0U@CC8f9SkLVHTutn?l904_s(tcT0swZjCWecBNsl_ZZu;i`Jqm zW8>_n4SuSRO@0fak(1)8PgyF9Bg7Lt8SUap3!xTY@3JKs2jt}CAYn&raXSi|ljQXk!-`<_E zYVCVD4`D5SZ(<`KnV(RA6#@=JVhT-H9z6gC!%f~JIdyx$`UV|esi%H|jMZ-Bw}5?R z2@(XKg@Em0DT@y1G#hdJj1L1kF3!JIEA)pVI5$LBFQv%IiKGIqi2Q_SCpQx(uyZRR z^jm%Zimo=it*4-6N$83Bg`YdX#uY{Py>nh;kI#TW1Hqm9Hq!}^@}sPzGef^V;KPAV z+GzcGpGyxL%~l27%gb|y*w28QmF;Hc+rzgwe2OC)D_-2g9hprxG0SZA2IICMNWfSBIf1MH4Vuwg(~O$YO-KEm%weA7d-s{9`c5 zfAL#Eax2(dMzeTxQ8r>|h4cNVk3O}bXF;SHMJy3ht&Mb{?{iO5I@kpEgY4sF zg1_mA5K^h&18IdpO6|4dy7IQ*1MTI9k6!VB{C{-jWz#iv*gm>s6ijyu{M<&oTHeDQ z9R<$)8=|R-o0!y`LpXt&3ryGVD)$rY1$Df6LV-Aiz#hxSw;#4dLo~Jr&+w#k1CnOX z5QcIjrn@ni=RZ99)%)!~eo(nKprgq|YKwR@%R!uAB8?p}ND56YG5#OD<8R@s6E|t6 zs`n5Z`I(3_Or)4sHlSi7+m8GW5B$KVmCE5w+ZGLYH~OXrAD2wQYb9V5{fY<0S>AMT zmroAc(k$GFA%cVLgDMwbZkZdKQ}ggH_HZ8=Lh}IxL}!#*7RqmoJ35_<11?% zMKxm6r^K|KrA{wBPH(H*J(|j938|SAY88~CH-z7qz zKW)|mbPFC8`Oh=@Xygs!Jcbv!0UQarPd?GCA=3L}?>rekJtl?A|K^kY)F2h>n71#; z?zaw0*N=plC%V#gR>x9&dNY0dug`j~EO}MH+sCm}({kvURIyGrwBuTC10i^(zhHMT z?GvP3+>WE)8t6Q3*KL5cSQPKq07;HCpH0j>>puvBPfDz6U!>{zsaU_@o^UjIKg8IuQc9-XefG;N{4irH3xi5>e{0&R=tEP zF*H}FccIy--sefXK*Vc-gx#~D|F5-EZoqJE1bpo4lhR++oS6QYu5Z%7Md_ZJ$2~C+ z6-65ov4vK!a!ZK!b-l>Z2BglcUcyn#Mc=Vw7g*@heY)@0c69K(hm-bQCu%s^7bX|X zY-5!M@5u7Y&94kN75pXri*HU`2D~54A}nu>R-R%{kYJkr-(REJg!Y|Svr(8fjI2hC z!$sNJgIq5j7Xw1gzB}F>6W;;@_*$eMtF-B(P$tr~-N7$s#xQw5IY^Hi%jH`5tr6#| zpW<1ze36t=)}fQYZ1m|GcvLW~%>L^V`gj{i94QVBL44dW$dvNS;B%RHCa^D** z4=0n*tz1mB88tDZl5 zcMnaLNLByy6y*?_cUVJL@0$)^_GSHDejGs28DwlU4)lNf)|8sXL_FPc=lS=l|LeT62l23z%?jG2zoP;yX2y2VeNvrei3SjO^$g!!Xd!Gr#DhO+>O{E`LyFpvED|>*vwB>7uV< zj+m@3Lmf9vm~ZeC&zjTxA5+&IPxbfz&->nMWJDy2P#M`u*>c+^*Nu_9)pqh3vh#zjKYx_xDeaht7GQ^IGTmdYyC6dAv0bD!6F962n_1eFdJw8=?@D^>0SnK}`$A;>%U+SjNtRo=$fxjzdvv6$pUYA_V zTE-rq_N$B(T}PPzv&cN5Xr8A{<$VbeeIwLonF=_WW z!sRPJp8pKjWI5_Af~`6>?Dm2h2@?d%_6loBTzmAuNA{6_G-Usw}x9BAnX~QfRVUEAF7~$s?o;^s8ggtK7 z?Ga9u>Ws7gqO3V?FU}4sHtu{jQbaSlg z?x|W%JodpLmC$&~O|DB2*y9rC_0)@_cYHj`+i@!*`kxpKa=Z)5*xJ1B9KsLUsRzVn z)SM!VDbj|jWbXb?EPf2V#V%9oHwUJ$>9>u&T}Lj7STP`nPD7cOGJPIAP1e776m9tW zq7Pon-dTfHW1wNER`+Bw&`{4+dHsvw@``A}#8W|_&08^VVUvebaO*kP#bKYj<2YgP zVprxicoaV2TBb*gj7|6)3p45-79p2Gt54^tXGEFXGvE4lLNh3z5p{IrnlijwcpBI= zwyan16am`r2RnP^o7mVkrmiNm{XYnk)<9Gkv3f&b(i%517sPn^tToOoWgj{-akp;f z_i0lioh3}DBr$yNzs3HkeCWqddOB<`H_$rKpmSKy_81<%w^r+S!V%6P`2s*h<8t1H z)qet7=qC549nCqLOtr9RjMLKKea4vBtb7z--i=9T4fm%691HOt>i?NLUbojoNl7l? z!WsAF`Z;I}zSUO;AG`C!Qjhk6qeFfmNSI`9V1&c0@JzjDv3s#B;cQ_R%gshMBq zr)qtHyfgl<6VAZF>i0z%3ZkDSmH}L*Fk;r}BRO|JC zyyKpjLfxyDd#TCbt$xmmw}byf`c+NjYh2v>vqRuaAGv?v!~D`JPC}zLGW~dSp6N7W z9_SVThm&Lfzx@YjAPtvSX-=LIle(_`v(XI5TjC75HLs>E+Km!np%z`Jo}G|T-h!$B zW?F~jLZ9J?*i!e1&r03N;hA9$q&-Y2)$Fhc3zBam{Xb6$?ZJwPvxuckmy9q>i)SAf zsa&}J^w^5MeIxfohGN<`A+Xewinv7lrvp`8vZl1P4xEb`LUT;wO>IB<7-%fO^rw<9 zQUy9S5b4?gRkeSWJnjD@=&A^-8K66a7L>VrxV)jWKk1c=p{E*WZsl)I)55sGY-Uau z^k7vS7y&|?JFkgcsyl^Jto{iue{qv9?5`qfT7ctxr`_i(bqiTOhlHfIKlxvGEGvPO z%6B`2qMnITPd;Ee$9cAHNVq$q!r0`fBqs&Au=kaVUv(?cKa@f`xHe__dgF$g3e-pZ z>=MuIbD@{Hh4xjh%ia3KeefLX=PMO^R+0OYvb4e2rJJ#fvQlCt`d*J@Df^b@Ry?EB zrY+1~lTQy9fkJL&IeOWS-zU*^GQt~GmMpzy&S*^Wze9M*H=)Fb|2eA7A$#62c{(i`dhN zDMpZ&_>^O*ZFlE#MR1r};};hi&PwPmG7WR%bj_@|ued&I+yvCha4Q~IA zJ1l$ZT*TxHA@eje8+QAQ8Sr;i?A;UgCvTcn2S-1ojjBlY%X8&rRO@^%4fSaIHqF>6tZ4HRGw085deN=FrhthzCkltj$g z%=}9Tt^O|dKdQWaFLfA%8t&~^3IIxN0U+@-4abaPc>nLyC>i^~ zoyB2yCGzs=uWXg;2Y8UM)VZ&RRIgUbfXv=TMv$Kjj+e-=r|w1&{$u=vfeNw1hCn|G zr?%73^jVF1cV@ZZKjTOxZ@QI6j7$bX?riv_qM?N3 z*@5Z_J5u!SVPdr~3W75HhPvCdtq05HX|OvuE0KBm3Hw`>@~) zHP}mh%zMWO6QkZ}SiwZmxb^%9inrt5N0sp0gjYy*KBGam?SWhJv_HV@0&KtD)$yqc z@larv18$bHQxxqUV^$^77pI$>10fYC+w-P>|C~J%IXDNL4-+R|U)?;Pk-ehxzJI;% zw;XC=E>j*$dJRT0bd7>b=|9h7%p4i;YuR4;y$*+0&4BY~P{n3b*5H;bRtPy zkd@wnbEAc+?z8y0mr`h}7^=9C!a&J>`kb~7<#Lv5QMrwtR&U1|Zza*m1eg?mzsURF z8ma05=blYfk}*A7YrTy03T;dT`Mc2h1JV$r^029cm*F-3Tu8&q0d@;5B<^6t^sx*@RS z{rmD_+{Lk*=lm+fb;^wP_Y=v%qS8K_1#UPI8%FfvOV>47Kl+`6APO^(==bB!>ETuJ zJ%*h~eVjl+CuJP_njK+9o*cLx1ZG~8gd(r;A-|nD2;S{iyo%l92i5u}xll#9yR4}? zm%I~7yA3(OEgj*PSRm$+0?fMRc;gHu{*#03yRWNS@|uYBK{ER9=X1o4 zkUVKI0UlHsGgXb>4UZiimm3 zsrN;OKC3M9y`upRdf;9B_~c`cC?dzss;3ilyuGPje{Hij3&@p0WmLxooO2sn>!LQu zlUWa4S9EVOeyXvmaxH?MI7^+WiS$d^eR|&=6&ImQvx-Vd~bt`;UX+>Cf$+pH1oSJ@?s?HL@n! zlp@d5h=W~gapS~E;tlYT1yjXyi)?p~WGR5C){s-f3Q6H)EQ}7hHR=usU6q3kcmFllTOxG>o8PXXC+?`^88xrpE}+bR zd%4u+K8wK@t3|=7LrQN#@>Y#ZG^*FUs;SVQ+B)~=qIUoz=79jx{96(Kkdjji)<`(9 z;lo@wqnO3Ep5IBYiM{vP1FM7?o=|xvbAwTzIQ3ZGhB!PeVvdX?KlSUO*+tzE6YOzZ zcrG&+;A4eW65T9BYfd8{c{(=r&&t_5V`DbJDbJO=v}DdrwRnT*x+YJCufd3_(~6ib zv+V8xCR1_uaAOBP$2|IoJDcY9KAQC)lO~p{k?znFH8+90nU*+oESR|2`OPNE<%3zb zk6Z@7>xKx$n34F2fj`8jJG(+>P0Wx=4U5rj`R{uCS#BYu=*MAZSk=0*_E0Uz2)?b_)ic9i%I4H_6`Gz7*Qs4!)ev;tY zcK#Tz%DH)#(>X`4zkm4cu;jk4LZ=JGC}=-(DXTFu>NCu22;Ka(zh{q%d+a*~{(&Z` zD8@XQqJ-`T8Eu`7b0W{FJ)<{t%N9Q7I2YKL8P1IP5eH?6n`4z;2&einREbv;A=PT! zdfhsGX1R%QKcLxdw2%6EWm;e>lTEY^!*ZE78hrNfdbE>ceSJ&s%HXnmL4FX6UUYlG zyTi%yt}A_fayd@o@osWkKX$<1PVyOSjaU2cCfd8zuo7}C$>eq2o!8^elI;EIQD5kc8WNIOXOKTU)oeGI0_P z(EC*?jip+9dCKQX$?dP>aJ8Ow{NUzcRLmoPptibt#ciJVuL`U{7rV=hJ$HX=zsDZV z^e&{77UNms;W%%_DSm5SNEO89d`k?^Es^S4jn zQGCBQT5M0zh*bc7(!=&}5qS53Q}Z_+a|@|%~wA@K1dj-={C+C>#tVOV(!wUh6gP-~Px$ zo?0~f!TMibSPm4u!HkCaR!ed06ruciYp$lh(ksdtzJ!vD{6043GgS<07H?6S6UU6D zkZ1@e%{9tTc)F5!I~uzq{S6gD`Qn5rsa}qxZx|%rX6N0hxy`^tzYwW{Uc}I8^hJyK z?kDF&v9~%86%l=4VN-&i=ic=9ygyn;k8a_}9!?y4{iM}_U{d~nc?~f7pjEnP|4tK| z3>q5yqwC30(s%pO4>P0ITerpW7)oUN z4&%Y3BG@MYh#d!`A}nWUNI%~BgRl07@qIP(W;a}m-|iQH)wk6_rc;tkZ_cR)Pq)|D zz>n^wyQ_1-KV4p&cYDc5klMqkNXAL*UA<|QOhJkWP#k^cVZs1mCRmmv*r|5V-4&8# zb${QsKIp}jw7n@Dhe_pGHy6ocOg!&*Y=y3n?t#4q|0ep+My`?CCSjY0V?oPqW8A*T?RHh0LS;qV5WRV(La0ouO%=e*LjLQC0P92>G1sP-u_QzAL^Wu>&HZ@ zn4sx0NNHV^Q}59gielR409QA;sJZ{Zw~MGKFDkDIq&~tWxXYe{6Ud5Q^`Wkv3i5aO zk_y<`Zg7qb&y0G&f~8wv#2;pwa9My#VCwtfjsW<8^fvO?6RXzqW9$g&?jk30;Zomt z!jI%9u1;V;8E62$ZZN+Kt^2x={men_$SuTRYeNQmdr*kZ4{TV;00D4sE7ssbM_9wy zg@o-nP$tkP4lc^=k_KaE-afK)Y&wRp%WQE+&n6Y=+s*wl9pLJJ^YkEfo}+2UvtVCN zUfv+}UpI_*C)Ai5w&pf^2Xjd>|Dl2y__|x- zSendk4_GGJon(@snv;Oz1I~cVKRXz(_pxb>d5%hL&tg=y*C2VL|K(wPy9OY_lm@T} zfK5YMt{kbBF^R~N6<_BTy-mrWR&GPHQlJD{9jE7#BR@wW+g9=2C41UwdQJ>V6Rqn4 zzwQYNckQh9gU05T(}T>U7Md<_N>5*3CwF()dlcyolGB?Ic$n}eRv?v5wa5IwIjt#d zC2hNJhG{mK-$EXnW2bFRV`FnGh^5=0`cMXCZr)HHK84zHk;Kh~MkZA|?@Ig9sCI{k zzRoRS%q_&|9C*&;t63JdyG&0yP&7$6WV@E(p^B>>W2W7!ZeS8kXUz;>`3RuTZNMzAMpxl3G#h0PJ^8%o?d5uq zK*jkJ;Vd#S`dohz-I0<$WxB28^o-WoC~^Zb`i?x1DUzltB(J`$OrTfFvc7I^hc32W?FB(uf1v?tSj^(ISutn<=mw zAfp~g``3E@nJUQ3T&9Ytda_BWj|f(bNhh$`ZOIVzQkaKZj6}g^@F*O3!WtFtfFj)) z?D&ZtA2!XwXcMg2m3$h-^8#=1tPe}is&mCzs&7kFfG9^Tn(;HQZSpWaosmGhH}2Ga zr4q9_2uWL#AnwK9n5ZUzt)a3py3{Bh}9xR5aOEXwV$qCddHKC5S}L_Ww8Ji7{# zI~0NU@VSd@=gfcHo*1duu-TFLnYq0No*ti)W^1%y-L5KZg_loTT!P?EB(pp&gI*wB zx~yEm1oLuKdGiA2OL}K!|0BW|Gz-)wueJ0-%P3$6r7!jh-@WX(+lCnv!QFr01K-Q?6%v*=aInr_T5x6D>W#4+O z9n`cPxr2Ul>Z|k#)Vu%(m%!j>uDe5qA>NZP-}c)RkQ}%VmX)b`f}t-I%?ydMuyV57 zdUFC^-~Fvy*}9o0yvl%|rY1y=%sp`kh8ZlkKAe972G1*RHAx_;Elv$`*}M85VVD~` zukK}G+ZGHSr5N$)NvwW9v?E|ccrAKfezL33gf9k1KXMWE7GYnIP2X_~{UQ4doU&|| zw#7tWwdQ3$^Taff+5Yp>9XY=41M$Oc50d$hPOc?H0mYRIBi$u$I_Ft;f}j2ir&Lqv z(pC@l+aJ}s3W6I8roEE5rAK&o<_`!6xur09DlqsUxj(?b0L0A7;9lz3Loxnsw(R!B zJa8YGY*B)RH|b;6y#DDM&J;Gd!E*EfhPeF~m@#$i>om3tiWgvJ6AZkSOPqC&x2oA? zkI@f=dvGMDzJT$D=p^y|@3`f$&{Ylnofy_A2B|C4?oFauI|Sn$n1Dseo7!A;hc%dn zAl7DSZAuX54^;X#a(>nFHtTq`LTPW^1@PQSrBd}Sp}A|U+{^m-V4t-DNXVj0=Ps4J zO>AP^VX+Rb{=<4314Xmi)U4U0wYErM0Y6LQJ= z!*d=s6bSE#kh9q{jAKgID$Qvl7^qZo-1W|hw88BRo+67Q$**7&emKi)aLvIWzJ7P& zdl%8knfFD$?3gQ{qm&pN^zFA}AfTMo~BBdB`+9wAVX@#|{W&E)7E z{xetUIScHUEWF{eFq+td|HLJJQuIb&=lIr@ho9^xsOQN6{MXz!iiS?P9YS;hK{jBO`UQ*)x&8 z63Gk&o&`G3$zr&ruS;k^jzhM|#tj`IG;q{X+X_H|T^l|p(K`CQbC+Vu*F)bHU8XFW zS7y(#Qb3Abi1M0l^3vC3+~yu)Nte<%5&D#8AbhaoG}8da5?UlVBSAz6nsWjB`R$k( zJZvU9xhBI0?q@$kt2-%$-0$ix!e$+nWSM7ZG zv#qD(C=Ty`T2*$kE7>ANSl|_`hiYVi>sJvxBig*!bm#3>_(Qq6rMl`84pwW9tJps! z)AC#>qY4OCY9;^9t}K^Lv5n506m?F1OR3`O?=F9ZO0pgC0_2u5HivffTSY5huVS4l z(iXu-{S4Mg>{mMv(ti8I+RM?&?shr&qT2U0ow_FL?8Xr|!doQ9g)ho2bdhdHm#_x! zixuBezlk@pUeJ3)7$B4zi*)$lon5lOeY`|~jPsJftQ#91BU!Ky9eM7xqwYPNrka@f zG%n|)(h?!)vC7uy2pexY8^nn_ks8dRAdU`wTVI`RU9em!Vt@m@*@M1q&-(RMKH=4W zo%UWvzx`QUEA83HT7jsHk$k}nDt`R(aVXioAVxCJLC>h(t9w6-NAfk+2E!{U_os;O ze`@~tQkWriY+LQH(^^!+Vp<9mM`LXc%0QTD1K%xWy4-GWy^e(^@0cn-s;06ZGw+jT zrry|=8bgV>C;?C7DLu~*#juuC!XEQmY&W`Jvi|O+cjEo`=t+1(O?zv85QB&y4ZS8$ zq_H;<_z3ebe!OJ+{33?@AkT$6D1v<|qZrUZ6Kwk;#N`OvYq9zEKl2e$Zv2CFGSQ8F z)1^LrOCFw$U3z^*vSk^6cT9v6!CmsQu$C+Bb1N<^TwTLg+h9IX1*x?RC!be+kXvYz z=X!A~9)|{sHxaMou-0EWsf}RXAzxjuf*&QEhl%Ike-CU)OkOgPDc;U+1F>B+&xApy zC_~fPGN~L&jh;&VmukIyfyved1bCYh!CmiiaO=M~G+O|aF@H`Y@5oFs{aJx6f11vz z<^_{}$ikCcfQ7AeM!{n3;>uL{ojoz{81XGNzt%^_|3r56?%9gQAke2oTPt__P4&q- zE?yAjLAX#ld7^|+%U`%$cGd|ON>Ihr#Z_|XNoyPq0*a!@<8$u=FE>s(T8IAE<$6jZml`pIG)556K->yvP@LLr>xG1&pM&LH!Cr1ACk|!?|Y(GxT zahVy&zy>G}lFSqfFq0tmA8O5j7WhG91KnQ@?v3mur6?}&GMx%_5#e@BE6}Z-R382;j(JK zq#9-S-(Ys|CyR^%)~+)55^07YlHaaL>b(5)fVc_o)c>QoU!u7~ALsdC>CX$>kI#d! ziU1Z6CYUNYmee**)%VWa`>zn;v`qkD^cchXX*aZ7ILd&3!;7kY8utnO(~=Q2L~(c$ zE?6i=k{L~}8BSj9yM0gIex=su^c&mzuP}d3AY49NP{V)KCpw~mp!F$dmrpyjTT$Xj z>(#|2kden+`Vz9#2M4}(JlRS|SC4HXVq6^A&KU=f7k)fJU(6GxlVJ)1f%1!@d;HsQ zYTDBY#F7%V=IgpszgjXHC|(nxX_M$65G_D6qs$lfaKCsHbU zbF)32OGJaQL2j5TD{xCoS-5eHf+TX1=bL7}jF|AO{I|U%(uH zg;6VVmIUd>|065JP8(SiGu^Ag(Wtuzh9J?C^ZEx?e^;))`6EUei$uHROZXP(ML~TV z)B{D}8y)yVLtF@0T>PNRBvAeIiLcgw9gkXx*{2Qq<%zIG6zMVYJ*KCBp~D}COLtzT zKnr^>pZAH)a+dYqRv254BN}@1?%ZE!4Xr){=gdG{5ctp`4+ISf@r9xSVMf>liq({mPz`BNl8VUeI@Q?jKm} zsZk9FiY8S3J>e`uHYr}e(ruS10CvYQ{Yk@KT{3RNWM@aoyZ&yj$Kd1_$hw26R{_cx|KfY!5KG{vvW=rhT*C{xk#OhbPe{NmX3%^`^U3X3=0S?{*qYRP~PN z8+N~vcIyK7!F$Gzo9FQ{&WKT8X{K5;-9mE74O*YrNVHAOS&`D+Zdp-^+@0f*k9v;hK>v3#jz2q{AoqVTsWwii%k*lY+0UdcsA&!@<&G}*LYYOMTP+ojkav+*1nqnF+`M#=Z2 z6FIir1B!_xyTZNtQ>4<+FHgIyq0s}4;YQ6gH8n4KEUpqSnP#o+5|gCe@o*vZf}7Ch zbW6Peg;$x&?`aLfn>aM)D)Q$Hu`Ngw{>!09oDy9pJz0d&)q7`j^WV+8yd|t0p3Sp8 zFJhI!z?DBH5Y4r$PIa~{OsXrL3HK_z@3PTHy9L}_;3XIC>QV{Y^OE)kYjVjAb>%-* zMy(V+639DaI^qwrPxli`t+@)i(GFTaO{b+1J9>!8C4NC^ z!rf!$rGwKue4L=e8cAU1tx`>&A-An>hQYjvps?_R??QF=Kd)TZpTj%q#k~J4FGEBB zV4Z(%BG6l;kv&bgo)69J9wM4qeM0zQT0y`dTF{EdQ1(p5iPap3T3Rjh|jjgIZYG4+FChSZX+hde0$2%dG^>V?EcOD zgtWfRq7Q$WCOYbgC4TN3q{r*f0pbo3u3FqpwVB(T#NS(v9`89}quq889iYK|eMlxL zq4j+7Y`+xtnMwpz5#Pyh`s=mc_&t$Sv9bM|2;IT!U*C`gh#%pj;{K+By?uf&KIj5t zJohy&tjimQFPZ-2DuYMwbN^6~`A9g@S=d(4I7e}cGJkmRK|{%K^`wZN$3}t|RsWx6 zufQ7Tj_R{Hj-FX17E3!8$5O&#yEOQ$a*6CrM~Tbi&zxp2Y5P$+`HUMtetcv2XW}Gh znRDif*Zi87=hw*{9cM_>P7m}9+(#R2^vY)HCkvX>*0WWR2pn27)9ZCdP5+;-jl|Nh z3?qdlwWbo)&i*3fD&joF(Z^)FR-5MB=RWo`N5a!-F|bX){RXI%Ay#S=EAAe>A?Z0q z?C2$G*q6E6w#0dDquRGkNkZjP@Lmr0nU(snyfTmZp`5I=vX}(G(Ac{w|2DKiQ#)s~ zHLHX;C_!Y}vEJnYS%PM?=X{4Rub-1hsViizuh?m^F7bIZW_h^ODDudeNxoxQ-+bYzJW+;%I&1UIHmmf%OXT}xr1qsdEcb7edAiN5nnL2T*IIKlRX4m; zVbQZSulzB6zWAb*)fyG6^=0_evAgMVE3xHg$_})H*f#Wma}c}d{cgnCYxd8N$u4HE zmDV&7xs46h1TV+MI)Q{`)Uf9EV#J5s$$I?ZUjHu8pFdv0(DzGGY2wp)~# zg1Ea(P3k|rjM>Xk>cxgVQ|P%CU{lr$ZROuTvBsH;sE&ny8lBgYOcZ@<2D z&e{&@@0^mL#IRbCvh{%;nI$?7S!zV0bbaW@MEO#b5+i;z_x3}K3K;<2 z!O^1U>huxR;R_WdpqF`4y^jH(X84W#`8~{t@-tqPRNjMLKJlCjCIotz4-w#cK@-lO zukIFtfV-yg{(F=`0nEWpKY&ZWL8%H7x5qCIfX|Mrb?!h(KDWh$tUnlGloM;t!C=5Q zc)LUr;eu5*@NkbHJ?|QIMU^fE1t3E#MCBPfYyA++V~@Y7JDF|Q(T{5)<+%E7n!*|Z zUIqqc9%SWAsu2jhYlaCKf2~ELfLA_*Mi~T79h%duYX?6Zj7w*9xg`;rSq(fu+dEhV zxEQ|dF}UCAPfM>5Y|8A-h(CI*s_iprz8m!kj~MZB8TxiKfHUkFP+aqEVn!HV{L*XL z5`}L`=)I%!+MuO{Y!BdkYr?FN{ACZP%nh4u*5jmM_IK^5(EXe1*lW3%6)FkT?2%4`*oA z)g@`j$MMm56T63GoLVWrx_q`Y#+OGDa%f$44XK$w?-4aV^H!p`d^*W=8a@|ToRCEJ z`}kIL)RJ4Fp9)SEwX^&+*Ne;ou(|O`%l9j5my)S9Uv+|OVnylFUqe$bq-MBnnRYp@ ziT@9*w_D;WYWa)&dDzdJGV8U%)jCNzq*O`YM3Iy!hvoqe|IRMqVEFwTCGdCOq_e_D z3b{Qnj()wzAT~(kvHr2ZsVNbb9OQ$^ow8_-zc1T5NxzuVSK>tVBCE-H(0lh&#PjaK z@pUjE$-Yck@AnwQcariB{SE;KBs2>nuxMer_^S2#2LswL1-HHTBk~)DD zJ0xozHlH#});Vd7y`YdN+v%EWG1saDBMCekD`BwZlJq+5&)@CKn~(0Zaw;BZtt^)x z54#%An(W5}sl3I5Qjf{Rx?grnZ`KosBUIlmYN0Lb;_m6uDkEXwH!qaJWj-p%j*HiK0sYHjtlx{gDw^xv zI+!56Y-YHosClf#$Di5G4~}8Mvh*H;GH-vT(%T^ZfLuxd`tirmu@3v0lOuxtC0QuY zzcl7~(2ij`b6K?L!1e&5BTs4l8Za1l?kQfx`%(8K9@>>{%s#xe=)a4I_D8?DieFW< z)9P1)5ng1FYf_n9Y9B=WFHb>U`RzMx11A)dDl$n!e>ZnsYEHec^J%XQ85GqsRwSan zHQar_=$X_mS}_SiTa#H@@{>rBqDwhHo5!z`X35`2&^30*UgP-4#om}|1c3gzxlyO$ zH3h=)M86v6qflq%zCbUlMbyCWR0*4qN;eKHGkl#yiWdq}PWr%EDAdOlfIU>X5~B9pnwPHc|Slt zaZ%*;x$jkaru96llp~CZ2mA8CqQZXPq!UpXZqkTuh1w$g&>Qgqj7Arj|BMH zXl0}z>=3?~0#oOWyQg2CN+nw4~~x&XO8indK2{lh~@i#3w4f4bMjOlqTzJ%k&u>A}cp5b}z;#kKV(IY?*rZLKZ7 z{oMP}_5?y0mwJsOm2sYjc?W;Y>ahZXUiM^gtmMaUr#&LlPFijgIHAHl&Vw&>9W{gU z^9iqR<{1yy<#+BT@t;R&(4=eKd}`#Hd4~I48jAL31RhjU;c{*2Nj&^D+6UNqH;5Xg z&1>eY)IJf1X`|cnT|(O)ooRnEnl4uLVv9>$$bwJH@jubmKhgpNj@uJ0#}&W!S}mAv z(a(q&(cO81Dims|#$SRlzj$N{7G9}&Rs#^Qd>$_Qn~K3_tw7H8zrE1%c`ds&6?6P~ z(D}@p*T^XWf#WE8HkV5J1XJa;JMIsfPx)fq@emL)&!;e2s9`RYMV0EoVj%4*3J zdQpX!e}e@EB?+d5ZhXuE7q%KzDQy=uC|R70M!Q@bEtp`^>eDKkgKmd($X$3K`TcbJ z2$s2F6ik@!KW6eATi+tUT@TY#)4DKtd@nyXLI8^c{i^%$MU1QYr%D`H==;TTposlP zTbJTK4|kE)ARsa#G@U+rN2m@7LPWc7$VIU%DB(j`x_$rVh*0Mir#C45i*)6O&Ywi{ zXqy#_T&<5&EYtXECH_NNYku|) z1rlI0I4olWdo3&Bnj+_w%neux@qHOoV45#JGC|pZ5r2DBwG(0u*knLxGF!xLD^Des ze8z;-B4_lnbopA}5*mUg_?zL9C+HtTyJN&;sVs5s0%2k6M&lA1*>J`~A$eThjKPUJ3+84+#^Z&F7`bI17s zfx_}s*I%pC4zvby+2b!sq*~)_J(lR($>}dY8Fl#$yHr|43Vv@PsDI|_In%A{v)#wP zC<>Q{6zh|Ph}R7Rj$zsLLwL5sZO;NMNwcggQ~HOiUwUW-uH6<`C=xmd2+z#3I|Hu^ z(XL7JE?ip?-jbaSX|ew1OQ+?09blH7p9ckV=k}719vhiwcyoR8IYu~?7YCx#_c>R= z4CgP~z)&vfb@MC`jmNq_P7WTPxZiIor8p|LMK?5W-Fc;J)8EZK z)@}Rd;f?A98Jk}D`Oz;zLJEoU<`3WsB+wm$7C!!jXvP2QS-_1z6z2Dso8Qo}92rYF zXA??GLZNj@Y*kOH#0r%2yj}CuRXM1x>O;*cUiP6+$+K4KSDg&#AW2>|AhTut#C)~+ zyH>@G@pI&0+MW^hNzt!K_%f#DN4z`r+VP!nv*>GWe_bkS)h}Z2hfY!Y9$*aVbldwo zx$4^qi@T4HXIy0T|N0|@<=W%0$3``Ynh`b<;TxqM`mP4?AuGhakGl2r8a<{|#H1lz zVA%>Ms?QtB9~@V;X zT9w1O*EbKM)o1Z=pzg!Ssh}|*lXvVg#s!~szmgfsfM0j^>1F5Yc#8SFcda;!C#@pT z&4igZNzmmFd=0q9q+N#g$^r1H7qPWd75hA^f0xhqSkYxtKUC%zy0o(RC)mr2Un%L0 zW82ONHP?}+Nl2@l4Jw5EVbQ$>mm2TDk8;v<0^v2P&fw~;_oB3TQU3zU* z+((d4NN(sLX~3E%Agg&&b|1?b_427d^8m!Wy%V+kl%M{aO2hqA$4Fi9iIfJLZu8oI zsXtZ7S>zeg{X+oiLSbOWYhC6}5p%0{ltbT@9Ck$Q_TdfB_%;VYsa~`yR5)YwxZgDM zHFW5O3K!1aqyRH}2|p&N9ROEi;P+;!M$+JFCvhY7uamO~cko)F^WNV~H~^q@0&Ht6 z^SqeDKtU?)wOA^Qxp~I+7@&_ay?mcPlOcTs3F$Q65O*{AK!M8m_O>$D?;iy^@-60U z9Xi`|!CxREE~X|@(Z;^CFe@5)m?6?bwx6?wG)rXPrupU;=c6Uq=ty=&AfkVfjM#*J~|corqBp%}+&;8b`SN$^X!2l^`JOF`5(YO-*$gW3n;G*!$#PEGbAPW4PGZ2$0h!{em6wMYTp`A7})6@&Qt2$Qk4ZIT&kssFMZ=O z9Rw2C+1vn__PGq6H8qn7fHslO7R%LcDx|s58j{77m_3~~O3MD(a>AKq2I(i>pKazp zT~U_x)G4%Ki|d%DBw1#p)_h1&XjZm6fB}R)O>ik(cF!uK(z00c=zXIlxc(v2=eHzz zwoGVw>7AgKg?!OCU92gO2Uxbm*gn5YRLFTOpE==4Uw?~?gco7w(C@i}XR1F8CJJgz zIOOH=!I6nB>_X$PiVK-vTJK`&<^T_=Km`E5n2`MfNLH@xW%cWST054$mOsDG0XDn( z?{_XV3JoZuniH?oQP}a580J$h!?XrY?Psm$I1S4((l3voVteI2*Gze7AaJmlMVgo& z>E~60-%;I2`l;yMFz*YMvl$7Bm1Q1UE53EX#at<5?#ydE1&33+K|WoYy;PK~K9I(* z70MFI{JI0uPAs-UBp>UU+=P|sWr_;Bx>7JuoA?qa&jR1y4j*o^s0+0;^$4>fAm$U0 zO)Yw8{ahcDe=&JjvQv0_wHBU7R~Gln<|NMpu8Y?eYJ2t6a9}#CEH4^ronjN()C z!ecOJ{#(37k#Wq?$m(Cwaj$+D(s8We2(ERpk-bU#6Kmdn5brTkgs~|A(Ts@T@Yw6F zyd>JsLHDAvdhVADoB(LF7IN!PLc4r;rn->@6z2mO;U()cWzC zQv!uG^ir;6#LMC3g)TRZ)z|&`M<=Qj{YXQD=>15sNac-2;^iE6f}>r|uXuKc@)`eV zEWBhmAURInd7~>SB#uAmjcfCXVHhcb=@&=vHpNRP&wma=x~;L<3(N21ZP}prv;cza zvo})m0$(x#tx`v@D1MkUfx8JbI<{xQb?Hf_ATx9|c`x+H^4~}9bat#H^6{z5zrRS) z&(P^W>N{P11mE~tI83X6LhV($qEhT0&|i59m^=^><4%6sm|$VSyzTAQDf>OlpJkY6 zaNPAFeyRJ__XFx?LQZBdJ!{VKyvF{-*|z4BIU##VgO>8(LM}3Yp4CO=!$IbIU6qwP zgEUbqZ$Q8H<~oODc=_1B)t+~jW}w>|F}rU>3Qj=35?uDWwP(<-;{u77!pQXA*^sZR zf$77v;;w(lv@AX;%Kb=upRuJKeP+!3cuDYS%YVrJ!4&R3}2I@iRBgE zhk253=8isBmX`({Pqs-C#vFG8QGF?vF*)yAwdR~7JvJ{f0fMt4OsF9GLU*FO&~wCs zO4+wAb_)STXc4zTuMFpp!`-@$XncG!IttI$eyGwQ(4h zTka33RZ(#P#V`;`r4n5BlBd6xA zciCiaiGBD?96wCii*udEO(VKgB&^ z98}UBjO4@3hIAout&ynIRpXZUA;&Kd>3^Wu`PqcE_WjnU_7^}`kXU1_;@j72$28lx zwFG{3(zb?IgwIHCMh1|fwM%QuEg>S}V}#Ew=K{EO<*o7j3hJSakq5SnJc1A2EfQ2e zJ@851UfvGeU}i7R4z9HMK0B~rEbZyZLk(;n_H9O2HV3yoi<>zxym88Xztfmr~>2Xn3fjma(Zi3pFZID}dots#1LL-|v&Y{(XB8lg*nZl3yWcod;eFX=9ax&wy7Ta#dIGE1~PpeIwS|XG?8u!T<7R zmRD9*1U|zx-?v08WR)MZ>5CUhOPiuoDu4akeUQxYi1^&-@-yOjGQ4|A+X+7s828uh z!`DXNVs++HN~i%2y7W2c)JK~l;q>VstWecC_5 z@x6NlDC7{YT$h*}YA< zNgmG?G08k#x;G~8@7aV;N%0Kyg_HNhsefh)w)Lu%Q2^ebHt}_C64pNrBwTbP?wwiJ zRR3|XYGT9otx7PUe4EH;93&~U6=v$3qfEEz=#Uot#<)qoX?d*m42>w==5qPFid1p_ zmmjV(0ZCf*&rXIWA000igvwAn^CtdFh~hf)WUQ{&8g4~kSaRebDxaZY{(kJMsS)4^ zM0qHixX=1uyf*GsbO=OLS$`WR_Z6gk>nXWD)kutf1I9OhH>YS}@gygT)+!)R8)WHj zDsMjK_$L3HY>^8{zVJI@|N0+~rA2yX#F1ey*iAb~q$__Gu$5s#or<(ii6GhSSW-kl?F(`@xo!sr5_F-X zvB?9E`E?KLVK_ zI#fNb@ueoybxUTN^q4wL<6AU1aTs2RsDrO|r+MLcfWUMCJUfa{d}$?&g>gqXxMG(@ z2Gg@|&&Ko-)L%j!Z<%K{I6_)h1VCYm`Vno?hqlW5@HcSJXKx-1k-iAqI;c?Vz3)!? zeIhmX7hXq$qW@TGPCPHBg^tLP3{UTstRtf2-av%S`Kgo!U3NUzhMpWF&DyAo8F{RC zKzaL9svGEgo63@yAuBlQ5*0r0leg!+wR>BO@AM@IAU0exJby`z!8rWeWCKRtr>Z3E z1e)QPdy%eL3iFu zM(LBP01sF`yKhPqsfV~FKRK<+!=Vc3;b~n!q|A3^HosVK_3WERUp4!A5z)Z-U7LN+&fc#0;eJhi+(*5Ym9!To2x0TBks2qO^r+~! zMb@;OFhVTC#aI!i-fC|UgZ@EF?w64wj2MOmR%{N4);3;qcT;)lJUC-a*H1)H_>_1` zzmT}tMf|g}|MIZAlS@0ZaqHM7v2OtaL|--7JcJeW>2bO)^1)(x!Lo=#loEK(jCysS z(KyQ_G+OPXDM-{Kk}R~J!yElEVz_$yK+)hwy+3nKbZT)5^ox~k3WN>g0|qQ${asC& zz{XTs1u>t4T;X<34^h@;k~o-pTt9*1*aEcv^<v}=$=|Mva3N#}Iv^}qM+{)z*W&Vl+9Om1`U z{f_>*>1J+!|77RAaZm0lJ@B5zH_3qo)Cw0+X*T(L$@Krvq*!^ivw!#B-ZLft{od2R zpL_y0V?l|26wp5e8uH&9Yy?|7;eWRBidCavB!|ETc3`yz1P=e!_bwR80Ws?LRfptc zfQ@b-__^P#X*4`WbO>-&7bt+!!ju2EI7W0xjCx*cw81c%2w)+wg&nkzoq?h0-~Mkc hg5V;8e#8T@3}x02lGC07$DkM(JYD@<);T3K0RXHql<@!n diff --git a/resources/images/iOS/launchImages/launchImage568@2x.png b/resources/images/iOS/launchImages/launchImage568@2x.png deleted file mode 100644 index 3e96d42462fe8bed38fff0ba012384c64b69a665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8608 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 yeD=ToCkbIDg5_cVvB+JRD-=CO1^pj`$Bq~P diff --git a/resources/images/iOS/launchImages/launchImage568@3x.png b/resources/images/iOS/launchImages/launchImage568@3x.png deleted file mode 100644 index 8a9101017f4df5785b402efac6cc8b0bda88d14d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12957 zcmeHt_cvT!`0qJ-38F345%gMnT3*1^@tshWf*&0DzAI0HW_C z`0$Kx;{Chu4}twX?Rx-F7Daw;MF@|wkj10s>T>bcA9+d zdR`{}t_F)J5%epaF^cMZ{-xi(Tq?M3KDyoUeJ$2By33;Ej=`r6#|jy{a>>AoS&O)C zw{Ih!KPCdo(Jqw=)=7OY^Tr%AhHT2jY|AA4%hAr6zu(kp`ZqlGDV{bf=CzFPiT&vu z(P|xzva(AZ@Tk6TUd$I#KW~-Ts~`RonKSz8`?znt4%DdU^mX_}?r3PkAGazcsA}#> zSi4Pf-;3&dFKZsWDVl;RXJgu({K{q!2|b>*YW8V^h=kr}5kIXvP+b0nFBM7|PPCU^2AD{8i1v4=olB=|f(%8s2q}f|?ARE9Ly^ zbv<&&T(W+@Yce#C{bf?b?V9!5r)2s=<3ePct!eZx*D9sJ%GsdmxsND>SK;LA{E64K zsv*s0ukyz&;(DAih5{R&I#kG9UR_xy_PSOo8WnMQ7fn4+?)NU7a?2j^ESN-ADch$G zzHc`6sn_-{oODPZeBWdg(rkKpb!kv|E1+Wb;_}=isx!C_TRIl|x!vJeL+PR}oKXBXJ*F_)CS+@a9J)4hxqENX0haqBp%|7~vnT2}XRaM5^phh6o^ zdhK)u?))&KeCk8V1bSsZq3gxW=D?T6xsY}%>$vWtlZ&)o-^S53_w<2Ze=0W)m*&?G z3q~S4(A&+kdE;xpny0pgms|HwwtKL<*=_TWKeU}*;Gq1`1Kjz}(OJc0ve&oa$(6&n zwxzzMhK|XNc5LzX!RhGVgVc_{z6BF|$7kVnn4-b8$mWIj1!LPstDn1EqN}F6=eE7` zMq`_>6H9xcmFOUpiP7gS|L>zgrPITU`@6W!(S_YFtqXxwbAGuauIYnz$$h$^ZMFnu z?*QN?pz-jYzW4M-D+t0V0)4(L*&_LuZvX%9|5*<}Qw?4j(t8BZ0;|0}6Zhxuf(8kZ zfvxmk2CVPgIX)*g9s0Ix`ClSAMb>|losb3!vHw}i+Zdu~B?zL`LM@^`iauG%dRW8n zM$=YoFZx{c$eSIbd-P<(K-4l|Q0)JdTl?}f4ZIQ}&uBF9C^5I;? z=A-hWN}5mqJ2@fhw7%@fR!`COkYzo{p*qnNI+^BF3%{H+g5E#bnq*NwW6;xi;=`q( zpChAjSsp$xnx*XDCmSK&IahggbCGA(#D0U)f8ZNa=!+J=!H~rJS=?gI#TR}iF+YcX z?=aAWjQgy2p5NoODT(f!zao%Gd@Xs6;$qyK=c!VsMfRumX7&3zNz1e?i~(I))X}XI zAKFV9!y?5<7PhLkE9g#`rL8P`0#(~;{f|-=9C$3bbid7J#DZj#kknbtG3t=OHrK2J+@`0u?SCpA{uvLAzYW!P#+&~eYRgm|4D^u z>q3`$9E} zpYgSM7inJh;tQ2K6^%L%s-(+O`Tg$>%xgUst;Y*{npm>vm(l+?N~|xg8FNQUPxOK) zODF&5y7R3oV4krHQhxg9Q0L8!e!0o5v%yOY+imuU9dS)d8=;WI_N%x@eOVV9Dl_$% z;`x-bK}vqcl$%WLMZp+iq{Y_fX<6;^*QoB4<(9pj-aivbn)5sTW07=^XiELhnyw{y zbB0X$NPj=1Id=Vqy-he%g{jC%@k)PZqZnsxWOF-rShH~oF+oxI-Sk581A|EZ&tDc6 z-vgyW+SzQGTy!-Ki4q>1OWx<|l-|>L^10inCEdj!#cY zFHR}AM`Ojr{M0!*y%?K!KWVyWw1@Dj{~)b=VD|i6s*ABOT}2|SdV%u5evH7R9&zEE z@OmfMhsGbJQ#p%wRN(nF=jPeq->GneG>klYkYv(M-iTl0b)Zdzu+}T~!usJ`Ig?%G zQ`Dv3>*3cWvmbq{WsBG@d@sxHTya+WYl@vVCVQxe}RQ9-fI4xFiO&@a0)P zbx3CKvp24z6(YP#Uag7xA*3}txV)V7xW!VRjr)43;wgn7f8eV;+_{_{^W*d-O-=NN zYBiMO5?a$wmHh94mVWX3-vlne4XzSctVABN0$ z3bWNI_vFVXgQT}r55By+TX|tO^zr!fHx=P0U&c?f{@9nL+^u9g`WlZp@Da93HY&6@ zX;1QZSSK#@i+=nu;`7@u-55GA>o@sBlwenCk7=CQAJKhV$|e6t_7RY)=Lc@_chbkK zCW|+_?dUWS{6C3TlcqI0qJt`b?Yq9VS3`bmUO)<$KSbC~k$2SWuO#uJ|NQQ8jpCz7 zGS#oUo&1-yrWVIR6RK`tLLejmG0@yS6{a}v*xr+$t_`tuYw8W8%OGgDP?*1w_*kb7 zXM2su>xUW5Znu#^&9~b6mnimxDX%iRl3dxzkm`CQrP8(DM?6aWc$b~DZZG&%P)u7^ z$!3A7)b5{Qw)a1V$DJz?jj$M)8DMA??52;U%WAzA5B0dKE19F|n4Z^?mdnCnt6L zvlk0*+Yj&I5rGq>v#Xh7v1!dyyY%-~HZ~5txBq%)F z?Ox9u>-W-Q5n!(~oi|x7QNykW1YQaxD(iAYJ^vq?2`4Wf2c*64gX;<^n@$us9|GZo zl<;jYTVj}lnX8EE@r~S0!$r~xcfDlL%eQGZ*w3#}KofNnyGGH(Vb~JYnErHAi4VIT z?X48xDR&QExHBqWStEMp-z|XNdJFn4Maz0MEAOO2_fYg{vQ%jYt|Vz~A`WD@wZTpL zUd=xTeRAMCNI>$)E$!eFM(joNHp#|CwBxF>vf)pUb{?is(j@4Uzs13e?X-}xV+$_# zW6P`B;cZLm-j}N)To(k_@B*OK?lk^ZE{B|3SkLXKoUN#qh9<*6^Q)5+j^fwL3vUHs z0lke5hr7>xJF*omKY`B6dpG_bQz%`d6$M#dVVped4Qh3p;;C?5qN(8%MYN(MI17sw zADOK>`{rk)M(O$tf1CYoBCeO(ap>k6Y?&kD@e-=MdLbb!4tAXkRpe1Fdr}D{7>JZ@xq1svks%Fh zI8sZLz?z1}efvQ;UgyViV=HaA_Wdz_gzn@@>0)|4_3cZse3GB~_9*2y_QvuG`cSert zgz-Ws@B^L3_E^$npKi@e?keaITI_4@{-)3 zFp^e&fGTxIHN`$Ny=3OZj+=cAg{;P)jK=BjPAyVYwK@5v%Ic_6I}}o;t6&DXiSPDi zV>az3!bl9e>f~n0bQ_zHaO9l;Sv5f|!X!Z;-j>6U>hb*tcp+nWb8ECNH12vM=Okde z2}tGYyFu%&84v*z^m43=_IQy zdk_@_BT&da;Q23TDF~KeN9nCT5%B4TyG_@X9SP%K3U6oAi2w=)cN@Kc_mI^%)N-^s zQ?iSnri_pC;+Q+aH+fR>oS#0YC z6IVmNSA%mGjg?h@U$A-|f8GjlX%uiIWSBF(^+N2cs|fm&vggynEDCdV*Gx{MJnzg} zK7-O6ijX^Iyg52@aSyXXp7T86Aw}1U-cCLj7i#?|w`<60!M)H{ZTzXpEJ?ngE`57H zHFY07cqSs7!hl&;SiZYlSV!@N0R6-Bfymq^Jkj4w2wnXp3c+{z{RgJNgx2`Ae1X~{ zcUmaA87MdhCZCJf;)gx%+rKJaFG>D0XOLNCr>_0;foTAs>VsGK2mf0|D@z#9o};e9 z`Ao5EtFaUVTK?S0!9%_3r=k`f0{Ckwn=_7;V!~rNiO(+G^ka~%sIN#imOFRzczU~| zLj`67y382Z;-9)qZD<$$eA)M7L!2S4q19u4Bi+a^_EC)Sx?Hs!Bs??UhZg`5k`zXhwAhN(lql0=+y;`ojiiPLWOQUI)f|=K(;kj% z@6=y)A}C-G704Um6O9C)H-vf+6>9pc)|IdeeUmVQP8G$00*Jl&c1K^ zy7iYrr|@j-+ZY(_(txSW7}{WHWW<7a#NkqWkSUdk5b=!^wYwtOLi6RYH>pWssJq~8 z5KMamnAwxT#ea~XSVk}K*2WGxQUXMXJyUh_Mx5vENXD}?5_asq0S#=$3m^}c#bVDq z*o~xDMA;JHivrHJfY%!~t^KK93jEYNlOW?W=2D@tj{JLyINR(?8ktrF)qf6fC7)LO z)r}nOc=hDj+gL0SI~OAaCh4b7oWCv+O{?_%jmob9BJPmm_)zu$74vwZ52)aS?&;d* zqUwhFOX$rLdU=2i_rHJ%`q;?>LD8G14awki`=hxz%MoL2zqdk{47 zqYk&J<7Zv(lz09;SZ#9~V0=dD?)~Fzkacamm*^mHo!_1M+yO}sJ?Q{^wPqDQeoNl^ zBEQ60`BeyjvtLm0o{fQ6-6duqS z$b^zA(2q-C$86=WWeGNb>Kgul_As$~_Dt)mv=;Y${;HJTa3DgTc;myh*bC3Dq=DYb z&tOyr4rI)yl(lpFCcV+W#=3KP$yE*c|&&%mc*Cn zm~_pXD=!cg-n&Sx5HJmAuq~?0%BhK(A@=K!@!gbBaUf!pFm?YZhA_`X97q?6xrj_; z02uShCh2eCN6IGAo#=k&N-C#<^Rn>Urs_4U@%}K-|IRy@X98VC5|N`at>( zFnFVztCj?%u83-ef>$Q6)-=yvKRP)3T1kmgmqM|R6qtS!)VrGu3<@jXBvUHFLwsY# zx-w%-ONb1U^f#p+PYl5TasmfjjT|7gMx{ESB(a6JICJ@*6$G*@xAE8`#kzaY+<3yQ zu%k#z?WgxX#@wb!q$u5A1chwq0j_wU%SY&2dhfxt)kN3A6FX*X3e0j1sCIqz`8@Jh zb?{-%V45VVe;=;+`d})>5a31Nw+AZmNws_%E!?rh0M}5<{Z`DGLYaD6Z9$k3xkG%> zr-bg);`e{daB*QdOdTK*e*(leGORvvH&X4U02j7GN|Mz5<#i~U8FD3M#xB3%v2C?` z`g+?QjxaE}9B`ESxT{i42bH4AjBSJKD?QMl#YTsseUgz1O_0ClM)i39%ca4FP$~31 zN6zQ*v^#wYt`tqm#3*$_)CnmKHd->avW{4?6$vti5xdOPYBHn5{WX^ZD>5FB552zF zuK*(6;~%}rcmf>XZY#&L5IUaVFS@!`nq|oi_n3^5Y!X{iMX_k>-!}@mUYEnjkwvI2 z5ai5PHbTqkF~Ig2$Vf`uXq|~`l4na~DBX`Ez%AJWs%>DGTsn0<3rR1zch#sah)yLy zaI?C9_;YNW;kUhawWi@-7A6^l0YqsiWnWwf=ScCq&>+KH<{kqP5Ag>G`Jl5t_GA#b zbxiAYM+m06hKo(X!})LvOCZiPXbIit@d2(@h%H2k43T_X+Pq;M4P?Nzij-)BY2z$> z?=<)MQLn0{9&qe+38P9BTbUCzG}|}|8JAv}E=if6Ui&vG^%2t?CRGP=O!#ZAGD6V^ zR9OKXii^DtL^glJxt=lrTxC#E{yH7%Z!H?yJflM~yn{3PJzlk|S(6T*2e%A1EtZE2 zL5TcUI5XB+yXXja#volc)cS2QZ0-a(5b+c5=qaGAwYW&sh`Y3o-4jk=fVCuKrTh#a zCl`qnfSo`tYpM;R z8DiPob2IR82LKfP7?nZ9K?C##Twm{fBG{(AvoJ#SPeCPdT0pt-n=P?|*D7b`1skAx zAMEN^<|96TcMd6!0P-*#2o9ARlqhu{4np*0MR{O0&>S+@!#NDm z(xD8qjN#bFHRm3%b9ky*gEP|UW>4l~GoD{n_3(FWOP!k#k`lRS`|oocZT-DnEcj_b zmh+&3PlGH>IL1KytLrzeUtiym+gz`dexlLP%Soes*!NzL^BM_})b;xh30hmfa%QSN z5v+=F%D#=WX#T27apRF_Gn61|%pG5xKTHtJXCqTFsHM1^T7Qf?yChZd_a0C@M*A{B z6@g9@EbgYC3BBV0#%{vKUwD4n$AjUQZwbBOT49E&?Ac98%RPBgxV=?T{C4*(lAEP; zn|YZNXWy^u5pfwT0hMroqA}Md{Tm{O$7Fo)*?-Lgls+J%Ml+EcM_mtKHZD_KfvMBw zzdN6}mqP(XFOvGnKJ%11?@4!TqL@7jCd6Uj7<1!WYzx=|&8LP%m~QIRTcP;45luif z2Gmm~-x*^|1GoQ{0#w%lt|_R-C_wXdKx*s!BP&u*ST^OPWfxd@C_GN&OeL_~bq`Se z4W0$qfz3_d_V4w?g+^@s(~xrV%_qWIm4ynUC%Q&Zi7&vYL45w=+s55&@lTdL!yS93 zSGH78^ea@!U-BMC`fHB9)Cw{$d4q@30$l;o7>e4=vM^#Ca+-Z<=RB6MwzM5Ysh<+$ z(%-!LNj(B07V#~#1(pC|SEr#7q%*NIkf#s^cMza--}4@Sb`X@i-QlBb z>>aA-&ICo{p_~Wr7(v@kKCE&F_`S&aL<&Ha43MEL<8gOFG z%HO0oQ-;@DU`5^>20S5ltQ^n45uSUX>m9&x1os-e$vVqc+QKE~>1TriEAWYuU}s*R zv=`Yu`Xy3e#UueU9i|PaJ_2N#=fPt2{Z-=HWsO?}(=|mvL>#~q$b_UY&%($ISTq(b zfdR7WaHj@5YxH;Oi)P=fRNov#&c7A`xKyAC)kkm$9$nOf>`m=v_X4Nj6eij6QKl`` zt}$)hR<_*%Fk}n8S#X!Ky0pBw-B&I()45hRXm*bw}UV)F8*LF;9#u88FPS8?hZkkxs@XWzojVNhOl-E71NF)3BfxMiXt?2sAf30$x z&K->*Ly1RqT(!?NQy5JvF;MjYa(=7L*=_ zLp635c%n~9lFsR+-Rk{rceiq&g2`cL-bNhHYHg9sd07KjUO?!voFG7iExnRi_cudT zYbi=+v9Z>v-bQD(7cw>lU&pBaG&a zhKpAF)-#NrG`5~?AOCVo4HQ^`qx%sY`S_{j1Ers21Exvi5>L(s&bxe~4Hv7DObJ&3 z9_9Wgv+=N2Gre$3@Yyp0zYG?=!MM7i=CBL0Zc)CLu=n8NVeo9m#8CkyQ2u{{>t>jmY+Z@rz$|e7i1^zJGNp|&T}Pp z2SNnhE!3hwFa7XK+VrqF#R1ykU20JDBOTVzUxO1+7RS65M2Z@}$2=c+c@2gR`f4{z z`xl8Ym0)r&^7#GrmN!)m1Smcah)S&|n8a;MW-Pkr(_7hF0kNUS0Hexv(IUx2a{fS< z*@rAf<}a*o3`MDtLQlBCnn9j0YO^(&euG!*Z7<3{m(NwfQuz?mGz&Ef{Jvv?P_|sf zPe8|$8p!^I=V_to!_9rxtTFe3f$Za6!zPHJvqF8+jv}zV%I0_Dd4mbtOF_>A|7I6m z%6P-Nm8^pdn?$I>_fk51;wb_AQbw3O3*eo?4`J9yrjrhgl{WzyRaiyqObN)OaSIo& zw8m0FG!k%6gHE_)`Bx+Q5K*!%Qc}eRfGQE7HQ?XyUn|jEw@JES56!bDLl1z62%y$V zP$L!lhq|5Yh%$UXB_92Z0`==Ul1n2VR! zHSZtgQg`@-c~x7$8<-RLX^@wM{`@=Uu`bSwikti}W#E(*ew-_HKuMbO>bsX+B)_dLzaMLC zec>5G0!2pyGSXAQc)~gk#*)7b5^TKW&A(%^1jX#(A_jF_^e5UC{3MGknH2wdmUV1) zxGM8L;j%adU}Pc}6_Pf*O;XgOB*nH{QmpUGTkb|8Y?BBtQS9Iv5hzm9T}J`x%e^V| zefxUsi7%JG9VHY!55&rA*J6MC&HSK*#wOp**J3cU&HJ~D%Dvs_X^?yCGp~yhPMLs~ z-0+gz0(vMK1V^Uz8{Jz;cbELPKA4dj`ugtQ={PG&_11+QO_G$m{-=ODPWng;FJ;g? zjRu!%*i1=3sB+4ueoWMJ!&J7}uth%J z4x?+%BVSR(Lp;|vq+(^!vA{#10 zniTdmc;(6D5-%VtHfEx9*2(*8$L{+=yGEso$FOB0yv_tZ^>{$+F=aOJBUrnb?Znmvo4WssRyNcu5ZY2<>NaQk_mEjBgf> zFG{k#i#Hv1Hg{g6FTLe#%ws^s&Jv)0DL~!+hRImH_VJM?=u~O>mZh^!tKKzs!|k1; z)$+Tib4|WCYy(<+VD*!M5vSF7{T$6foi)nB|0$p&&7uBa(#k zWz>G3a#`$ccDC;^yv_uUJjM1HXP~Hf>S57$!PuAFe?RtEeB77u>r?j$h3sB7^)~fvBLc~I{^F}HFu0GGqh`T!Zx@93MeX}e0 zeMA9`3mvL`c|brT-V)AzdhPA5^xG(6%Lj0S|5ACRqW9YCzWq zw#EW-%opJ~5(JdIhi0_lmz4Ngp%-E0gjf7~5S1|12An<@utW5AbByv;*mr`NCs;wz z-_)W-XRe8y6u7e%&5gD?%NrK(=}r;UYj^6+`Gt46b3quEwjSYh8&IvszI@{$>hh#c`6z9Zh8LgmT)rN@2(48_ zTy@wRnlZY69haDg$I94KRos$BA|b16EWi9qA^2T-)Li!9;PG8LciADrPWy3MWw2cU zq*C4*5cm0&2{|iT;z$|ONo#kPLQ>$iNmYvpgFdym#iuny5@?|YwAw5O{HG_DgP11O zRSnMxu0;`=)wrL%!bA_EGAWmR`OkWW!_{H!l4Nv6h|lC47eC-jM;KYdHyS&3s7rEk z5nWI5`OF42=F<7I)6Jv|XnqX3Xh;4XAe2vZzq$ldRJ-2C4)f|*{)fkd2<4qmPRR>W zlg0NE#O`1X-1=ZPo~X-t_%%7mJ}Z4RdIbaUw<$c0xzLGJk&7gVwTG2 zY|`(O`YZFSUR4xxvG)N0hAM|J>6k1$HJ60-ax|;m#qJHM2YTUC`pZhh z6~=YJuE3jHkaYe#UWa{r6}skxI`q@46Pqe#gzr7fNHMjq>jED(Lo5{~ekU}dpk~s} zyMor}Tlsj>pJJY+f8KS1ZP2vGO{3#Svbi3Fj^{wHErsL+mUB2^^~C2Hl+j93J}V(q z*GomIG$sP~U%xOPCx@@C1oK5&8oY#Mr&pnZ&}&BIybF4Rx0|)#Se4g%+iV?nM?YD{ z8?VG{aWA4z{|V-BpH11`GN*`)jF7!vI+x@ZRni*}Op*lUc+O9^&jhZP$oO4nBR680 zA1v?KOFEwjg-DIu+AmL%^SrJ^#pQhTLFX?PlUj>6F7Dh!;2EH@gXC#gP>zKaDj_XB_GD0XgyKhoOxy-o6W&X*#vQyzgb%*~!x1ry8b zX7!%=Ibw?(D6djBqI7ho2@)FbLQdRiRIl z${B*-^{EdW%3tcP4hm*6&hN^;!ZP8M58Vm~bg1^n!uI zUt-^7YrJDHMs9 zFUoOdg6W}O5ZR~{bxo7{>KQNCpoGnjxtLs#WBTrl4&XNa!ikt5R&bmlaOO37(6Dst zsXw`b28w->faNHqS)KTYNo61-i_6=l>pL-<*rx(J;tAy*gfsRpT*4ql#P6fihGIjK zd(Y@+wx`0@xU*+`sbU^FCeVyZI?G2b-inc#7^+XcNho!DBjab`*Cr3jH2Ncc@6;P{ zej(2@Ae96OhbTJM!>J>k`VOjfzB>GBZPXW$M=k86-dxsKE0Hg*7yY5G^ylT~WFgpy z4-&X_meIA8S2k*MC05w!b+S4k0R~=)oQ2jzO_asO9#y42-(k)PUDQ6KW1W8z;}rFI zW9H`U;zVhqBq5SlrI+&y!=3nYMr7UFZdV=z6``M??OCi*y(hn%7X2Dyq(wQVm^ z-Tn2P>%5+&gTBRB>&zuRbl;9Wb6jbmOM9fZFf^Gmr~8||JSVqC!)7xI@Dl2L*RLezNn$HVZ|s`Q1Gtn{i^VkT2Rc!=>2dz&ZNh7Z(zpn&1Hont1O z!QH1EVu#7K_h6W;Wc{apwe-k&dd}+sqw!qEL(Nu}_%>g%%fRlH;*0IKeEPUcJWu5N zaH)NOwB5L^kbdeiYgX0!j^%acuwPoV!RK@{mK#!}hWOlqFPl}XevNQ#D3T(%Id6>* zmlvl$$oWY$A~M$!sS`g*)?0U?ool3MbM^YbvzgBNme9B&*WN)5t*}|%`d^qDfL+FZsP7@Qho0fhn3JUSn;#JR)>Z~h5%CDY}6*_W`rWD%3 z7e_BelswqkWvlC7b@kYLa+XEQf9l)O{~f+Nm?JDi t0Pp;7=xSn$N%5+e}@MG@DyDUOP`y1rT^)xp`!D!_&y@&e*rgSlji^c diff --git a/resources/images/iOS/launchImages/launchImage667@2x.png b/resources/images/iOS/launchImages/launchImage667@2x.png deleted file mode 100644 index b8bb764bc2bd3191662f9fc4b8b5ff64a4971861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9389 zcmeHt_cvT!`0rpw#)#-$2%-p@bo#)xl+U4wM13h&L1PcNJflz2_s62*1h(QPh zCIKfQAj;P1PJ{;Pps1?|fs`kZpWDC)G?C|HbtOn?KidX@AVX=Gc@kRW|9){UN&^rG z3B*9hNOgAmsJL^{;{DH%>bb{n+aE`_m;6|~y1IJuwmrGS)iUW9P&5C!?Dw0>S<{5B zcWp18#&_AGMV%@oUsOCWfA`~kyK_MKbO3tVB(C#S(S&Q2tW9c9P=ldW@-OQ$fuM?+ z=jCD!6%y7Ty8TL~!Z28mYK7;Y`XcHV?91;5SIxd{MS9h$K1=-Jk~8d>HR$ziJh9#J zW#O3f=ONFp-p7bCv~_)wOBblT8m<}6G3U8)}1mEVhRvp0-x|F1^TqLj}D zEgT0vw?PZ}exLHJRSv~q9Wn5?DSR4qC;4wl*m}9yO2hI~EP1+Jc&m!kSIJizmaH&7)h9W2=9rH~*$! zW+IxOg)|ynTwcxZ;G-Is4v)_-uFg}sP~S%4h8A#pe^0Fve>9D577V|&N&0nij?V)Z zaQLmZ$?Y$L5r-$Zqq9HWxr3iu=3UZz&n`~Wo95?t@zwon_|uDz4YPIAITP!LA>T$9 z_QpmwI)2RJdKdP0{;rjcB_H6=swUHO`rfSn!D7aDn||-L%zhnMZT8C_PVe?j>sTr8 zUWu>z{qd*Q2JX0Lxo&KEzj}DmeshRMCz-J!Q-;}NA3D|`4CsokHu zR{aY{Vq2DbXZIXG_O#95whm6-HDHVTH&^zjC$@g&cdtd&%*EDW2bT}R%76cu-Yx#M zlF;Q6P(1OibI~oce`>oYsddS#U~F;c$TGQmW@iAI+8gw3^!Ik}@123=y=}+rLEQ+@ zWF^fA0=WgzR8chY{k=V1uEp)bM2d__le_a|^(F9BRFZ2h1f6O5xHDu{Ko8ETdi@@s zBc~}T9raz+6jKrEqhyn{Z6XKWtt>fb-lSIf0iN^bbHA%S*4i3Et^NP!|6&BX%RK`E z26q*@d_rw}%1p}6cQ>n>c2Ousg`*aBHjX{`&w?L5g=2fOv$w~z=tvdA_kdfm0%Oao zr4t@I@O|Dj{2xsRF%1F3+YJi8{-ZN~uQ(%pBG}H#GM`!5Z1aS%nN!Q0QOkdfbFuPSJD3Q`jf-*T>vwY;o6Sv`k4lZB zTHvPl0&1+T;@#ete*+3Vz&f1a4FT(-SU!x=JbZz^H zl^Zvp&T?u+|>$4)MPC>-xDU7n2nm1>>}EZ>Z-k0YVBatT)VU!XiGp?JO1u5WwR zR@mem~J_YQ=w)p*+b zM2$a@Z~YZcdfp`wkhsjnCSN_%#*>OQlv7CEV}i8!$*BSU&2^Ez^ygGr$NY zS@<`+Ys(M#S@0fIsp`H%?O;Y8uNO#OzAQ;&mJk);;H+|oCpXcGRZ%Pnegk$4!eiB|obCX-xAu{eGazX_@d)tFzxQV^){MfvtGP(9 zs}Pe$Z$tg8{D<@JsjiBr@BTZj`6~Z*@@?mo+SF60P7(3Va)SKnJ93Uvm9kq;HzZSr zGNVc+Z^>@1G_oOo`^+wY^(| zKY#DSu4!cxpG9jiMO#i^oG-Hyfu%3lmz2TN4x7|mLp6rR^r&_kAJQX)&EGLZm_L7e zOZdxkhW@r%{(OG1ZpV#a5_w0mo8}RZ7|Xe39c3aU#NWKr`pLw|%)&KvKA|D@g?Wfy z+GoF{#bX6W(*9hnKr@n*DVrfvNdaj2uB1D;ak4b9b*OqCeEtwq)<) z6{y(DFMaW1#00?S%6NcpR9dw68FBd7M>~9!o2RqT#;|+Y^hSgB`SR?WxzG;h$7pcd zTUhV-#RX^9Qwd$R{aTaX1%+3B??nov9^($D zX%@CCw$hm?5Ne?D__L^!bLy2hJIx!8pxnsb*pufOn$F)0VgZ-OxO2VHHOV5ny@hc2 zWx`@s?qa^O96{(qe?9#J)#H}+izw{$8~4+{9EUS{9g@{n;{Q6Ap27Q>jRh{-$r#T~ z4t7+0&9+oQehf{T53d%Ep6B?LT=a1_w+w;RUS7hp>@`>ZaSBc2)cBKn6>lfYNWc(v z(p7eUeU1KHokj#xSi;vBpc6_!{c7fC7mtk(0+?Zp6tz5J{#JCcK(vEdrg)JrrzXug z%f45D6DceYSrKIC*(lnQ55*tBi!nO4Ck#aqyz3JKcm1sDu@Vc$qoRnEYNR&ZVrnvW zBErFdKnD3VKD>6It%n*yYbOAP=&C}QGFdhHfv1|NX)kX@f_d~YaXfs~;|`db15CfB zO>-j{?_`JkkiZ6MBX;SB6o+F7OdnynNMhmE73!I3R_nnWB;9rS5V%^$b?i&{Zc~#i zL64{_q$Oji(?kjPakA~nLxL6}R`fcN1utl~ap~7X@{&M?&*;6lVWzTxV1NEWdPger@kK1=XCSQj)vjv3#hPX(9 zV`EtoKxT`Q;h%Eth)$|RG7BwSiJn*(t?*5P_>~WwI*y7spbES4>~Gknrt?3(5jl%q z4Frk@I+0M~NC1K;abbyTW;7OWoTuUmxif=2RYO_wX}0lybOTp!4G^fC;KPY+ekNE; zT5CW!^o`32V{Gujj+xLr1PxGz+^T4UgOaxJ?3)b8+ zYf6;19^J^2Og`4A4zx_~WsA++<^ATX8~U$8iW1qZ^X3_6%YQ=yOZ(6G({v~3pCXjT zguWS~C=hd8Uf1_Ol`YkElAfaaPUn6T-RtlZLX^sZyV6|qi$>=W9uu}y`y}fxj>Jy7 zOlW{-l#lr_ez*|Pbk zPHzWVSdTU8)~GNGy5;j~cjjwOp-(97AXZq9CAyD~1>Lr^DljzS8?!FPLMP}6io|ij zYX2zSeVTUYQeq3s&Qbyo7-T)18Po2)SQYs2B46(dHUiBK>oLa_Y2C&S=7tnoJbYTJ z$hNS{Lnr6}rquBo2Bj;(N-K0%I;q{IJ}QD@3~aQL!RZn;7_HiO9#j(uL`oU5wnft@ zi0|o1mD7K~$Q?StXW%`z8mZk?7ys;bkNFEK_%J{+(YFdc>O z#xyP#jTx0HDKo+Db51TY-UH5#RZCyjv8cMW-RCz=0rG5lQU1LKs$l&GhI?U2{HF0h zi6`S37S?AWKJq;p5^&HO1K9KXmfzg1?XfEnKu8HxR z3IipV18;&Kl%if9=DRgr+w?V00PMLYrykrWns>-EK>Y`Ahu5+xgJRTdp+xK+zZV@{ zb5^9j>(U8Qf)XPnlW>W&Z*;Dd)+9votP`J+W^ixTGlj?pbw7vFwrE^Q*TxOef>4EQ zDA8`=_QTzan7YbaAm1BBu!2gKh!wn`Wh)UPnTQgn6TAk#7zqv1=!R4SwfHi{O}L8z z`a1MktR!c!x~zmV%w_TBt+qO5IzbXJJmxdCZ1c~d=`s=r&PTSMYn)4 zcXlq{j`ad_lrskx#_sA4;zbZCBdd6al(j! zXcHh8s@&GVvb^p=!F8<00IL+56eXvYZR`%l=6lW~_9DGZr9=CUpRqmw>)G4Y;T5*ZZ2Aygamk{ zV5uO|7^3`7el0Kxned4S+@6IHi;1eaGQ`q zw>+u90bHQy^!>>LLSVw@r;cyN=@TvNIf}}MmUNW~!}rc^l0rGGNFbMz{ywb3CMjJ+ z8HrVe%b|`Ll(~6dKg0WvZO~C%CPo@0V?*BB)G9G;UWO=!9)>A^DPQ8fiOYuVEu?Pl zINp>;!iB_H;8-cQAh*g~g<37e&AIry^6aqXPJGJL)TAsvD}5$)?W&q%lT3j<%YWCi zzv;wBmXB|nWkx)mg6h2Q8WG(40#0=#zqSSwP5g06&as~=$z#pFR(^1 z7`v@NhP}krQnk)A8=_lb3Kw<~w>lfn=ieURS3&z+lQR@efa%ZO387lOiaqm$V_oK& z-YbK$3^Og3P>99kFZ?tA2kp_4P5O&2=P8MUFiN?*g8TBSjc>|aUt7Yc&!H`Rd|qJ3 z4Vsx=JZspq%a;`IIwYYma!cGxL$cceSD$D8Bv64I{)T8QY>z=1&M3cxk3z3%azSwk z!gPYZVAAh4uDvH;SMc$;^XU$Oy`=RO6DVS}5*t#Z6@`5qM2W|=kU&ZWQ1PFUAbF6Z z1_UmwC5rQVprl~>4z8hC%MK&A5_S422>o(UX4mM>g#={a2!>|ttS!~Tdzic=wWMNj zQ{X#gu#rKw07j;_zO?5e-G_@Ke&pUbs{(RS%~X5k)4V@BmlLeT4-mgYW|G2U9*LH> zLHTg_&k-;v2AdK38F>$0W6u{{(Km4qA3d@52xwxvp#}yp$`*u^2`_A=pwD=}N1INo zfVosNe+6&emdY$l)sI^rc7OE#NF@|d<@~4vI-``v8AM>L16iS+N(N{tXv@!f;=65) zGX^8q3qeS>n!55s862dN`qolYU!yx84+B)WP2Hlx$@D}Prvnli5OAqd z%{T)1aS{;%*!g)oPF2zTu%QhB{6sKol!IIu{bd_)ZI&u%*+&C(6f|jnGQgB2J^KKT zimBtek+MukYm6qYMT<2g%+BvnbfPGfIKE*+3CyLD9V{S5^y^~>#;9+ueGb0cD7O?1 zz_>o@tVj~))eoe~=h~B6080-Ec}d0oDlRfb8daV%(Pg0kqNlyzbCHQ;L5>je_`ceM zh2^HXL=z(2irOFBhG---sf5dyTDW@u5$@DX6pNVjWJ557VMFRfQPd{;SlVd+vtM@x zZ?|VH8K7@LlU4$JIdVSz!52#>(cX~a>C-hpA4BmoWKTdl++N0thUAQgme_hALC0I9 zSSJMC-JUAU4mKHIhqT}?W5o~*$w*s=VYTJwCwsVy z(<%IQDBr*FRfzp{CT)XT4p=Ia6VE%5%cGG^08|BzKf~`wA8e*rLmFPRB?UeqY_bfX z`tk;1Tmf%-M1p(Tn7_m-lBt18)H>g7dW%q%d#q&K_gfbh7zkOt>#I}z(}qU1vW#PG zyssCMy5o_Hq$cO35Ksd=lkLOHP& zAIRtgox$f1t$zt3K7dc}(-iC`S2V;v_O{FXjQo#$_ccRbGP!uMZVThbp zPC?~9-*?xgqhp7d`x(;MY3w&GIzbii`6TV{-hNIF|g3wr;o=TcS?9H!D?V97I6&9N+) z)rvigPbn8@y@zf8kKYsnL|)&9sz-+PO*uB_jxc53`Hn#8^t!FeK@kiYNHK4|to()J zu6!Z$BpQ}fVcno~%jLXuf&=QJ<;D?cq4xa^Z3&j9jwnMPJ$6v+;3l^s_?YH~Qj;CiF=%ZC4ki%HJ}s z@nrCKBN~tfUM3j15&CygY*~KNR|{3|^uNjpKKZ5|FQqeLs*c&0OT#}S$q>Ajnfr${ z^lW9$S=H0LXZkFyqx#=jZq`>z`B8{BUt=EqjMPN%%DEZtKcME|H!*Q`_#xM)d%lzD z?zQj!NEf2pd;lqo{)}`&$oqcki7U+bip4%7rM$9yf~_@j*?U8@S4Kl8Xbf&rnt_I+ zo>NKK-B!rvH#0A4Izclqva+oXV6gZzNhqXbSTUuIiRfF6Y<36t2j@xe=TSp4vC!p{EVb+0aKM8QXm0iY#6 zEm+Y!*bt3|C51G9)o!C@6P?uhw==IsjNIO41z)};bPmFjh?I9$w5t})P=oqa2d|*j z>`bs2MbQnG1iil@*s?o3xS^*Hi1LsN1mh<5oAwVEtWa3X$cWEKy7Tl@Pi2a@L}F?- z%uo&=VdsA3u9o}doFUEvYl_0grymU)qWPi4J{-w~b6WN{2LR>bDLzqDm+C(^uKu)5 ze@mo;`n;xN)8G`r!wDw|S$b}VV-iOQfNQ9Ca{DD5>%@#0OT+dU|LDaUp(C4!{< zH|84gKTlDEz4f2|c@h4?cbDcVaDVFL;#Xbw&?mx~3$*y!c2SHgl+TZWt%ED4jI9Jp zSSpo0jJ~$Q$kme;!40~oi4)>A*%13T+@es#_Z{KSjCyD~TPY(fMpu;C+_Aa!!67U% z;?pb(!3oh@l$6~l8aI%+_xy!COV*lKIlpNbK-rC}k~rY92Xn5!XRhyZBT@so=yfy( zeC=pR+Fu#L9NYu!7X$M7O*4S#(@t0SVO2**M8B&~4XQP98M|jKl=^F^Fmax7zd-n9EWc{h1EL?~d|N;pMQSM4}WYn5Ilw4j}` zgX`amHUqQ@ls5Njs;HzyhWXwTP|WPC*-n2i!9EB13ob9%@hs3R@$cVP?Clz89g`-h z^@M{MfQRoG&242Wupi4LcpR(4Q1z$7?O+-(KzBenxY*NoUHVIkBgvY5R`Jpwdn8IG@^u*kY^oo%aekl>f_ z@skMBpscLTnf}KxzOk_hg+I5C=L`FvS9yGVN-DJFU-Fv$;)36F6L|A#Mxm|&Dc&pY zdyK!~P}{j z){Pucs9})YgaCKddWws8->*2-Xrh^VFm~h7Pljc3be9w$^t>Y@H8d?qWZsj~gD zu`;|FC#2efp&wG9E63}h48z(D;!L%onIdvYwQ>F~Rd3fUS)=A@u5WhgIEt%m&vIuB z>{Uc;l%F?E?R!~q;&gWBGbCl_E25L4*TZ_A&S^I!*4JC|e? z?uFh(&+Eh_t;kRZVRFuZ zq`oTONL68T`mv~~b1@{%JSOLe;Y~8f$~PKA!??+xF_Mzu(ROk9UQxGyNhU`XMc`(? zo?~~^8^;R|_?c#z!7<&1RgBtNl)U`&J5?Um#1_}9>nslY z4_1=*)G-P#3RfJEWUNz-c_32p+>7S!Pj*zN9hb~4<|02%MShiUQ_p8fRr%F1)J1+n zj91g>^a39b^`$q))IE8NqH&jqTUa}J`5$ffeD0K!0C+bVH-};Wa7DFYec$bvnc~>J z!uWDS{qKGjq>R69CmhbVe^j;9B9Y}iQ#W&ioWrQ7b{1h}7N&pjy7Abr*!AHcPnKzG zUxAtF`4~CwZA^y}<7L{yDSBQSEqDHt6sK6I@LgyXuYS#h(}ZnduL*~{A8K<}6gYZP zAHiW^mN+jTc=B7?+1f4g+KH}G*`3znxkM?JPD+JCmhjoz4bs^)3X&}zL0eXBZTbjF_HwH41fnyPv#rAkQPe*qCk{5${v diff --git a/resources/images/iOS/launchImages/launchImage667@3x.png b/resources/images/iOS/launchImages/launchImage667@3x.png deleted file mode 100644 index 68ae22f51f85de87d9a53fe56401bf3ebe398b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15573 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 z 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 eNdE_8_;%jlhoOm_&A1E>GiIxiT5E!2bnt=QDl) diff --git a/resources/images/iOS/launchImages/launchImage736@2x.png b/resources/images/iOS/launchImages/launchImage736@2x.png deleted file mode 100644 index 4fa2ffac80f0efcefbf2714c6939a9b3873fcd4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12474 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 diff --git a/resources/images/iOS/launchImages/launchImage736@3x.png b/resources/images/iOS/launchImages/launchImage736@3x.png deleted file mode 100644 index 6c6dfbdf1d30973fcdf8a7a26ee07da97bcd7146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17640 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 + + + + + + + + + + + + + diff --git a/resources/images/iOS/more/icon_mehr_remotereader.svg b/resources/images/iOS/more/icon_mehr_remotereader.svg deleted file mode 100644 index 31955bc..0000000 --- a/resources/images/iOS/more/icon_mehr_remotereader.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/resources/images/iOS/more/icon_mehr_report.svg b/resources/images/iOS/more/icon_mehr_report.svg new file mode 100644 index 0000000..d98ef32 --- /dev/null +++ b/resources/images/iOS/more/icon_mehr_report.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/images/iOS/more/icon_mehr_verlauf.svg b/resources/images/iOS/more/icon_mehr_verlauf.svg new file mode 100644 index 0000000..7072ed0 --- /dev/null +++ b/resources/images/iOS/more/icon_mehr_verlauf.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/resources/images/iOS/tabBar/Anbieter-off.png b/resources/images/iOS/tabBar/Anbieter-off.png deleted file mode 100644 index 7e11bca7cdda6b58d2661cddd529c7f693dd90db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1763 zcmV<91|0c`P)@t`pdiMHcudcnm*ekQw`r+YWj}ih*WdIR0kMceKptLX|Ys`fz-p`1^QtwuY5{U8&8@P6%3imkVdmNr{ ztBDCb7@7nOP?-zmBdVQ;_kGH(yuELgFqOE_j{74)JmDp771VbL2ByN(JPyf)w7YCj zFll>owL5R(=~G%Z0t(iJLLHd~1(RU36HO#J#L;T&FvS*!(e74BONBBpn9sVT{3P>? z&fO|$0ip$5sMazqn|pk61y$nkOOF_&Ll>fSj~QI3QMV$OzgGbhJJROBhUdsmY}~Di z-3W51nFg4?7n(LFPYLu}Ye3H5Z?bdVarA|9khTEHow%qt7)0KlSGbsFf$iYd-t@i9pY0!Np3(pVKrB}LcD*WQ2nafarUO7}_bDA!i zxxP6brIl)0c>i^z5Y$x$S(EWR@AH{#Gr7t8UA7=%UFR1>8FUN;0VW7AL4XN@08{;) z;Vw#{z0g2NkkE+fZytu98a=&n7DQ%##cXIdxivQZ0!(GO=YLYl7rk$4KZjt7Iz#j- zVu(ie<=NCXUqzoo!Nq6$*#uQ|34fgkA?k4uaABI6`0O&I-|gRd1WbBCda*BG&G98e zO+ZD>-zJt$dnXczy7qcw$8fCyyHpP_=@_MLOv8y`0+-ro&*kbw0+J7|&@F@&08@Z^ z^8}=K_oTJSQwx)=u<4l{Z3;wEu6qAix`+K4Ox8zHx&&rLaX%u@=$l)(jEhSdn;tGw; z+@p~PBdPMQ>saZ^Q1#idq?!UIzg=lu5u{oZ?0J!?6sVM^bpVs6t|aN$Qqy+Z)ZAG` zpq>GfpSlzN-mQa_ktbmvD%H|=QUeoLh@`Kybg>5%yPkA8{0(68OVSFNxVj;RRuYSX zGkKftl*R^kP?{G;|_X#kC1Jky} z`}-nk>Hw1;l2pXE7Vl3KA^=Q~q~DYQCSAhT(16KlQwRYjzr{IE>YY;yOp=OdbLcIB zX$P46kfb8o%)1`InRLOFwwTB-nK%3fnEV)e(^D-Oeve(>8w2cnP!%wpQ5nM)R)vg( z4+LQHNS}q_0cV+w>`EiSuc|oRN)1eW+?b>j`{*#;V^QOS0GJ$0nqsnOy1BETzYzA7 zG9M0W228(8S}CddwUI=(A&^GG=8d${QuwN1;t5r0T5gYlN^1sbTA_KP`<($Me>F4m z03ZSNwT{&x1SRiCS7llHMAKG<>R{r^sdCz8zLCV+IWEN;iM^QWJJM~n^p$d{+_-{9 zcD90-75XhCawm#IZMh$_{Zk$iyV;F7egu4(el7ylR_>a2+kN6@tm+iXAa@uG4CRe~ zJTgifU3hQT8h7GVn}WiXMSCe-G8^ALF%rB)_bo1L08A|dRj2N?^^>B3=>Vv0i?^}o zrfsRYtfR=ZB%pZvz&2t!;@>2jZKX0xq1h6;n&zsxD zUY0n#@PDW>?x6qINk5S@PW`Sd)-&Y*)A@kyBtLVYAQq5@&;id%oIS;2B9S6(&ngjstlq%qUjI>K@bE%diAdW0{~K2#`(}lGj9L@002ovPDHLk FV1iNULID5( diff --git a/resources/images/iOS/tabBar/Anbieter-on.png b/resources/images/iOS/tabBar/Anbieter-on.png deleted file mode 100644 index 7b98ecd9c02b974a6a35fdde40ac850e34bf40b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1559 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 diff --git a/resources/images/iOS/tabBar/Ausweisen-on.png b/resources/images/iOS/tabBar/Ausweisen-on.png deleted file mode 100644 index 7b2e30aec60bbebfd15b1319de0555ae65b68a58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1346 zcmV-I1-<%-P)>L090000000000000000000000000000000000~$4=XB_{Xn5J^$y(AG?v}$;==3 z{+Rsy{%wX#)kt*g|BU?6N#sQrkMCtCcC zQ;AZkwC1EjyEa5 zO1V!f==_Q`G8HP?G}=6A%PTYf?4_k9zgyM8xk3nuOhbyfb}-Zovq-e-kFiFI&W7p9 z@9yL}*5Xemy5-0eHd4G@Sw&KbdL^aZQ>m=Q*ASV)k4iIxND@sR3KVHpGOJKJ#y3T# zK%xJIThv1ZIo1rg~#p}e#sV|02(rtq*trGcw&{?S0Y0g{PM zvB)%CS69;F?V{%U8X3;Xktrt6JbH#!l|-ky z=3NhsOVW>#DLkxic)y0Og4~OAX=pe|U9W>o;nC3*x$B}+)yuTyx+lhSFCu#W(e;3j zjLVGXLgf{RbZA^|)pe2WhZ&np=6T+d;r=*u#zmW!)}p^&k^K!ukv;n;$L0nF*Z!Yx z8KrWKM&=z?bd^kW(_&)X1x2F6e$frSRKhbu3u~sW!rz8*x5YF>qK8eMN9ent#41yv z`pc4Z=L--Pi=v4?uB{tmthnyOrY$(O)M*a$y8jgw^ku^Q-BP4&c3Yv&)K;NNj<9o) zqMkmS!sNKQP+3DFWhsc1icBAc8q_S(AQh2>ls1)@qDDG3Wrjh&%B`Gr(0S|<`$$iU zpSzF@e$r1;49k>CCAx5levl{SuR2MF_q+fvyXHE>PAZ>NuBBh<)FuA8Fg_9XD#Co{ z+}yo?Z*Ex=eos3#r4F>G^02@YnN}8o-F4B7$CP$!4v-0usXU&^qBnA6+KyWsYR|I> zS|(jQNpyOh@-jiD?dju^?aK?uv_3lJi3>H+C0bO#OA<;#{7GU(o - - - - - - - - diff --git a/resources/images/iOS/tabBar/More-on.svg b/resources/images/iOS/tabBar/More-on.svg deleted file mode 100644 index 1ed93a6..0000000 --- a/resources/images/iOS/tabBar/More-on.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/resources/images/iOS/tabBar/Pin-off.png b/resources/images/iOS/tabBar/Pin-off.png deleted file mode 100644 index 8b88a35ee276324eeb572df6022832302eaa44dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 zcmeAS@N?(olHy`uVBq!ia0vp^lYuyygAGW|FE`==Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07??XeT^vIyZoQd%u<((Ah=Z%z_odAh+8iMQ!Hi3q4$O3( z#C0QNL%{={l?k4#6Sy7;?UCIeyT;_to2-bk2^$TkeYw}e*50`BSlz#0zivzfIRh0e z%_!vHGoF7w_~x4z*QUMo*}gXO@kfit8j6<{3ww0j=Iz^~))#-bBVqjs(Vad~O2Vab zrP2`>pNAAFPt6O~y(TvE(WDoqDgL!uwEA?&(&`#kpmeN&O zxNh=P57C+_ySiMKEUb%+cTiFNc_S)C&4^Xu(jvxK!-*@!Kdo8c>cP?KbKKP{HAB1j zk#Xk!Cwry0u6CR{lQm5#q`>k@>4DALHK!f%6}0r8^i1520W+bT_# zH(JZ>#xJZoZ>z&;snfh^^}#7z+WxCjUe!6hJosk)>hH6Ir83@qFw>NfeYg5Vd`g6g z^YvpNwOxOA`IvrQa;JWYY^d!S3C+^io?D6&SLipe%$#+y`SJ5*%b&QjN}ODCwl!f< zuz}^|GwWi~3TBF}jCQW~Ir6h$#><(C-?BNDHce2v?A*AbuuNs+Jj-W(%xyc<9tLqm zT#Kol=k>(WO@8Jq<0DH?tu3%vy*b{fM7ekN3+)8|+PPJ_r`Tr(WmijHHvX$L#gW{jIp4`^szoQsjdgKScV%@Jx z7qwX%d_a)l1PcUGfjjTimA(%$cNKz5Z=8<)qC7=&>$dw7SIS6dS4$i^bYk6!Q+_Aw z`&f!J{FQ$XCF9X8^f&Hu!4C(gF UJ2`!GZ-PWTUHx3vIVCg!0FmCtX#fBK diff --git a/resources/images/iOS/tabBar/Pin-on.png b/resources/images/iOS/tabBar/Pin-on.png deleted file mode 100644 index 48d4e23342d562d82cd26576b7fc75c5b2eaba41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmeAS@N?(olHy`uVBq!ia0vp^lYuyygAGW|FE`==Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?@Xkx;TbZ+L5Em;)f8kGWZh86Il!?uTVHhQiZ4D*f8YJ7y)^kh%cC3f-{0Mv{#%q4 zXfX;n;P=IX<^QLbulv2sm@{iLkDsqeQGR=H+iQLK`|B;UPHdUFe9GB?TPr<7rn_fy zXL<`}H~QS|b(rtFq;_G_U60*j8|5Zy?sJi{m77*viTIf}@xz*D8=C!&%D7s6V`pT(yv6Tdl3>!-)8elVESdVxT`ir9 zdEy71OO5=ZGoL)km~NbHEVypw`b@iTW~VeNx11=sxXk0WhU)Ce=|bP12YhS`g_pI-Vi}UmuQnDsozOrdg=iH4pI!ldoatlOf8ZGjAb1#hd-R00n&)ZH+ z@fSDuc=IT4_8on}^2ri&`zD?Y54p9aMEgXM|L=Yu-ohClW`^ah^xZqv-07Z(>#`}r zh4&x*Tk3M;(r?cK+lq#eE7>zC{H3wlLKQx%QgIxZ=kX!l%9P`tQ;ozF$9yQ-YY#bxnF^Hn?l zs;vLZwCYYfzs-q|hZo~F%`2;X{D9%wUa75Xt}V|L-}y{JEU`_$W7qK$S7h|&{n=2s zWUGhi_Lz>{Y(~is-wG;ee-F-I;=GK_JAL~3MUmk(eLj`0s@uc2_ZH<((Bz-SSa+Cf z=BJm>_Iz&eVK~78fek(&h{lBrKx8qveVWXF+R9H%VHdoXy&7orv2UL$r{Cb>sZBZ6 zJ~MdY7vJ5AVF?^t-PX^UF>~#oC!R}oE1lrtxpoX2W0JX7-sO zT~_+B`rSLYzt=3EeY-c5(O+LDW3Bc_`{yv{A2TcA;8y*y|O8Rh3--Cf~Usu6LfkxGuNL g6r7ndCdM=IFx;u;e7r&U$vTjbr>mdKI;Vst0LyRLe*gdg diff --git a/resources/images/iOS/tabBar/Verlauf-off.png b/resources/images/iOS/tabBar/Verlauf-off.png deleted file mode 100644 index 7f02c3c59344665ce46d26dc5caa9ea59093b0c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2178 zcmV-|2z~d7P)@(R0K_*|A6a;UtNCn3_qIT^}(+Lzfum`kzl$kcmS9ozwQwtp8}}f z`L*R>Wdu`uA$s6H#x(#`2G*KiyGyZHoeP0zjxMasWkKctz@Je0nQUG7y%NC<0+iqJ zXW6}v2-T|XP<1XCq8-LNyQ(e;Af3vZn~r z!Acznrf}Tap8egy7+lNeWu2j=N~Bl{fZ7pE%~lS?CL5`8f{sbBpX*Iwr6x^V(2Io$ zv$c&PLz~19hw$=4*&l3x!p4(?3SFl~AVG#UX~A>+1r%DdC1#0>P`ektMV$JJdWsDs z5JDrDdxMaPan>jM(|;AL)$K$EQWsxr;yczrNTI@X1HKviGr*hrh|P*D6jS$A4ML3v zV}t2adbuz}@l+9@DMFMu-sXt0+G~|cE&xg;g2@9&;M!(BVkAvxVilzr)1;2&QU&D% zlV^~i()Yrz4){`!miI}p^$%+D)${4Z>WAJ9dW4>D<_JIs= zXPHq3-LoHTFo#y@%QbsbWPc{wvfp#KOBV-V{B`fprBL_`2J@g8mTN#T*~9eAPUj|F zTVzK=jFC*_JgpW1m>~eBP(A5fb&0hKddMhbnEn-BBuuRxSy;4B!^*Wv;XQUa+?pg2 z3Tw3pdD`z)pdiUDa&7VPjUh;tde23nMH}Hb+S0I$w}$rx*SjrR6iSxKE^vlbBG-nW z%L84VwBvbb7526k!D3h>`uR(-bPb5^!e$2I+~9vqr}6fLKzMFifP$F-u4N^dDq5w! zWX@kLKG)a9Nau(-5GWn6U6USif~lHBATo>I?y*7EcFs%);xS!dKP8yz)t!`WnPyYE zR=z&x`hN_b7dlsp*(bqNlf(|Y9}d>6$SSSQ{UGS>bN~+trh4L~M2eS8UEH1K@7o3! z8LTUoonZ1{m26G8}DggEDsf_=Sn~T787z~kg1ItotOA-jC;uP8@ zT`sGPZUEz7{fZ5OVDgZTn?j)LlNvVo3`2_sL@@abdL3QVhvx6&1|Mr&u^|vlo&xH= z;b(N?Up<^W*Mw!&S*CY_sXmD<^~NFy*R}9v1J9zH3w~_Ve&8X(^xx;ou>-trt3g5R<6&;b4iiTz&P{E3@g5KM+H>mbEV z_lBQ48dlD}PN0MZnYw;5n`6Wtg!}afCU@&(lh&`8z5_6+3n*cOd)>VOe47QJ;~2UU zLWOB9xw;1n>ts?%IZ!i?APo&c0vVs2fPjkkd?lEwxw^5%XLp8yZGth>zDf@{e3oCZ zNrvfWVyWdGQ&Y*J?Fc4&iOYogmiDT5K zmN3jq8dz`&dbeH09!(>g(~n9{d^)!Ppn=W81}yuhl>G&L3Pb2KEm!Qc?`UbWk^?L6 zmNh&6WermPtT9=o;9*i^XI*BwdkFUB3>pet!ChWE><&C*r@iN^7^bPjvZ?%Ddbv)! z^cNf+SeG?&I^0>|ngOEQ7>+%QWkJD2a(8bo={%<7*R0+-+gq%B7m!rF=aX2@@r~*1 z6nTq3rz0<U`GmX- zW1L5#=K$9hJusxvY=w@`2#$8C%tMGI32P~a9up;t!1arF7oXS-PIBwCmRpf-xw z=E?T-r!$s$s7U{#b#1MIsU#?8%+pa8p3A8^661j7jDE>e^e_pPRdk9ISg1u)v6SYp zo*j#*Q}SY9!iwu->+ec`%IAk~&t<6uh{grwS%m6}38vFZoU`Jy=C=HLuPe|sIE-+I zFom+mNLZOnMhMMl0iM{alv2&6qnL38v}+ zdk?|-j#jJel(^b07*qoM6N<$ Ef>78Ec>n+a diff --git a/resources/images/iOS/tabBar/Verlauf-on.png b/resources/images/iOS/tabBar/Verlauf-on.png deleted file mode 100644 index 5b91ecb2f6e6f95ef37428fc6a0c740e8140e6d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1950 zcmV;P2VwY$P)G(&*E1Jd1q0X_zfiboxH@cmR|9z|9z>X#+%$V^7yPTHP^Nb>q7XA?-~( z2Z_%7O+z}nKlYi=k!szL{%(CY=aWD|I`F~SIX31wk9is*P?G>bO4x@S93A_V)AGy) zD1IGHF8+1ZxK9EDiOlt_C*Nbk2E7p|j%bu7BR)}ffTlR%OhnGSWj(%ZirA-ow-_SMYT{%1M3kpbRiG_@smIJ*Es%e1xxX$C33@-K%A)b^4Nv z>yb(4lXlWN%aK7UG~*~$g=WWFFt_(Q3lm4BNE7DoJp!pvTm_0Q?DFK{j3TY;QOEZ* zr;AEY7Sm!^Kq>=8-srMosObculERi#;-Y3&_lC%1AC+c?sPrg&{n{~*ex^M3N~W1w z5v{&*1kRL4ay88@3{mMI1o6)0h-v|aQ*gP7h$^6{O(m4(H4CV zrc}l5J31{@U~&;Aou81@l_;W3J=*uy(Friw`K4F`L?WzqFFf4;3&1p-bkq4a0fdpG zrGUoo%VP&j1L(ZvOlt1&F_;0S@gkE1rf(h}gDb!^jHa5|R2KNz9RsFuc5K=fLZ4=J zfN2~_FQ0fVp2d2vFA9>1qU2>wL|u1y?fi@fo4qASyJd{b}$R2x(3rhV{W6s4+vly zNV+=&;+C)TMQ@?NB&Qwo&`~fJmakL>jhwvNf*NB0uZ;#ujlqN z;o@L3UuLf^!lW~#*TUC6cm$Jlthy-l>f#r2Zs90SY5!>cbS8Xu?p?Wmk5J0b;z?56 zd*#>k{M=VWCYf(47IKiBp*s1nbhC7fOQ8(_OqRyP{S|%OB3d z#M5S-;a&@0|IvEO5uiS9`L*chvguGt089qyRvwv4E5Ie7j+q*EHXzk33VZMPvGQUa z@V#c|(t)|Kxev&q5hQOTQzb&JmHA=Kgbz@5&DQ4$t{1P1B<*B6(BQdy5Z + + + + + diff --git a/resources/images/iOS/tabBar/ausweisen.svg b/resources/images/iOS/tabBar/ausweisen.svg new file mode 100644 index 0000000..5cd91c6 --- /dev/null +++ b/resources/images/iOS/tabBar/ausweisen.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/resources/images/iOS/tabBar/more.svg b/resources/images/iOS/tabBar/more.svg new file mode 100644 index 0000000..624cac4 --- /dev/null +++ b/resources/images/iOS/tabBar/more.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/iOS/tabBar/pin.svg b/resources/images/iOS/tabBar/pin.svg new file mode 100644 index 0000000..8528768 --- /dev/null +++ b/resources/images/iOS/tabBar/pin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/iOS/tabBar/remoteleser.svg b/resources/images/iOS/tabBar/remoteleser.svg new file mode 100644 index 0000000..c1743b3 --- /dev/null +++ b/resources/images/iOS/tabBar/remoteleser.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/icon_remote_0.svg b/resources/images/icon_remote_0.svg new file mode 100755 index 0000000..2aba743 --- /dev/null +++ b/resources/images/icon_remote_0.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/icon_remote_100.svg b/resources/images/icon_remote_100.svg new file mode 100755 index 0000000..f6dc99c --- /dev/null +++ b/resources/images/icon_remote_100.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/icon_remote_25.svg b/resources/images/icon_remote_25.svg new file mode 100755 index 0000000..687d654 --- /dev/null +++ b/resources/images/icon_remote_25.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/icon_remote_50.svg b/resources/images/icon_remote_50.svg new file mode 100755 index 0000000..e5e81d3 --- /dev/null +++ b/resources/images/icon_remote_50.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/icon_remote_75.svg b/resources/images/icon_remote_75.svg new file mode 100755 index 0000000..8ce2013 --- /dev/null +++ b/resources/images/icon_remote_75.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/icon_remote_inactive.svg b/resources/images/icon_remote_inactive.svg new file mode 100755 index 0000000..fc08bd4 --- /dev/null +++ b/resources/images/icon_remote_inactive.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/icon_save.svg b/resources/images/icon_save.svg new file mode 100644 index 0000000..c2ff3fd --- /dev/null +++ b/resources/images/icon_save.svg @@ -0,0 +1 @@ + diff --git a/resources/images/info.svg b/resources/images/info.svg new file mode 100644 index 0000000..da2a609 --- /dev/null +++ b/resources/images/info.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/info_filled.svg b/resources/images/info_filled.svg new file mode 100644 index 0000000..f97857b --- /dev/null +++ b/resources/images/info_filled.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/npa_docs.png b/resources/images/npa_docs.png new file mode 100644 index 0000000000000000000000000000000000000000..8b5c911850f7e8708fd15bc4d0b523f0738e2c64 GIT binary patch literal 2691 zcmbW2`9BkmAIFE4BlV$@a@3IGQ^}DdNs*(3<|;Bb5fTx(8M&{F+*7%Iurc?!5i^Fx z7-7b+9JykyZNB;!zK_TI^?E&?kN4yK0AwrrXv2ms&!fb~ta zbv^Y>;=2C7IXXHzKBVt4{0j(1F`a4O-C

VRdB3YI(~~SjX&vh(?N0Y^MuKnaN_> zW%PU0sT;?3MYqhoYtZy58w+hUVX|2Ml@lI?#1Bn+!7bpxX2a)+-R|Fp9gwm<4cb<) zUPx*$v|;9bImtY^=UvHY5OVTk^K5t>*$ydVi@3#LvR>8Pd6|NJkUJYS-&eT`rN0 z6u*k`;Oa?h817BMNK&Vh?dQHkj3cz|xo@McTMpi>RxJSWGob3Hf0KSZ+TN>PBeMOa zU&X|$+`;G$NL0I}HR4}L)%Be{#`>Rqzpq1qh{^C)Gqz!EKGL7$Ar!RHRRPG#X z9xzz(ND^&h&$3c-h`eT%(!*jM^-}8(7<-iUvAsk3!usykF2kZy;(3MG#?C<*A+Da3 z1Mdr@A8v2$uV-~F{6|>HAA;iNwxTM>Hg;E&dt5(vzg_urP(7Nqd%!H|rlN*diu!*A zB7T1BS%B6|QkJ)ATQec3>7Y{L?;RRux_tkT**v^dLWs%k`w-tUJGHcpBd=38ei9Zt z8Yc21D#j3aT4t{g98GEaxt`NXZkj5H{qE@ZZD^R*`5!Um+dy~@A*zA6S~U1^a&>TZYd^o2mfS=}jpvLm_kN#T_bn#E8YW|ECsVL*(y?A+OW5Fc zGbAY^t=rwdXc#lP{HgaXBn{`DH)t4*`P@8hTqdmkKGo#-LC*Ua8=3&N2u+OjGi|~< z`bJq9*G_U~XBtZ*bpHhaPOd)D(lB))*Jb-b&b<&p7ld(4EucZaVj~m7IJ{1V10gD) z#_rlG`%hq_rz;Po?tPI8? z;PtlF&AK%8PMuH zRelhVst#|*)ax~Yf$*YYIe%6CYp{mXT)d~R3&Cds2U_}}F$&WDYQ+~pXxSimIzdtc zzjMC$3{2W&<0Fj}nJ2hcvKYPr#K=NzGiS-AhCC|H!!fhm>^b{d?t{+U_atH(Gj)@m z@$pL7DO5{^w||k(m*&1E1$UHqvZ>z8eso@R0xD(<6}x1#4P-?ZQO^Nkg}(?OOYj8d zP$A3wnG9S(EBp1OHyh9x#+l`4|M`tIdbLzRz|U}wk*g}m2W-#LO;Swy>#}v`?yvX< zGiH400_MRF``Vp-ZFP*z^HVX_nA@*U&hsHMLkA3I(PX;dh)OEhBEJ+(auki^{ z3jW?jUBx-U^9EA;{Kz?9C`2PqAvQve2zzd3g!2RHCH0-tQnRWDB5x`hl3OkLT{#C(7K501 zxBy<5j;dSMx%kj-+0Y!2Neax3ovTDbrFLATg!rr&g!jLCIn?onC`J-w9#mpbZ;N{j zxF5b_&+Epck%W@GJhKI={CBIaXQNG`C2rXJ#Y_7NHJue*a?B~E&wZ>a$&QR=~t0x{|F#PeOFfz3fHo!UYv!7hZuEHk=f9>B5WgFS*&{ zr#GOMYzlx3Dd5n}3~E9MKKyc(uv!DfJQ~c^3DM<^*sRMioqTx$<1fTH=W^kriXgA?pLFP<;nK#lR%TR@FJ+=39>93JO zSoD@^!j}m@DfFz3*!$%Vq+WomvJ|iQjXqxx7bK|QeI0$?XI$Y%B)a5N_1pR{x9$h7j%z!r zlU`svqUPt5hSMF>s*L*IigV;xdO0MJ$K}rcnm&(yOG|6eA4~7qgqOl2mEY|2=*iWI z!v~{GE3j!s#`^nKH)Co?VV(43`2b7T>RTq)o!@lKL>jj*Aluz_Wh?G30q)%FF z(^F^Ppr}i4-4-2}1Ma3~CURG}KN(+9Kw`LYW=C2aP)xQ;Sf~j%{uK)$cCQYl$bd8Igp1v zU*PXkP?;;>!u57#H92W%IXStqGAs0fQ0~G75&s(&V!Aiw>JoP^-@PWuBwfuWM`DjO z_$@=`KgxfF4ti=~Rc;F_ z-HdKmHk=%o9%5U$E#aqgq~6zZhfwmMk^Y5JuXpT>cwx$NY_fe7d@lw8-(D)3>Q@lr oc)aT!P`Yb2zmwm-x08RwM)XY$GgnO{9QPvNiMF9um8LE9e_J((*Z=?k literal 0 HcmV?d00001 diff --git a/resources/images/provider/+tablet/adresse.png b/resources/images/provider/+tablet/adresse.png deleted file mode 100644 index bb2e9ae1bd0faa95d8d580b6b9d20daf7b61a11c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmV+z0_XjSP)kl(2O0^0SdFCthaOI~)p6 z;)`SFd~-mwW5;>{zyWYu61D=+0`T|^AMRDFQYr}EK#yi|MF5TqIh!V=LyL{`Z+645&|kJ1+o$^&YJ@FNj@hD$1t3ulbCpUB9pmRp+pHqa-L94e6w0T={wOC|Opr9oI;PQg-msJcEiXKP31ei0F zG+S!Fc<3bVjqLV5GYvg9JD<$!#~~v8u=;;yk$hNR+$-mXlD340zc@8*5n&VE(2gBD a%PV!Y~j-cNq#G9pDZ~2c`o`NID1=;B=5w5IP7QKnF<&xP!QZ%@3Z*5Cu!N z6pP{BpBd@cXP;z^0mCp1!#G3IO43pJaFnzP37;#!Bsas9BfP>z^@37CKhn80ld zT-}E)lI(f{b;kK?pB7qYEZ~>zsz0wAhG7^t#Wy1RkJDKYCYt~N002ovPDHLkV1g&J Bw$T6p diff --git a/resources/images/provider/+tablet/telefon.png b/resources/images/provider/+tablet/telefon.png deleted file mode 100644 index ae67909762a702966f5f2b10a11c465fa6209474..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmV;)0XF`LP)O~!!Qs;cNq#W9i#+P0j2{=2pv#DQh}j@(1GaysKDtU>A>mW__@q@JWe7z z2<%*;Y>gZBl17fTf=^s5h5T7nom3$3-Y@M-ooQh>$Cfff;2T7q~w(HBfX)c*mZ zxdtL|&We{i>D4-G%n*@{OjOMNa0;Rw>l1U#tE!j~&AIX)$Brw^OZ4FE!k*q;fJ_h2 zyJ9$sEZ&$wvUs0QTkpdLZvwjkT4KEM%H(vp&QVf`WPm%;+EB z?Vl%U15`;w zK~!ko?OE-Sn=lZ4x=8_)Ksq259O-}(a0PJ(Ar+8RKvDrEU{`=U;5xupf%0dSSu3kW z0?wJacxRaNfhF&*-oE_+c*sNkZ!vpqWUVa#lmMOqWb~QK1;7=+8NkUHbNc7jTWd3G zZDXySY`VAXF#y>t5BF>q4FR_Ij1^H!iyiCT|= zXHIH%+MNftnL8&n!@9-&0<;{3W*(ek#bJLEU{`Bopczmv&|u~%ngPf?cZxNm>VdNwmnUJp^UBE>a}E5)1;8(=BAw(^fo5!vkh}oM$h#%MiFLC!Z?~S!>Lcpi=10(aYTQ||EHDpjhe@mbB{NMke==K_;Jb5Zbu7v%TPU6ZuTLAb< z_fN){!_sC?8?tmxN~Fr!7;`bke5UIYfN#E$H(ggs`^g|A(PK{;xQeVOCH~Kpz%9M5 zk3U!Y3&{ZM)h3hB52Q+ya>6bSd2UHHU}j9QRp!+Cp6EK)f>?@yGy9worR4w)06zNo zOpu=nEz1)JW4;5ZSdd?047dn+p(A#vgn)~c*Olu|G|dnVSW4a6Jf~z=9Z^0^NfqU- zPIGiAAv7hTD40!=#d;{Fv{|YEMQ7Wh(BPt$ZF4 zPioK0pgdq@@Jw4cJ+is^lQ0zr7HbVCx155|_}j>_O1ay-RDsgsDI}H~nJ|LcHrR@2 z)Q<}GQ`yK3&E|W|M}x;pwac19Z+x@it^%iSO%jYqZu={*yx^Ez10FdO+NIpy>)qIF p_mM%HQaoPrz1!EU4|&Ktkl$ExKMeu#_2vKo002ovPDHLkV1lStvq1m= diff --git a/resources/images/provider/adresse.png b/resources/images/provider/adresse.png deleted file mode 100644 index 1c899e27b5a2d60394c17807f2e3136175bf7878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc;00(?STfpkUHCgRajX$z1Zfs!D< zU#j``eo>@~pX)4=iwv3~Rp4nPA6puFUWQeh^Gvu9i@`v7GNs*K=p#r9W zsp0<`zKh-#Vp3J8nN+Y)=7G>E!~GswQx<&w?|*j9!a$}i%TjJLs3ypN_OD`zpZ_!N zsz2wSDa*R`w$1xh8+~=J@RJ9R!giU4?U~7RwWjgKwG56U`DdFwEEGF;PHa9GJoy<* z0q2W-sT1=ruC?X<^I+wjcP+VJcBs`I&27HmTj;r}h|BDpQ=q!z$FP8TDoJ@0Uf=Hj xF?a9tKBEfO5OKNmZSRaCLQkyQ@TmSH)2AxF)xQ^5x&ecL!PC{xWt~$(69A+xs{sH2 diff --git a/resources/images/provider/adresse.svg b/resources/images/provider/adresse.svg new file mode 100644 index 0000000..d0841d7 --- /dev/null +++ b/resources/images/provider/adresse.svg @@ -0,0 +1 @@ + diff --git a/resources/images/provider/mail.png b/resources/images/provider/mail.png deleted file mode 100644 index de6ac386100dc8d8b933f790fa10d451c2e91529..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)IbOU@sT!C~&)g~g*s+8^spa#B@ zAirP+hx-EW_XjkrpI?w*ppc%tKNu*p*we)^#Nu?agk6L0ds(T9DGbw2RJSwEYg84G z5{Nn=^nL>abBBxksu!Qj-?JzPZ7MwR$e;g!D$9<)0+0N~3=~u(bOeRY@^Emvvau<4 zXteN7ZCJ6YIVy+Y3XnD9v^4w18I8C3)fmMaG#fk*^fpLwPIrjl+9u)4v}P9L5^lxD z4-z-zT3D1c4u~nM2sE;9lu&GBSS<9uKrL`ir&PI_gc$?Fe diff --git a/resources/images/provider/telefon.png b/resources/images/provider/telefon.png deleted file mode 100644 index 9275ec5fb963df226f080d7de8b196bf04011d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc;00(?STfpkUHCgRajX$z1Zfs!D< zV1|bO4(Im=2=vc4NLc^=zQWq+mO?{4@g z<;6aJeC6jGb)l5@7y6rT*dA3okjuinU7nSN)rQM}i$&xD?}C_}RWIgMi)51+F5K#Lc_7x5^YCE(qNVTOrZrT!2q-G~JdqVV|8D9&wG^xU z;ms4iJhRuD_RO&H-Jj#WGR4>5^f0tOvU}-$U7VjuH(Zp(V`qXxy{p55*fxz1doLY` flZiTZ`ZZrz2J4gyeg}^MJ;31U>gTe~DWM4fZpDTc diff --git a/resources/images/provider/telefon.svg b/resources/images/provider/telefon.svg new file mode 100644 index 0000000..57ebd27 --- /dev/null +++ b/resources/images/provider/telefon.svg @@ -0,0 +1 @@ + diff --git a/resources/images/provider/url.png b/resources/images/provider/url.png deleted file mode 100644 index bd4686449fc636dd1d31d1f88cdd80422d9c99e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s#sNMdu0Xn?Y74 zU5p+EUVQ(^)GEnq*^&8zKRual7*%t=a+BkjSJ(G_%0w>Lkg8^*vZF7bpWGIa?HpQ= z-RP*imFHjd-cmg)rKOUp46ZA8hw3bRTK!b)PIxby+tm|Gn658py#MM|cI)K}i&aE- zeE*hIvZ!d~uH+e#caQ%}<%ufGpK!vgKJb>pmxsEC{!MZ-`5rHLzEbdqq0-&BLjp5+ zYHgL(ecc_VOur!KZxr8EaD?N0K)mL*m^bYYNJFm%I)xZMw8UO!N}usNPvP2%$1n@jF-|UlOVqCKy`o^2e206&Ip3pOw|t$r?D|ggzN*&K$1WO7 zoKt+!VMAW9!K11laVK8g4$C?I{EnXX;XR>7(e{e>a@&(OJ}+qa{Ze|{RMnR0nTyTd zT>RB=@T-?ZS)=tdjn5}e?T?auQQP^nX9Cxq6!lE0fGyuNt?IrP%FcWDmZxgX$K|V4 zbZ;7dna_RH&FjWR`E_fUi~m0h`cw1vpXWcuh3E99S4+D}0Mi76r>mdKI;Vst0CO5I AeE diff --git a/resources/images/reader/default_card_position.png b/resources/images/reader/default_card_position.png new file mode 100644 index 0000000000000000000000000000000000000000..d68790fdfec35ed91b5617f1db454aae171069d4 GIT binary patch literal 34926 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 + + + + + + diff --git a/resources/images/search_cancel.svg b/resources/images/search_cancel.svg new file mode 100644 index 0000000..5b6c04c --- /dev/null +++ b/resources/images/search_cancel.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/search_icon.svg b/resources/images/search_icon.svg new file mode 100644 index 0000000..20925a7 --- /dev/null +++ b/resources/images/search_icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/resources/images/triangle.svg b/resources/images/triangle.svg new file mode 100644 index 0000000..93d81f5 --- /dev/null +++ b/resources/images/triangle.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/tutorial/button_de.png b/resources/images/tutorial/button_de.png index 1ae97dcf4ea78bbca74cc1abebe3897be933bf1c..944596ab276984bb143a618d3dae982f321d9561 100644 GIT binary patch literal 28710 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 FV1j;wPJ93W literal 14056 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 diff --git a/resources/images/tutorial/button_en.png b/resources/images/tutorial/button_en.png index cd48a74c67662d6658212160436d18bd5331e97c..d37c5102554e3feaf9c1dde24c4150f4bfb21e63 100644 GIT binary patch literal 26900 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 b?vwum|7+%z;fbDV00000NkvXXu0mjfbr1D2 literal 14308 zcmb7L1z1#D*Cqs%6zLKKL~39dYJdThRJyx{VdxlUXi4c-T0lBPIwWL3x=TPpx{;8S z5X2w7@!k7<_xqp!pXV7kv(9?owa$LmUi-{>_Jpgc$P?ky;$vW75IuP;qjCLz|N6~$ z6ZiV>>Jn=p2F48<8)<1ZJ85}oCwnKPCISkB%flVvNE?`jyc7loI67L}*qUCOT%r+W z#lkwIX)h4$@>-JUK2f}mKz7YLzqvUf$D}7hpO`l-PQDDK^bUdf8^33(%Bp$uZKaWS zysz_TV*g4qBT>Vfh=2dnI1{@>%~_z@W@N$kOELbJHt#Cu;a|LuUhQQ({nB8yhqKx6 zMlb0FIVNRl8Gs73j0%kn6X$v!6q-eao2{$Pz-3&dge9a(;QrQdLAvd!>Ga3BtIX0m zIR*+QXGZht_16Spv6%aX+Wl^rUf*6YN^Tk4Ju%;`<9pb_>s7x5n`}o(_(t1Uu5vGr zh2dyx+J+_HjveSclOw#~tC%p&QnuZGv$>XIp5{82Rf*VxUS&G8S_dCFv=d2`v$!KapfaV9D41*s(N^V#{-@&eL58KaUJyf@96d8Kb7 z?)h#62_11S1Hy)dH~KVNr;6Xicc!M3*i4ej~(#0QxvvisS4^C&0@fOnanoDfLS5g6u|E%)eTWBICbR^c`_jVP{^k0(#p+Sfs-FN2TifUAokLXKncl%d z#Q}cJMAf%&*i(R^P58=s*rXQh4{;YLr>u(tiE%;XrQ|dbrrDNMbQ>*@L(!U-gRRYN z30FNmrh(`6Lp7Whp%Tw1t7tD{N+`$R2gSigFfvJBZec7*HX5co(}BY#peH9UoI#k( zo)Hk`lX&_nGK;-$QwsL7CJ^C?@8~Fgje<1UIgy&iEVCc{oJvNTlO^25wIMA192Ypo zO_yD!l}4Yrh1F}9XXOL$CiTADC_gra=sWQc%atVKe6u~*p;3vJDLD>24z1yCdf>zU zy{l=^r_X25XUM1380&>t|ErbeB_0GL%Czgm_K4PC;VGpjb)D7cB)bxYdo1=8cPWu= zLQCpU(BT8Zn=mQ$seq)??F-6G-VAXDVi@Ck;e}B%j}B(|MJ3j;@|Cu>)@MWl2ZN52 zGPwB>Srn_ZMO1>2)@i-&Q8sg;>Y9elZA~#vvZBiIMYA}-M{R6sL9I1!<@aA#AM?s&eW?C6uJoYA796#MTdH)UM;ro63 z^K1vIWCP&;R#@!S`-MH135kb4iZQIB{V=mKy|uB82==af#Vy2ReG~=;56jOtrboV{ z8wLhGvyGOXi=MKQD9p)$2WsJD4(IW3KwNucU_d-XuMZvIE>I>92YW}9sE0W7FAve{ z+bH(w`Yq2V2p5>Zb?UMn*ABl2yhg%)g+sYm@czYt7X$=?0YDG{B*Obo zTnKwt)So1dC>~c7{HN&`mA!=}?{yenJ|5sdVl7~QA`z}g`(GFf7%$u&?f`dmL0#kc z{t+ktL|N@mp>a`hq}Nme%0KcrSPlxq@Y&3e=$S;s{H=~|Hmkr)=ut@e%Y6}z>%oyxg`PO z;REvg!TyKw-<=<+J-K!S{?7UH(_cJ(H7C(0jwlzXBMkmTM&jDQV`F0>3IoC{!Eg~6 zz#Ikz0t5ujp#XE>^+yW}OE^%#QqU440)qVPu*%ARh5rZj z`o{@-n_r6v0*XYzf3`Pq=0Ez|U%Sn}n#r#=DGIZOI$B*f8eRzR-wppt>E9tJCrcN1 zC=&k2>bh-8$X_>drk^9q#QvKK9DgwV-S5Bixm&}pH39NnuUR4hkgyh?kf@-DC`g10 z2oeQe3-DWBzr6lCiOqj%ApjNPH-`xd14Lj@7(f7O$p-*K1n8b!l1f35vi0f`V`;KmZID0Dy)0MF4P13n2?A93%__g8$(E z3(dch{XK;0_58PSgxdeb=Vw7%T*nas37Z3HmVnp5=mo~7mFWH0fv7yK%;U*Z0C z>UY#{!~2)Js$Zl3oAvshO#=TK`N#dA1b&8YoIM5xhx8MfM_L}3yFQ)?CY`PuyFLrT zZo5phIIe$1z74+Z%|I2ubor5!0Kh~)jSPTP9 zObC~^MD9k=!xAa$M>%g@6t`rX_AVsen|^FuC_ZgI^|8GbK-K)rSKD>3)UeL+W9eG6 zSLW#Y^=oW&)WXYB<%D4`$!W(vF5?A9@6h99&&vmKA(FTSG_#N~bwobOdC5gfKS@)x zfTl(wty*=oe$AMEEMiO#8fARdX9!hbjL}z-)}rYwG8$;K5iWNnO)9y&OmpXhOslq# z;i!`xd1=4lXXBJ4b?TLh9Ui4^H=8gLyfwNQW6@610`HeP^XkCmxh#m00o7hXukL4x zFYCs4)j`%Tfs6pEka&~xMgg8#<-*?COZ2KGyvJB9sn@|USpj#KtU>^?UTB8?aU9=% zI5;V40h29LCyUnAkJskR6WH&6jVTyyDmTrOp!BKBg}dg#w+CzPyyY)0eC={A;021J zT<0H-q7Pp+y{gJ*BeAsmp-8hAtl<}-s(`(xgl!vX6fCT@-sf&=mmKOQNL$e5FW+5| z$Ihi}X|`p%yI0bu^*I4|o{ng9(bviLqH{uOCcQJ4NmyF0yD$p)(%aI~lDhpZ33lw$ z3Ixd8D1ZR-;T}3ubW`dzcjwBa5jIeUyQ4zC`XqwSjJA+(oYO4mWu$9&Vkps9sfZ z#cn`V26|VS^O>|uyR?Tyi&1PfR-z| z3tGQE2Ugl%P9a`tKL`4N%a3UrJ*d_T66K)BlV@WU<_RAz zl42~zDFU2|M`--HE>5`CV8mF8fD(U@XFV{Vq`M&NNDcC+FWKgB0-fgOy!0(`C^+6E za3bFsR6kKF(5KmNTXKfTKm^;A0K58l@#Va5le?szss5~1&flw5f*XL#GEdakUg%oc zDsax(WIl`TXEDJAES>tLu+jLf?Iwk*bbsn&p05=c^4F$@p*7}C+)54x5*I&A_3O<8ZR9JMR)Sf6tN zXA*9VhI|ei%K}Hox3&xPT8BsG=%#d8gtJNpzAfG&(y(srAt9XartC-e=*$5on}kuucPc}>bX5Y)akFp@Bf zf|v4{GzTs->dGZWM>rSvFJkRLJ^`bKI5IO2wVG@1X7~^waIaL8Cmy4IfNPIl5yvOhvNwrRAEtUHFrF&W;l51~vf3WQA#5CFaLGAR-p7fm2EwYG$Wr zBXonib#$m1GxYdp3;Fi+cx(sW9)2Q{fbP83UC~h%)t$Y#gChMgHpkfB*!X~9#W90e zikD&m>QSm^fr1Kl3EK&Qql$T|nIhe{5=Pw=L%^gNRX^jV9_c$3w2Q%{#~X&Vk|M z>7(p$PO_x_b?iVg3r$6K!ogj{_I`#uT*144(Q z6jUrzy**&TC8YoX6;N4+z`D$%Xb7nUj;hU~Pa)>8(K4Z4bTU3vv{IjRIB}9^S@o{3 znw!w~YI67_t%r_R8M&o)+Q&q6#8PVkRigs}i>sz5z$z8Kz3koKs9a=ZWGWZ8`t?Hu zc0gP(RN=bhZcQfD!;Ml366I53&OK-ewCfdD3KFfBr#45k5~=uCvjY%=jRHY$V0xRKV(jqh@Jh(6X!~IUTua9km$A4W z;aMscr3?N{vC;Q}eK)?F2B;5UMWm$@uQ+UaXl8g^n8FcN(wv7nxrU?nSpd=n>s^&T z8DW*nlPd9NT)n+5t`(lW?Exod-6`mKQD(myAC=nj;+rluC1%{D`4!ZlM^cG7n~3?g zQrg|I)Iefh?X0A+6py`|7?kPHFNrH46z0Z1`ntPuG*=7S0eYc>=fJ_nPhp&NtK}m3 z<7kJ%S9BsY7l;BvK~5#bqiqt68z|9kPR7~@r~N?tx1~uBT;kza7Z?Q#pi;?ub-@V|X2JskKP^KBIuNT5C-YJ5{PzX%c$q6O(tb3wm zUUG%^si>r@vIZfSYXw$4l6#K)$%17~ulvB=9&9lrtz8`}xlF4oNdy}{^urgHT(Nf& zqNz2iVdq-|L<55@P~qSeoEf#}gHOWYV70U3zMNS?+-Ga+$eRVNZQxD4g=2bFIU1cO z?Y*5cc+X$Ro*!!Eg5Wf!ST`}!@Ox=Wf<=(~*fYJN=Pk3g-$LbS=0{O*OR;zybAI)h z%h&SaZXeuV;GCD5coUPojxttqMyb&_uzRnlM91uE1?FCgunMh6f3=r<%fhhMv%fl7 zd#6w6h2LIB$+?mc)#=r(+;nOGC7B1ZdV1_6*euJ_N&1(V0R8b>X0%2PVJzbPFR+?* zS*m$s87O>hkO!Rn_ful=xwBmy`|vWWF;NKTHTV>2OTE2_sTeCdvy~~uAFCR!`7s*# zd6YrJw3&1PxK8&;vcV?*eBEOso5yo)^?8)?kiuO9mE5A9{^x#P*~*-eD2w({bFt?G z1J)57oHS3*%*8f|w0LW}VVyQ;};sTgL@#f4*D9nKgZ zj&M0>7(54@`gjC$7jXlztxmIv&kyF^IELFD1T^ae_hX$5Ig?jjL0*2pjOGtn|Mr#Q zaAqc{Q-@{(hD(1(NpqNw+~|aTc)B$ zMjWTnk0m@lGvg2cP^N2PrUY*u0ngl}VwwtZ*HCpONm6JLGoRR|c{X13T%ho+db{Da z=RuGki`e~ZIqx+1H|b_V*Jc`39`S62#KjHKnlGG1&7yWe)9;!;DeXTHlUuziq`S{Z zDQ~Od-A*k(leHq|HvaNsO}4Ar-C3Vc1H|@{p``A9sK*QFB7<5}EkHl#QS?2M7}frz zG3=`CQWeiepYh{+c9}uBu5)qb=VyYh8gZHT#W%Mvvg2L%Z*qopoI1NC zW3H4Z(6j*mu7JeR=G;a}d$7->v&3-zp zHHrOleLwGVXU+1wwb(%;ZZLe1GprbDtc{5)^&}^U&*QYEKB_eX?0ntD$0Q@8SuH%HS2l5|#kl?{^~ zJ7+MEJSBEl_%S8G=B%RO%Q&_#2le2x#fJlU4uERH-Je2M55B+BQ1{O!KyEeU^z5*~*ue~IY61Fc(^qcXNx{JMVN2z00u!cyfhjZLm zJ)Nt+*fPHstsRp|BebwU`D{U(?hU+jvW|<2qBo=95x+hH`QBVR*xtbLyXdQ?6}>g9 zyn65qb))8YF-0#o4;5Vdg4-@KdyfmzvxhJjCCUWB;AuCxE=%0CG2Kf^{rA@VQ6#j- zxK)l~JB0Ri%ITQz5&ih*7xJn-w;jEl?+;1G?uyRyYU2zZhHr1H&+iRvCb6}1slbqk zF$wvtfGTB}TW3!vlQcbnO~50;kmXigRjQ$r^9qN$owGX*`P5}~)w#m+wixag0oZD` z4E54FS$=DqbSDjvZkG~eH|8+Z{~$B&s+W>uxU{2v}78}(upgN|GDNmR7o^2o7UtUs*C=6W7~ z)j8iP8`B_4rzy#xjzVT7Xp}r0vo4<~{PylD&cL%M+t5T}D4_ETmhxk{t=-af%<~ne zFV%xL#-8+?O)}0gO?qOV9!wgnF=mM0SFA)j2Qx=X?ND#VW)b#j!ZfJC2wDSYi?cw# z=?4@dCq_eG?lF!!-_Z}zw)E?Nj&`e&mk8317AxB3EqfvU+=se&MT!frwM-UQjU+u#sdjoQ@4w&A&Eom!~invC1zSFQm*jE^ZFkHIlibd_;PSrg;h|!H; zvD~&)Pfny! zWT;RvWKr5>COj8i<23uh#BydxQk)Onpn@@xss>sqtso3Gs$^)XFC@(sWnV;maBF_T zj{D;dHInbgb6l}@E;=LxvwgMp#S$p}qcDJ@t;t{i9AhXdQek(?B@h14P54-WueL;h zy1bzvYHjuYt1t(Pvyt`ADp$|&C^Pwoh1y0KVJm{zyL0bqL0uQ0eXLeP_c^r8@09u< zsF=&U{urjqpPA7Hw0~IL`UnT%OK;>oB^0|+{#k>teL#+-p=g;n@X^JyMxxrt!;%hG z?VIz2?Rp;?@g58|h?soPDXc9`wJhqep^{bz0b|!Lh80f61yo9i@a;3_4R@Tw48F0Y ztpyhE$-wHBv)uWlvPpLmN^Uar>~8N2M5zl5OIObeX(U=j@`VF53tcoktylmF6~c9ZMW9w`pGmtc1+? zHo|g*-Tk&J&=VszDeKU-Z@1~8E}KSmy=6g=Z3!Y4#-R8<`*Z9-Ap=TU3&|LaC>x-= z2|+hAE~&eXXi^Ppv=gCE1^&kFH-iPdgY|F|jv#f-1@Fj~YJ0Jvcgj=xe2DIf{N{0R z5xB_BoItsoLR#NBgS+iTkP2ATfaaZ9dO|4Im-{JdpRyxA0?o?W2&1Ro#AZX*PjG5R z$VE2rPAxXb&-&O|0F2L$N&@zRHbQ~^yY6ipZD9&>GjJR2?Agi&g}ZI~uPLpX?a`v2 z+dZROX9plu1$+KU*cUskh0A8^#bjQfi+!#P?dMJO#O1P6a(C^6VPV*vx02ghk2f~0 zt6xdA_lDoy#C~wGHmHgHtfA$`+^v1?)6IFI^TATYnVH=C?_2OgQF@*3cXHXMGGo!= zt1>Z^TCdUHwU{Mh7L~jxHT(gW^1NjN5(FmMfVT)*K7mD}v*V?^+s3E0N4TU1W(}iT^$E#U{D?2B>bow(DMs)|8ezQw@x1O5bJn_C zLnn5&kqDik`1|*#M`N#e0`KvopXIg{e7mEsP9#s~NO58os%32M+#zg!0f{(L@Ul;00>Y3h_-V-MYnjazA2LoBN z7ewjNA8=zLAv-F>nKUnwV_kXyXSc>9;*5?WBE78_Rd*Z&eO`rVPnTqcTud{%U|qe= zR=heKQtsOK#g6|3!xM{c=QT?87STVv>}yF(fGN%79J@?Mx3CNDZ{*h-F5=G;cf$yD z)M*ioF%t4qICz4JRANh#~EU&NcxxLO4CD%inMbaS0yHnh2k&QkzP5JZB20 z(re^ul^Qjm6uT+;64Hs;*`kfIbsVR5wsC9Pu|0ohU;LhwXy#c=%_J9Ktu1r5Yjc+& zgVbq8D_EargFF720=ahVuZL_ZI&An@E+1XBD|e@ zXc2yo`Hnr+j=CrxrueZ2Y5+A@*#g6O_0T1CT4ZvbnM)>(7)mjZs+V?byhEil(w+V~ zvtv40g}K>r#i1aDKENw?=8>)a<5l_R(6I;*Y66W(T#8P2%$1zn^WUo2`n26>6z=&l z$ekE1{Iv3uo*$o^Kdq&jCE;N<4C-xDpT}=|=&jp~+Z@)Q|CG%U2VLZ(G12naQ#M7V zBw8`DBDl7(>#ovhwD?Mwf2m1L2!j3#hHxhP?vY*vrX6WjddjYhRjDv`h5ItAjxHPZBC54y;W=DT3I`nlDXioL6x#wp@)nXi?E&a|4iYh=b<#?p@& zXj-0Gxz{EwD57x8Ll0_+rKxa{GcByR_zR45YKyH4S9z_p3CkRmS6MOjEw^&+V1KXt z&VUq*Ay3my>bKp4P|Dk5eCo0;DaXdktOyItvhN{=Q5{568CviyxY7lbl5ybqz#R?s zLG9_Xhgq+&>%%Rg2yt87doEH#cYMyKrjx%0(d|v{7QSZj7=?xrc{ClJ6$1`?>2zpV zu38FYF^N~ZbWuLkifGxld5~dm-Jvwc@gfntT;DDMo(!lUp;_9{5L2voNsas`Ii<#< z>LY|mE_rfniF*?rZlA81lXQ~A?0hj`xZ5z1IeRQ7+sUI1t$V_Y2%0JKbjaR%xU?F_ zuAEL}>zNu$bVS{vxVilN*06@niGcw9j7fTMWOY)1_K7Z0qVG#`9=gOy0LW?$*GM)` zI;_Gb%3D0%dMu}}+x?wle&0w6xL^*gsH$Y1u7P|i`AlWSl$V~qdSs#$0s8QohIR&b z_3_4Q&j-}=3P&EmDCEjKq3Ry%k9t~Vl>Xxpy>_~OdK#L=y9= z({Tr?Y7g1ClJeJs8mWu5Wp{YTj7ApIZfx;7j^Q`e4=$@e!{*U*2fEj~scEBYzX92N z=KIVSCq8XsX)?OD_dklR$N3m^)DU8~gtO6TwDkg3irt<3v0kq6PCPUAaBumm&F&c- zbTM8A75I7@5RSbjwXNtY>nK)L!6LE(ljbWvsO<|xn1k%w9GZ<1;E|i-D_;onOv3I< zdA1qPN{#l#i`C=czRBQUjOhD{blu%k=kv1+u}j|H?~u}JfLI-45K_2}qe+ivi-d4^l37zY zzBtfsr9=yzW!AH|o<bu5DVGT@ zF{`NRe2c=#PMQ^AxAlrEr((+S`9)Ds$5s8I=reIMo&#yNzI?xg?nA@dldKe7xou5D z5O*sy#py_7p}BlHn9hIT%uCyiVJoT$|DCOI;;j1${!uLxmFOJ0MDJ>Q&@QSlT`;pH zsDdh{-FpvgW)N5_Xs%(IMGFpyfu`RDi(3q}X^leByq1fGH&rw)55nsZcKx$og{dXl z-Z>wIk5;x7pcV5|>H#i#P=%gvyWDAPGuuvyR%!2pr|oYnDqX_+b=`h6Tz(Aw(*3qZ z!v(aUi`0oKkDJ7p#)KUC9$Z|kJu#{-Zs(%Dym24xOIGCr=PSFto=U-{Cy}A6R2y_F z$=Q&6=mN)8-rt$#=B6YWxOE&Bc`Te+-+^xAJ}?o!-OE2xmuZtA47FIBHStoa;l}$G zZJ2b^NxOmbUdCR0=7OKx)j==W{yVE~OM6(J$=q?mVbr;J`gfl819OgaVTegyT5lT# z_%%yuCMd42)0P8Ux=RKBii+_Ig8Mh_dRd{`ivzX(+heE`pE0+bHqa{(> zE$z_o1TwDnn^A{ijVjBzx9CwobyOl8RuotVjbfayn(|7h4$2i@Pk^slL*4 zU&ejDQLAC2B~Ng*N~@D*3?k>x-{Qg07av zkF#wwMF&|d1$gh(PkJ&mafjzHuwkQ9i}|}NxZ>g1dsu83HKqW>A~~& zB?CZyUa#eK5|%9qqWp5?Oy_n z!AA(G>M9OOw)sJQLs=#w-sAUhT4xtq#k5pUDD0;QI{I)o;!M!i2}XmCK3Ko@|C+Q z4^IjeSaL>O79jI1nq()~xV}%?xe`{}Tbj*8N#J4#y3dmH_R^AhxyG97Mk?(q-9*al zr}S<&l`{R?yL`nh^;mt>EKPXV@GytbA8aM~c4WklQkL}G5hGpIpxw?JHB@zl;9i6h zI(QfG0CZT8bRMijp!3dY7s6wxo0#T~?nV^%4G8D8G8(1^_dhz_vyY>qL&#q&b9!ez zhv^L291p5{^ks^UTpvuj37BwY0y0D0+!xa?;*?ICwSo2ZM<)USx;pef9JzBz+pUCQHX8X(Zpj+c4vp*+n2{jH;%agr5&ue-k(PFa?WNdY zFwHSq8-f0;N!@YdiQvIidG-p%SFJ}1&4*Q!5Kj?2>^r+T8)**AGz<~Qz>t2#LwHwHC#2srEy+!lz zvxA>4bu*$~(XB43Z|&@Xl8F5N3XW(cF|ksw-+Zl}gx@K=ORtFg75lR|YwW-g_qb~5 zgkr=yZa_%qLjtXLbGWbx`BcOHwR$Nk;)D>dm8^|SMsD3__4z!*1n$pOi#U>m`6VBV zR2Bt1l9jvL-^!>aSbz8R+mV~0C^yp;J&?HC|4F? zLfVFWfpv}dk0-f&?=VSz6yJL<$Fzb~Iey>si0eLX|4f0FZ(x{51q8lQ*6te&pRv(> zY$)sr9Ih@CG?<}E>H>ZA@|X^iPt6zLzA2?2bwtj0AvP6iFi{(@;;gQ&w=o{(aGxrT z^CXSKl4w403`rpAFbzC5I$B4Vo>J>*DEyve))k~@DVz!McXN~~nc z);Tk^LGw}W5H2|re1D*Q-N$zced5jhoujEs;(<2CHp#Y{Yu30#wA7^+K;}I6!HXJ) zN~5^bXh7lD&v|8U_3GDaR8vTjH1UJGH?$=>>(9+Z)e4jOaOqh!<$7VK5cC_bSC^f5 z@0pY7=h-A7Cw>Q=ea@F|q;>od0=+NT^*2VMs&7cxPcqZ9KZ%|+ z7LAKcYHN-aX!$@vJw;&KD7H+cwV3>jo$2j0|A1_4wI*1Nk93jxC7-$4zNy7)?l(yb z@4xXQ+ds|h8^EP}z0NR2rWbDH3TUUCW=>DNxvGmb;qI(w)8C-xp^4MYF|!D}15^(n zhvWyGhT}r8Yd4A!X`am*r|1Jhx>J+q5r)fzmsPB~YFBkN-VOK8s<(JsD-NIn2*MxR zV>3!6#U=TnWcQ1fMqQRNz^bcClFbzxU( zX*?x)uDbfoJ8X$v{GQAMG$i8vpV;Z_9eApde0GZnc&w5f8Q{K}DFc@P4=J`>>x+{@m=uL6qqe9*=?Ez?mJR%NxqZ!QaOt#jx5m z@8t(1;Cd6W3YuluG<-QAd!O@+9=$RsXl3yJtT83$tvQb6oaLG_&0gc{9rA5cZ6a!H z6?;0j()$^weuJ^3z}yQ;cMct}U^byKWQkCrP#`GyTtqolu7r-V-AgKTLAL$_m}*}VjoS0_ft!S6w4zX_Czj(CHKCn<(Pub&34 zl~+c(Lmdrl$h*XIipe_pPi%~=T}0oI)Oe>PPZWA|(YARfgm?&-9^+fluNQ+E%N(@v zfE-a&UgmK>-eEPvgD7B=srVd3*W1_>Ut@k^b4Xx>D=AHzjtX$?@6IIk7oT;%6y4|N zOFVN-G~GCBeFY`oYMT`}aJ;hr%#J3Ad^23i5+P*7rbIT>csW}$YE$BUy&dSC%z1Fz zoL5a$SHu|l=Z-9z>y23v1RE4zuD6UWxzu}u84KKx6pEe6V=64p*wYW6glN(x`=!he z+8My=(hsj6B|&Ma%HRTS&L2K2p>uXSNl1;fUb58aw=-DHc=Gf*%(Wi|JMG5jil3r_R_MHl(4>8Avq+VT>6mzK_i~%7YEALfh)3~F!JVv diff --git a/resources/images/tutorial/generated/reader_sac_menu_de.svg b/resources/images/tutorial/generated/reader_sac_menu_android_de.svg similarity index 87% rename from resources/images/tutorial/generated/reader_sac_menu_de.svg rename to resources/images/tutorial/generated/reader_sac_menu_android_de.svg index 7700d27..054c195 100644 --- a/resources/images/tutorial/generated/reader_sac_menu_de.svg +++ b/resources/images/tutorial/generated/reader_sac_menu_android_de.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/generated/reader_sac_menu_en.svg b/resources/images/tutorial/generated/reader_sac_menu_android_en.svg similarity index 87% rename from resources/images/tutorial/generated/reader_sac_menu_en.svg rename to resources/images/tutorial/generated/reader_sac_menu_android_en.svg index 0c4f728..8796870 100644 --- a/resources/images/tutorial/generated/reader_sac_menu_en.svg +++ b/resources/images/tutorial/generated/reader_sac_menu_android_en.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/generated/reader_sac_menu_ios_de.svg b/resources/images/tutorial/generated/reader_sac_menu_ios_de.svg new file mode 100644 index 0000000..2d7c6a1 --- /dev/null +++ b/resources/images/tutorial/generated/reader_sac_menu_ios_de.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/images/tutorial/generated/reader_sac_menu_ios_en.svg b/resources/images/tutorial/generated/reader_sac_menu_ios_en.svg new file mode 100644 index 0000000..2c0d16f --- /dev/null +++ b/resources/images/tutorial/generated/reader_sac_menu_ios_en.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/images/tutorial/generated/where_identify_now_de.svg b/resources/images/tutorial/generated/where_identify_now_de.svg index ba51b50..12a7bb0 100644 --- a/resources/images/tutorial/generated/where_identify_now_de.svg +++ b/resources/images/tutorial/generated/where_identify_now_de.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/generated/where_identify_now_en.svg b/resources/images/tutorial/generated/where_identify_now_en.svg index 0f308f3..27fab48 100644 --- a/resources/images/tutorial/generated/where_identify_now_en.svg +++ b/resources/images/tutorial/generated/where_identify_now_en.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/generated/where_providerlist_screenshot_android_de.svg b/resources/images/tutorial/generated/where_providerlist_screenshot_android_de.svg new file mode 100644 index 0000000..eda02b3 --- /dev/null +++ b/resources/images/tutorial/generated/where_providerlist_screenshot_android_de.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/tutorial/generated/where_providerlist_screenshot_android_en.svg b/resources/images/tutorial/generated/where_providerlist_screenshot_android_en.svg new file mode 100644 index 0000000..285aa78 --- /dev/null +++ b/resources/images/tutorial/generated/where_providerlist_screenshot_android_en.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/tutorial/generated/where_providerlist_screenshot_de.svg b/resources/images/tutorial/generated/where_providerlist_screenshot_de.svg index 8977815..eda02b3 100644 --- a/resources/images/tutorial/generated/where_providerlist_screenshot_de.svg +++ b/resources/images/tutorial/generated/where_providerlist_screenshot_de.svg @@ -3,8 +3,8 @@ - - + + diff --git a/resources/images/tutorial/generated/where_providerlist_screenshot_en.svg b/resources/images/tutorial/generated/where_providerlist_screenshot_en.svg index 420d9b8..285aa78 100644 --- a/resources/images/tutorial/generated/where_providerlist_screenshot_en.svg +++ b/resources/images/tutorial/generated/where_providerlist_screenshot_en.svg @@ -3,8 +3,8 @@ - - + + diff --git a/resources/images/tutorial/phone_screen_de.jpg b/resources/images/tutorial/phone_screen_de.jpg index 2ae2b87a512dc5a536dca018409149353a9b4ef9..9e663bf3dd9f1ce6ba21ad0a9b9cdc305fafff9d 100644 GIT binary patch literal 63021 zcmb5VWmH^C(*`;~aCaM=;O_43?(XivAvnQG#t7E#oevSOy$*|~&0dD$bG`Jew~|N99gc82+;Pz(i- zc_O@BI`ds3a~nK!I1%I-0nR=S9&w1u=jXP6FMbG@*;hD=Ay4-f714Ala8fo=-nt-= z6ajx|7GY>sOd|1%o2G(ih9{;cvX|`Ly%JWl-ue7=HwB-ZxD$%uW=d>z<1PYJpx~U} z*Qxpu|G&&NFqtpSB~uyJk(u3;o86I{UHxP$WNbL@&>D0z!Y5u>&i>s3kr+Zfp!_d+ z2|=4Z*dDulkt6X~Xe(ne=-a845$LzBC1I62wuW=C83f*TR{yda6bhk4+^j&~IM_rP0g3~Js^E)r zdkzVCzInd%py%&yUJFe$9pCfb+mqF6eYew@W#l<`z|Fyh5DkNTVp_)ZoLXYW^zyvl zjOiI&#nweyGIL6Da%ysNYIp${Wc9dD>?d&c2P8R3D2wl+I<$m1HRT9BEr7M<^;Pvv&E2>bEdbe=`^@a+hbo$V}NhPsMCr z;}T6HXG3FWIhZF>`M*vrWWQ)mEpP1?)Z0xo$FI;$cmS6Zk8+1I-MSsO;&@!z> z$Dn7=H~uPiOi!t$QFZq0zfRHN3A`3If`o1nKxoa)Gkg=CPaQYKFVLO5FLpSKg+Oln z<+dPlkf;txFHb-WYL3g1=Nhmq(eh8!%XO9s&xMh6&#U>m`Vz|@1>uuQjFUee{`Z(r zDShp3Wo1RiArv!Yh=}r(MS>ux{@NdMfQAcn&uX4{w08N5J&y<;u^e0Cy+rGef^?4V z#7kj*6_HQDA~1yA-1jFo+1lXq`2F19C2r34F3TyM6woRTp~2neh&f0eMn_YZ8s z0;4j0@3SD(XyC*pnS9sz!u)?o@M)^tRQsZ;T*v(ePMZX|X-4Ua2R^bI0<_hhbiT$U zh}B-KU-|h#h=vADA9e^^)pM;0>w$}Xxj+#Bs=2p+K|2wI-;LVx+y!uf!4`2REm$Fw zv40D4)6a0{*@?B2sI4hE`;_(W6HM_1+U88`UedKjzIpdSJvQPk+A38i3ic+be*%_L9b za?y2(Tr;bjyVPO2MFV1Q@R1w@OS#yp6iAn5;i#lAY7QMbi%@qz)jpRJ7C?=!AhlUUZq{&+MS7#UI-r zuO8e?{@#K>aBqa<0%l5cMIrh}qKUm^nM}N+yFctFy9zq4GI+=FU#Eo|oPjZnH3RqmG?;&bcsxi~kiyI+D^Y1<86 zN!yg3((7PV?5hTRqd-Y|2>|LSGgoeR#Qg*Ug{v&$zWJ#&;rL%jQahovAlQT5QJSuc zWlv@?0^8E9qfe%LWgasgzxI~(>{XiU^4sHN@{u{{hQCBiffb)(iI+67PI^gt4S>x3 z-3$aGVnj=#*7yTbL1g;}_=WkU+1dx|!;_|BykWl&3}wKy&Mb%2$V|yh^)l+r9dT3o zYdliA$VrSJBd1uk(V$fVIF;;Ah{gUZrfh=!chR{O2O|G1VRYI8C)uyv1@8P73QNH z2n{VV+1K)=#&$jkBz};o+_XKN_b4J**PWC4FB&>&4hfm0Kt}^+K(tgH3-f^VU zTp&|}s>b_dgVu9iQDx5c&;L}TXx)GG&ov4{ zt=D1<%q%Q@i!97BRj7K_!kTe--_Vw`dmOhSc-&HoO=^huGKSAXi)M64qUf*ii&r(o zQxj_Ci5uLP3yXWjV*g;0GI28veRU~tjL_3mdXM@Oh@*ADl(VkzzDYdi;5SJx`5|~! zyF~L9B7j-p3s?;xy7UnCwWc2xMme^*HG@r}%JOgjL1RnZqd!_}T+gwg$K&c6aCJ8{ z(V52N4gtYLXr?EowLu)`Ew9Ue>z?K$b5}dQc@`s45*iPcCitPsJw7nOb&f`S7BKq{ z9Monhbj~B_VD}URuMy^Kp$&0Z?sE3ie;d;QM11BG1H3rH>B!P|jPt*!oZ9@vI!e@dpE)-I=b&cBTHbX;U{FK1X95vm3^vci^4T&BSbAWBo zT4!iHzi^$~e*prKs5|;E*(*BAT82SvOi3K1LO>u(!OMj%!TtkMmqIeygKDO~ups!b zagVv%PqMt^&@h2T*L{p0SRjQ<8=xZ=k~`f~rX>jBab|bKGEqm(=%P zcd@((x>wcJ;Xb(dPV$Sd!4;)IaJKeqmowKF2s2~i^qn)H*5b+Q{GVc)%&D%1T5&q% z^^Ckzj(0glPk3UEsYZUxehMP|1-46RDGAIh$^#S|EQ+2 z>(RXsWkBY;KOpA%>N1x_BaJI(LsXCVGmHWAbvBwL<&DdxsO3$|l8m!4B#K_k{g+R= zF*=SeOVE4+Tn!b`!Cptsd|eB^sA}qDMSlqBFU<^vqkFqfHoJ;}aK=1(uVYpS63*i{ z2p-SdW<-YUa%0yG3j=cO3A?efTpj&iD%fLAg<$C&u>zVovnEdK+v_w7q-ok?4>;?z zw%65vw_@a#uZVwbbm*95AxZKPrl7;`Uc*~RRiu1b^8NpJV}CYe<#UkI2p@(lD)urH>i_reZ? za7JMxk1$)+1-J0K@rbvaE9_$-T?4EX87YL$Di(?)wO(Hql)kt1<}JjiLtHPW4N;p} zOlm8W%0RFKth=iMLaRZXj3Iyf(Gc;-PCqz4xjz}#U|vj@u1;2xsi-zb8=#y$Hp0^A z7CZI;G(<)QG%Vo-G<4$a-B7wqR~U~nG}$Y6Se7LTkeY5W{~cW@GduoqL)P4H?K6n_ zY-3NGYlXJ?ZyzA|LUh7HF@OH%pE?8Fm`ZKRwS3Gfk@r3f!?pSqU!ZsOu5E5C#JbX# z1;HUuN=14GO@cev-RuEdWZgUuR*cdO9Mi0Uf&;CSkta&lZlE97(U)GoZdJcp+Wyml zK_RbldElc@H%`0^vo#{26}Dbgc1P?$M}qV_N*>w{QTCDX^0!Q>=ExitdUdvREw5NH zy*)sn3NGF_kcSy@m2|{ zN2*1+h1|kH;Q$}@xJQx6(;2?7(f6(##xqNXFvOxPNy(#I=X{93R_}HG20xI zk=35w6Bx%4X0fSM>&?fq6P&2n2&5%-&NUqmfhDjg-{zxTcCJ_dA5`E6QRo{j^kG zc7_lTK2CQ`U+Hk=42RlZOoGizr|Z^5R}#*;#7q5s_JVH5@gE~97LJ832LMMUyTn|v z!xV&W`J)mD@DdhbR#U?u=wzjDA3z}a%}*ir6(#{rf1zLo2WxYF{;14Jcna7)axp6` zQ^GV%E#+M`ChtdGJwIj`yvnM^UZ)0uz5$7Z!`Cjm<(4{)e{>`HZqEN9*qwHRX60`U z95`@GxTc%f;C|hFidiuP7>k0%@^woWW$S2}L7B4u#EsAUE)F#3dmsqGYpJ!UL+A`z zTuoB{YG%CGkkzyzUZ{}x?JwThdHizs{{C*U;&!{&)9i$r!xPY0zpi9-)R@1{7&1vE zk&oxD#vb(pnp7-+X9eVY>JZ;7fEAn)_(;ZE6LjO>{}+sC`+hf|ue4AELVf>W<>-Q9 zmdh#zG{M7Wq<#GI)tK)RK_uRlJ|I?kjn!R0bqp92RF8rqU`+ohATb5}iNT7g=hYqf zLBi%q4xlqcKmP#LV1KO{>OOZDLxN&2(=jw-1Ls+XtF%&(-oYKU8n znZ;NyRtA?G-;hZ>SA(D`l90&61o)dfrG|K=kM-O<&>~~3q`@RH79C#3;E=yuz!l1w zI|>Ns9$LGH_vP3}GgD&EO|YDM;`yec=C093*Te3MXq6yverS(a4AtniIiKo((jbJN zI-I3B#qNsx;{rk>YH(lu2UCS~l_tgm`#^APl%6|H;D% z)(c+`%bS0i9JS9bSo>SgJeeCc(;eKtfwtr-Cm-s4KRVTTAZm*ayV@?PKF#C*ni4amFaKLEiM~ z1Fwdr^7$_W!Qh>dsfYqFD|l*NYZes!trfcQ{rUhL@Gx0aP@C^k%ZAx~QM#H;2(h(Z z>Je*xwvj;IKdL}~vB0j(*~GP2_uDCYXvK5Dz2348xP| z$;-uAq8a8)DSBdoss0R4YXp*jOIMTb33a&TY>Kt%tdieQt#rwCNOi^IQZL zdN|SeyiF6^MN?zKJ7-NhEU~8ss9BOwdeudCy;QJ)k-L?G+T*B3$BH^vnP~J_}2Q z$vo00!XvJRAydW8UL7yh#gp8I`oY$g9AIh78v4LrUm-xd_XotPVp8ZA@+=1mY!#06 z$9OKo2?ai~yBQLmJ6O<21)!{vgDhl9xGAdNq*CzQw@tJvgFr7xv!_?k1|!Bysjb_l zIG+x^p6LGAD!N1Lx#)W}1wX~vRGOp^hI1ZTp;`hL3^>6F7Y7)%oYn2c!EZeGO$wjC z4GQp|I?D|g7J}CVn?xp_MS*=6`8nZn>fdz*^({pUINg9|x=-{kyCwiQUeH%1h&W(@ z@_6ps6AHOcW+shErH6vV3kqdpivB?mit@`_-Yc2tl?wrC(8-9D9)wIoppXJ5gaiHg zo|vF!7Y6gV&g()O>x>@eE_eL{0@t5-p9rdQk~OEL)~U}q*KM&}3z%`$2&|zW?*dtZd~Fu1mDt zD44CDky?H}8_#YD$D|zZPrecP&m8|h+)qVVDg-u3WOi&Lf*5ZnO^fVv2uj}nVSxt@ zwV5!0BX4LZXm}8CC=d122m=NE0u}@ZkBNl=oV}B?iQ!RDs^L?yQv=7`2*Bw#6fE=~ zkjx$xalq&m1g&v5zz<19c}ecm1Ax3v!-Z7O87QJDPO~ z3rrgK`)|Aq^aO}g<*z$Gc172JUb%-3o>i)vt^46Yi)@4|`t5)OKYYjXPGN-o7pw0o zFV?X|pZokEipYCcVg%aAb@tO^^X*{C#qZlLW{XhC9leSktlV?hlouIow3H{f*iE?L z!ef_Hi?6!Qf>K@eqa``U$0wSxHPr@h5>$)A%yX%75~h740vd@bH~(1xc{pFxH% zRPm3KFI4K>(Mg9;*D)(cBAWQ&Eh3ZoGtLOn^WZwrGa(23=pLno@d0uh*D{<`@Ik9F zt@>Z56c>*n&IY8_rgsTo4PsiQlFXF$T%+Wab_wieQ^cjDm*?I?*e{Q6+=MKZlM%n( zV_Ss3?WkDgC(9GtsoFk7_Te7B`2#B73EG&;pq5lkEq4ITzWcqFY86wXE1DOPmA9M4 z;`*k8IGZlMu>;1WFqChbbBChWF2&TK_k!p=j;M$fiKPv(a=&P}cy%qi5$!mOY^6tflfR}* zk(`1i^=PVn23HJ@d(y560yy> zA1=5a;$^u$IQ|@Yx5$gA&82*XSpeU^`h$F1#b~kAO2sv8HEu$idN?n)UU4{c?)~qs z^~^<{U~ubI0P8Wm9+a!0=1pgvOS+3KC6&79$A)zxF+x=Y%JvNN@=+B2P!??Xi2 zdo8|y9*B?{NR%3Is2tvSL}gaO{+QF{hx=gnQ?W|X61840QWa;)_*v7q;h$ionDGVk z;g8=}W5&H`hx0-kl!j-vlvPPx8)TGbcOFo4Z#;glZNC6fr)p|*6u?0*OutA?)KEz$ z9Yl|G;u~Ihd95u|PFAfT%1NeSv$YBKt<&m>+&Mpp#S_FMSipm}=m}=hpkV|TBEiPK zCsBnp^fQG+;{aKU$P_}2i;>2)%NWH#r zS^5=wq`45&yegZ>7jjplz9@$|7Ev7gi>76jrrmp!;bjsjH2Oe!0Qe^%wX6x@Nl>R! zM(Sf=Qk_9u9M~}qF)j{Xm_n~M#XI+22}^Xg*vZg>-}^>5W%TgP+RLvpN$76=t)v}f zbH`*gX*ZMRl~TGaku?=Xx&a zim1%wdpAI~_3wi~W2CN-&lC`AqwRR<9>{9=AvpUztTDEAH_wRY!1BvesLe3U zK};Us7zbgQc!f_J0t2-f-BV+B2J_5o17zMhXW?^$6IC-++V4VXuu`bbauzcY>(bfM znun6!nD40+#@VJGHnhuheo#HwWv=O%J43bSNi5>h_7maU;W}6Or9MjhD3yVDBW3Y3 z^KmN&t0pj6A<;+6l75&W_~h$$X@ zYIH@lYwhq#b@8+`#9cf=I@sUmd*lHyLXlY`xiHy`Dl6=F>Lc`|1Sei^?oW|tyX%$eTW zf62>FT<$sb{jW7#K*r8X!*HKUS$r?D;KX)OMwX zdsb*E09Nmbxxcryy@}O<7@bfVE4#!|aem>AEOdRl?~ny2_u?%*ZUOpR3I+y#5o3Yx zk#TW^?M=XdXK)i$M+=uPtUrA?36xYnC6?VwrFPpo;oV+xx$88%HFTo<2D_cqYgZu+)KNSa)y~|>VM69Q&cx}K)81*v5pEVOhjvDoy6bo>y>JA!6gfS z`so%+t(*Lgf6~Y~9G{F$ZfGdsC9(mPc_{^DEx*Eyw5T~X9wMb26L*|T(lCdP8rD}9 z9;)OG3BZq$#Kqx*;oH8=9-gYT-73G2We}cp`t@t%{jEqhqSKz{Tx>>@ZizU)DWPUG zHpqLJY_^CvnIhrc9Ycd&q(ccwf;=o5oZ{%QC(+dvxfC^x2>s_Dig>M3_Ve#flf2k1 z^l;QOFP)ba;eMc(4k~)SuBiUQN_nW9AD;+0OjoxcX2#_CR{p=a@mL4 z(w192KifYbi-!^@66=?xu*ouedP9yWW=5{FHB&_0=5EfXJ`5{A3zi1bNsrosoeQq~ z*Qm2!WKzYvnp8#?@EejkILkoSButm7DtPEv(0s>8tcy7|RhxG0`PN1{3g1EtweF_3 zI)lA*3zd@RW!%TlEBs5)bImVinobVmVr5D{fxmkrIG?yE=Z)r!zz0@?IaLqnKJl_T zt?#(jO=FvPB!S(b-k2)W*UQq5Pb~*hTa$OeWL0s-pi*q%SiB3JX+oj=J^)2@n04xS zC`gq7u4It7s_;c1m$i%{>p&S29aQ|d#8~l6o7<88@HNX$6R%zo1=zw} zr}Jda_=d$UAzhJzw14dcFC9(ChU(ib=0l_?ipXyf-FBfAW6ZaL__q`~k-kQ%E{%G$kB`WwUoof$afd?v8B!ifM)IXv_E}dyoygwg zV>8tfDymqDh_^cwPJR7td}*a@Yoe{oO5oT%C4Z*9pURp?m1LzvvaMnHG9r7SAzDeT zX>p&*NUoohViy@}wr+40);$$k>1bj9MCmH5FXrTR83&sgqk6O4s{9uj_O+7-?REF_ z>N&rRjcIk6#Cs10$0beudp}W|+sA16g-pwCDVfUNW!p-)Pq_Ko;{|24A@cY*3AGrz zd3u5eOg+b0g8P#_6HxBpxXl?HWp4qDwSt84{=gm!{b3uPZ@yy)+x;Gb`_$s;#yGD1 zDlu1zv>BMZkPebA-PBXz4VUl!uAa-lK>_9Qr@`yhtpuON{a|z-N1Nn%&N@maKJk3A znY{HQ^G4NcPYxkbKG<5i_g_ieC*0;z#+gXAi@)8-n%yA$=vkCyp-Nt7;HeiNUn_`i z!=8)7>Qy^$Lmku~3g$|9y~h6A{3A>4ilmeTU)koNt9adS6X~VbDNY7(oxj3>beg-~ zx9de#zw=s%=K5A9wUhe_s%}GsBTfQF2Ga%gAJ8m(Lo&iUa*3OBYVXgN%~HC9CJSCx zVM*}7uK|RU55gD4j!E(?w&WIkYt-GRqK@@Y`@x|W%D}V!q-0&|V~NHQgzjT0``e|b ztz&h@b6ck;N)Zuq7HtTB;SoG>Omt&M^yB;xJtYC31UIo)JLb-Sh6O8TB&kM_eQJ38 zU`8;VU2f0Znr|oBtnZsmcv-WEQ3k_Y<70j7a`$cuq^kt^%XirCI)qz2E2E_7mJDV$ zyPV=X2O8iu;3^eP=CF~UV>9yV1kXOnac>x$e$ z&K`N&ojxT4ach0JQ>1V3;YYX0rd$}``q8pghiMF5fQdGinmx_qD`pRQQiC`gldOV(1VPKttDg-(y`J=R|3loYp6# z-qag2nkaij<6`dbQe~gStWYbzx#f_6G`t00Z^uh45+cxVGA2yC%#t)e@ z!u?{#SU{B8?$svD+V8jVI{3!%QU3^`Hq%KSnaD7R%VoZRGl%^{2f+p9g! z0=uUV-|nEe)ZasO5x1}Y{5{fp)m^c1;c+u@0-+*~S5}GqutS681{=y~6+<2h2G$lc zUQ=Lh@HI64bU#jN8@&B$k6uKW*Vh&ng6*d3Vz&gXBtgcvQen8U@P3iv%3eyh)HWP; zCOloFu~mgHiC6?UNg`^A&srpnUSd@|J!}~&&PpX|t$x9&{(>zUZozy*vSIiEz=go= zEkcC0Voj}P|A4^NRMEsXT{J^J0|I*u&Alb^_uEZQ1gQrmRuK1kQ7lbv~^ngrMZHr#nP3VQ_eQd zS@xQ`dnru8!;N=AZj~vN%xGhcJVVda?oitgg1QK4@aOdYH1>vRuESHk4>xt%*zXRt z)_dxIi&!sx;HhtKy}^CeTh*X_5T3aAUB>1q8#PkvVt?IGthYeH7ad zO8mazo=)#ruR4x!B$l^wYNnnJZaW|#`y}#2F4_?nrFV#_O>_-qile9Dbq8!#B=M?V z7)K5?Ho8hzWIa_gQ}DCkvCZ$6cAIZcl{9^0l2?LA#oxQ*}$v7XIywmW3;{W&dnOx@p)i^cN_gz9Q8!l=J8 zeN;Nak<2D%K*W;L5&hJEz4^AZf#8k*(9K}t?RX*Q@BPa%I`dJ#manJy>A(EWPjbyjbgVaS zq*oJ*U%`5P#pmqLL|!9|ZxwMgvwhZ>l^nGIEofOejJlr}^Xf;gDf)Ck)WF?+w9WOr zflGJi%Oiqt$J7Zb!^I7BSDBAfCN>k;6VWHvaxzGg3T8-3BNPPN&1{Q0$>p5T{r;@e z#gQ43pJ zC<&SPld5tSU~=^>OTS1@f@W#X2dlPXswJ+-qiaU>=iL4KkiP|FCFc63#BvjLoJqE28cQ;qPPpU;{eqGg&jkDq(kf&<-4XWq4hsflwRI@E+&vlnGrEB;zzS-WZS_C=lbmLt*L-OpniM(78yNt)%f>Uy+fpaHqBZ1hBzOfbFRxJ=~ zinC2}&NaO*RonG-ej`U=*+(!7 zn=ASFq90Gcd}>TOHv2TK;V)-k~r$>&8^tfW2D&U4Nveit2?r`lxN+ zsI7Jl($*${6{^F1x84RDEu%sPjSQA=f48TIFlWVUzqS0=(xIXQ)l=sJgZ<~m51y_AwZIk7kMvL1tmSJz(R(Q?ftn_mQXu~Is5 zr(QP1Wi6C^Mz=5aOAPXgE-k%@E8X1t*s(Zw>N-^6y?2}M*?A$n?v;ehh&in_k)enf z$Sk=Nes+o1w@=^COOQrXW-wu*ig{Ey0;V!LPVTwLO=*8^mXy*W97ZbNkd8d~axMZT za-%PD-=|LRu~6EH= zx_3VLVoal>>MV{&3Txh@zQ;H{a0Mq@w@cmdJFC`1;vW!`xGH>diOovzNy=?JcSG>v zYj7izeIVmY#QI?5pTiF)CKC{qWt*XRd#hxEDa81%t6$A+UuNEQC_6-f%NDY9&w^`^Zd z+%Y(GC}}Q_Qiyu0RdoB|$9TBCzWor)yt$-)zN;1?_vq1Q6<1Qj`%`5eB}=&R{#*6Xb6X?|$PW}(RG;jRN<+o`iT9|72dsLFS8M3DXysLHu{E0!@ zph5fln&6`2Ymu2j?EvfszWIw}qdA8#af_7qsoq56HM_ekIvy;a?BjunP-lKEmEyA{!Sa_qy6CS~CfoE69;$D~9PU6h zkv~lalUoB{i#ui*QIXtR4;Z2bD~3}-alE&0tsMPg3rR@N8&c$Cbgik!-gGThU#soL zuBH3~>WNvykEqdu7`>KM`*eSAJ%)m?a(ZLjY>W%8iybpqpgg>OyP=;KK<2Ca14*od2p_xUQ1(J(1pqhWk!baV^nd~ zz--N@naS!%J3$f3;{1$2MhlepGpE(Rs7AOXbS|R$41q<9Z*5DVX0Sy%&3oY-Fc4ft zlIc*`GCqGD)2Z}ms2N$^1B4yh8ZD!pLgYF5F%i@+)J4cK9h7+#_ zM<>3dY@HbxNt7o*JQ1zT5dBo39&zIbmD$b;Y_6Q6^ab+@!}irFb|@ zsebWt3`mQuam1X5+vrv_auMFXa!1XtF!XZwW-KyKQKBj4V6q_fW?L zp)_T&*3Nd_@$S;ZZdPN4sp^cQR1$9`pTC<1{+uNW^#>Hu;A@r=N&I`yPaCEh6^S4=6h(cT zBG#1x>1vXWzq02Mt(EfDev=pHTfW*XhktmU5Dw!kxH#5_0!3|`;!TBaRo`T{#gXjY zplZdg->CM0NrNsdRTY*Hh4xk&J1g?xr!saX2?*yX8vM`)o$3P~bq=c?<@#!sul=SG#zH|O(0_3HQTJ!7P!>~YHlLJ*?ST8EoX@&kzl%SrBNPSCVbLmw(j7D zs_Ki}80Jk*3?h_>V?{IBbWhMsZ;MP`rCKEsMZ`VhK|!H1uz2RvMN_xJo6x6=5Jt z7>$u&TcA7Jevhz#781xXCoF5f1}Jbv8fpB>RIRTX=^(J^Y;QD>-{1Khan^vS@nimF z{B0bOuS_@+pLvfg$|+{iSsa*eSsob8wE}ls1Xg3;asJVlSx7k%iV#(lE5c?HED<_F zQ(r+8Hx;>pZE0c-BJFe-am!^Lyic%v z64^MRIScw3C7SfKD}8%Dx~HbXxt`TYd^4jEx+Q0XeyUzIvZQ!N*e+mg>CW8Cam&QR ziknzv%r)SM!mv!Wefqt&338J(g#&ziw4!-3Pbx%Zj40B zHDP0aOLPP^ib5j#P?#x{tiVAbyFDLhIPH&<=~|^2arh|Z5G&<%tBEV~1`qZULw10< zdjeQ4heBY-qsth=&*u1nMv$Xk7x+rE2rwyL0sb1p)}~PdlC0klPXe#1uxf*25k(9* zg0ZpaTcFoyhe^HWN(&`A(sT&J_lA@9ZC!3yl}Xe^<3xTg zRtFXxI)X*81n#0*fNEm4F5}#&tX&JP-3fS+SCw;4?E%7sRO4iqgdp5Rzp>-n78zUZ zSx3l`Kk-r^E`nA54+sfC{FD@lAUcBGlmbN(3Elq8-`c1_wYV%*q`LSkBoIKhnR#aMIs27DdZz7ayQ@1M(=Ak#=UFA9tAn7_F1t1Gm z(FymZF@B_oxks=dP^+4mRH{ioy!I%V8YxjZ7*w@tA*1_hE{noPx0xqIrMwkiRuglP zAhE@w@(!GzjL&|pMk>7!b ze+=cWb7!HOZo$%|&n%UTd_n$Qh(aH5eY9!p%sWW6Le=mU+5@U$tL-Dpc;P!lD0G|A zuwc%1nbaY|XuLa<(xMj+JL}kFH}`X#Bkr3VpzzVFBE!+Q=Y=gQm5z>hR&A9^ek&5m+{i}#o$Q&QiNQr@wADEsZm;1mhVILJwF3nOl%%t@(o2OEc7 zK^#9qOWK*ro8M}I^q^r4v6Q@9s7-jdeXUVyv{_g)9Y&Q!7g7(q#P&1;Bu{ID?^Z>N zIwKH!_OtK~@j-`}aZ1A~AF!iBi-Y>#d5-#}+8H!PQnev{ zt<}LL8GJ+RL&y(BO!?UZ@_97;9%rkp5*0@K=CK&5kWPqn`>8)wz1fphGpnh#kh*#8 zC@<+e%9m43EtHGMJ?$1;l+w5*R|-7MW}Gf7lt|Y-h<)V6 zRNLBjdmaQ6oiRjZ_!Ct3fABX3Cms*&f0-yXom%%adjxNb%DPX47f!8uKd=3qdan*! z*H_G1`d>uV8FSeVeE!y8@^7V)KCnc%@IVZ3e;@&iDt|c5kFZy+oWT%`lWaryTHz~; zw2s6l*&~ap#*#Wj7TEK(aGRf_)Zw*Ju>o$V*IcCdDW#8096G{gb^2A|qb$-{0#SH` zfy^I}SFz%|J2A1)blq0qUz2HMI*l3oxB@zkocX<$&0lMgD{2{LHY`;UHV+Cgd)vYi zF;{WiuA#Zs`F?tnX38gjQ7QJz#Gz+HfYP))5SeOy^-lCb6Dg^;zPdf!-p^DM17Qy7 zWEzN`qiIIOpR8cbjJeHq(&3vSQ_RM)zqNV!ANb@{%2nTf;2M2U?U6;gvYQ1{PVkA!R&Lf)qJ{FJ9B?)_Z6AGT&kSr=ZqV4L z`~C+66{LvGz*A9o3Iwzl_6_9`^Zcb+_lA{rYZ#t67@pxT*>9;FA(2xRuOhF;1##Re z!xD*#fHh5ehy4wgl!wm3;RU6Afn&ACE36X6Y z=}gl#5Izs;-$;bmzr~~b1ELP7CFMVdZ+BAb*8&&E0lAr>AA$w_6X(^D$V24%KITa@ zpOadHnnx7 z*zzM_1Z>yDcA4Pzt@_;(ky~Bn`$C9lQ?i!hgX)w%h?vMTTr}uLQk^nmC(9Zgwif%k z5i!x;{Q=e1)W_Tz@esT=)^$6`C31CD(luo92Z z1FzpYw`vYUVX0eDB3!dPVZw^wlLWP*dC&;yrZHfAc!QTe`@%jEvqD!XrRc%qDXS7h zEBJ<)n)r&5C-X+x%{O_gy=D}bE7I2#y981{$6w@m$hLcV(&(8QZ>v*PwnX<`AbK0u z*u0jlx&_i0cu^4~W202)=*2ZM=;=xH2<}dPe@0X*dKZf`q|sfj**D!FN`gldEq?Qu zP)bWcx&qJ7H{?iS8J^mN+OGkrk66BPn>|T?Q|s7$90#2gRBE&yR7A^*j%;KQUNm~B zkdcpVfH=qJ2<0_pPdWo%N3z-;D;QrOGB) zm?IIxO}+P{Qvz)wj(0C$HMKxV;1SG7p(A)k4WLMiMKN7q46qezM_Z=RA+T{tYTDyf zY6drGeXdxE6&(+zfBz~x!qLSSK}P`o#U9+Dnw$4<3&~Wm(%Ca`yHf&wA`a#X(wqfE z{Mgac@5X@k3wX0h5>t&LPAGz1iB8*map%K9s|{v(ZCC_a#THC*x%sI{jYJQB#xjeCKehZKPPwY2dkGlsC(9%}5NfM8yt8Y>L?|KOb+W#^4wb{oQpc@RJ#H z-Lqiv3MLP5XbgWHTC^8K(+V!X0VPHmano>?Hi>6t`%fmK2kgUW%qKH={59}tqzKa9mGHFl;TNOF%k2LwW5E>{UL}pGzbzovC_xtA_3^n(fh& z-ajp2bfH^Wt9#XY?%}L)#3c-w-^73;!AWZ5J2+?IHwBoiV&K&LX#xbD|vDRF$WO|F75@8B1(+soQ$V^Twd%%CNLv9X;=K>QI{Tl`|$fTv!^6T6VGQeit(7&-0o^b9jQy((rie$Ii25 zCkQ09$y53NAuzjKLlku!{bvsU=G)hlFA-}VahLxo*$mR=>41WO12zz1XLZK{r4a!Ti)z& zJ&t-H!wZ{_dFcFhL`4zy*CY&uGqg}+?I@8MO#J7VSSSsbXQ*uj^k)DJ5>h4sOfqJ9 zU1AnNIR!l%?}+r$d2&X6Tc6K^tgqhsZYkTD7p zFxjkFXwTIPRn%-Ob?u!wj7D*T3r7A-$!1?cXkHlZJcRS@vuI3de0XbVkP5SFFZ|O1 z{t$!p0qp)MW-@kK<;mOb)W3oVs+&~Bv9%u?{l2VZ;louxfO`OqN^r^`mV@1@Tvw$s zK_v-@bs}ib?F&Jb9n;Z8VX1gZ+K>4K;k!}H;gxwO@YpEs*zXMJQoz3c8&vs$ps1k} z`efT6D>Ar3iG4|O7t*k@!(cjg{R((-p9#52z4~*AT&t0Nv(aLXlv zg?s%21a}tEyAviSYFZx%YE)>!V5A|8E7<{76;-KApYPl%_?P!f`1VwPOWo9M&_jd9 zp9n)GO}yD}KOTw8IHw6WRG{^^Sp1?kT3XTvuy9IzzF+V?AkWRp%A*IAeEGJULoCvM zVLYdxd!($1_?k}{;&mA=UoA0yZf|G8E*kRQ+d z^+Ijs*6go~oS7Ee!b?2@m8QEIP*CcO6DQxqgtM86Y5FacL8&+|N9KuACjHLj$Z>od z{o`%w)zwu%OLNl_?xzVzGJ9bqIo2lW`GLJ_1^3yZv>Ee4cdIWB?QZwI+BLmwmo%v% z${B||s!k!ZSL;5WAPLwvddgX+8V+rT&KJE6Tpy~a-X2iqd-GPg5QNs(wP@Dds&i)v zB~CnlLvxYXVsLbvW0e_}sU7w>b(PS=BDgUEk2&jdjCH zUB{Zdba!cD!HZ>JwGLjPmy`N;tAXmdNB;_6)macqY$ZMT0~5gvxVw_UZIMeu*Uyzh zNOY5y10h>0AhuW|?Ro7!K?wOic^jBauUWML;%W zh?_T>ZWV;a?aa2}Pe~rmuQyW5a7vjpT17XhkG~DN(N#h(L6D)=Xy_4_OMK0x%)F|p z!d$6B7H%Zt9uE03yO>}4-}tK-M|&!p{bUtw`IxFV-5p{Z0;c2Vm^^lDAPUywkNK>s z0%el{XU1+=gDnxki_Hp@<$3dS?#vO)H0mkwnZ@9nUgkzM{$SF=jVm|~j(>{<;4E#6c2Zayxp(qRzr&XIFwLILk*W zQszBniWHpN+AQ*-G92%iLUz+NT>cN!q>VlXO%ig`o!2hN7IGN{j%g%r&@8lS?~P%m z$RQ1UlR=ErpnULImNjA^0O6|df`q94XsMs0CEwDyOcu?{|FaZ(1Ah+P9W(z^g)8G9 z@hP*w?sq9CgILvlxU(6(0^|l7TEL+$JGV9=GaGCOYMH5X4*_28trDt1O2y{Me?bB- z+QyA`60qIT;hA3OlozaE;gTWg?|lv&C86{^>&A$74uC36%$BV)Cculby5+VjM}-{? zjR`6g5w7|jkAsQbLewh--<8CtTsH;Z=EUS(s1~`!rSpV{wt`Z`KLCxqh=r%M`v?C> zU6B%h)($J0CuX>X%{MYU6a zuCq$*<)1M@v)dAlA+AN!my&;RIQuRKUF?$87K%51QY&h*HjEa4RF`bfPl`d|ZQT_denaMZkwA#Q$a(DkcU5Jmd(?`a5$<6D@pLy%2e`8#Z9DB^h7}G~ z%my1}+R8^Eoehnsl!@I~YYU{cu#?k$%C_;nY%fq0oQLg8J&$r`xm*ZF;GjXzUd{j< ztDj$?V%5Zm(@d`TUMNSip++y_0WMm_;PiW!>ySBVmQB&M8uVa95RO<_$^ra!k^fD$ zi*JxgL3l~7!+0v0MMeE0sY+ySB_~VkkiqjC``ZTS6BmP1MpoD+?Bi{GfHbCFlh9fB z0S~TzwF1?Qj+FPqfs;W&fr@l+l%(L}RH{T-8^;O1&j`Z5F{#@?a`7e^s85B-UOo2l z`?e6+kgDZ9iyDT1G7>XQVl(N?1r)^|B(Jj^CF@+LCFVL$u+kWk0P-6mHsjzy`;b-> zX(msoK^y6f6Ai*Kd6r3VdmObEFu7O_Y;G-oop0&<2FG8BeW{OGOu(C&Gs}vg1dv%3 zZGBOO@Oj8Q9U~}L@*7%qA_H{lgO}B@-Nnb|+hF6P(ZSN`$VKLmyhB z9HtBK?rCvkhd8X_Gs+|lzQpa!OIC_5YTyIhW^4^ zdAP)gQw?WoH+!v6TIp&xwl0PoZqRGx3}QpD*)qNej2KQ}sF-Am9!G_C#{WOZFRPKB zgBPp$V+*&w7~fqkLO8mH?*MULn>wBiqLmAN0?uU8|chSdtHA>eO)TS>#A2e z{we_$k?i{6YqkoT2idypRZ{*p8GG12z*p}9MH|1OLQLk|QkrjY4nF?E?GMPm1yv3s zcODL_7IY)YehCM-k;!QkacelLhOS;lE0jxQ7L~lh2`Eu3(@Ppn);ksSZ@S6PRZo&B zDs+Dt9w!4AB*m&Ql*tn_ZG?i9XQ{^AN0G|iuJHj{I7;1aHBZdS#}x%y#e?sX#SjR- z#$g`T2Jm5g{DDWiAIY><>2nU5{3$R!%~j!(!1=n~qR(qq2~-+rIX}HsPE62n>daF4jzqn2rleTmb_|Y@=Tk>03rIVC5Nx7$()%Zt zMp-e(Vkku;{U3n*>3wOQi61g((L^Pim+BoDsDh?;^kaViMY!{+dk;n+K_* zN+ZNel<1t9+M_i2*k#%>|;_DapQ1>a-;`QqTIZOvmxEi zz=#I`v2&`ba?`uzBXgiEFEr$DY{iqCftHi@IpDPR2^C4uds&I%8l?&IW`S0zN0oM# z;qL4$GUr9QWooivf5kPEu4T4y|Vr|)X9P#wMSv{hO< z$bYD6N^8gHDk61p z#!0QPxRIKCSWNM2U{<;-R(mKcSV&xvOg$4uwm5*71V@6tf{w@}oY4?204h-x*A zIo^wmie~gz@T02QX=?YgS|J1I*vFFFaSX2NF$nlPaa3Aonb&(w_DjLHaPaKkWGy3U$Uvk3_x07Fwl+B^!p2=5+Ufwjpw8 zqF6P70uATepM-I0{gm99HKN3!*%@f3iAehNGK1W?cfCqqxT?p?SbzGc5`}stH&o z?2Qi1YB-BHKRb(ZBr{P9z5G!Wf3|*D-S5J2^8G( z`Fy=afS;^8x`J}9NXNp|h|)_fvUfWzD)Blv$|1AmniZiFax3YTYM&Z~ zY1ib^JG@x5*xFZ)AzIY|CW2ayREd$KH%pO9cmC&ZJo1^Lxtbn8u96leLJ%5Q1>-cj zu~$l7)8+(Id~}^iNHHk;+*vHiz^2>*PTS{dguqqECXWKbGd*G^oQ}3a9I-iG-cZC8 z^7tMBl88PJ@h2wPqVUA!sXdg`Z@;j;DO$Ecvb2(hvd~{1haSjQLA%M1G^78RIIX2Y z%iR*$_ImpIA0Y7ROy6OU(B2W!*IF`zQn@-^$EME3c{!5*Hu=I6N|3*~iea#^Nj++tkAl|`yPxfwhnJVwo`|wFuE$;=%t%s^b z_k(Psas=UCETpZH>mPvS=I1&=$_l{4RJ2F|%O6&)=-zVZ`h5u9sLs*jtb#ZlHg*SV zs{SqcMZl}783dx#s;`j8D>oUA zJq+>mad)Ho^=aFdBn_I{Y9du&E1HlL-J)_#ApSxAo8E|y2faPlXZ$>LPyKj`fC>W4))QfT> zDcillu9B_#jb7AlUCXNe2Lx4gx~3^`+qWDX&NE%F|KL2ijv^p04DEOC{gw`nVnfs? zm^WJu>+*{nXzigZ&akKo7M*omDKZMGRBIli!_RKFLz9L9r3lL7+T>=p8Z9z^5M`E+ zjfjq4Gmv|M6W0wGOQR4?m@T?PBs3IB+OJ{S5@91^2G&jzw&q}iExH~k2a1)x;;#iR z-r0am8>;a`yX15@sZ;gxA>GrFT7_#le{cp49EcINh(sN*GJ-Tib+dUzDd6VPIew~j z9ZS!@e(PWr*L1<4jV22P6f!L|845Q2L?0hK=EiQeP=Hpz9sA`wH-67x$*ZD77ppeqV zZbM8J%ab$cVvT&RwiVa-9zKsk0~r6Yd;IxW(Yn>#s-eAIZDN=D9s^VW^uaaeI0lLz zQpzERqo4$!>2pJIUW-K9(S?Nns6uSJ`uled2RR=JvJlP-Odg%?Vl4*cuwle8jjxB(ADo^8 z*F>pDO`!RY+?SWjt4XAuKxv)@xP!0Olj?42Q-cjG8jW`6wZ97PH*?gF{+E(PJ2EBT zMo}%XXr|uf!eJ?&X?WRJw&gaCVG(^T!sqZbki?FRV{jL z9#eL^MdB4m<1e3#FrK!O>4Ni*O_Ck39LNaetgav_CD0~i!;@RY7SW6D9!H(+tM4P zBs?sixaM&yPANaJEm)O-6Av`oYKd=0~ewiPn@lxVNey;%JYj>@L$x;5B^@uHKE=7f3=;3Uz8geL(=~3z~z=Rmn$Z<2pa~MA^^)zZp15HLmosdG`yJ zF4A$y5+_qY?|!4(sIT>~Lx}x88To&Uve~(cVKb%h--|&kX{b-O`MQ;e6qk+~Ai&V| zJyYd5ah2a|oh#l#`C*~&%B@eYZ!eNqBAHLhUyo5F&bEWso)@( zLr^Ld>`}NUAvxr_m<0Ok8?27-8T(;?o!Hj|I+L#byw`I~qk?BW)C)?PtkpNl`QYFk zCA)y}AI6PBa}+dcpu|G@&pr{i{E3ap&rv>1-c+xAKmObHvAkY6FeCT8ipdpIVn%dc$+rseD@?Eo17mJ9)OqCI6_CPA!dswD0W;|I9w&QEkD*v+A&(VL z?4%$!l1mP<2&%+pTu@GkODvN93{9&>$dmlaMDf#)s0dY>(m6|XULe}`h8|%DZ$|pFV9TSA<{Hw;1-)4#-kEBCWqTqqZQ^q~tw3G* z*lK!8tZP3>gdC0ec@(+Cb(kzfJ~|TDg`kn+M91a+WW$n?7WP0$gz*nx09F$n3jLCB zinM7rqcn480?`7t6TDrp6_hGCj!6V0Ke)8NP+N$I{p1$>wx%9doMZYR^F9HUR;m?E z)n_5@4jtI?@?8#Fn!4`z6r$0txZs$ZBtuPaR|tB-fZ=O>yc6Aax()IQKGRYzJvq?O zM7X&^s}q%uQ6=Srn#Yd>GS%QkY&Tnvev%{RRNjlI(?p{oCFcqXHC%cUaKh-1Mv^G6 z*XAG^Ab-8($8Lgh-Kgi8?p)Y!6z$mpH~iS3B5o&!PB!C+N>X0pR(p9Z8WXP}GcCK! zWX4|Ww6x-gPV?InGDP@d8}C#Yp!4;to~a*Ox(x%(0QlFX!EU>uTKp`%Fe*O{nJIv? z%jK|I@xi!`fm(Ggvyut0V;2c)-Wl}v(Gs{q`zZ18mjz*L_p}CFq{&jXx+-o!QPDP z)DzOMdDHjYXGawm<{~oK9>sB8^I?-X{bZ&SVt){0)8F1`6fKy`KJ^^Ex<`J+!K$RExbdnI!xHxA)si`DX3UaT5 z41(4u-jt3+jd?GvD=0*V%QVxVZ{}BzYI+LM^K&#NFxW)d(2-E#D#s^rQI&jQHJ1(^ zY1dGIv85MUjWi(+NCgdQDfi6pF%O0~__veo0u1|Q`=vEi7bLYOX>#mEzW+x-1o&8& zPZ7{YpSDki!rITVm5U01pWR(&d8E+7iIHj|Vqiw2%4Z-iD7`Q-Kk;$@J*KX3w1gR6 zC8ZXB;oV(}7(Y37X#x+E0yorz#D*FUJgi`9nj;2fI>&m><#-)zw3C3evtGM7r`UlB=| zh-- ztjo|DwP)XUZG3a7vcF-NZ6a@)r15QFILNR{$c1?SO^^i7Pd8(a)|)%q6QTX@1W~k1 zoNXUE{mr>T>I|Y;gq#x7%T0&OW;5BKi!P|p*K^sPag9mh;i5ExIGk)x7E-p2d8~A_ zaH-!7D%2^qJd0Y-Tm=Uxta}@}g|4hpVuR!;+CncTd2~8!H){AVQM(W4JtmRnT5bgX z-P{%LP9+ms$XqR$m|Dy#zk>DZ3=C`Oy(-=qRyZBj!idXs^e_kC7~#EDSKb|Rhnnso zForxBxt?KyyhxcC>!Q7?S`E4hUKScTg^1NnwR7+Zu(5%8u;>9Gfy)^_@K6BQ(-_KtJ!+9iDfs0txoL&w!?F3mi$+kOh+U!i% z@SK^yS_=FYED_RVf?^;w-%W`PLkI-*Xf#Q&m$CI=kc6M)QDW`U(Y28={{S{`1Sf=D z)Wiq2N3G;nN#k|u1pfh?eDA$3tH|?;Lw;(M%^$5W+xl29qG(;UFIR7osAxOa%+foa zLadklB;L%t!YM?bOXZ;CTiBiwcxu8G0GqY(7o;DHH#!Ni0D$FV0HIV}2G~A$Itdo*bS6;JuPHpy$aH&u@ceNv7ah4O4 zNwW@;OskXUqw-vSEhY`jsFoGm;&cAzB33L3)Pc^#QyR2UezCl20GD>PQr+rX@&XyBC4+AHpqI5$u?499|T@ zbj(15dckys?T0m{5pLXa)6l4PO?gC~MH`BIIe*8W668FYB7pkkW;q9fm~!0F?c$*XKwPUe#*QComotGmXY~H@Q4RM5Rbv!_(n`#PM(xB4 z+e30aYh)X2eCsq#GnB$mkf~R^VIV+(sX;~O$@9N zfT%&`y1t7Me^iaXs)Pl9OoouSGBF}%nDO1vy2E}3UnRzupk*#stRt#+G>eJSsM1lS zWhaba-dXu@d}RyO4cvLNc^S0Y>~yG<{r8pEx(%2-*fY#nck^C9ep;(G`U^Jz*ArPFSLqMd|i6vR|3LF`q9N!%A%qmqf4 z%R@0=15M{SlrxgvF!;=7bZ@UJRZ)FWU8SV=7}pSYwq}NDx1x$lS+uq{#Vl_!CR9b) z!+e`Cp5AYRUt6E#hvJM{5|gICP7J5ho-;wQJebFx_@u1Xy|TA(R?ddS(TZfqFLYto zg!dXuYBVCr8cbs~WgtZi9aBT3L}`s3@YdEw4X|I(9dC%wCx%Ti--ex|kl-2|7lUwX z!0Q2X7@#FA{rrD6nyXO`$IY+}2)wZHRV)=_A7b~Z9i8|=b24hB^%r>k)eu;O;(2#J zzAjZzJGWIrv^`V(Pfyotw&)l4i`+q25uD3tybWkG;lEv#L~oQZ#P%|~Tr2U1mupy* z&~bm&Z=biSZ^gU1w0lE?C9v7VYP`05@@Wt_R0&(UXZ(rD|JmX@S=JDVqsW-%V{i=q`eX*9k9^E07wb`!Rwz zG4ktIqkD~DHO3<81f}EXH!gL}Q7c_qv~|_;df5fk&rm4iuA@XQ;Gz^yKS0%pNr6^Q z6{o@AwMc@KXc#f-JiQOjic&3EtYOvpp26*g%~* zwn9wYka~;dt~#-Ld*mby{5taT6`sjdq=65&Kz91y?X+CdX@9215KY_-D$tQJy*G$_ zi_8#IZRGn%W?MBI4rYX;#SS&P=w`Pr3P|X9X-dn&E{1#rO+5kFiHm z7Wv!!SH*-PH~ClOj<(e%lIqUL3T6EVmI?0_H7nOpMG!sV+?)(e+zig`Sdi(o33cu> zuLk9CWj}#F{|z)V+v^jX<8bH}xi&q{g0xx(+-2BNaCzv{EB!UxB2$-z44$wTouPq{ z)b2V0k&HHuV{~BEvJRb5q&6E(6d$O&Xy0i6q#>;2A$e%)i%pNc*lCn5t`mE73!O-` z>+8xz5an6r)HBOg0`wwbh1za_vp&v?!HU?1R0be!O5bWnMjc=0E1nRQuLgG>{1ug{ zs2di}{tIN`j2A{v!j(T2-%kH2<MsBq;c7T_n9HeIDydrk~V zknbE?7|P(mwW=kiqj0CX&Gp}_{Nk!aQhBz0C9FrfT|h}*i}y2uv(GOA%6I#D$AzdR@XwLNbKmmo+(DgVlzYsF-oL4hd!v6E*)X2BXQbZ*9^ydXUnWcQkIEwa{`(YE&-^Ry zlXb8`6iUo3yDU`+Kv{5F}}4SlX?oc~fD#mytdpv;2}d zRLwjM2`k(vz7Jv<*dtJf6=-#rL{&KpfS8vtqcE18m)_sUv(8}`6gJ+v3@h4Vy$o%3 z{I2;Xqu1Chmhkj_Uoh>6=YyawVwOAM*I+A0mydtTasTH#^ZzEupr{G5de}n!mm@YT z97_%VFTyQ~pEz3ihwHiCR)f~t5ed%byEN1QS$C^1yubM&}C%0D5z(#4%qSx}@>}p(!oRmIp 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 J^WXdn|JkJFGui+E literal 189796 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

~+%bJNb0?x*y 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

t+B^bF#Ht5G# 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

MZ~OaVzy-0ssJ3RSw^*FN)elDw!%W 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

A6|(q4R}Dc$@Y&`8uZ> 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

ZW}XXgEiTIr>zTyN4eYhMtS|Lrz3f zKh}TUJ}T*Bhh928M

D{>qyTmHS2hsy2H60M9W-5Voh) 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 WZ%Q-;ofBCoMg&BOByzvtKmXYq#P+=a diff --git a/resources/images/tutorial/screenshot_cert_android_de.png b/resources/images/tutorial/screenshot_cert_android_de.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a66a5cda24a2960c4562181f40cc765ea8ddf3 GIT binary patch literal 46932 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 Hzl{2C-1%F< diff --git a/resources/images/tutorial/screenshot_cert_en.png b/resources/images/tutorial/screenshot_cert_en.png deleted file mode 100644 index 06d6687a05d754385fa098fc51265f2aa4cb0bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43715 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 diff --git a/resources/images/tutorial/screenshot_cert_ios_de.png b/resources/images/tutorial/screenshot_cert_ios_de.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac642d428fa8db1ad7ac96607db202c269e0200 GIT binary patch literal 45733 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 dQ9eHV3bRcH~A+br?5^u5P0MvunR_m)cJ`>J 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 E0(hgzCIA2c literal 0 HcmV?d00001 diff --git a/resources/images/tutorial/screenshot_cert_ios_en.png b/resources/images/tutorial/screenshot_cert_ios_en.png new file mode 100644 index 0000000000000000000000000000000000000000..597ee9d1456af1aa278287d4c6de5a4eb4d11492 GIT binary patch literal 43821 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 Z=b$$~=~`!Lcb+>t)ReRotK=<${ug%zwt)Zu literal 0 HcmV?d00001 diff --git a/resources/images/tutorial/screenshot_choose_reader_de.png b/resources/images/tutorial/screenshot_choose_reader_android_de.png similarity index 100% rename from resources/images/tutorial/screenshot_choose_reader_de.png rename to resources/images/tutorial/screenshot_choose_reader_android_de.png diff --git a/resources/images/tutorial/screenshot_choose_reader_en.png b/resources/images/tutorial/screenshot_choose_reader_android_en.png similarity index 100% rename from resources/images/tutorial/screenshot_choose_reader_en.png rename to resources/images/tutorial/screenshot_choose_reader_android_en.png diff --git a/resources/images/tutorial/screenshot_choose_reader_ios_de.png b/resources/images/tutorial/screenshot_choose_reader_ios_de.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef7580f04784c41d1bd696ae7df5c2869427a94 GIT binary patch literal 25933 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 HMa2IB4DMBL literal 0 HcmV?d00001 diff --git a/resources/images/tutorial/screenshot_menu_providerlist_de.png b/resources/images/tutorial/screenshot_menu_providerlist_android_de.png similarity index 100% rename from resources/images/tutorial/screenshot_menu_providerlist_de.png rename to resources/images/tutorial/screenshot_menu_providerlist_android_de.png diff --git a/resources/images/tutorial/screenshot_menu_providerlist_en.png b/resources/images/tutorial/screenshot_menu_providerlist_android_en.png similarity index 100% rename from resources/images/tutorial/screenshot_menu_providerlist_en.png rename to resources/images/tutorial/screenshot_menu_providerlist_android_en.png diff --git a/resources/images/tutorial/screenshot_pin_management_menu_de.png b/resources/images/tutorial/screenshot_pin_management_menu_android_de.png similarity index 100% rename from resources/images/tutorial/screenshot_pin_management_menu_de.png rename to resources/images/tutorial/screenshot_pin_management_menu_android_de.png diff --git a/resources/images/tutorial/screenshot_pin_management_menu_en.png b/resources/images/tutorial/screenshot_pin_management_menu_android_en.png similarity index 100% rename from resources/images/tutorial/screenshot_pin_management_menu_en.png rename to resources/images/tutorial/screenshot_pin_management_menu_android_en.png diff --git a/resources/images/tutorial/screenshot_pin_management_menu_ios_de.png b/resources/images/tutorial/screenshot_pin_management_menu_ios_de.png new file mode 100755 index 0000000000000000000000000000000000000000..16cf46eea1af165ecb87fbb235769f553f41fbc6 GIT binary patch literal 252251 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�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 ZEkPf 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 literal 0 HcmV?d00001 diff --git a/resources/images/tutorial/screenshot_pin_management_menu_ios_en.png b/resources/images/tutorial/screenshot_pin_management_menu_ios_en.png new file mode 100755 index 0000000000000000000000000000000000000000..b78ef3d7ae1e562877c8a97e86dcbf77e1e7289e GIT binary patch literal 196227 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

    Yu}&?=AoO@%b@iu&8@8tt#}V?n$Qe>#(gQ zJtf>16lT*J7NNcR+IoHLEgC*r!nwXT3FP2Lc?8aq{haV38A>j+fyI; z@X$!_o_Dx`r71kjlyD|Hw)Z(4SKr#r26t&|5J^<%+Wo%qLEavZfErm?H5sb#;~jz~ z>)AKaqAwHM_Z_aLT@j>bsXOIEhaJXf(Yl!ALGYTwj43dnM0d=L;+Xy@&bc||K^Tt@ zdWB)wRMm*>ha1hUmIsO-7G&<;sEJ?QWAP`{;n~}ib?x^&oi?nRkJVY^{Be1>+Id3c zAI5{-m>@8IR6&`nq7PtyCzHaim(R{huo5-L4<~3VP|DBLH`SUZBQ%@wxEJ+$;{1}X z{ANPVmmuCfW@FQajd)HY5by6sVYIH}DWV?Z=5^MSnJN!8$NDop*@{b$(x$YaE>Ho} zZI6d5WA%SV%q?6IFaT%y{OU-p-L4gpEpN`12Dx^Qt?-C_frl_Z zy~u|xGz;1~JhSvw(yRK3<_e}K!WNsASCDYMX1OVRs8!H{ZuaL#?tf>ReE-ksaI&o} z2TCkoP1ZBXK?TIy39eEerpCP(!qs|22F9ZgL@*6RQb8{z-FHT%1=*6p*?pNp<{d|$ znEh7eM2)C!i`^JoYP7cCR_QpD;{?7^n3%p}Ir*YC*OOIaWY$vN z{nQkml5Ep~=ONOop#l2$cdI$Ao(-a-?cew6&@3-|UUQI_6l1_8&+#{EDJDRy zY9*hWzQ1<_Uxs4mjm3riZqOs9Wx-q)oo}gPpF#hY&-mPIQ7hapzY8B_L@xntEu+jO zBS1W+_Mj8B1{Nha_0odOgq;sd6JrbPEar9(@}+UT8Ssi=xc9rFDfd1*OU-{l0{a%) z4B-dq?VZ39L8P`9qQ_h$6eU*mWxKXt?e550{w_$$sqr1)>1K=A8!`k(i4(&m)I(06 zPGv~-ecA@M*owg7M5l;<@0A#;M+p|P1THu**0Ci5RwjZWApKENSe8j(j8$Cmc{DEb z-LsgYJYSOonEq73BeG zp2B3F?42lzjZw?m4qZ2thz=NmicN|Gy&2-s+X73)L5q85W;Z>#Vy~Wjb<|pxy`Tm% z1M{}66c>FY)=pi7^OJ&y=Q$m`H|j|=aE)|mt|vbW+)zE%VpyB8HgoLZG+Qo%Y~^F^ zj!M}fLIc|~o<|A^e*yhi*?D==s7Iw#)KNWb302w0 zT-E}B_q*uU0n(aRXN#;&*k1FyO!d}OwVcaLq3=Fzwk$z?{hPXZ9hX@?prE zu>`Z}z=D7*jR;*86_at6n%pZ*pu55&k7JM7_ZtuC)^JWL-;tzAdHh-{wULbQhGN1! zhd0sC$4~cAs18>E5W10%^%hyA&wM?f8&|@7FtI2ODkxN#EzN`2umu;te)|=JP{#e# zWD(wyu1a|v3B;`L(#ZAcXRU|*@pbKkDO5a4r5q%G{rnPWXS}u(oMn?&xVdHdHXj0s zS7k0V&4PX|S|_y~FW9U}VF^n3Ay44bv)1BIZ=<&xPEkJhNC)Hxy~p{(@1p-=3JZmP z0U)C25|2hH!v{aK1yvgzP~#iQ^^Xqw+YVI>%!j%(K648T5WT82tjpZ|&^n%{7`>dF zY5zc@DCD1Tda4~KWa5wHl}&!0lCjZCG?LD*Nk|&g-C+gg5sQCWwc}hHAMGo%^X$w2 zo>T2R(>(-nNW9wTcqk)u(S65s^qPLr#%(erP;|-+!lQG5YHIkv3xt%8866EslcL3p zmmN?)FEm!w%WoV>Vh}TszXFTh;nVM281&x=3wi9NDVOtW7jLH5Uhp$hw2UcR{7cqBTRyjwpvZ)$-KiK?(BQ<}%L4jQl1qOnwyGPo zr{Ln2ZtVHf_q~Px^lS>2F^ZqEUikCRjUh4VUWQ!IgdxmK@ms13CGvL*XI^77=LyyO z&G{N5@-qj}1~kQAv;;db7Nw_0Du4&u$b7-#cR8_qPmr$TGJF?A8=LP>b2|B1M46UZ zu&;+ugNO1w&+(Ve^AS(={<;@?xe#68za^cPIb|hd8cC!n>wUERjZ$I#_8~6R4pxmR zFF0leN_zAQ6)6|{0lNajixfv<*g%7dWMj}#cw{eU>)^84*iw607j0trOz&|$$3b`M z_K?)h*C!kUd^z-eoIGh5V7!A(zM9G@EByZ0VMbu$lC_cV z=@G$>-)QxzKD^wmiJrRPzUfIN*=-a~^8qK(<%%9aiFo{gdpCmi+sswMYfpPCtsk<9il!MV%EfbT&)+zX51&{P@#7fo7mAF$| zZ|&T4k7GY=kGZP+@RgbGz8X~E8MC@i9?kVxSfd4Hgl=mv#Zl7AV9oGzP1-tS91~9O zt(P1@tBNwB4NQ2(;p&GDbJmUAlnIHDE7O*$3)QNvn4+LHEM3jsd7p;j&%@LM!l{xM z!dwGW1dEK<;qimz`moymw|u5jXKFrb-_(*WLl;s*DfjZ7V+*Fo!;zQYolH< zOa<6!Y%tY7NIQLpz(2A~do(4H)@x-LaH|??(^@aS$X)n&ZAUNsi5rfuq8L+tpJNQQ z;aq4|$%i%F4__jXI$Lv4@>%=s`bsfpNYz)&0aC$3fOwl$Id3yL@m>R&4q9d?(wTiq zWo(f^l0D(d-lwYPhK;MHFx8?)t8Doyu~xt6(Ca_NPs+VElX*HWc}Fu~#XB~JZ&jcP z4(|>&E2IgpUJDxG)~@Z8!K#Cz1HnBqL^C0v-!}WZ`gOgI$CDID2b*}e8yfYX24xnD z9lWFa>p1sLWsMYAQwrlCbLS1}Q(Ov*@JTz|O-`HDGpXJvVFO9ve}|*F*O_nd&5y5T zQ*~h}lP}Y+_0u*Xt=BIvQ=?WXE1eRobU57|ZO@#=&0VPS!Y;vFaoDuDr5eodtylos zO`xzW{plN*OYZX;WUgm__X(4_;m7v_wSnjJ#|F_q`sX%lWwP^SOBs@{Ha-eIZG1{O z=GPmAz4N$dH1{K$U4DNQB{s0IAj04=IlJYV5Z2!|NwoutiRc<{_X}rtZBR?R<(-ek zp+vVuNaKmzH47}3faPyLaL0JcQuBm!e27Bc%m}?Ub@Dfxb-#oIEnco-$=v#;v)DO8 z;{0?Kv~ZaZHY5kqocZwWGVN|gD6^PGd*fkqw&l3P2;@UFkTag+u8eU!F`329(dK^| zx3JC}dq)Sgq?%jQhLF0ZOeC9BtW9;ra}}d)Pk1=hjNOWe;!X~&vq57xa6BFt)%x_>urgJIqB39MAnw(lCYPB`o$uRaSbB3 z3F3;RK^mz?YLD^?O@&8zwc_;b8#WUP`3)AASaq(04D5R+S^+C01wQBz$j~pTj! z)(5C!OLev}Tk^Ze+(ZhKKqoz0Rki?UKcjlnR-~Q#)bxK694?l@LDnJI$n!I^3u9w( zWl2N6c!#u(9QPDg?M)jJig&~MrYa9|wUzCm^{xXiKandMY3+JG*FWf--;;u0U6u=rUWIu@qd3_X#*b|N02cUl?i zCr=2D&51wiko$_17v{D$kO%Ezzd$8}x#;hoo#nyhYv-BHWe(;e9u_8T`tK2H+B7_# z=Il@;AN~T%e}JWxc#l6bzWYSm61soMo^`vji@T}hd|$?2Rl?V9dp272!oFHO+rhS~ zou9Xb1pg&sFMw7@L?DY!^Bfshcb1B%nRQL{IS6mPTXEN=&99Aung_07l~T30H{X%j zOx)$Pn6~^P{_+qx8s`qozPl%;&?der=N*StO(i*XtSz)vOuLu)poq}%EYx|fQ zv=rNX@u+X#NOHn1fO(tDG^|JHP#&K`y|liPC2&(n-xd;u)tdKA`{}-E*Y333zGaBh zZvOjH!bn^9W^p7h_Mrn2#K?7oA~$D)&?Jwh@?+Kf_))OdA8@35QbiaCn%I3#q^|@# zm8+P1weFa4Sq#ShZ((m|AAyewx%WtlzQdh%>xD*wb&kON7A={LOuvWRJpKtqvBgcl z00_T0eS&uzfdHWKbJReKn?FogWo$7~*F~#pExQ_bUjEqe?_B^GEHkAn-5H)rIMYb4 z2*IUad89@4r`mlmbjx|=s57E>^?Fvr{Y88XJVxV)P%C!f?W+m&A5YP59Nx3=zH9c& zXqwZ9D6c$&Zs|yOlBC+Rz`iq;H0zWrNJOFT+Wwu30Ak+4HF*GIIlJ%84+v`I<6(IG z8|8s8V|#mWo!y#Tbx>cQ!LW|Qnz;)xYAhCnhqpcUCr5gC0`CENwObl}>@09|woiig zX*$tk;xKL6ia-EZd6iyZf` zQR9*W{h3ow$!bxNxAKQJRS!Xz0 zaLNrynmgZST24kdE3*>hz+3L{2OEisCEE)XAys)(dQ=tQ4lj(-@U)d#NJ>gP2A{Tl3bD zai_C`A!m}al#^srJWIP`@6AN%05%Rpg6fa&j1!TiCHUf)g+7)?oZGNb8ZGkucv=`p!r8@*Ch~ff< z%46y!x=VjOig*ix(w3OJi(?LQa$lKQwH-93S zC;e&3ogm|&%^vU;sT&SGU(W4$2if0E9+Fn3i&v+UU0Numl`lu`(}^O0r^~WcIph-}v?v~8Q5`dvO|WyOyF^VRbriShM6D-syeTM*j`3=q8Es#N|5;=nn+7gt zTdmu#ul&%$sf421qRe)bzs59B0J7v&8ObK(z&eC+C9;KjrVzIGyLof6Clh{iuZfx{ zPFhL_q7c+OWQi7HiRZ8SzHSqzB9fUyL!H*ib!4F104K*>LIE{ZOmhTZIP}#CWtQnU z*kfA0$c9XmRxJ*5ax!A@>l?V*w-4UqT|(<}j;FZ%l!U4Jp;AeD_oy;Oxl1dhpfdo~ zLJBaA+=kB+{@@^EiT1lhE4jG1&wma^?W^Cbr@H@ilrbs4g8S#WL0GrUa_ba1+J0`L zZN|d=U{(Eh2c~iFOuAWeE37AsX^j?9?AQlH9VxNvj}US|qq{N72}SYkc?+r)y{!TV zrjN5zC6_;KFZ}w^t5T4N7J|!(?Nr#bfYmh?7rp&tErQcVR*z@)SUn(~?}lHM12)Bo zs}32Pgx~hAl==LiF*yKYk!*Heso2op+%c-5UpjXL928Vi_m6#CtDLHH5?CrQTJxkV zLicbi#tcqdLAS|vb+;2(0IDs%NfMYNsk}3?l1T+Z1A_^$HI8}aYyqArCFvWNpPWf| z^%aLu8VjgJK2?i8T+^G@;WaI=7CrogjVE2tT zjN9d9=Al+V+6Vr7e;V)ZWj4DZ(MN)>Hri#7(#03Q-Af0uFVTqthp`8xZ|A#GgFeg0 zX#oUVlQT~{Gl*Hbz1B1BkbsJrli;SRK#JZ?I=A?@Lf0s=w)eXs-K=3@T(ghIqVIY0 z!wLCsEcWD$wVb(IM&kwDl4&5NcFPOTCv%K7=?wm)p8W;6VDLS=#Y|2az3#}S2<(&Z zOkL@0lh!syi`0dcurtyH`cDU@lWg&Q&AYQUr8F|>RBq<#QOln;!L-mKHv{!{@XzNn zu_rfzvH}DJXYJibK3Wo(1aXiQ>Fk4boUm-$#(L{CVPFCyzkP>Vro0BmywY9L2DX>- zB+U`j1n5kc86b!or`;l?!H+xNs9mx0nJlEs4T=TdP8)D4^?YFcRgOdsOE<>csdRUI_omxQqKnLX8!M`x9v2VC zmq<=szJcc%{3sJAWv7}lrrt>IL5>ij-km}o0q|8rSzVreU5JqAHR1pR_dB0B1m`G+ z)mp+~_S^;UV>??-V9ly!4cJD$4?@V};rLrs&Y@wqc|FEp^Z_Ds6Jfgh(t>!1G=ZDe zWj%y*$~Y9x$g>>UvwZkeF!y}+lYG`X8>HHTshJKF2|77MBw>GsiAXqK2Z@-ss+c=( zchXYp<*q_xS6xrlv?_wGR&iIM32Eq&F{bz!Xqe_w^M6S77Z$RlE`jq|p+P`3lE4w5 zwmeCn@Nt_|ig#5ag+z)7NU0XEk+0doY-MzgZA~be8W=5CC)&&FvHU%E`YTvtM3?As zV^RjPXc?~H{h2_?pPHC{`IAep;LnasZmFZ<$I)G16uK4{eg1d|Ar%d8G8s|mbSdFM zMsl%e*wJ!0FEe7z+b-UD8m(>bH8^$k2DI1wX}GopX(OV2ExI?uUGCgr!d^;YLD{p6 zf@!!joX|al!!?Yhm3@hvFC5WapyTp_4;XbY39W?O4%|CQ=pyQF3fwN2EnL-;%U?#z z46NpZoi{-?&el`6cHw;74ZjOr5RI#*+LE-z|M2wlxM*#{b<2c^`Q1W0dH8cH%j69A zf)KQJEqoc;P-xOI+Y=1bR7H5PH0!x7RF8D>PI?_K5eJ+gr*@@@c67W*snr9u_A;j! zvU|Yhtebi}sxeEShRuROdu%@ydxPV>KyvG5wJ$$LAi{u3n&LmJfq7F-7uk;Ez8x=) z^FxF|RplU3WGJ$%26(p6AjM5!Moo@)*)|d#r7sk8Di1ApkAH9!u;(#abc9*pi=-x^ zFAlW$OsKj;JwLF`pkD{TXIUKWx|fkOUoky`)%yDF3u0MN7V8nV$qEkcYY=G5vW{bm z3F1(A$UASTkT8n?tp!$VN=OwQk!D++S$$GTiXY>k>R2UiD-Kd9HTVo`bjlBr@yujp zQ$kLluZOA|KYh`a$#l_lyZcB*rN{SzJtQ-~JQ>tds)`%nsXl(ER5i-5h^Z(2{`D)- z`v^REvtpJvE9O-eon={_1?HXkY7m(%7*8)Ib~(p@)g7=KeOk=jBCFA$Yp&x(8&zHx zISDoyFp{wh42P8Mp&21Ee#Bxh?JEFG6|%8+A;eWnP;FxMb>T#HhqWp_kKIqlBL7V- z|Kg4tuGYG$;qf4|)M#-e?B|mhKQBI}^X=j%f9fHsev-k=T@eg%5lsGn28b<%Z|NY0 zO1y7R!5G0B8N6-gpJlR@VDa^zzQFuyNWCGkhXg&Y5gXR^G_C2v@63_)%!Op% zxK@vjmq&ZSW>_0fy-6}*_Ri?@u;x{y*r04p5tC4D-2=pyJJJ*{Pq;(*&PW}=nx2PQ z8enYFtLeH7eQ1Mn7+YSt`|=sasJ~Zp(y0FVQ>V!Xa7NzrbIpU;lC86a?Lc*_ z*a=NOIyhCmENy7pXfz^ko!N6b-~VKcu=aznfX5hXH^ky=O!w}9`mlsLUdQh^r8}^c zb*t(~+gCW96lHK~ySqrF?&5t=h~NE5t&R|;8_S;@`K+IH6&!ncMn%({Ek$%odJUIL z9ml#E7ZcDsiyG&gPLtAJuW&nbRJeEI1lef(#BX_HqwTNt7RynD3#{O7>F!IdayoS~ z?&o`nTz%OSHVmEori!5wHeI|`IcGBc?r}B*ei8G#kd)C1&WDy4Gg86Uqv>l??)Ry_2nY;IR#pP?S5x1G1 zlFYc2ckk`~+zvtH#e>*@mO#=1ml3$yPHQse>Mf>P`>pw)@p)_G{_ggC7a50G>k#K$ zh2kVNOi`SF^|lKGxBfXfwVq>Ew>GdRUT6}r7qd@@#d8O~!fZ_XF7Cji1Wl!M$fD|B ze(c+}f0wsfV^G&Ss~98Er_IgV8)1@D?GL*$Z25+Cu%$qE0v)NtGZ|oO=7lh68lRO* zI9qqI`S{8mI6;$=xGVL~*^hok2*4LJTxG6HJYHV7f-)oh&=;MY91UQIx&llibv^>r zS_1Ogj!4m(vkr@w1}(QJa#SRyd??7|SrW#dfPOaVHqcI7mP6HVmo)$j)3Buo14Jky zm0A#SoqzhLI3h`ie{DienYT?L`Vs>+x#Bi>H(xyVVr<^<65dd%*|QmFnX?_Ge$ z86kI|!9v(&RWys(i#}Ls0*-9UxVDA=p9xLc3m7iRwXXo|QgkTeT199lG~g-8JLTbW z{YtAYV7J4GyhX?8WzU6q6l*d(a|P*^SU~(9QH*j)yYH_8s|{5R#6jA0tYA9Cajp4O zz@?Ez2_UmDC7SSFOR5VAw-&a5Vm0%}9~#T%&)XxVVkls^UmNL#R~6#k)|V|669b3{ zf9~zq#wnOi;V3os^D*YmDpX#{vuoB~Ha#t&VP!amaUW@eW)ao(6XirZgyCQ$d~L*Q za+W6y*-%wsKI_@RSt7go*vPQ8Hu{nO<74tN@mG$3(x}{TP5C%bt?VckR?kP4bp=(A zv-v#7?DMfPowVyqx~Fl6F0xbX|4Paa%?3T(@NJ2M>aj!P2uAGU28Myx=~l^+)Up4p zuE;jR+GncGXA0;0Ef>pXvChfIRr~=}t;FsmV1@fb>!C( z6PRltW1Eeo-*L40GQZ)GBm>oMGPC(Ya5&AL$9kI^)-k*uN2)*&{0uRM| zXh|`_vtLH|+Pk*BpZOt1;R3=Ox(pv`bA;VSvOa%*bXEe>FrNrpM+NQw>tCrd0E@=; zp0D}8kKmePMU{~Y4WX)DpF~dXa|3Ox9$K`_qoWSu<(e6XFXiOO-{pPG;UMq}n${MH{?@O_nm`CiidkZ+_si?E0UB#8iU7+lG~~o}ro^sIt+p$z#xAU}a)? z)ghj_azH!!iekWHoX64gHG%e8QxiZsJ$$+Kw2N~%j%r#j!AcH%f*KV@+ zWiVB!SI#5^mo=_`?M2D5>3MEa3G-%Yf+I7mw01>xbQ_n*1I%slm|g#K%!BI_qtpD> zjXyH}DfU7giu*~t{5q`@U9!M+p(KJJ7gLp^fXK~ovQm1eE)R{OKcnC>eXsu}c3%R8 z`mhI``!36tcDSzMO^^#f0S*+jR)whS?xVKqfDMn7lV|J?t8iYdCb-^EcnowUcpaZu z1@b}H!KVI@P`c8FC5BND+hR<7wbgRHvq;Tt@2(*ix?`M&AmLjcl)k7nn`YuPsNVL5|9)t6M2(1pNM|YF04-Q zY`K!uKDiEp<6h~X?YHujF>F;XyqD&u6OfBq4STE`49nmxnnpik_lWQTHNKtj=w<8M zCm_9rDF#GxqWq-cFHoI`)edyyP2pJA-U&q4 z3Kufkm6U{q5cHZ0r8b^sYMBiRLc5b$&ueI$L@xt!I4SQrs~)evs_nf498jK0Cf4|? zxOlHAmU9wxYH-I`&n8x@&V3g_o5ZLk9Noue2)v7z~h2& zQV833g&0X#BNSDK5Fx(bn`@{#)_6dfLvoCDofbbn!p>41_%X>0ZuywRZZD!uPJg`d z2xywPG=rx#{8%-3X18}ag{m_FC^)SL05B)}N9P7})p;W39T(HIJ8?R-xP7c1TPx@q zoY4KaVJ+px7GC}F5}re5$^serzh>>jms_%WRyX-4FmAQhhrUtw5v}l) zb@daov$W*rRoZF~!q}k=V2Z}~a|vh1q`I@=j5F!1>wD+)P<+l0u7=VpLq30R5cpsQ zSf$F<)^{jeE-R(}h^Q1-vwA%+)2N!VPQq*FDm@%pGt$O!*sNrta(S7f*cY5+PhF`h zl&4TDtznP;wt57o4poe}g;s;O?*T4*>*nf$=fu^P#ybh88v6~kj8+W-l&hg1XUy5G z>s>`uZHh$H=yochw0b^145QxAFndrN2R96*^ zxp0vbX1rUq>09@{dSzUt<++Dh5zbsiM}Um#{Siy>RWFU}+fp+EI?li9?E{EjYrcdT z1!X7$o|JoC0b8#6<&2N4qfj|2UV-S!MR$=92#n4-5@xbjR zk?~6S45-<|S>J%L=Z=Jx_k6yQ^Jtu~HqIIMw(Mst>ufmnVdMK8hV#5YwK0Ec`aiWZ zL|b-(*u-Csy579dA(U z`Rb-Fn~bR<544C4tiV@&Et6$|XeqMAHk=(jeRIHrOIdOB>OiCJ#=CmYB5uU6*pR;I zu78!91`sWF;y|4}!Bh7)m}l$mPDeC8IO7jCzZEl6_g+U0AKhO|Ba!+&S|kA3iw9U| zm^f9x?Lp4DCi~fHA}fXZH10Bc*i?DIpEekFElp^xwD3Go{_8pD!FK*@MQR>?$doJW zmM=wN+8vy#x7qMfIA&t!^Y!M*sjJuBhdUCKD<^9Y$Ovx?bm>#zHU#t000xvLnY8nc zc^y-$U7FWmSx9Jk27a1p?dJIer&@G=GjYUIf;E6gy=qDC%~7DMd?$ky%LeptJ%Kkiuq&}-7v+bg}-*28WD~t zF*M&W*+u9P9mY>~T}`_4bL)kkchpviM1_H?PsYvvE))vf?2$#9C!=ulHqq2V()1Oh z-iV?cR`Y&3Hx>@ktapVu5SiTK4!>1v)TgMz@o%q2b-hl*M2XnDo(Oa2)|}&^rG$#b z+N5jIK-2y%9fy^w``EZvDa{$QatTG<0x4iUT5#0H@9BseH|9iW;v3+pp(j!3;}^FJ zc{(>s?9DKDl*ahwx&hPf4NCupfnIRBOP*(9s7IJYYR-(<>82UauSbn=H21JC?|v8h zV8li+eSP^q0ZR=+;d)9Vxlx!%2PtIjmpn93V;?am;cE`CgGn%!dQFKzpGG}4y4;$qh}dBqs+6u z9_YWJ?nS5&N&4^`bUlKW?j;q{4!(am@7fM`4jUu_PT~(U5-01nFDwF-dLWS3eZtJFGNS?lY)nvaF1|hZ>j6W z4W)^hiKvuq%7}@e7B;KsUCJErS%Bz0*PW|0-q23bSb;Y!9oks0#u(h?{1`nwqUN>^ ztp#ozO=kq)Xjs5OH)j(j>Akg;i6oBYPkss-$gTyYQ=wD3G2ww5Hz+}V7NfsM{vY<< zGAydD?;EzT08tT;MvxYemPV0~?k?#b>1M0-_gU2 z%9G^KH-mgiH&OL&5}IoQ?#-WdB)c572)K7`D5T}$UQXW+GWQ6~`Hm{w8pvE~-yTne z%fjc4U9Tx|68Kty^+sId~WQ3u=Z*{kwohW4bV%^>SsXw z&9pYZao%k)hln=aDui9?tga7W`o?JlaF3zp^O;hJCS%PsavN~s#j~S63FkJ?or#cO zf(`G%%akudPd+Ap4Hqme*AuHa-?Kr5cdE>arWc!!49BmbTG!}Tsu$k44p4gAzq%J2 zzMz!l$tjUZBO?F1ZuLWQVE6$%g5?rs!Kb%tIC7lJyJ7pa=D`e-J@B*SQb|+^r9$3S z9YF)b=s4hQzi~N_{-nXlc^Bj^Xe~+wP-~jw(#pwUwebXngekN|xJ-CSio6Z^K_il= zi1NcK8;%eUX26e1(;U#Lr@cH+?20eq+C0Kw>+*E1`y&j`4LusuWxG9=>1@;n{Y?sbef$4 zXgQ~9c$&ZTmJqR_U#DCK8t3@-nsQd!mviD?@YCIW9n47=79h=6`&x?hLbob_CUCO^ zL!0yFKhZiYy2;`dY`M7RwMb+LxPhVsPd9PkI*&;Im1bGW7u*D;A=i|Q8|XQX>iApE zn)v{3R?q{_@YJ_C2dFF8UK+Lq=lCFPkA4WOrMPyF7^A=MD{;>OHC(1vJKC?Ke`KTX zXa#Pz&`(UWaaD0!Uv&Il@kO211;7<#=f`OIvJyR3MwJ$H|B!6RiNomnG>YUz0bZ;UpPipL;O3cbEu9)8qE5BLmwgP*=!z*(wj;^BTVu^MV4A+x7dlaXI_WMfB2X7;yXY$S`Gqh;+`hPpHl%t&~-&;aQJ&6}bwGuJ&Hymtll9ngHGjABMK7rXH%w}4UGR{~`P%RwV7pkbW9K6tQzO-s z>Zc6@zaHGb#EV=2FIZWgS)Sv?H(}pZpP|B5Kg$61l@EbRdNGc6a+$0zu3esM#|ms+ z?9cp6dlCKg(Qj48JLc!P7cKW694f0kRr+(gpI-9yx$vJ>w}1q7S&_*FtVrJ&W4dF~ zIq21Y+Cmg>3xsMe(rHMs$1Dl2xnad~!11Z1G?+%hnv3B8UsD?>_Ui{aTmrf#eGg%4 zy=CQJrqW|8z4BM9G~O)4y#dN!&d6TJN}zw?YM&Md03`^0$wzjv)B>WV4$4_b8*y2h zHd7LAoXBrdniJ|VlLbqMR(X&PCGm7&FRb* z5ymld(Cb32p!em*S#ukJ5_(Sor!nyB8>VxzWxS!1kJK5)?RDVw;aX&_@_u63n{kvb zM4>G;(}Z32Wb83tKPszI|Mz)Eyy$6nrb+FGi)KwxX{_*3lQAD4!BCvs>ov&jW%2GX z@+MMT^Noze7qz(8q%@&g83I;m=M8ayY@P-NR`XxZ0mwHJn@d&Gven?A%tb9ra6rJ1 z2>AVk{dM@c4-BA-%PB&|yk9#9y2@Yb&PU5FS7KZHWq=per~LI6%8%_ zrAf>K4N;{X0iEi@{8Wrb&vk5dtC zp_Z!uIzP_MSMsx_P9|#D#)_FjEmixohlx?4p>^PZ`Y&~2n|w{%UjkO+IQn-M>Ao2| zVx~sT8S!~ZU%h%P<&zNlLSVNG*@c{RU3A+|a&1d0-0&GwY1;b0p&aO)7~gqG1eEIg z)DEBHUnQgGJXl-37OZ}=V76@yMc>M6FC`L;VF*z3nx!^#g8&26k?*Pid>oWgNH03ru%EA@nQmMRynY zK~5RzB%S%kdu_jiP^Jkgwu?8@`vT$+(HiNhma&%s?`FlpTJ@&cFu88!xSP59-X}x&$#pCxkm|B^Cvt& zfl1yzW#gkizs{`N)#}*}yW<@WIa{+MUsy5~CUI+C>c?#-)%VF9saI4QN}uCet1T6r;etH8S>}Ghl48m`_ajF`g`e@92bR9xdZ}G@ zJ;o55@>+Y%eT3~~(s~5Rn{^j+p}v2hV;#81Qo-N!@)usp10a7dTUA)ksVXF$s(uh=S`*kQM+;fWbpavMHRCg?F!Cqz?Ex- zH>?Uh2A6E?JslK?bM=A?kvI4XnYu5JWED+S0qDX1r%C#P9zEKrO~K3KF%{1?EyYfb ztt$sfH+Yq;J-HFx=KuI@|ED@Uy+Kky2m4d#0Mst@j0X{a^`8#<-D`d^jtj|BwkA1i z%{_H>dk6p;==B=wU2sDY{+Jop<+IZKkd|D3{A4tRH8nIMUb@iJMlJX8rSzTN zuh?M3-|pNfi6G!VQ6&n~J{XZ!{wGIvDi-^9IX|EIkyJg7ST$R(Kavl2>#dLrnWjlZ z73FR)rdv-sil|wg8v?-Oi2*1ESIojWUyVnGXvAoN_Jq}NwYR0GexcPn4-;+?rCeKg z?y4-cwtVPqFY2qH3;n#}d++Z3$YrWWtrz0)H{x1}RPFejjS9D&_qmoSWGw}3W ! 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 #@% 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 T7IX4nykdS0ausWG_vwEC#X6Ep literal 0 HcmV?d00001 diff --git a/resources/images/tutorial/screenshot_remoteservice_ios_de.png b/resources/images/tutorial/screenshot_remoteservice_ios_de.png new file mode 100755 index 0000000000000000000000000000000000000000..e5877978b6def68e7d2a5351acd27e8c8c914342 GIT binary patch literal 206872 zcmeFZbz58Qvo>7AOK~Vpp}4hJaVb_bIK?UM4#8<@aVr|!H58ZNl;Q*_8a%iM3GNTS zyS<-x?|tlV@ILt~$686&tSfWP%z4f^D@;XM78{cc^U`)j~rf)r|kWO7!E$qT=+=-;fdcHuwBQ&*j_=92BJI zt&^)W{0TEDJe-WEkV<Ywe_k#SFOo1gX(Gd~f; z?8|&=QY1M|F245~{TltF(ueQd-~FEUX?+;}@GQ0C;%VQM+63E$rwRF537@StZvqE$2TvmLQDlvo3RpZh=y$i7UXs2{<$m+|7e(%sD-Ayz zY4N1wN$Y{59kBqUG3>70P>Xgs@eSp@(LS+s9JOuu_zi%hGy}t*(RXL_a z4SwqNi0GC1K5y^n^`l4PkL08zG&~>gEnv9m_j)m2Ra6}aoui;Q;7iNBuG5Rq`EJ*r zWEUR?Vlz#X_Cce$A~UAt>>^xhb;u)h?Pe05 zeP3a4U~+mahkM<2e(gZQWKcPZTOTaG6W~74P^<^pSv2}8eh$+#lBSA>mw0i@Pt!bl zj4uA@3GU}d&;H9>3l$o3)a&=!|KsrAPjo&(A6Sxo{6D|+pR>Nt9?tnb+uFka-_Fu7 zea-scE=O~Shfc$EjF+9K@V^*C^EvyuKk9$6?*G31Df@74Q1){)$E*M4HpI!$|L-UN z%iaC-d`6o_OZe7xinyPRg$RXKVYBafJd3(LSh;1-~#Ctb^uKB}NDJjMCyJ?@)Wh&ZwHdUNKJpg-F2DagS((T7yAClXg zd*W}@X`s9b>N7Xq5AfpP<7Hy|pui_bwC)PE@Q1(}ZNH*cvu z%{6dq_P60)0FTseD^EJ=+6ZY>G`6t&;{3No)9-&mx;y3$ZYi{>V#(KEISffnY2MZl zvH2YBAV8-lU9kuJ>T)|pq_G38r!10*EgxgjoUb(v;-G&);_PYOR6cNiz1YTGIC-LZ zzAGVQz#cLup~CPZHsMw=mO~8@I8?wO`y5P@sSPO_^(c|x{UFK0Y+%S7)kB-Q3*jij zubI*;##h}#8We^JM&k=ga)M2B%@sm+C;J<6gmOzy^3RKU3Bgu1Gs8Dz;WQ zL7(14;*=a9E*k|?6PlB+Ca;LqrV6$~b#!@Q8#B9Q*(MNWtz`Uo#_9{ueD=%SVmkk} z5BW`m;h}CREVPC27foB&vI5?So6#4r)hngCGF7FW&+bh#>E7T)kLjEp6=9zy4obv> zC)XI!oXxe_N#+c>Nprx=R2I~4fWJKuDvtMMx)hIY@4Ji$iJV))J;2( z9a+zO{)c%TljJ1fvGcf2jWrNo~NViEJ1n$p!T$EkZwHt*1f ziLAOvzjY7S9tSw%KgWrB(F&;UP5iN_S{~kwStGul7BF{QC`?~ezIMQ|P_Rv?erOi0 z2vR_4=XN1YkYTQlzaWYbIIJWXl4}%tW?p#rJlg72=%DoAEx7}J#EDYvucTBi1DYB( zoZ>MM%Zq^}_I-g-yQV>`eM(iv7j~s@mG;MupzYw zTf`a&nOU`FRLuysl(DGD;gKw^9csaSKVb|8g`Um64Lm8%5R`tq({Q#pM? zLyG&w7EHI;1rqsg8<&%=C$q`b0;<;!P7U9lCKW+~5_V{CU0sjm4P=ZeA>(TDbrL`6 zI}5`IV`;zU@dVlTp}tBsgnnUOKM!CCkS^Lnte7@^5?p+uv^?v?@{Hz9{pWlB<>l07 zvqnApq~zS?o#t+TSLN9Ozn%1#%|UTx6q(taCCwT^Ou%D}%)Tj7TFu}Q8x{L%*<0N< zOU`f*3s}S8VyPAZO(pMs;@;dmHLU7dqGB<3XtX8@8)?r;FCn4a@4a$YUnM)MMH&Si z*){I++p)LbtchqPC)(sJ)iaOhgAW_+qrY-B>B6QN&K&_Q%m8SI4HX&UmwV;kotb?5 z#1%+5XIG;*1i9=A5IOxm1F4aD*C-+48US-C{o3Age;(hCm`b5U(gO#nN`&ckHMmaH zcmdt`wh)dy{B22Y#%`}U<3=0==K6_+u;d?PoDm_&@-CbE1{f9d9Lef$V zX1Uj*^XiS4s1O<}S%QprH=XwW4sblnZc;B*kAWoijQW@u{h>LC4HXwGmEIv5%FTEp zFv?(Qp*Y08Uh0_+8pZw}Pv_(A;ik9Z+ z9qA_A5S2juoORs)biz5#LI`6R^Qv@%f@UCUB zNxJ=*;esO@P{(kzJr+<=H3g2{)N3Zs$Gyujh9cr$?+y}Jxl#C_!o>~+^cogenn@R+ z(~5Ai)T`pA1Ow&-+P3PWc=@fl2^Im_X93oM?L8g$WrgZzNAP;Pw0$nSCb`(s6IzyR z$GIqns0*QM;Z{p!ZRDnZ9KIbEB&lEjQmG04gQq*li*LM(1?;e}iE1Bj0}=5k=ZKpr z|18^Yu?0xwwGm}E5b9m)r`$(zov4GjmH5YIdl5?h4JH}l%tXm-L!j;eb-<|f+$+=N zmy`<$xxr=t==)}EnNo%AHT7B%$*6Z@JS>k{zsi%&h`v_qKG5)+ z(x>xm_$>dHk!81d;d@jule2S;YR}pcGgUJKI`+9_O$|oJI$z+; zT~P1inHR0^*=kWVz+d+SPW4hTBvPv0iv7yNv2W32t1q3z*UrB+*O-g1?-#XPRI@Z& z^;RY{qnpGd$?4`br-k|V&zC_Fvmt_RW0j)cWg>93&0C0wbu- zLs)oJ@?|~n6N58BA?@zP+~%V!-po{250Y>;q~omLt;mXjbLN@7Kn^*(X4gQ1m}ccQH@;pw1rHxqE^Wcpp_dYfn-vDFt~(Eu1j*jMKJlXMY^3*_fG! z9JG&+GLl(+)9$uP zcd`X4G9CRCGBibeyt_Xu!Q(d62H8gwy`%5&7wiWN%2#X)Ih%cIzX!;PRiUkrQ*m4d zwk)u_cMAe6QziUoh~33BD!}n4!&I3w`^9`Vc?oKRUtW2&x6QESUb`P^8#Xku0DN6m zu`RxMTWnTLFsD^MrTAL_4st!t8hD4^k9*lKuR+!| zWWHS@M5=X`*+{K-?YFoPrp5&kQ6RS#v|wkbYU zd88!wF9%w8YF#%1w_b9zcO<5n7@@@c0RUfEWoRZ*Sy?ZkrvZ|;cZXZa+f6v*oLsGgT_YXF0g& z9oBQW>V&b3Snm-a;*SHhg3%S>>DVv{C(a~+# zly{0PEqnBc+V15+-yP05wtjJ_JPt#vEp?L(pCh^Z!8t8-qPEcb#fU?}2>CUmqJeLr83e4vtFDJluymS`eKkXrms|Wj$)LThBYKysJlkzdA;FY?j$7 zUH;qL0)?F?ov0)Km@`{&w2R<}p_cIIU?chnBhRWMx4x_CC8J&AO2MjrVKSXpL)%Ig zo}@=Co2I}C_T}e~1%9_IKEHSez$ED1F;jRJc?^kEzDP!;JYZPh!o`oiN}#FcI+jLJ)CZvz}F~8@X9@ zGN!r2`cQdkeo-WeG}+}7KJB@kZY#G{oFt|?%E1C|&OFBy#f!M5cI%V~nf5;<7j{_n zV4A#%i=OsgfwOSz*su&km*vDc$_3rEj`@Y>YO5qqOVmJ|+|pG;?(?RHFw2A}?Lc+X z)R+>503l5KNPernRZLFK`Z*IH>0ZZHDFjmEJEci*Gw--cBo2?Q*`;ahuy@FTo#; zR+*>qDUtF~ik>LC+J#3UvSDPZj{%rhj@wVFBp>g)uJGy71|Bdr6IuIzDJ_Ss`-CYUhWwFS+!8asEKL?-IL` zmKKaPP!hHB?*+08WR zs>t^e&4wv`0rkEjiQ@$Tm5~9|aiVW$6!-5+%G_LY1}AjZNm(Y58C#(nS*m^|C5A&O z(Q6o9%C);$qZM7u9o(<&A>ot(?NbG_1ot~)825KcpfzV?PA#X(o29Ixi6d7;5f?UO zC(sr;sUxV=U9OYl`brh_HAl@eUg-p7&7Md;P z(OO;x^9!C0zOCW)1 z)I6|h9w_ymjpJ(X60A0p8!-mThk8JM=ZnoMWBGN2_I^pycO5-b4FhBUdh5~EVSTZY z#Hg*7;%_;JFk~2_8dJ>W9JFFis4D!Al7k>dC>?77Y2=*^|ajY;u@_VQ@d0!3I-xz1aKikDg;mEEp?fU$F zD~+&&Q;>aR8s=Wk-eAJZ70ET4#-FouF?9dpI#op{n*BL~24 zG>e#Z-6$;}K1AApJtoz;bEwaS(U8iPzu)&h#dnuy<8@q-##Cd=?$_vG(F z46_3PDs3t4DP0=jDL$(P{hqQN9Sxop`{afh+~)Xh}W%NbkjY__XEl z3<>L^Y84gdZg|`vQwFjy!!5EUIl|^CZHVU4B?3qE^H~{CM-{1T%PD z&PJm*tGLFV&~UHbUk`Wxl0)QRF%Q6+$&_d_Z#qL);$kf5hOx#pduj%fJrn~k1>jvd8cWNHL=(kyfLG#{w12DE+`yT;)!BvD;xI-)V%l5Xj_U#MPt8j=bla(sQ2h}(PTMTt4rA+a|pQ) zm})g2{yj}y+*1Bx`uOUTD&?Y^S1E%vkeNgfu|do>WzM1fjEKYDe`vnK z|Jo3ue`q;#SNF5v>qO3lL711z9QjyEPOjSw;_BpyI=!4(+Vu6zxverx*-n$;l}(^D z{@J+P&{v`5DYxYE9=1bs&EhnLm~N z9X(JpVR61oW`l1@C%iWkJvPrnbj#xMjRTA};Fv3IQLQ6v6jWTZIMpvg6Bifds_dTY}Z@OI7)vfZS z0ApD~M1G0y7Zc7EF)NqZN@%tB0^f| zN(j&N9A0TT#4@=GfP;rseTvI)=0w`oe=Hec65Wi!7Zhv}Pl$vhYh8bvh_~yJMmmx? zn9d!-nEeGH1*#tX_iDFvRRDiI`)XKJnPFE&7Ua6z0DUc1M&SKtAqv~A3o~_t4#i13{HEKtMS8*W9#@QgUd)|2L zeUTELvDYbXPzXZZL+u`)=^_B^#f4~WQr$IHRXs)GHg5mw#vS&7w3-x`eGx~j0lLp)AJ=-(8lo1F4uNZM_o~KsM`!n zGk*fIx}@42c`9<#tQzTuT>(RF7xU6B-NiR@&YFO(F`Q%QaJ-up>QbAlZ`L~{xF3om zq!}ux@O(tZ3WE# z6L38r-(xHWK*SOc9N<&a?O z8*|XG3LXuHuZ2`}F*?sP0-6{QP*6Ax4_~Hzj5jO;xXcr^T=Sw|J$L4t!T?(Z6<6+S zU$=V1^^yL)J64Frw*Vo$wqLt>zY;_5Kc15B%eX^y?Kkl(lX01QLP$D!dl%17{R&^g zqaDW~)S~B6B52!zC$QBDc3;BlhXgzM+9^uk40FK-@-3VvrqQ)=?ViD7#_%1@@V3mj zc?es`uXxXKdfJZ-vqqgPb)lFBZRp6@%d%mo!_-;cqQy-T?G9POHsR4cqY4)IM)LE? z3e@@RQ(nKt@{jy7AtTtLp)cdQx!`8eOgOL((LZ(DlId$)g@LsC+w{gNmZ&Dem_DQ4 z-3Iw#8anOSFhOC{fHDBXd+iyZ_)T38B3(l)56KC38#FHE5V1O8H2IO_26vb>KOpIB#2oS5u$G+=Xqzl&Y+nNoV=)yH)Vy}?V(A7e=7Da8JCcP*DRcn5lq+^W3Jw`GvAeE z8115E2L=hYb6yO_Pem>6$ayW+Moc?hE@P&2$=T2ctX@3O5qi`HISL5JWWX3#zdBed zoc^uIyH!bU;n6RU3Nk7)rhA=M`PlrMZ-5b^Jfa6iL*R)RennHf;3TT)7N&W5{~Oyq zHG}-5?aKsCs_z|O0Qp{&OWQ5lP=sYOosV(~F>fo(WjY;?z22bJ?wZ{QLpsvw_yOA) zvhhmS>atf!d)MjEhOd2U4%h8EpK8yJiAo|;MthZ3;n)T!t9(bSHI3if&P}v^tC5#F zf#)LwnUz`C_g;9SZdXGDxaTQIodeFd>Cr}PT`o8tpA?g@z_l!k&WT6K{{GMMxQC=> zuZuRK3bo(uVv;~#;4chykXD>4+Bz4?eFXgpm z+G(iD#Qm2?$lDAYB6tC+qh^cWL-bphso7RQsnpwi0o;~ZZ>tn=@7_-dzFHN@Z?*i<5>FWe$#mCGV8sTas>kw+0tge@X0r7CMnK-rEQPyo7y%ir?) zRp?5XU0g}uh+LSLnYL4$>hwdC)J58LwpEoTID9lQ*5?$tLE-vII%Z#mB_wG-rqI9q z3F6A-HA3=wah6pU@oYY-uA0nn^NnHp@(_bXzW{+#p$xpfMnabd;q#K$3jzav;YER9 z*;2k4UJbCoE2$ zX=GfLvw`~7$iWTxTdhhL8A=7|K%uWt;hl_X_~zsB75YsNgkyu{ylfx*hS&H9hhp~v$qlL}afZ4J&W=JREV(Jk6 zPt&Vm0A+8T)a>T=&Kv<)|3agePVRLdtJGn(DF%T%L5g`uBiGM+udRM!&m2he%LP$+ z^C+G5x9wck&wlTp9HLA6Fbkv*TsaptsFr<^JY9;#+gOg9kdi)^Ff3>^YSv5 z4`ms^wMOno-FQeZ7Qq@(xI``rm~TcBjkdP~#<gh@}P$Q!)Nb9io)tzbbE>BFZJEOo_r%unmrJ<t4L`tR8Ax zwwx10hC}AZ(+d;L>@f|n;^?wGoPe`9uO3KVk;-%xzA^eqHcftOf?!#&fAN6(sdwL` zLn(-o>+IF}YauBWi#Vs{ajgR;?e5(9!@yKQzTfig6J#xsz2j^ z4&Jt*=}H?shk&ND^Lna+h#d*{Qav`$k97lu=H$c;Puv-CN-`Cy-oaK#kl)wea>Y)E zrflzcVj_6#ZR1-f>JsCB4N#<6kL`V@a8Y%)(krvoBCwe@z@%2(`cc}3+zzLCbPn2= z^HFhpn^n&`3XH;F0=89ft<9p0E4S%OyKhk|@sBUh=? zeA;FgHMN{aF-APVcw8tuK**&Ee^lJQT=vi#ZGuPN`EFk=r4wUO044iKxD5iN7@uD<_cU@zSM>M-iOQ4O5>20zcHQDtD^XkVF88`D(dCJ=XYq{0_>{8 zJ`%2<`sD|l(BE0L4DX4t-leW8s1XJ1OP?QqUX$K`jJfg9MBv}t{(Z!|s-RUI)b#TT z>CsIJFxh?UUUHGD&UvIjs0}3m%Uw;iSv)k$epwnEWnE}aW@gL0J#8z51aXIJm$|eJ zk(&iEjZ&}{5XKjSy3+*2EySv>1w{b!cm`#gsR=uTlyV=%RE7FEa2T!+zeA?A7_jUL zPp`S}w>s$qEVF73O2lR^MIhSWNNUeut73U)%s$l9ei1r$4-7GmQH>Z3a;%MH_6fy} z#<(`7exhCalS1cpbyv}vV4aG8|3X2KytZ`$OHUho_gM@nscM00Z8O!oT&6Rnm@W0M zT>6Wq*C*N7Ah-QpkEds%byMt>ck&K!&nOP=Wx=EC0^amprDHS2H2ParWu^*mOFxwbb48{hKtnYxI}W|lJ|(tw{7XYUk2Koi1z;NHP!w6zRbosYm}R%#^c)< zbC&XByBUdSrR~kv1VRV3?#Rz7n~Z(af>>Y{&)>DfC~HWRvbNgyQ1(wAy3$jIiD+vmlYV7OkW%NN{!EXNxjwkAqGZ-WQvDe1UFmZ4;tG0Qb*z() z(#q?+b55_@=3x&xy|IlFUdY)&_n_-|Sf?7s?gBhkfA)HK#btV{*6_?vW`y*`;_bKI z5&I?8TqLosHS~v=ZiSwGj7Z~My7jx|EB|{VYJW{w!{(r#TX0c&yIss&-rTTZQhawz zr~oquI@Je?IV#-rPU!`MHkrX1x+hmREcCQV`%5KiXXjm#E4u5u*S$vI&h)@H{@02A z0K}!(It#@uJ7p^Wid;StyGW-vKE+3d*ZE4wU&jiu-qV?91e(H@i^x}-8#Ja;(Sw~l6cuLCkV zvVvb*%fpSX!-bTM5)*BLBFsbHW)VO}@jGI?!|Z_zPX+Cw^CeeIN6KU|vz(y#kLPF0|$ z>}rsC5pzP+r0VW~$ay@@&hJ;jMs!L0(6Q_^KnidMZYu`>IFs|@I=3upF(mAzI|%bh zA{JGJm%IRbj+2=Rn=v<6rrsIp*THS@@`Ut7L(3W2Ee`y%@+*?O5iq0RMPQ4xZG>L_=P_#2=XohN4=HRdZW7x(Rw9QCqAq$%{6z+ zd>gD+O73y!#$wp|opEvYft52a%?3Tk)Mactkl@Yt2M6TXmPMpP5Q6g$N%)W6szxUp ziuBafEB2JY(fLQ-f=yJ$^Fc@29jP^Edf~XxW981A;Tv9WS)3`iC=a$8T@M6IN!e1w z6ll(K-1FYaLi93J5U~!Eo8EfF%@CAr-^rhKh1L;K(MJ!hGTHg^S4f~d?S;ZVij{(j zXsh1r3E#Q11EMvfNSgIl`Vuho_&Uwwsb-(KMcV+#nh%{|4J*?WaO2iSjSLO4-ePxF zjQZIx6>FzJ&w1$!f zpsZf+PO;S*5Yb6gq*1d9x1x|)zUQ2~X@C~7UP=;bHeUwrzR6OD?9%5(BJGpdv7U$* zMtX8-9FiD)KPwp@nPnI^zng5au$@oolU^v{uqB4S|0`o?6wh15p>q3l7>mkIVou;!opj73pP8EAv*pw7+_biI+&Nx}Q8GtL| ztsC$jReHQuz@hgA#5`2Z{SA)k_Ecj6qiMk}tmm-gDbCp5HK5HRMI-t}zTjb_X>bu| zcio#URCkRGc)!9<(_zOr}m3k*%1^}~?MeZ7quq;BG? zF{SYQ-&31clizRkPSZt9{xoi1n2`KO;CN}>f&~Q4P^1(IJk1bcC9?-Lee91Y05LBvKIw ztq$*q1qYR*UJRRD``o|ehw&Nu#U2Zc1XEkFkpY^I*N*jDa)Z#Ima-bL%rWQacNMr* zz9gAiqVKieL}P@=Bd1QX?Fv{pqpJa2;rJJhZA@=oH6O<(-fX?3_FRc^Ws>#)Q}K$U z>1J3JmcR{e5*77SdW!Zahw)5J)Kg4ak5ml8o6dSK3SzeOfnK!f4=XE7Do=BGL|8oC zBEH@XugiK1de1FNaZGvHB4}dc;qn6g=qRDX;BT?_NtcTgVcku4Dr(29S{KFhQNksHh-U+-#eopH9Xcyv{7fCoSzsv3H@1X@iny{6V`6N9*y~mzWzw zdaTmr+HFMraBQPT>~bR>NB2>9)2gHA6W-eadC|m*5z6u6uiLsLFvwx?qFH1#h7m;| z*C*_M%dG#VHvK}1{~;yE|2Os@YU6)MY{fr3l1RZt_4wa(t3MSnXqdRw$F|V^>&^Tt z#r^gSHv!|5@jveOKYw~K;ZYzLH+_`FCZ4Bc!KP(^dr zp8D4lvF`D+N&&r5V#7ZV0ez5~RQK#9%Sh7p`&jc$tQS->JQ?rtM%TTqf47`XKX#XJ6P`s}?KO}|)BmwZ zJPrjnL5}N9YRErmr3AyQ*e#Yt9e6YcF5yjB+RMp(MGM=#TKKG>g3|pE9*G9@V{;DX zDu=N{OoNrG-BItcZgbnxzTK8)G;d{-;Y|7I!P0`<+8g@WiMJUvWlj!tk|;3Rsq0i} zZ&STN9LbNlKS(+>D9?jVM~Rvg9rS(B*qu>mWi70@IujQi*{8sQA3a&n&r~3Y2wN1C zzaT2+{X-;=c~9y0PeJsv0p-r1HZEy~deon79L2#&3rYS&y)bEnf+jWxkl0O5>+E&Tb7#vJz$E2r`x_5sc2YwMi;|f0f## z%>k;~@upzR!Tb~SjfpX6iU!%dxty5)G33qh6H*q<{P2_m5|Q^y1NaSxA8Qa(ByJIi zq$BOSB!LIu=j+vwZ>%2Or;?SEW?l6H6mo8B(7Ns9Go(60GjT?_w~r$r_0c$xumowpggV#Ji#*EJ?I?REQ9J=i^M*?v(Z#dQA$R`cc`6r zWR~vAs+)99UIS0aklbg!D~6^1-O4MV5AkLmvlkb@A{7tK1TM^aHfDW0mdT5bBpZoZKa)%iYDy^`@WRu0!Z^HNfs^REY(N^eM6&RTD>6Nc59}XN#wH1O_=6hnF7UH%gm7@N~uiq6gO+n*pEZYW<6k*SBkhck?nC(t=Fkx z`%I%cVLO|SIKL>Q$uGeZpDES?bVykBE{d31kfTm%%^dAAVvXC#u~>LfYUq*=5h%nk za5v>5$;7m*A373Qw{Ziu4-@7TLxcbIKvBUjf2M4dHyoE`fkRuQ|I|&QGEemQ;G9}x z*!##y(5w^$@y>hmd`QT_f*)CL8S&g}WEGa?wa)>}$bc#wAia6GR1ZY^i+K+Qj`tA* zc}*R!y}2nIJ|TkF!5VkLcljS>N;v2}vB>A5w`&TA{2^yv=b2DviFWe5tV)GRC5s^T znvx{YbCRm?iTx&n_Nh9t-earFY@&X2PBqT#T^(TiIpy@T5Iofpn!8PMernn!O9^rD1E z;$e67E2O~bpt*ENos>nI*zYWmty}8yb>f{BWWV6?ElJGn1jTR4nCdu;tVFB(QlWiU z*1b~=hj7`609k77s1+j{BO*rkT-VO^cL>80s759F$$MUHq5(T{(VeFRO4Xfb#Rew| zg7i2Ju7xv~g6%pS3tTnIoZJO;!`_$udf%w3Ld~@%bW46aO>`OQE+i z%RKANu@6w-+~y$BcHznP?nU-<&d=;zGU@9v^`XO1-H6kbyKD6aeY6G;y7siN%}@9* zVl7m7L}y;8fd8Lip$9yn$?7z;Z#=W$*l^v=Lbd#zMeTKnd{@ZA{(IG2mwCrs?Al1t zs!Lq~ZQp~ctYdGkjNQN=6k)^4Fl$9G>m2@TT1$EP)(B` z{vr57-g9ob0q$MV zbDVjRmu8kAd?Ui~KxIu&4cA-nr32p0*SOTGcYgR*`dM`9)| zi0Jza)HYDTWF-qdB_GF-P8(OeJKpwij>=g5WqD;hK&N-$w!UK&TGaXt$G`86Ru$}G zg_pQPv092+I`~}(L8cgDm0(|}UD#keC{Z<}O*#c5y{;NWCD7Z?;pI@cNJTR!bC^2V z(VeurntUWZWTMC5y3N-(kR%``!_YPa=y!L>nI)J3Y#QL=lclU%w!0Sg>${cZ_V#26 zdGx!~iLXbvd!(@Q9`TlWYNrE_)@yRQ09d-8F0agUcLh4eD`xHM1YVK5gH}s43;Q<0 zp1Y!=&HwGl&pQ9Zu_u_!=Q8r_YQW;jDwv7Q}mUu!3j+hCIEON!!9Zk)h2Aep4 z#Or{BB5pb5M}trGK1^5{S`M`qmuh4j$$ITYet;d_4_rOWow-y*e63!@E{2ZZp4o~D z4zydr8L0jOY;MknLD9jqJlTK#uVlV28lB^ByNu`cDoTKdPTZF7M^gYu9$In-_CDXy zqWcw$VZ~(=FF8VL_fFmuFPIhDR+cqRMt;r2mLP&|Mfug<;n6gRrg?zEdj`Sn-t>0N zMz(Mj8>U!$AH4!OLKY=fKy`<8=UrT55OdQs;*WMu0yFsqSl!f z1TCamnu)z7Ukr;q^)g}umiWSVzhxy6ISg%1r7-fxNAS0E_o)*sD)0Z`M(nA|f)>+5 zVi;!6Nqt3|&xq?@qf?`|W&S?PEyZ`=_*qXjzV^Pm#ss$MdYRrBm87!grE&y1m8|Q{ z$ZyqKtRX=hj*9zu=Kgj7Yi+J=+BiTIPFq>}a^p(A%Gv9i>hcZu`~sBYu-)a=>_2-D zHUG@r=%KuC52~Z@rKP-wu#3|4^Y+v^e^)-rov72Fxg_8xi6hqitq*#a8^qU(k$=if z)SgtN|KqM8?@Rxoho=I&<+Q+HNLq-3!+fP;V&B|0nSiVzn8^2(t~;}Affdl)F$?|5 z72lraL_PgaiT@Z~G3$ZA7`F^d`cp)qqVPk46xHvqr)1a2B-ZDvQmi%|$(1L-h9zqw zi?ZoEPeov|LCi_M;)ek_2w6e&1~&~~&(vv{EzTAeQmaaSxJsc|aXnb~m2N4kMwqv` z9xobePdlYYk$dT7M-phkc?ia9Qrmf^`)tec^qXr5W6THKxp16>id}>lK=*6X8FmTv-kiyM&sNZc!MMuby zC2}2MyV0i~Us|n^8r9BHF|_>BeYA@j8zgLS#OgJ`G3qK+u3tied>MZ@TC#Ut*$of1 zMBo{aJn(}yEM-H(t|5d))R`He;L^Z9qsx)F4`P;QXl)OD;)l)+tMt!+*>-WlQi^wt zw!b zf)$6!p@Kvl)IRstjoRs$J>An)yGmlC!o^^C@HK=%1*Ka#5*FqKL zHR)sozv0CA+((e_*T3&(XpH1%duLZT_vw`2VbnvgOH_wfGo7}tN8I_TiX9J+^K}j%k1O; z)x7f1$adf({b;_W&Bdb_D;V~^rAOwi<^Jpi{mVgl;TqR9B?el(Pv|Q9Kz0oo+ zwhC+p+8I7{fQ1%p-U7Q)?gZ~iZs)1$MA-c($jF^Nll(fN2BmDBBjAnu_j;`xS=2MC z{iZ+6iZ3KR0NNABABcyKb3>%;l*%#E(~7rO3x{h3M8TZ*C5mpS1OM`SACev%yFX64 z`43oo`h+qGzVeJBui@Wk0qpdxJt|AqQkVR1eBVJFxnS*y|bS9E53kR3LJU6H+{$p zoHZ0OHnDc=>|UKc81+jZx762E#rR8?eqoh=z+$XB+rPU1VDb-Nn7^6I@DW~>!=8Vn z!Z4APu3C_p8CDNTE$KYsYE@tKR(gZY$oE!Oxv`41`f=9p^R$?NVD(pzm}i# zrYav*09p#ubCtBmu+MCi!}nGyl8Z|FYcXOHju2fvno;;$VFxG=LtuY4tG>>|QxNoZ zMo7wu|FJ2K<2TD!6mL@rQoQ{iVPCoYb{tueFRTVM>+wn);SAf{g$V%&_Z{s zshKezkM>4)7LUAKMiIu;^gu?Mb=P2?oo% zWtV@kGmR7P1Fi1LE0Weg@}~$u{gNa?S+1S+Zm3?b>)pAu-#d(5_?uqpC{C}+8$N%6 zJ9sK&OK&1e+plw8@aAIO5x&Zz;d@(J_d4OXw)EaQ@Uq;gNvE{|Vefv1l#IV7g-9}pL75Gi7Xi;;0$x=f0^R%|d6zK%*19+QVPGK|x&?7}|~6?XahpHq62 zga_@&l*Io-$h{jlAYonb)nuzN@D=)xbnlSuAEZ3>eXfN2ej~D3EM8NsFK4g zvkDVg=G_|8@{n74&D8j?@POEgFtUZ07>nORcGnsd{nh=9hP-Q3GGuy~Cn!q4^WwedKVJe)a8AycEOlo&hlO4YsN69X`ac_Zhqx8pB2K@5 zeb0FjkTn517qWxw!g}2@Y{=IwKmQ;0-ZChzG+Y-ABtU`$cY?dSYjAgWYaD_*gy8P( z?(R+mg1c+b#@+QanPm24?)<$~=Tz-~UA^S9SD#mwMMQOTI#9aRqq?nsx>z>!!a6&o zQtQX3?im|-Dy!tsrPd#uq?egZDBtd~m)B*+3#~@Ka8n{7CySx35J~*41FgW5I+zzS z5Vhccp8X)94_=wKa9Wg2>Uxa;X$v*qsll80VlB#Ah_){>^sGj82U+W547YchI@!o? zG_eobs9G&Es1@3F<&YX?G1B}Fa2L1O%Ptev7}y#0^BLgpYrTdz#){^(DzRz}zW9zz z9mW?fjqF!$$4M}!Q$8B;xowjj!T~p0HO(Dr!z+D}etS3-Z$a9*A_9o$354|Bno#%g;iR>*vd1r2ACZ^ytmjB>?y{JkMv`bTC}uVpoz&g`#Zijf=vViE1M zilYkjYsI?WvK^+8n0V8{{bTOis=ln|qI|41lOmVJ_V4-bUuti9(Jp7#7EGT^QqEAe zSY}@G5q#g|n6NJQN))}?{_dq$vWQ&|bpbJF18F)MZfVoDa#7ls$+gT&sz6t8L~7Tg z=9p_xmdg(LEALd{6=7uG(PSHDy8xOqY$tv0mZxO{Vl! z5N`6=z4JAQ$~jzXKwBvPKB3_xAGHSz_)eu%okAAE?kpA2k5XJBU%!CssKRV#4$O^a zDsU9~Q6{$)BBk8KA)8nFflfOo5mHOg7$y^&R<`Fc)A~WWe)`r{ZS_*uL7=KH^81^_ zyN8=p$s64D0j_E1X0L@4^1w_H4lG?hEk+ZI=)vhU;$&Lss#8&}(AK4_H}m_otGBBU zw92D`EF2KsJC@#@1^8QYgL1?N0q0`MZ z8FX4Szn880u}k)V&QI|v@II&IbN(#+>CyGW3Moax82aXtMo`Zw>w+Qs4kO&0NAys# zMF=^Yng&l&8S%PJz35e|z@4F+;G`+9`MO2ctG^8&(H9)X6=^_dRp`Hn_+u9;NmU5| z)F#Mg76fm_KMT5~{>{6olnx75I6C)+%bbHaMKd_yuam*2$9`2sd}--|_5tqq25b3) zi&A~6PkXfAgO_G$Cxs7z8IH8ad@65fk(nvHrNU-lF~z6?kOup^=T%0m4uEPr11*?`fzRX7bFd-;1~e-HV5cMvka9BITW zh=2a~_gim377FnS2G4)KmK`MS*2Lugqp{SBS1}+sLF#{p{NIiJzl(f)#H3w4>+J2d zIH3Pvkzc|9M7QM6DCIZdiT`AWXpoN@Y$W$raOq!nfS$~fLb4rW{x2pIBL-b0#QYr+ z{9|k%Vvt`LE2PB?_xCLRaUBU{lgEldZvJbupLgH~KeHzyy7aF&&p#dmK_EiU7h?oC z{&PM#pq2dZGXMWO&Bdq8_PdV}>zrpoPb_wa<_LpejpE`cBr&F9IW^xt)u2j!xl}XM zWQAF;COZi0@-$gK>^NICw7uLPcC9_4{+!M>hMP<7ZaJ4Aq@bQdtQ8WX#P4fR(A%L0 z9yIBnHg=?fZY&7i(h@vsn)Rd%6dNkhWV?rkepp>T$}#_~qyI?{2;v|GA;#GBpR`*b z54vdfO?c`*sVoLWE73+D-u+Ude^9AZF6iP!P-w|-9Ot*{cn%%$6N5AaVc!qV|02O8 zk!LIm5ncH|iB}9nyh1Ub9sg@7^x>e3Qbe>R0l&Pz=du3&84WTcf{A_i{_)q}KlQLc zhE=kNmePN+8X<_)ki{Wq{%a{+%+KIWcvBJ9Kgat0Vj(1u4vm4W_|K)7p@4u%EL(Y& z|JsG1XTd;>sr3uq{Zr3QfJDk5^VG>lQ70*p%lLkp;w!`Hw`ccDuLVNO zC>^syib-+tu!BlX<<9Xy^IV%qcA)Tn#~SA^Pq~X7{B>BQ?4$`L>)s#h}DEZ-` zqVw!=COxq(v>(DasSJ5Fsn}7(3gP3&+K&%MXcF+t}{KaC>aUk_=@VGKd|D8+a|GocW9DZ z@twd==rcwG^mv}v0|xg`a``5TFK63hU&735l?^IaeF0t#qg7&_6*@^Zk}-?-Ui>G2 zBr!g-QWz5IugxKR1KaBl_Rt~bZ2Qc#psYUF8>slt12^S>5_r?+Y4S6|=w0O}EqAm( zUV@tXT{z>^YIk*)2{})Dy$q5XzH|e~$P!<$rr#V$h(| z>jLSzV3pgb&aX|E9eeNK=`2n(?u=oh9oLe=!PSXnt8=XLUE`aaCtiLQb*fz5>m{pE zXEh$_0m~i%%_d|!PIubX($+36&gkCu1vtW>_2MN6OAg564-GYaC?DG<**>kGQ z8e8bq@ic_(i!1V_5RZurbV{@_g{$#hu5D{ux=du>ulS%-SEq=QI7Ml+Y9?|pIfn0c zoXh683$I*DzSi&;xeG_xwt9=w_mOEV=?`GIm_`z)S&}@D^6=*+TFZs-# z#T+N49wQDDm8g#lNJO2WS21mB=juvYY?ttqn$=@I@n#ACB%~$<5Fzy-!e9wZO9+$; zoAn%_^_(P^CbopV%@;Hq$1c{dc#F6W3b+7#_yhQ~#S<|rqBhOZ+Nd26!QYVUSsDEx zlpRGr#V<(xcm$>W9GE#)2EDO^lJLoLC<4>S7j(`sqI$DrWDoP=r)sBRSVaDR3+`Y1 zk_?ii0B%z1f z{rd(c+K)8Vg}12JS_K1AXN8o-A?c=8CD{C)GT@9i!RDni1FT6`t;XxD9zaX_Uzf+d@2Mqo@6%)f_3NK$`h(OEvt>fyU@ zzS)(*7IRomODHpuyJ-+Qi%p4_qXaPmn7~i}^{77BMqKhL`p2z*?ZER|#bm$+W45V z2@ZXK!wrsGj7xY5LFmc_pj*DB80^^ScIq|kpF5{F{H%6ObZHZYpSyDyTs>BUuY=|LTMF+oJH^vtj=v9v^kOkI9U+kEjMOo+*I~ z$FT6!bN((4Sg4um8tWR|Jzn}r!k-&(6C2r@Sww5h7Od$fIUM_0Dp_q`4)Slg`+VS_ zMyg2^Om`~;A}@R}QR)3DKAoHIz~qnYf}PoK8d0bhd!PbkHj8hR^mr9&IL^y=7p7Xf z+qr!it1ugwunvF182m`k=b^m2xoBgADP~ddRRa11en}TIy`nS2w5o|@rw^6O&3P;} zFy@^3p$?Bz?$;nLqPGXXq_%6^B7onl!s&;50!QxrlGe<|_>P8%oatRj5i+1mtt4-`2ftQ>g>Z-3rgW1UDL=!su@8S~%NV&IeqLb_ z<1qQ|^Um&?>Zzsi0sVoyh6}k>`6bCIIrpE8n0E%au9`B6dykFX7`wOko@r#Tj2}8* zu4IQ+xp(LgVEh@%Iqvn|QvyG=AI|=DSj8wF0Q>8ljU~JQ*LxV@W=fGR` zL8{{B>yJzbs>X5>yd``Eb;^8BKEJ=BjxT)jklBm8`H!l-FCG;i_*^(I>l9lJo(PR@ z@oAM=Mun+@a(kcn*FoftB-N$!!#m{N6%Jdcna9k-LrVBA&l&;I=a%3@5CX?xO!_+T zJAPCeIMJ7R@g1fq*~}{4!~?qr2Mg-eB#-)!i(AN_`Jf+n8XR-ttfiVhNHuO3SkHgg zH6F2ea@~tv#yh$_Qy4ls(0(d?JZgKY|FSIGkL4~#40Qiq^ivGr^MaSR`D>Uu-_%}= zG|e}Q7t|B0Wq`D(j}cnc6VK@0k$g+MN#kS9Lvf9WAf!TUvXM;qJAq`53r+?MP#VF< z2fUZr=>>}Wji{aH7z>7T+w&Rk?4J?>U#6BwHnGf&r}!m{J+18^Y3Ic1Oka)K)B*dw zcHBzZShzRcNBOc~$uk)+z2+@lo~F*O7U)i491^56>CJzc7P3tZ=zit zd~Pj0l2f+T{jwQREqb1INp%@_xmBUsPL}{5?HIv>RZ2S!;S~1{;AI7R=dVbRR6KvI zDVp@8p$1TCD%cIQ9nHiDr;+4D5`vz-z% z@&ZgE;^6K!>&bUss@_!=IzEb;5A48~z$9@Snp5%m|0P-_GHDm`-!ZS`I&%-#dhL^F z@Yu;nt9oz-sr*zH_~H<^E_4?G-oo_DbZ=r%Aije3L*&hD?M!QFOB^kFd{~Q5WUa~z zCS$-sso-}41Uetq+<1+h`gXb|Csj2Ib@v=ULo^lI0+L6*;)j7QT^q#>NH2dv9iH%I znO0MDQl7>=v)g93sCJuYqPTd1e0SX)`0uhF-_1PQ0o}^{Iykl-NZ?yLb=tLPNa@IyZi26u>b+x+ zGuXS#m2|E|?x;|!{S3!@IoZe?{SOx(hTg5bv0inhjyzqTv8sFZmo^Eaj4IrqxY_co zhljv}UM^UXah~2{pkiJ}lE)JU-J%x&aqEh=2Yi&H@yzMax-@uzsQ@esCFb1se+b|T z-zpRUSrcab!tu}27kI4>U4`DCdG^?1kk=1wAcPg0K6=Gj9U*bgHVSFGaOjXAvlAUM z(sdy_8+eZEZhK^3v7&T-cNfA$ioKDa@C+A^ds;5K41kth&@$5IOPn0UGZsQ|KByH?U6O zDShQ1y&Vf$BQ6USKoc#V6w*dWdI>K0MWaqh@dT?qul@whJfg-(yqG%A6_9-A^Mk0B zC*__R32HUYEiIzPM62^0OS83vv&gg1ex*!Lfipgy8^NP#i{OIcHh_goMwu#VWChRb$Z4{iqoEL`(;7MeXGzMnZZvB*x=G7ot9 zQ%}Z7bv@cxHzd$>j;?|P51^Hwb07;=;v_$XB8iA;L3a!F3XjRSA_*3rU#|lCTt0I# z;7sun(KD;TT)ID>{7gaxOEtCh#upne|MXq3;W$~DZCiP#cxCl%%Zv0&|2wozKAV}_ znQ^x#!}^uH@1^!hi&hl2kU}pFK0GJmQn??~p|8?(=+1g^tSisF%txYwF?y>m zoyqAt(TiR`?nDgIOlQCcf0)g^*5V>aq<%;3x#FHhn1I?m00(dzvYGN?E3$&2>y+@z z);jb>)!WU7?{>HBY*;v}+k1|hB#s+H4aAXp6S0iipHs~!YED=%s`b2$KSYH;d4=_& z1^f>Kj2&98E6Pev0cC^;ecWq0|>epupnA^;M@$BClMoJ8VYy4&bBZ5RF^?8O#aEd`!W-kqr zGFh?C-=1*T&~tVRkM+AxMvPlCbcs@y`DG_Y9!#$&UggoFYb(}h*-vKapp1M93)oVZcq3fJr7na_IBH@SG`>qS?V*4jFEXl!q zfcOPmoq(FU5fV{$S^FT+e;ml&S@V@a{*%O@nz7DiC(Q@+c&h=xT-*WocGGe>8~8cL zo%jx)i?ij?3f)%*uJlw{f<3Lns}!msn`tkyYhUy6w9GE;KbKhjDoT;GdiguCJMv>V zA6L2d~Rp=oYBp<-HXwmY|1FTjO5Qa#;u2l}|H@&NlNG zrVHjR1$#9}$tlKjrG%V@P-})Fb^R2COgTjt@(S>yv&J2osre<7kHY5c;bmtnDfORY zQcwdDRf2z>UD7S)%^Zc37RQ#oHP1kz6(H5ws_pv&{}7|6fBkzp{Ro&_4o*qg#HYnG z8&rTYcD;ytnNgr&#bqT!C2(b-9OB7n!NUrSMk47Xi|B9H?%9>$w|sW*w&ITSKTVQA z)>$SDk1Mf_$TK-iM5#J(B{3>59ijVrs6o2RfWDPL!f{ogT5r*i=xwySLoHmcntCqN z5II!?lar_kQ?So?ZIScF;f?FKs40s(N8V9IGR_$R2THM0c^c+Qp z(ZGWv*JTy=2cF4yBvJA?iwJGaTcl2*O}+~P;p~o+)yZ#j)1@wNhZAS5rLTEaWrW|* z%!T%<+^D8nxUiEAM;K@a^x-UYN&k6DzX%aou(QnnJprfGdzf9v9?be~F+^ICeM-aN zj7pw@l`n~V{XN_)f}zlCC1H5tL{#}Ra=3CnnKmGi2nJ^Mbr}rzI4~n;90rY&wYMs37E{tdF{hFcE6(^;1%&f@YoSE^h)%T#FDL+>X=C z!H-@}9ZQs5cnh`@8q1hYfm z`EavjLJ#6KKMDTeQ=ywS$}z?SuOAj-H)5s0%C;Vp)}A!z9qLVfP_k`Tf0@hH3a<)6?3f;jhy|Y zgJVg+Ox*-@QQ&PIga@a2LFc!>U2lkwO zUOKmmBYY~BmDjS%o%6TeNB0&Z-m^N|w#LpnpU8&oCRl>+|Yaj&AMObCy4I@a3_{Wpdyn zANDLeaxvFtFzJ|D0vgAlJ$0mgSW&Z+?cGAhhI%gZ#Ax*9ZfEy^?L#7smm$}F>6@2? zWgytt`1X~X5d6ic`au}`&_3Nr^n8t7rBU$0j&;jSkP_+R%mD`}-gNuklJ4r_ZH+{8 zXUvmZb%uoN8g*L@dW1RwY;MlVO5r&JP+p5{Iy!Pi!g*Xo|Hx-ki#Nmh;9ahl&I!{9 zpA}zjx`NE@`$t6M4M}}ot{^83E;C$JjWAO4FvewfLWUgm%A1dCOrMIq}md{28+1w|kCZj~*=zx7($q z&q$5^Fh}Nb+h3|z-0e@JYtzM3GB(iD=d%a|Od~Quhl@5Y4knsOh!ucM8&tYF^vSfV zo}Z1W?vKoA1T3bx?_Z3m@-9$?vD(Vlo#L|Ia`MV%@{gM41DvvVani#LI!d-ux*S=| z22(PlUk9c~Z%nn*xn9O`U5OUQ5x}0A+tO&0F{(itv!h2&XmfGc4lT2BR|@s{8jkEW zS6?S|9n@P~YfvKE?i#=j&0@RoDPJNVt=PcR;TbY;6DMGHlb%t%LDLAy29p2N8ul?m z2g&F8V6qARD9)RYPLu2wufo9$qr4H-g7b$79EJS8fgJ?R6Tcm&nEq0R0RQGror~Ep zA1q@8kCnCeT?%P~tJB>wEk~${rFTsotc3D+9X!wc6$}JBcnX56C)<*!WWgu~2lfDDM;oVoFYwrG#c0aui_i}Np1Ir@YA=MC(GR|YE4O8pJ{ z*q7q&V*9)gH(>EDvM3c%sNe>hSHJWVrr1~;U5yKhtXVoQk(F&)v)ntnCBHKf-L4Jd znTRw(VV#BiYL}7sPbSEEwGCs1DOE zl%qH&aT&5YbsmEkZ?>&2=q>V21et_$wEXOc{GcbP`dB80ZoeVmwWh|fD3WT(^+=%N z}v$~Y6uUNeF+=cZnTKc}w4&sbS*>^g&@QCqpcL`ir9t9pOq#;;3dk57n)qm z#@mT_PWKDP01muBw=gdT%P`uc{DRW4PmE4C!{v;Y-~8SBwv7bm>9zYTv&LxFYHL5H zkFB3?DcbEB0AnP>@;`58gG(dI=RgflNzG|y5D9UPE*lUy=w{ws1rv?&#w(&>NSISb_WUXeWzL3$20w$Bn=zMf> z9t`9T=gw7Hbz8-tCW-cu=3Gto?)fn<&xAMnW_qxv0PGS|hj-*PFeR9RnaG!G z?do$T)e)7vWGlt(M#2h@2Y+VonG0!37sW%|AjFy$r7jJAW3yOdGv612mTyUB3YD4J z6RZAw>sB4SZbEy$`97)OvIi&LKN{Y3*5Nx;KS( z0uzCD0+KM{+M^E0Amb_c`z(#!nWcq*;)WK}S4$&sm@<*biV>5cHM4k3huivUOmmUM zZ@}O;X%u{OUflhsnU*v&gQ&PFV!{RnMfcm!2nh0vg^RmHB1%})tXYfSbn%+LYNwPfTc06-!<-UD}KFm3#WEHAlXWSzRhu?`RSchOnZz<4n8x)-PV{>yTQr0yk)QT1QuH!Qr(>#zgI4pX zbsLhcDz+>(#y@{kZ!!W!I1GUU6~KYCB|DF1K!&U4$aUURvoJ zkcd#=hZy7uzAQK#v(Am>EUGQ>ozE2lMdvG7D^ENE?>PzfdgyUgM zvy&=m^12tH<4JpBs@He*OAKk+<}3|{A9R(P{Ssa`8wIa)M+@}KLI1HVdKJ(SRg*G# z2$K$NzVtXve{Gw*DI8WVy4p;w?Jcy#KXA@6MdbjWzh7PRVHPH6nX+^OYg?NWRMMBl zO5HJg(I@k=P429S!voj8H2HQrC9uA4E3VpNPaf)9)&A8r58e_X?{`{!#f|<(vtp6q zJHtX#8jl)!ITSII;2K9;^h5#7X|p=2gMu@cL@NzkqxxavHCJafHF2-VTVBQ8983O= zECp*%E4Mn=9P*5JVY3OSdhfC$7x>QGO5Z-`L6G~jaj}*h-kBqj(KvkbS%v&(uny@N zLiKZ}dD(*ye%$9gkl(-3Tq|}lxXvgF`_vM}q#I`8OU2AK*O_~y|KK6krf!`N_Snl_ z%vwvpavQKnWN8lQhs6{G*EA4yGeK@&E@P?g0exY}shpxiiD{~C%Yr(^lxgBPtzJ=y z%<+b+m`UOZeQ#jajsZ?PNiROpg-AP3W|_d`R)}+dqX~wM2AZ~fsL(?Np;%9=vJs1B zQVLEPea9mXuI+%tknI$1%?WpgHizM#I(v}d8C4%0xbK&1x-jAR>MyK=P|fdLs_s$S z6dn?O(M@&n-qE2VdB$18?Bhz|dRedtFr|9;;S_OM<8C1FxX=&LbXA&go-j_yJ0!+{ zcGOr-g!ujU16Q7O5i$#tB|sylE4Gb$-w2^$wOR@SPvgaK@db5P8i_G0X1_ezuH>vj z^p~<`iQo^QbPf4-9xjT0oa9u&Mu@|*zNu4kIz-M0-oG6`km(OfQy}iS`lv3>rkyS` zGeIt#?r}iz<*@~egZNAsTiDHIIxL>9rzv}j(r_8nR;}{jRww|luf?=#Nw*dX^m=k` zKDi`z)~(r-m>5@szVmFqW<~{n7a;zb9JSel0su`hD0n6mmt)(^LtIwZA+SuTF<0d+ zh8co^|N2PHXv_SDFta<~f`P?O2Axntj#P0dhnjK{8rf(y=H2Votjxk%^TIhZCn4s> zH`a~gRFDYFoQK;PJvdX<#inl@51CFOW}5D09eM^E%N$+h6hXT^AzlYVgw z=6UW2KN6p8fIG$-w0YZNP^r`Vg(V6krdKXCnzMrKn+0Q8EVi7R0U|T>HzOQz;>Av4 zLDC(plX@@?(~fRZQ|d%%iUED2kee{Tn3HBMv1v0bt4XwcK1S?NP}RZ!aqZ5@j)qiu z+LFc*kK&dVv*Kf&3H034t2cfZpKubo5l2jCX|6$YoGlbvKqF-4KL4=@H zpk!UI(AL$oV=#V&YMwRHXnapeE1_>!FqpVoOlPyPv}?b6r&QTclHMj;yVdMrOaA__ z%!s>WNooL=3a-kI1MWj7#>UsR+*4$?P_Ksjn6lMSva(K1vyX)a0ioY}6>A+5tG){4 zYIXsGVH}P@NhOaM?C%t`Xm$IQ&xAS@tDBZ$&Fs4AFD5TsIF*4SUl&|rC8ZH5zBC(g zAF*PfZ*$vQGYAea){4n*?h}KY@|Fcbo}AG7BgS?s9Uy6tnARN5xko0Vu*$;jnzc~^&kXVyc zA4Gu|p_7~H2osxn`r&XShYTGeVVXVh^S|&(G@ozRxX6;Sv1NnGbwad=NrMFT{q$HS zH!<3U@6>qnDA)lF94%uv(80bMAyjoj5W{AWJG*e+X0k-Y7c7@Z0!(6z_ffMk}o~Ph#JO zmx%dp#s_OqKT-C;dh+1y^9q=@*oTnigw~$0bQUH~xZ?}Wq(glbd;sO!Ia!f9Et;4c zDU^glz_y}1)o#_R4NGJWNzw#$?BWh)rsz+M-!^4*Ex*|eo!as;N-zo~e0a;tIYVFX zd?%a<+wTY8T@8p;87m0kXzVJ^l{mi683 zbKQFyWqau2*`X_JUq%-5py=10psw8-kdlguWm&LyPC0KH?d&P1t!3p@G=^T}rjWnMQVeFwUWsD>bMDIy*tMI3R82E2#oZ2Bs>1l!qY0 zyT_>0&CIl%VE)LXEoq>05k`Ge{xs>L(;M8IS2J#dcB8<3L} z*mRD@w4!&!%t=7sq&c$pgMq#FqC-7qDOxqfL+vwg&(**ZQ!6=)pAx1pJmH8}!<4j5&XiGF`lMDRQk!u=nlhh#ge}|0jS5+U z-F+D4O5b2g-OSy-Y&77#{Cn(&M=x2rR5hxJ6D76OjkMw-m^q^gyj|I>4B0@)-JfCI zpDO{u@E*^($&qKTG;I|tQYv%{%SWM=xlpb1LT<^q6-6MGIz0SL`m2<@jG5$U3&E`U za-nYQ_j#IKFK4xwKo}tQnv(_r8diwgCJaLjC6juI8&PXNIpcUZvxNMc?{Uy-p>Aa# zw9c~zt5%=~)b8v^dSG9-j+pT_OFetvd_Q*1)FkUf3MQ>{;*E=^NtZV4lPk!1j;^jK zJjZg3kq>%aWk@PcPzd(o@WfH1;T>%p7%zk30Q zAtp-%#B4fS^Q0xI3?J2O^%H+Vd}}`IQ$@bj4#=DXbW@_Vbu1K&Ekz88<)X9a4 zy|Oz0tMA$GsOxjptokt|jM`htnIkld8-xDJewB%->h!~t%L)3%QwtB*0>KJvo>Ud0 zM4zf^*>1b;6kmP^K;j_F*Nm~1d^a>BUF}g6NggLm_u+s>m*@}TfjY*v@%}j1M1MuGD z(eaY8DMarUb&zQUiCF7_o7#5~>R9CCcH!S=%k2h^j>oaK?oke9bns;d;8E0~Spo$+ zbnS(9wzSJ8vX$nn!k~w!|ay4hAIK_qi-<>ok8#`e4n#{XGyO zT*ch+dHEcS*Qr#CB!_zXRxUTn-$n-^4$2fpApPPsA%7(q{NjIlOc0@w=CZvUsbETy zFIsALPwx;5gBxNF%398iI8>pHb=72!)Y6M9j_lyA9=ZHfAm~2Q%iKk`hd1WxxxY1M zXwmSM0fv=Qqd})<20OG*nuA&pTN6pOKoGyP=_AUamc7eO%p3`4u`fqr*oe0KgmI*X z*jWxUMwxj&nz7uL5*CVlNYBY-P0HFwwjYaG@mWoopW4DTKufz`tRG}564UHO>+jSw z$;(|>5!QCl;1d6?miO-xi*L_%6}7}0Rlv*E6m(2u5?;?Y&5p^iYPGGi5Y%M^> zZPPNDZu~_l2qtN?z}BCho*w`|s|S4|!2#X1c_zx$NUcPxZo|L{^PYtl9OfLtAo_!~ z#W%h(SgN7>7*nI46YSn-5TcIURP^aBkMj<1itBm%#DW30|K6hoO_6HAQG_ZtuI`KY z5+K)BAT9B!PR)c6NAen4o*LT2dg5I^S7s6(<&pa)uN2|hK(N9~>px31UiS~KWrDfe z6j)5=2WURLBzTGE#s?RSI93YpVN6Eqez%)yUcnGjz|L$4OnDQhyOC}g>5{q2Vlh4V z5lx1^%!=XAa3(5svj(DoA#A+tA4g!USoM|7ML3D6SJ8@e9+$t=+P(vV@J980U zjQxyl8`!Nr)hxw*G&~Vv+L5Hnk+~&m$%-RmAni`)ip5=kn8%7%ZHi;lw8>YATbrQKi{aP>ggj=-JJuBAIQxp$GiEAg zy(1G8vkwHFX*YRE$_0%>7Wp;@piz6yT38fCGI*QgNF{17H2r~6bu1e4yGi{EmwYf5 z7Bf&17U_Fd<5=;K-4a&|YtOdi0fz+kHfu|0;m!DvX=<_e{_W_QjBxE3@mJTM$^U=* zgg#WDK{d&8%@8dOf9!v7A58 zoI;8gx%taiFLV8R(V=O!$uib03te|R-)bq(s1^K#Vi?%Sl0?%m=RIBkOOffzFS);^H z{TznRVWt`gqvsG6Ip4Drh#jMX>_#|3d+<=x)oYrvd`xl+U5vZMo^t+Bpxx=;=T~y0 zJZIjL(()a8BG0Ut+TRWYg!OFAG)+-^I_fna7PP+H3lr{HUtkT1zh&!wXZLxsJx7RI zf2L#rPIzdXQLTiNsyZfXqBN{ju+$ZM?rYHyVqHy1`V4OjCi z(E=+(XFZoe_Hp=gVN9Wi+Esoe;=jV&v*2bQ#UOo-2}v2KzcQch z#gKN=pWwv6M3{!BG3Ab$H>53UkYgy&dB=~_rYb!xlco_T4G7DAA=xlVS6VxzC0oBT zKBkCi(Ar_8jP=78yXLz4F*+G(6#)KGA z|3#E7#A0uHoYQvEIf>UW+Rd@J#D|vBh60qXO08Q$Q%Qs7YDB~P^||8cf6P{PP{vYN zt*pW#DAOQOm+MI~uXEn`OEzW#3c0;?RH>2PkNM-&h&H|QP-lfeJNZt2pc%UdDfm}A z-{5${8M4kT7~mrg70()v5-T~R*=Vy~+Tm6|%8Y9rX%(-M#(G*NNgHzPDT8ZOyJ4DHzvw$xsD&%O`l0%zcnwKg{-kP)dJEh1l zJi`wbM>^k{RJFPjizMTXL04a1uq=D#3*?5+r@{1GSXWoaR3J4r*}yMrr>;q|C=$_j z*R)>TRwTB$H+1yr=A$cH2&l+vxrg@rn$llo1Fg?7VC^HAcK@zd5DLllPcehkh80`G z%34L7vcR~vUybBDJh@bvjGYf|uq>P^?Gs<6QPl%_VQVxl89cKzBro1S$3~p98KChW0t&WA^J+?)+ zo2_sB2*{Cr%Z2lyWj_w+SJ-V@P#^}e?zSYOYI*Q&W8Kx97gZ?O(NpdzB2hJsZCK%B zcYQ7*R_&0gsTAO{nW%2e(?+_1?)zXkV+d~ynS1V`@(2v-bHq-35B*^hFB?wl4{=iS z9CR(S!CjYO1iLG(k5AvEj9wjJW+L(`#wFZ?Et)3G`qoFyBukZZlOxnTw%C=fs~!6k zGrrALo|$J@^3y^avB`on5TCNsz?EMXL}}yrfrDSWS8ca>PJT4=?sz&*dvaKwCsc{A;-3l?pW``_^jwufR{SxQLWw+t zs=ZEv9XXAf>ySeWO$T8^i@w4ckKC2L$*i#+fr`bTb#;)jpTY^0jfy)Ki_alFo?Jh4 z{xY=#ZMKeR(Hqh1g%co?$f0-d%8Q!U=%_|tAL2XGYLy_8Z9*Jv%xBVn71Mxn`$6XMjt&Q8+93FiIaqV>R2i%eDt_jGgK%0sLCNr_*>sUQ z7X!&~b&Mvq`@lnzROL#uDw$-Yd!!3?c<7s{Cl)PQ1EiVI3ni@lCs1}wmYv>{=0T+@ z^NHl-HuqxFa(t_VJg!+i-`jiR3%5*}0OyW4y5MNzs#{4Pj$h9JjP5x*RPf|Lop>qB zi!_TuQit-Etomi^2Dt?Mhv7@JlYJ9vD;nq{nhPkd4)punr7KGh{Nvt39Nmg!6Tr{3 z5}B)>AD&aG&K_LXeuvX2r$K7FLYV)Qu*8v|uyo&91%twCEwtAo>ImH|%Rfr=Lg=QX z!ZGHnfCC;~EAq`L>>g)zH+50dGq>Pu%3Ou12bY@S_PVT>qfFGctbGl49xzJ+*f;f$ z^>xcf+|cf&M}>`t=1+|^g61@ydGiE?LM}v3BM0hCk!N_L@HfNrnXkO7H=jx$)Q@*) z_`{zf6-h2ypfJt1yrs6nb1i0_A|g$4gZnoNx!27ePW zZhcgU%Ur=7IQ&!-6^{}I1G7`}$YT_ef|vX)(^01qjxrw+pJbY`dT?$?#y`{%zn&8) z5XIEGjP3^GLxHSjtVI;NMO&g}KzqTZI&Z*C5xy&afbk9hGP7N0EVP76yX)&`Af~6- zkG>m0(PgYWr2%(NoyKT$g!$H(pt+cxXmllcy)2F+x|UdWI$)WIB!Gh@tmevInkSNx z^0t0cV}+JtYU}?}ii6Mf-hg#Y!At^r2yk`k&>Bz$owha04=ru@qXO&O*$c4tT#{kZ zi8<=jnjNQ>)WcPd__5fnjMF~p8qcF+tmNeGc>_)c*5n40hs8oZYF5nY3Mmr#PmG|H zAIO6?yWuOTo65G<2E2*4irU~b!*-AAU;ac;e<}hQiTSiw+QhPAlHN)DK@emIzI^n`*S+a7&Zp%q&&XSU!wk)4&*bkV zcb7Zg>0#GV-K&M8Xj)LcOQP}S5^}Q~G7mZpp9TZjH!!F4%-)$$@jIN957=twvU9KEj=Q;^+ zRN{P4*YtD_dOMbZkXywSJ#wlJ_8_chaolN{400mSgv4K1@)?scJu2_ej>tBUj_Qs6 zEFAtjArv3-8NlIxkNA4f(I67F@r`$Itb6=Lr4Mx6OM0v3gYs`et9*W7v(6z$yp)=O$oJY&RuCi^aa|K zc-R(siSQ7Cjgk$@rqc0HxwBJtM^R_t;**7QH`yA#dn89kYQ{I9;CzZij(4&kPCW@AqT)V8OK8c_^{aEt7zQ7jozv#2C> zdjTWvp7RE9E%*wE2A`u1fEdS;?7MA(j_1sZAjXil%Q6M04&AgfvW=Na$QIN))am19 zG>O>WXMAN30zV=fQI#k+Fv*w=<0a8oioCe5A9h{Lb7}r5wD|S@0%H+a`1K-QQ%@P= z`%ceXe`1@;yH*&Qw0-~LQVvQiW1lSl>BmFn0pzVTW@}+5Kfo_pX zQo%~IOWNW5fVVY)g=+CdKirn|7gvFVrEm3J|6%VP-y_|cH_!=YVrwRz*mg3pZQHhuNiwl*+eXK>XJXrSayt9n`^7mQ z&Oh+`*jM+}&$DXPs=8OPmcA6I>BW&=t5`cfqInM+6R@_=Fe>R0`_pxlf z_h^Rvxl}xIy!iLlt^KtuYa7P$h_3A=Gp4^8(tsrsaSVdBDbb=#@MkB3vZO*Wbxyd4|S^A3^1j zNiCk+x9tV@Q`ijoq8beq)doP^wAGPTZuolV?q*lv>S6~rBkPDiNm~rek{WUc$5T9x zp~@es(EkRLK+yDyEE@e1-da*LJL+DZ_R`8`hTB>7RdPq)IAig^ zaTOweTG&O+3{gDLRyD^SZ6}Q)-gV!8Rlc9}Vz>R=&9kPJKVI~CD@@(w>Kxd}wmbW} zg|yUHH@_l_ds^wbbc+fXG+Fawl*kR5^}4!e^{Vo#2B-=?ofD{5xrXC(;3|gr#4KXd z8++Zpo0Jwz@js-mz!Qcq2VU(-F1H5$1mXvdQN5SEGXu7ir#P|OxJVL){8o$d36JG< zr06JZfbs_P7!5EN$D20>Y^o5rH%0gr{McmSjrg<~=@?t|b-BO5+oGNL6vRMCdfxHBez*ZiD_RqjTe4TJt=IPZB0Kr4i zvUBNs)V<9Z&6*evQW8U;$?TNhEA!g#(I4$(ih@}Ez`IB0aQPx>h^;D?Z_y0S36N7^ zl5(QJ^KxO$D>F&3Xu7gKt<2&#_`(<566zuw6_0xU)FenPVZ2!W4P={q;U_#`E%f_% z-pN&TF!al#IA6T3sr-~~G-C2BC|}kgwD3#SQ93Ti7l;oT{Z#}vgAt`CpvwR%sUxN` zjWCDz`AvVBmcnQ6wI~BeiA3nF(bOttbux4PQS!NJ45?-HMzlfvepY}htd`7!0Vk!_ zWHyCaVvnRX0qDaLRxsPQhiR3@J8wu|KtSzKs!h_>+)|fBjqMo-_w7S9lBPaJo&Z2S z-OEHy|8mpOrl6`F@uoK5uYO(SNEhFL<<&2nu~IoUXA{80L5rNbb-`2n|s{4uoUI^s(&=fpTzLmC%vMcg1xah#C$tP^M zHfnD;WaP%$NuUWS10LXYD7{s@(1$s#Qci?MxW`Z$uAh1OEfqCG&XMpei5kB1!#uR%(`f zepFl!BBy@)=wlqgYSX^#koE2=)_YbwVPK4)h59$0%)iPMph!Ma$N)q~2+%q;-JHf> z=(7ms@2Vu9w5wKh*ZLHOI5H4Cf=RTSCU3d1pg+@+AY|fp!NE7h(|1xRSA3+!y zAPWv1HR#=%q|lP5I(~=J>nd-cHLa;Q@o_x@=ecAd?dTXX!l^gaMFghBd*O}QAp%8U z*BCS#1hGk@jp=_eGU*nA&ls2L)dQI)h@yOZQ1^1q!+0uR!*Fb_Sr;wZWD+tjaBugD z*^R9?j6XW7UCJw{bL5dE+&6aYdPVnRyK+bR>xmo_K^={0;9v}Z-PFdaUFvsX{}P{Z z9niehJ)Y*ABPJ_>elGWIIh3O)vcam|_FH$#d_P0s<^?h}tZ3W2TySsKId>KD}mS~FhsaOZrBiPI}Rh_pXgwl6cBIMb6 zit#T=Co_Wn#~ zGuJX|7?%r}eg$?&)A^ay>&(#HHfYhhyVyh&Sa`i@7pS<^=+mBFwu^e)pMNj?waXq4 z+y!LeF0?Z!ndG-@LOYBu$&}`}Jih;zD*k0Lc&{*=|NG1lK-Pz_OpBiiM>o_$3fVr^ zewtO8ng1h#z=QDdd!RK?e~|pcq`Q={Jqz61OFLo8e=Z1P41OPkMo+$Yy39+@Yc5>v zmWgoqXREL4;qQbGtjnn50)Yf)5tA`r>gKUW^vs+Nja%7w@D#sX7Fa~KtHFYSDiG`L z=ZscS(XDoul%m{@l>?u!{pf%ZmjqCLKoY5iYG&K)Cta2pbp1dt;gnO9J7O3TlSvD8 z!q@)xxH?gTPEW7>VOT)2pT{zdZ}E?>LY}Pze*9jzXdzTKiLp{z3{-5cLNa-Dz~giO zS$>EE!&(hhbEG%raPKX8{{=Ee!8lzdy~OwzRm>rD9dV2;NP4s#cAUCGT9Cg)) zjYAOh`LCT)!Jjg@sm5g}^GEHgGSjzj%g!*lHJ22UBlGWKe!^6zL^lIAAie=*2ppOu zY7TO|EZ)(=w<7Lxl^>KW5FjFJoSvkXPn{j8&$mmUPW92g>Y%9Wo#44$czcI2K8>WW z`j=pBi9rE#5QnP2KY8dmgX zuGo|vwqt)#9$Cn6qrV6{kxb@~wa`PN2;BzQ~5|J<)h{4G4~%!9ZqkJ zHl@~TrahRb2A_$ygj>~iexrlOTj5!GX2G8{H(%%8Yo=&U7{Vh0C*j(A;<5sXlv=)T zFwA-$ieqYA?D%(WEzK;!Ia=J_TK-4~ZK3B5@A(LCrDy$=H1?wI)L0?KMa5C~m?~eC zv2oX-#494B8MpWQiv^>pv~zz=9+0Xfa{NGrhuHeBjJ5*4uGcP{T(DlOnAa^poYtEj zC9c%0p4@7V(7jlLq-;EAB{`Enrv}uSU{dJ?Q(a1;&tART!%ZezBm7@7+jOez$mkb$zrw- z@3*e^T%kFM9jp&{`dgC_82^7Sj97>Ewi(nXDSE#YJY#(N7sS6rt?qncIhL9$4x%vh zH8$bW$O2fw)qclRRF5z=&&8%l^dQ+tZs%ngP1G6aDN6RVDhAddBs+mxF5G^_>EQpk ziG#NJjh5*1zcITWH(r1x$7985_@kG;YIQnCzqL(1{9T^cOhqTz%OnV=LF+o9rg9;X z{MCmc=v81ZdQsNFZ=!BjSys630YCKbj-yy*API2X-MqoZKc_mJmX4~tdMuElrJIq& zBV2~*OzB&^Tu^-2ksCBb-2in!*uQ`IPiXSr(aNK3hGANZ8O->wWMYTUJP68U7Ri|R zEUptti+&Z9u3v@zzJ!R81D&FLhcoOyBzb;ApcruMB0*ouSt-|ADis$%nLJQ_eOp+c>;&o=z6E!|A7D|Kyjyg{rfryK6fAcoPi?%hku$&k&Hxjl?eA3#cNKYs3FcVUG33Y_zw|9Z=Trq zXkoK>no9bGDfO5hdC1OA-1COz#k`~2PZ@)rk^IW%y1FuqYt#@a&2T0Rk zA^KobOfp~6Gjtiq2opoq*u%}v9P@ykrV0+L#I1&Rk3g6E630BgRoD3hG>qdyZ=Nn7 zElo&SuiGg{NV?K%ieb6j|M*7ZoGz$SGOq!Scb~g8aPH7;^&9S9il5Pi-MY@^)!i(A z!c+UHwCApnt7^E`^at(c#JBp?0%M;?SJ%9l?g956>n_);l#X?@@KXAuYlByz^o{BR zmW?^gf4&63DV%UJ>aXu}&YSqgh!6@R*EXatMCBBI3${TVX7nDdMWSI4F@!6F>x3OxM))XG{K zMMmtlZB5@A9qY4sZvXa6y(N4H4R+J}7>KRh3N6#usX%f=YYrGAhPq8kNna>B5RxwN zWL^yXZ0&aGuHfuG2$9oX+h&;h$1rn!K^HJQR6JW-l(>i75iS*JT3Md}s|F~cMQFXx zmkyQ><#wQkNQbkvPD`o!Mi(9xCJ|)Qt~)eeTbG65*i;MJZt)HVkEiYu5Bw3EhsO!B zsTiFCK)OL{_^f#t@vhPmTFV6Yrc26hn404LevwZortw|y5+z%syo%3MwxxIR?}~Xf zY}LfzcatFkWAAS(1=T~%pU-|quf}Ssrv||`z|+zA`!TGmeDZFYT!irul(^n@)C%mf zb_n)qdp~R?ZD=uSWL5(XEf0IM{9-6FYizMGP-4$m9PY8PfR-PWwKq)=Gq#^ z$Zvw!p)tN)CWY_yH~f$6hk6@P*GTx=i+LFmxds{6{im(J)yQU@o-;Kj{&}r16j=@i z4ZV^#>(}M)lZk>t7!WhU<5fUPL9aIz13lLzD!=DVJ&i+5Pr2iQ*9Z_g#31$FT*6hS zYL1JVd}<1-In{~AI3)aOt6DiH(@*Ud(1e2GO@*07;Me3Rrr}*ed-%<&@RVOc@{IlF zRbk=5RyO(}J_Pc&UbTJ&xvBB@8Qp1ITFX-W;Z)aZT#M`qfG>{ z)6ih^c?}YVKSaQZ|0aZ0=dp_0`mTF35bQqV{8lJ*-o#^lG2ALN5SjSJcU z2l!Iee>a}3Yl>sJ@n;STWWazWHtG9YCw!smSwTg1kk~*+``R|XIvo38Je=189GrV; z&|I2g@W4KMeNVYHY(*%zJMq z6Hi%O9-5vPTV>NW_9Rn)t9}7D?3RRkdbWXGLk2ih>aD;wad-*h4V}JFcj8kU=8S#r z9!mL_nfo}bI^2G*&OiG4?NtfPBM>}Ck1!xuQsmx)dg8L*9!w{}Mf+FN76z+|vG4#C z>WYpiE9N@-5q_ga8gnmf#hq{iMHeBe=x!LFnefmT9+lD0T`p+!H?=hI_qje^MiD%o ze7)mxR2$d}Ag!%nE@+d=v*yv=SN;bRjlilY(#$y}`I~rogTXmC) z6&)*03JR;w?zH(lSrpaZ^17$R7e+GML#s({6`wVk@_L6T8JaO&B0=Doi+-!gKQz=ElE@0 zzum!qjLC-72^hB0`}g7cuUG5>=YR!42ZpbK z6QTbyF#q%2Umr3;KEW7qDA?F*{C~gu>o~&;_y#iI6qYsTeti7Pd;Yb$e?IV<5Oe|k z!~col|HSYCto~0MK8(TtiQ!)``~S4zZ*7>$V`MJ;(X+X01*Sf-nt?FieicZ&==kZ@{wD29Cs;^|jMZQB9-Y8puPf+m?Z zQLL+x^F)=tI3wnizu zNhG%NnLpz$N?rM0#!H*F5mA~(+IGP9@Gakmedfg9e3fFY ziep{MOP{6_HXhkxG@vd=$I`_qr@vo(?z8q>a1O?`rHp4oP<<8TiOC{2YlGyWmgzNf zopndku9jXT?H6P3P9-W@?5&8wUlM}rd=NirI{r?h&8UqklfvY_Mt+`vpz#4)Ubo5| zGLe5zWile&U017i&-n*d)T_M@SWf9z5tLH}maC$f>c zcq1)y00l7YNTFqBSJnnm;mF%nZRU3dyG=Tjt@0|$ZnX3}Z>ZgN8r(45Tw}K}=cIIG z|6B=mclX6#(u_SF2>xIsbmNHi0IKF4gy^YhBe@;7IdM*;FQfz|1vg|T-_D`%HmM4f>(LP~iw9f>TxD~8lDJj3(i6(X)BzIuQcdYpG>=TLmIZKcg6RZ2WNeSJ z)O=&%Q+!r@&fj8i@U-M_cBn4{PEB4{qgbQoM#2-wSWNXC7%tPz{V|+OQRSo_hfrh$ zDutp7h6nXqwW4BX1yQlMc~n2FujfL`w$rn3B>qmTOt@W-rqo>`t!l;;(f`Q7jub;O z@K}7p%f|JNfQx!h&4K{W-0AzdIP*cWz?G>HD@LjHuFPz^~;h*7Qr8wehK<+yG+f(=*w0r)_3fb^jjn~e;oVL3aK>C zH841G@b2-7U@{(Nw=W{!3h&%gkZm)` z$^$=N99iNNcHI!1SA18Pp=I~XxlD!BSU$C?{?>2oC5!5m<*MqvEMBDyKnnl}6V>wT z;2w2e5?DnuZICn*ZrgDEfPe=gA$%-QEp@WIpTwm7=vwA-Kd@9ywslV+%YBWeY@9(J zwq52|_PI4VW}vzXt}N5*NQvw^iydY4WgRteItC8BJ$OB{Z~ExF>!v3%u@i$g5$952 zHqgRAtC($kHBP;axlxDerZImk8lC?~%qb@6WlY+}GR%f9tPs?h#RiueZHHnHo3y4r1K2OGE& zn_0OuV5y?oqn$Iol5=;k$RByO%jAjl!tQ|aLGb;nakB79p>53S!;!4c0p-)Mw=nm^ zu6GfxN*aU`dxQ~LST(t^2KfqB_$8WkWNb1XHwf5MnQNNTQ#xs zAa}4Mn_@=LpJ2kM2vA|2%Qf(~g7of7fpCiXdp1P|iq-66xWaCheZF^5ed z!j^K>(N`+8DGES|dlvMu$Zr0VVy;OT5q`C*E<*Xv7&#jjUT?nr>E$ z#2FKd@=%w%S5(Vvrxtc{z)|X3kzVFouv^s9?io+QlN8+3=nZywyZMkF0U`6Xn4Ln+5ZDQ$bGSR(Yer z?RjkVP3w(#KC+Q6{y6)hz%!IyOZz;3K@3WV*HcEh`JJFK`2hs%DuYZTZe`0iV6k%$g!{5jPaHvxwp)rz?BBc4<5T6 z`QTlzD-j4H+Z1dBl%0D^YzT?DlR7L@W1p}1jLb#>kKfAC(#mq5o~B$0AyIm@B}o-t z5(6nu`_&!PhEN7w)nJp^5or>I9Bk}uXz|P<(33_og=H2;v0i1m&;<@>Iuvf5H=M$L zQsD_E9)|I=D_c`FU2zMS9B ze1LB2Z|fGM7m{|FQzXozhJq-9mm|xmkg*BUp4KkDQbd0ZJH>SEZ3jE^3ods&AR_o? z2GuNhRZp0K5KQOSh|gQvKYHs@-!$6(@=8bvRwJ=emEq>F|<<&K)oe-`V+G~7-36o)?D1gWbaB7ZP62U}$Y7ex2v3+!OWJL5BcG0XK_hA2Dt7= z`^`_4rz^JJ{eX{K;S>Srs(O5>0%?yJKRN^j)5vjp*h$#70FltTW(_$a^#sA8TW-4j zl&NL_Tc#4`B0gDflEQ%5N^F9Aal$)F2?#Y;(Pl+p2(2swLxqTiBL>+hOf=lLFu#i3Q(==}wm?uojo@SF@UJuCh6^(^p5w#QXVs#H_7 zoL;C{YRF>#ll^x6Eo1bR&9O(eQD<{wrINH2MIn2 zutiM#15Z`Gfa+5&5*n3=6M}c=LaA(l+#;;wqwOhq6Z+>N)oj6OLQ1){^UE%RK52V7 z4{c_(UGYUm5STH5r&7T{Mae6h8lj@%jSVqGZb*n235EKp{pBCy2X9jnM3|2fHHPe!i zB*;W)A8Q_>_Mm!%RNSdog_chxs$kp0_khTbtby&^8;?7_x9pfbVqAJ0>+bm4bau5# zb8c2}`Li8h|N0#^SmuNC5GZwfj&vMz0HwnyzI#80?dNejoA#Lq^kK?&^T#!yw%^_A zz_*S^`@AS)o}JO*J4Rpmbd3a>iCbPlyFIKG5gs&wxMD9MQhg+mb!EHOngN`{6ltL5 z7TI;H^{K~FY%Sr__xg-@vLM%7Z!SmPoQ*OKkf4BmU{?ojieq|VC`Bt zo2TDgTP>jf0Y7TGD{QFHuWO`t6kOe(s#87Oaut6&tKV=6!K%0f1+Wj_VACiL(O5uO zf=&J`YB0JZkwV9FxLCWJwXy0em#g8Gs__bIADtNJP%2bEZLn+5q^kRfY8Kz6bg($G zd9!&#wjQs(tZru}RQ}TDU}hmK?=@uawO+zqP-iM>6K~hp1z)Sal7L3`cH{9B;5LtO zs&JXYTPR!D(?48Blm~6twgYxY1^ZmA=!I;aIo-isu~3!(l1o}o*|?0)0|2I{*b&(K zbWQLTJnRIMeqFu6F7QtK5((mY>3p{PJZyjRE&v@NQ948lMg~PH1ypH!8gmnsc1lOA z($&OVsPG~)&%NKBxI@oVv~ zO6gx!0sL;#kc5?%(zL*U)~s-mmrx_ty3D-vHVmm+z?QX_(~r(iEk`Na6u4e9RR4zy zpe7$Wt93!!A*qpZ1Ip+{hxWbkxfl7?5M~HPKBPSB<_C?pSynmcA?I#e!PUe8pl+y{ z{KsTg0BL^~)#Oq}S5fP^Z5QQgRin-CUam(7`a$W6Nv#R5D=cM~yxjU_`|!FAOVxM@v39Y;Emz1_2@8ynrm^If-%YGy zR6d1xO$C%y911-nWs!O)DSL@!FB+#P5~u2(PgZ0DMOogi@R8?lvwMKk6U~DZ#--oxdudNTny&no z`ow|Qw(!5$PC_kz*Ge1%ViNQBg!k(c<*76ICLyx~xo4Egbzm_u1*O>MQhUF@lXwL* zYOjN1-K>L3->+KqG_kpKdnt?eDQ5`7HOxM=gp%G2?w1@Mg#f7-A<_o|5Z;OBbn&XH z!n(QNA*uy6P}N)P+%Az_r^q6_tB6+N_Te4M8Vit0ZzEH2{ZQ_+=p}vwT0P1=2=7$m ztzHc-1aGrIJ0-0R_!53AGBhi@u4wSADFs(G1lo+dDS6av<(acybUcr5xa2X8OVTEC zniy1}{Z1>T*6vi~-h2^zX#!N3*EN>#Wyn4F8%@=efhq*bf`dJi^G^8?q4%|Yo>+lm zst@q{9e_%Dd+p1Gf84Kdy%*%I(olqplPatWuZ{75pdmPz!(JL6)$ps4;l@r$PzQ>2 zv})k2B%P{oD~J7}$4T9fe$%&rgq5J? zE%eU0&g0%y_i)*Se{bwTBF7Z<8QJ7 z>%*TM;PJ3uVgDW(qSfmDgp(H0x0Pm|TitO}03O2XJ-c+OB6w9tLSbmOSykcYd)#y zW&o1lPt4?9tn(U#SP_2)lY3C{GJk~8w?2Nlm&ho?m~bcQ{@%g{cLw`XqEx+lW+pbj*PwVzUH~_ z2@)G4l}$T^2upb+-@2V)k$jb~M_W?X|%4EhNoGaa6GWpUbTM~9^M zIJr}&##sW^aN!L{3qKX3_V3=MStacka~oyCSTlg#1>J-*JSeotZ9>jGTA42KhQIJh zxBV?Y_q^DEKT=DT%qhz&z~kxs(>P1#kZH~D1=nk$e%NXd$^sTr%cY3aad zlmO+yddJI43{r8qOd&I6c>ldETawd;nHA=nHzFoRJfc{u3P2wQC4qwK_796qm`$AY zms`LEksh)%PEf!biBqJ1 zb7vNRof`2E)pY#cKEuA&WuqEOY860pbDk((Jxd|87o=VjYPsLj6)CgAwrm}S$__6) zCFDG<#kkV4*^Pqv6vIJUn<^`lmGc!E^G_+^U!)WxQwqbd<$mU2hZjz3r>DUz@n|*X2I+;)Se* zH+d=A`hwl47PJFbP6+#-7&t?Ne5InldURM4^50R$)8bwEX2mO`RuLB>$eXoS2ZsW= zLO4(ngN^n$n_RP;!%EQTYSYEMx%JI2+o3+<0<*ccnxk%*jAhf663nz)~!n0s& zz2^a}Pt_&b)exW!7Euv#M6P)!MwjIg@UPVvnSq^0KB@O8kCSJe7~~!gfbTj0@2>lw z44g%Uv_(60Sns9pHI3ep$o`rd-U26yBbT5m;pv7}1`nMHTr!X6Y9$NK&PU7j6|Jew z_rI_3ELNR<^(stWdM&FgiMb4!N(@sH@0a+Og%$EAmBV`iyA zrTU;+^JtuCqaqMw=p5Y|q%1hsp2R|uB)K)OaPCEjLy(zQ)pj?++-n6HZam(LMOMz^ zi$WQ>aK5Fe6G3fchI47Z9J|%9d%Uy(R9>|0dI8LL^J>j^5vM)BzfObA)qf(*+XKC1 zIC8U^%Y90F8eM`xdyRObt2V4>{6b?B?O;ys7)h&9y_8*|YWMZJs$DZODNq_AkF+vx zA?>+OdoI%rM~hK@xk-5g#?%JKI3U6%l42L= z`Ay^t3AX?6=r}K+@HD$WN0wP+J1uiZ^~Qc}G2xm?TKi@A3mG)i_jjnyTvlc4A8br4 zTtXW)FsX(mvE2DvP$BQ(7cmS=?~Q^k2Q-5WyJ@Iy$tA;YVJ|(j(OpjoL)TC1rNtL9 zXQrBJoogL(YkKeu5P8$e`S>!vPxC@!O}D@6lScF%Y(FnoiN0B{xonb7`%s8`ap$vc znQEGe&L;xbk`j!GO$MJP?=4kcY+uYQ85xhd?m+|6alz`o5k_3jR1M+P2F4nE9=^(G z5#Fw;O>QQE@2=qou=hJRdTntdGUwAFJrGt2@k>-Z;x`j5FqSB6#&hsKdZYXSra;SL z@6E4oGipNMGyRSzXQ2E8^$Tg+Y;R^{_`Ik;3%vWFyF|OSa4B%ZR1%LGB;xLUd~ybu zTRnLCb-IEF+H#ueSx0&X6k4^?iY1EmByoD4xh8{W;MvH~lK`h0vU^z}#>#r))8VSq zR9Ch61L3ovBElhOkmc9=qW8nSLhH^xT+nl6m&H+rg6%fbUyEKuwNX1KU)^t(;k47{ zQ6v>6;Wh(ol7Ms0+@dJ}yzK;;b*xI+k>TEImcS&1YKjzKJh$xTvHy6e-8!3hZ;U@) zB}DFwxQ2ey!m0p`ACR|4EV4;hB;9U9lc7)sKvUo7Ajo9RA;=+)y{?~A&d-daF$`t< zLSsi8riGNLN0~7N0t$c^TXCk53CU=jv6V}urB&J-3aca%C2}wMfj*EB-63W^QL@k0 z8ItAyh(-&MnZe3MhMZ?%Evp`(%;T2}hm^#&A2af7*lut4W_B1+QOlY zo~p`#hViHHD`Qu60zx^qn8P&ds5aW<@-j@5si{W)bA~&nDzU*XTeEoKLe8PX7}C>_ zh=dRF>tO6`0og;`bwpBMU1IH@T5cv9mhXkzw7GJtGsf|;>cO5dv@f;z`St0hNY-Y+ z=~X}N)YAvvlZ%(lRzWrP{MAraT=ao^oe3L>}j>fNik(fZkMl^3icQ6 z_0+0((JDuOI-7sOxG6G@N;Fut6UqlmF3GIG^J3T?+my_HMFG~J1aQkQ5U>Ezyw>9I z9L!+8dc&Gco^@c&Qn!=1Kw`yx1&mYG@!2_iQ%laD-y^}l^r9CZbe$&D3KIgBwn~}h6eAGb{8}LJ&XAt)4<`AW z$pGm^%qDvLjp(vhNH$PzyzHm-PlPRjz%4)Jatw5h z>o}V`GH(vW^k1MoDjnCC1ijps&Zq8Uu8V*)Z7Gw5tl?Rz18Y+a3*NL3l<&{}yxyqm z6JPUO^Q5b}nCXg6N)B*5XEhn|X1*>R4C|{=qN~z7L^W~>>KE3I;I;Bl;^52v+{`EW z20y|$O&B?&@jcHapOm@tf%tXNjmOq|?@c4%(A8X>t$OqA#=)v@cl(-jeY@8cQ zWCIZ4^SZ-|vzvC}Qb&3Fjv|ua{pUDpE|;gI_M7dG701k%$-M<&785*I>+5}{eY*Rx zPf4!nQGb0pe#N-=l<8@|9lI-4Xp3VBSp8o^H3yUsDWyBAf>YXb^m) zJW*IlNi0lC-V>79AV~a{YME9rLHu%Clsc#18Tq~Y){;j1IQQoDTd8W5P6i?koJ3wl zUNYszQboisk}U3Ex04T;el1^U1W0_cAjCT^<2Tyn`Sn(QpbyqChS@i;&J}5TP&fE$ zc38E6@pPho)Rqvl+tL5US|i|_vw4s?a#mcsfP61wMjjiOc z1H8>I$a$;5KM&u!ZZiF(#lNeC7|3sdS#4!UpP|!8h;rP!J>it7#Fdoqygy{6(!)x7 z--=;_5qsrKSI5*3H|zBI)VmSM*YN9PrawwTN;_7;=iROBuP{&Hgkgp5;3U!s_x_3P zJoH)ciIbdn)cU;E)@hL`MI2{>{Nt{B*SE9n;38HB&!YFZtOK!;9o>vCl-h{kbpdNxkNK>H0LDa_9!yErlWsZes_rkKvp59ro+H zIP=6AQa%nNIomvdGUD)K5cu|CNXL0Susz~hJAc?A4eZH5Q*3)Y~xk= z)XH|jZWB~FJ}QZitu6b2_*I`O{h7Yy)QvOP#%@oz^fU=7O*lHE`s}_48KkNJ0(93MnfVjBT2f zQE6e?VMvc7Axb)=LCm6|bV!9v z37jRNPn+xG?k0CK(2_|uXw7jrK7n(keQozp@P@~`B+O}L6u6_WnKfx?6r_z441+qT znsQY%Ji9aVt>$=tW+CC#VJ`7otfqz!t_}z~?w*g?;VsmG&fCHv~GUhNa$&J<|gLH8XumQm2YScqpWRw_JPX zX^6HGNz=2n&t+1P0Pgus!DJ;-$V$i`Ihlt;{4t#EWJ zWc(xrd3E_?0$#d5X`0P03vXxb!d<1&H2>%47ZSj_)=&GE)t2XSrCQ0y*sWJK1Ak8X z7dxWdDo8IjnMLOo%t8Sc4%GD9nEJp&z{i8oOsr?RX z3+O*(B~R8-F8XBlr+0_r_w8E*+4e}EMAV7m6@G1tym;?pT@(Z7Cd23zDq3N52$!yV zDA$_87FOJ@<{CcRZg$KMX0Hp;S|g0A`win|*{}+O;ITa5i@@hpO8{>$L!n2$HZ(=)70If<^GV(4ET0M0f=W z;LBW$M0hEm)HhYEQV~7_NhT?Bzzr?s&l|T+Gq1^vZ=Tcl_1sm7#u%A*OxAi@MPA5D zpPG}4D2lho=`=zj;^8vLH|_L6&E<<|JR1wqhJ^;*QR{@`o$4}euQfHd#zZqma-ZRx zlno4e^QkrV$s$g^sIOI&D2L6&26@lkGpJRLWkg8W052~*U)S};Tlk=i@atrQN*z2X zg|pC^f1%L(IrC*}v=s}rl?bkEP*sD7CK1CJR{LSdh5zJ z%RAw2vQVc=j&DNeI3|((JTZ!vo0(%P*}w6(t6>KZ8lAh4+;29=8I78m&zq35BU0#7 z4vg!MIN`Zpe*WBXk&k2QdqXws$4DFWeOz@~>A1^8^ei*L85$bkG+NIv0X{YAIZFbV z?6Z1#_vP(Qntf;p$^jb#v6p2ibeG~dBwfu7s+oAV%Bun4Ml)|ycKY1kL3?R?vs_Ry zy~5>FvL99>O+io9kICg=s-G+|Q8bw(ttDbtJ(nR#`zOWzLO82=hOJrDIJ9?DP}k~H z1ALs!v|NqERPv8QL!(|&GLmj4%CuzausDU(upkd|YBeHD4!l+w(=y{(`fI9{sra!L z1Z#=&uvDj`O0%b_^0%v8!+3?5xQ@gp9gEiZ#x@REr!OMi2;x3_ZZdBY^g+9q)~po8D_Q!L{OFqCBvqRg04D+d;@0mKd7H)2&_AE6?CUuL7& zA40$&3}wZyH;EYnF?Wm^%5RG#7cV%;VI$~Idr1{l3ZR%C+cr7!+|WFJK2&B)lS1wj zI?9lM9qiu;ED$*I*)duMFqOmBh>LUL4fRF&$-$*|KQwv8SPn6x1Ttl5x_>mP{G1m3 zDo>oo3}l(3>i!*#R1>M?cK1 zuZNo4v}&iC4P1n13B=FfI`SbBa_qbuYSZ%S%xW)J%SRC;VX@EJ40|`CxPx!2faFPu z9uu7Tu^<>v%2@coo85FXHN}*HV<*LpLFeOC>?O1DS?b2KrYVj`2)Kk@VX_EAHw#AA zAUmL#QtIJ_mN|zy4UldTDm?OOAmwVk-jtD+(U{jZGGhBf6qqqLX@>e_TX#0{Y-BtS z%N|hrayO4z+H)SJ3!>>32n7Wd>=(l&C^jXozMJlR`^|Yd)qQ=H-QPBTl(^f<;kMp9 zgd5+?)>;5>^<57)0`Ga;omjtEwt*xK^pAFomWK?KkqL+ql4)s-dgxmA#xGfde8$Q2 zIr)UCb`>rUKG2Kz7mzuP@)R7fYiMvD$c0nV#D-l*m zO6FaC01G8}p&*V7f!iE+u4pct7>T<02vs*W<;V+In#Ie(`HZA^QSdNvv0n1)5-tRdjsQq2UX=w zzR#)7^ORl%-T^ETr3JP}Fdbkq=bSI%6Wzi9UR){Vc;Tahb5a3hPZF!=x9mtud2M6z z6Q~IiqZ%i3^{3a^!9H%Pt_q=$^U*9YOnHq=eXdZp`gX>kOVHi0U0}YPl@$fM2Satp ztDffPM63LyD*q2-?-*TK^sRkXDiu^xv2EM7om6bwc2coz+fGiL6Wg|Jo1Oo??|r*_ z^!uU5{O64#{ zJSn~{t|MaB4dsK51N^}2Y4ux!w|6;p_Rxs=wz!_d`PjQmuA}ONBf59msUYVLru5Rh zQAQ2E)XR&YY}loqD3X1<`=Z^Wd$NSJtVE1+@#BV{PB`gK;F;c*=DV`8#SAE&;9lib zGrX|IIYJiW2|*>hrHb+e*b^T9GxHJZSrt|OZwYiS-jZ*F4u9QAS;4M9I(zV&}<<*WlM|qwSzsYBB|8jwpq7kFLhU&f8Bi@@nxRq^o_b!EY;Gg(wXu*H9;W#64zYc~ynJ zbi|`w65bOHQZ!_Bz~#asoyu-}Hfk&4zLHig)(Kdvs;b3E5Wlj8E)yI8tXx9x-d(iCkeANw>^T#MK|zF85!hV6pIoY& z?SmG7RozXUo|S=H{7mAv*Qvf&Dti}T#VKnF4ENv(WAflJG*HcTZ8{lreh#!!_k0WY z$)KFXe=eK^Hy_DB1Y*WF^oRa!8*l=4^gM4p<&a}2-JG=SCaiHVh%zyd@g~;_$(6*wF zLe%$GV8?wz(X})7`0G}l7TqFOTv8%cMOxsUsNor&AD-`5;9ICQn&gN=rm+*`_(Jo> zEsdsm&eZ;$;_)U#JR#9V?iLesy$qV!GRK)b2_@76vuiH)thK<*{d^bD&Pe65*J;j% zW^>5IysZXag!-Dw1n+q|vO}M@Oq1A>WxDTMf-IzpWgmj047EpyIFlNs*B+L)>pM&zQALn2H}|DFfYJxK2U8f(o=P)*3?e)w~k zRU;Z;C3VH9G&i>{oD<*NO?aK?FM=2>e5)kx^-0{00P>lui)+Mdm~GA8%iY#htF!QB z?OS}OamNJ***rg2>Ss@iBB)o53{OTh5!vMwUW&}*dN#OBo12&b-j6EQ5tkIY;!g+*0N*Yi+=Xo$9<#~>=mddsd-=;;Gg}0wBp&Yw3w_#=@_||EtR3+F0j^d5ZnwdFrjaRx!6aXoS z?^RVxizk+Xx{Ld7e>qg58_F<@lrox5jOXZ$k@U&FJ7N^?6?~Aj%;vGLO;mN#aJmy( za-!(UkkN~NE2waw$SlQ-q)2#7j$l{xDL}R?U!hkOmFH*M^PfcUXl>KXHK!&O5YeNO z#4`K-VIrwxx0_zgyATh3NYB&=^AVY@FJ5LeK)C!a_bq-d+o^uYu3MId*|~$3;tx#X zG8%RCX7Jddvh?Uo)OfYXTNf<(j+geXkX=IOxo6mlGWAP_q~XGp&u1QwPj<3c0)_L@ znw<6b%=I;yU-__JDsCX!jbCyA_U-D7<^o}OuVcvvj%D^X%T$HA&|W3W9WRT0euit_pJY(|z44>H)dzo3lSPmFf$|D=Il z(;WZG(?4lN# zhuI-J6bwtRd*@$^Ut1PRn_z3Bq#?-dD6y8i;5ca%NvmE?qUZ{?7YRoNr%df6UL)hM zR_kyNgo=~Mva)t)6P{8TIbQl^oIYnYhpE{!EObOg$3DNnm`>^D1PofF0#e%dEXgP9 zSFWBnVR4$0@^*{iZrAVMRvhJ%p4b{@s01!ZiJ;Cz=E^$PD+=rk`-0uCDj2W#gdDFR?bwSrq+ZXRf*Dh)7nwzayf)taytDv=YwH6^m3!9 z0PNrSuf7F-kljeVIi|Um)f8ma(N9V|{0Qar8;nqoD}+H7zO8x08}M}%k1uq+&b*TN zxY6(!joa)wKor4~9kU58>{OH7jp^rrqoC-4k)6RN7mlT*~f;FG?4()ze901r!QswCA{ivb@IaczdM~tsLqaDgNofzJV>c^Xmn)Wo^ zvNr`T{v6XPI&x9N_4I%fl&PL{$X3IT{jo&?hAFoQBHxpw$KBF3BhEmbTsrH^Vb z*tuk*KliU#6s2KJzqtx~i2te9bgmg+bkm3%h4FkiRy1NX(yK%$*Uq}l`e?n6>Xdfn z2T_qn@JeED=TMjQJg5XnXS@Vi@wlbqOK1nLh6g=w^XgIM{g4r58d-V^`x&P-DVKbj z3f(_O3UtU3jlwE&yn9J`%uOXP;S@UGsY4i9S}GyByXPCflTOC~RE5`=7v_7d@7#kJclXlgN*HjVKEP4;p)&iRfS>O`ELy3wZ8~e zY+{_n7<0QoF@^4H${%s9M5{fEtq>44z(_o~3VxFFt8^HwVSYX=@tZ~^%S3KpN;s$y??f@kq$AP3%S&+Yp(hC!uVo)YJMk_*j8NmhY7tg z82_@n?%4vqDoHTQTp{*B>l>{3c12c+H|J+jj}e+qB`#^Kg-zt+$Yws=jDNP^2(p?fLS4uS z?h4&n^E}_EWqPU1eG}k;bA?9yQ>NSrlb7c_ilt#;JvU|Eu@9?qKm;a+@o7RFZhu_iokT}#@9G$$<`on36x6>+ zcNxDI2cK=;w-;AjP5P`oiGoFW-y;{j>6*LY1i|e))D3&Fz{7GYvn=DHV)^`g24oQLekVPC2AQu48RxF(}? z&r*bt>i%HFv_)f;qakt?AH?_DXqFp*q?f@s0!tiV?Re%>@MYQ$oj*0cp$T%VlSqp; z-XEs@-r3)G>FV#Dcqn+Nq^^~>G1;?C>}oLq5oi3GKkecO9S-UP_LZl}zxes>w5;#X6s-u5(I*Hsh6zg!V1=&aZ;4np3gF3tm*N42Am09tnG8^$k_3F5~ReoqmcRKaY)E`#1U#|bgxQp^cP!lvu`d|agYxzT^ z?CB?|;@RA~BLI!awyD4YsCG6>Mc7KHQ%y5#x$Dj}qbiAgz&K$f9+?CioBfqCdp$(ihnTu;JxXyL28QPuSATZ>GkLM-Uh4PkrJVaFD0$cc;Q*&i@fNb!y~KzGO;=g$_WCd$hIt6$ezrM~e#!~3P=?aB@f6d| z>%C&=yi88w#dH7rb;qso;EjkJl|3+;YES1&=WEN3I<)B5T#f`HMl#6;#h+l-)AIof zG!aKx)qz8V;xfyQJ0cql|LnO@|ns5HQud>(=zL3v4c{cuU8z`HlZ2 z;kxDXZ2t~qi1%4@p<;XP3zmoZegvIQz4$#VuPMc)ZFf{JkBcJ{Z!VD3wOeIfcHw^K zWQe0B7GE~8tE{V%M_1(My+~frb(=@;@g^S(-$GZpltIe~L*%Z}5$#xZ2;sk$r*oN3 zHG@c6=h$w8gxMYC%<1?=7BKMjbGIY3?SlSRU0wq|eLmc0Wv`spwXU(4DgBEms7%je z=v-HO*$z1^8g1;mobn-(a&b8bnwtSUiZ5EsVc$_Uxv!1EK4*v>J)$Rq4Rf|IuJ!h# zP8Gbxoa)dCh5U=59o1J~;pr83Znn*hnorm>N$!g%b^=>cMaPcAQcvk!69;eg0WdS8 z_HjWP8tLW~)xC4t)*sh`A6pNt3mZ;Fnk&9dj2j=vl{qb6YP0pHbEHop;iKz#kskS% zF|TyMqH@E}B9w1q9{?HKn_z!Jr9l#Tz5i|0(3yP|3h|9pko`5JRLkjS)Lj6C)M)+| zoC}%-M*&NS{ucEWU>E#!Da8CFF7U7g($9j~;(qEO$3=EPZmgkzAQJ;dg6$gWj*=Xp zp$PF`k;@zLHw=p3@>8;9nrZXC>r0Iu|;RT-V^FAAm@rJjD8Vp&hJ>q@o1dHjpL19X^ z?QTWcyUGdNhA(-V&R^tq25G840Fn@$=OpM6L&=r^P29l&(*FBekDafS_2DJbw~GRTB#6_~7HSr-%w>XK!ZSIEvY|4OGQSfh!5)6XY!(Jf zR;x{n;syF@FwSDY7-Bo;AoI_iX=iJAGAqXrHQrlImVLs3E2zO2dNMi-jh3~%jwQl9 ztTt2mo_}^E>M)sY#5kFj4wX3rG^D7wV^osczm)P-QXz(=IT9d=l+F1R$M5ah3{O;( zeHx7k`mz+@W4Gu&%9^? z0>AV3c3+L5iwhampw{#P1^(>rV@|QjqyOb6*g*caq*Kz-&&xW`N^&tD{WyQ}L=xtE zfUG)5KiG2h#Uw@>OLMSMf4+c^hg)rKa~-;@8P7R^ppgi6>f|n1{RCl}F>djy&7J?y z8Tt0tn=j+`?cXJ6%sZX9vOjeTp}x3cu_GYVM;P{u=JY!M!4?ybAzeRN!pG&*9h+D|_}>RmfZuW?ZlMxK z5AS!g464}*5xIX>*`P)crmbO*TvCIUSrJsux1 zlCZ|2jCECPXRtg#iZ0CW6M>i#tFJR9anc;2zn%Dhb{>~%hY1zo)E=T$j^2}xQ*!;@ zPT=(etr@2Dkt{4M0+&wt)~1U&N+#ZA&O&2RxXcEUzNNbf!pN_sTq`S<&aYsPNQ8MS zkvB@N!(0@d!!U=L+k7-oFeqaG9pF3sCT$49C~f#@$yW?{pXn5tNu{K_nfu1~rkwv4*O}f(QtwaD2!VE%EuTL{ zb5$c3oBuF+bu4(ecnIXRgY=bw0JA5}kl$pk!;q1vl6V|XAWaTZjaAAy4O?BdOln)q zEHHjBm;Id+Bh}^V0IXb{hDo#$-xBq>xTC=Gv6Y!veALu`;XEHf(u8;o0I6JbIn0~Ac^@%sJ&?0MYX0q-ZiO$78~v3U z>C6VyMclhAh&Dv*#!UPrymk7CMj6--5@J2CgHRGVM@~IdB}}MWY$;LLMDBUWoO8qK z?J2j!Es?P}cP973mgP8hI_*-Xk<8SXH9OlRpn*6hx}GyxbpoF*QZeJpbk24r5^2&x zICV_*HnM+go8K%aesv?w!Gqq|XTs+zHN}(> zd;UiCmRfdDT%3O`ZS>dBBs?LVDTm2#QtUgypH(B*D)PTsSKTSn+qvB2aNVNIdR~;J zlzmxoj6aOD^G`SyV$Dr@X*x2tDoDXXo4Cwtz?jut<}sSJNn;vMj(P&%U(Wk zA^NQE|K^7I!HWN*uGQi?3+|^$GV{mLDSsAz6W9Ef(v45Nb`8~p=6hFQb}istIA&c( z#$GnMjAZQ^@_dU`+%=8CSY8)P8F8F@(%6LNqQ`lgELeA z*L?W7{*&)^S*Fk;`QKQyTqgKb3$1`^_jZa5;-sr%Xu#6waLcpjb@gE&ei=-HRhdum zfDz>8j;=0_LyBMp7aNOVV0sMn)zlKoG}KEd&!lMvI~OY&`R@aEh8!KA#Dc~EW7 z*nE|a^qy3kb*tKc57Nx>8>D9L*st|JFZ=(1&Srmq)83p&{~I0f|Dv@0uU}^+`<^$e z*f`k#0h0D#Z^h60My<`J*+KrFd2-+Q$IR~sR_e+~El&ou7E;dbE(?f%1FvHKN0EJV1IiCRK1bPU?cD7Md!7d$WWyTc@Khav)# z57(c51ot2^n4vym_c(rn7v|KqQvqg5?N=`RckJN#%?}YBp$!Yf+K~PIEe1XSaU1ed z?66Qki8!z6&Qj5xLAzZw&uY~W?oPrBEgFP%j9547zi3&80E*ZS`@wUQ%Zx#s(mgEO zSO-ni{zqHh%+kR3C)Rb?bAPGoGM~#yPITQ!SRYu*fEJok<@fkasA!$&#KNuh-o0xr zI$T$nw2Wlyms&(PqQ_1aIuJ((3o?k$v?*Ei?b3#`ze&HzcN-;UbRG3P=u^S-YiOSj z_4+RPBKXlPl7@yikH6%vp4vX9fF9sH@?6I*$T)%OXxfV5EJT)LCk$<)W4pli2-Kjp z3sn2<)t^&%2u_*o_bG58eJ6;CJr#i_S^fjERc>>yExfy$>ex$9uTRfN|9s=-X{T~7 zAZUD)1!H8=xcaE$+17Z3;q+q5B02Y3UCFwKI+gvB{u>&EFK<`osouJzvVx&GZf%kI zW8*iTsMf~^{BJW_=xEmflBl82dLg*ww>+H=Gj5_obtSaEPW4Ums9Mn;vox8D$FUDa zTKQkb?<8rUMZGCPCFA2r?)kc`D|VT5e%hVaVW31@F>18>+qc-8x=qIQ{)L~ z>m`1c6nW$?$8CXqj%}9N&NZE)Yll$2mw?<;UgCUnXJLX-icA~kJ;bO1P39SmQK=40 zR)J%Y_Vju0jNJ#IA-i<-mi=dotQ!%a84pqPlbPGH)ChJGWNI2}svV+lYFlV4pzXrd zb99SznX=|V4d2YG0+bvJOQCQI{$DEL2T60=nCey~Ls#SkR~%BpRdp(r!J%b3bM0SW z=RgQAq@gByAK|OTSuP^ZykV)|G~3QU%ZNKA+a+ueYZPs4##lOQQm%$>H{XC)Z(UE9 zOr0dng|)I*;qkHjh`Y|mB$Xm$$S^>nw9N;;22($0qmlY3NaF)M0~W`_@$nT3)5*-< zyU37dBoC@a7QoJuB;C3TX+gJFW2AT9Wqfnk3d~ynxN>m1gAN}04>oO-s}x}%F*hPv z{@}a7Bhn{;^w%Gmc;~ZVDcy-atJZpA?k&aQ%LG?X*Dw?vYQaUZ@pbU+y^nm*0Drl5 zv9nU=;OfK^pDlP~JLBK*a|L#xz`6(H7r3GjPzDOj+RcuX&8|D%a9G0-(|-I@?H|Uo zXd?P>jO}$|P7CkqvJj0#PMrkcGR0i2@x zlkDUda4aLJL%r{rM}&%w8s=5o8c0K4WnNHt7N$GYnLR?s{OI{l16MuoZCKehA=MI4 z)Uyh;`Ij_x0}RU{3ZM2fVLd+dv2Zh3`^xwEs6)Cg=uKRtgpO$(>1FLNRqAg61 z2L;-N!)-+6j9!|1P?!I}G++&23cRIdxtT^2a=QFJ_3$~haM}Ypo#z2De>y3*-{KB7 zZXTf=NEL#K%ybJZ>k4|Scm*S+&138{#5AI>$!dy#(LdoWxNA_ctjM1*O|oU1kD@RyiBzU?j8jQpGwwnt7KkH1Ol5S$z|~3g#ODw(o2Q*S_Tiup>{=Pn7DzdqvTSd$l#o8&{`Iy<3XV zN%Ylq=x2|VtP;M9`(!u_)NAr!ikz!QrUQWGtwZyN*Pwt?qEw6tLKoh4&tSMgUw9L} zk-Wei@a=Ume6fh3v#}5{U%KK@)QW8U!diZe5AEQfSG(!6YrA4R4V|Pp{M%i`PeZ|v z$#09r`IcZ4W@x1Ua|RxFM1g4Ppm~W?kW5D^Q5B5cqHToAK~4!f#Bfu#r+VfxNbh%5 zb@+Erg_a$PTJ;UcGvxWm9yvZoc_(o@#P$pb<_!8^e0@dx|6u`q_%?n;DU)8WIpqYq z9(^uW!Wh*hQ-;g5BB?2m?OdGwu!jG0XIh4M%SxjLZFcgjbutIyx`#fJuLLdaE0YYi z8RonCRlQ+zHTT#}+pUcG$Ye@KIhrC70ZN|er#Xk%!!_16rHTbcO4)qd4)|QWJh9>4U-V+k-|e{$4T+zw_H z)dCq?{<%OA-O6{Sph%NxCGGddGV5jDo1S}$L$TecxF#fK1f|)pSdI0=!#l_nm0@Gk#)m zpE)R|NM=dZ&(70_wK`KJg$|`TL_?FbjeGxkYi^!GPko1LBZ#km6k+d@ByL@xyb#?F6y6H)H==8Vru`ye@6Ds2l zyDTy&OapEX?ZO%{xV8=()$&BI9aAr~??wOVV0^}J6YYV)v5~khGc4(mm@f=`Qgi>R z@Zk{>y9#Pc`r*~wmq2e~D0A|*NnHz|5_aZHcKqcO56Qe(>EwdRQS zIqt^rLwJY5WgPC2^!a199e`5{!3UB(LwZwu-SYa!SBIw%FA#J*94*&|D%6ej zD7%9Fj0f7|F9~Ki{%!zPIV22%dcbcif)zY0ydL1uq5(O5?bjK z8y+}?|3n697NAR@RM<4XylFgjWN9bCTnv@=4lwt_+=qaFM1<44}G#?)`H$%5^EQ z>)(9o5r*LIr#1$xNPH2w<|`G zuB@#RXzw~$mU%(zT%l)9W0cg<-T0Tz8s+>y`luJSmlwP+wvQ&!3#7Lr8mchfgoQRf zIF54HNOsuCXA#S6ry5g|BY$Eoj@2=|Biyi#Si@MNoYPi#HXE!GIg{n)-_Sqwc1CtdXJ9Gl;vu3>2OkGGrt;#|Ipmg6ei(uqPd1S z9X+8FmW$LU$HLWBX%9GFqE0%pN$#X#SGJ>cp?XhoJm6Nq>eE+d&L}!_lmr6D& ziX0uiZt#bpUO%x@9!+OTCAcdo85xHux))(Mol+lAa8xYA@mkX)ziHcjUKjqw-G_6g zF&P~?HLtRqnP&_N)08cmE&S-oBO0wNFs<{fsU+fA9xNS6ZX>&y3cHDZC)2IT;%cLA zu1;}U()?m#*L&`tGw}uKch4}l(|W+rM0`MJvy=aO z*w@K$&HOxq6xDOHRh>bw!j>2hF?9B$)nn`O%IG18z(SMzMFEa<9p-w$13kLZQKrtd zkMBZsqKafvC+wWvL+Coh@xGeWqK2i+KUE>$hot2T>5`bOJfs6yz+?aqiJ9ePj7r1M9C_rKpo*kD9mkS)`0DLpJZgH-m8!P!vOl%0u7=2{uWaL_& zju>hxo5;THZNkk-pLLIaG)OujjH`_DP7{!|>au-qsoby5 zrB*Aqdc>tju)81LB0>WUs1Ft~_JnPc|85=?oCe|4qu@pOJ33zhc>}SpKoaCD=!12s zmfov^nnHb>N-=0~1q6fIHonT)b{v}M-EbGFIINj+ZSlU1DOoKhE6#80+Nh2eSV9KjrJLgS`u8D+%*)xZ+9WD`Iv0`U(CmLzD4KdmuO3^3w*LB~ zc6Wz*r$P~PMaL?R5%qO;HYcXp)AtGb+_2ha4Gk2Fch$2v+18A8hbsOX;d@N62M@R* z1)D^SC>AUzRR@NPj!7gwsvx3?wLp=~F+rKkUJ@??#w^{j9Em(az-$VAa_OFsiKSZv z@f396fh`CQE7fr=M_2nyh3E`;9*1$JNy)b1BW?#Np^F67&ts>HpAY9>RHni^_!)4z zQjX!B&{cO;jCUVXBH{5i`+;ex8LpDLNnaY#$g$B%cP^ofSf-T;DiG6fejS+dfgzo- z!_Sj5Gn6r6jgm?v8)%y}SMfz=Yi8}+P=*wmxn2m*!mqi+I>;%z%A0Y z84;|xdv!yNrW3kviqP`nnfKLxYvr87sH<3UH!4K`qVM+~=p_**S;#P8 zZDG;!EWc{`ndohL*+_IHaw6QR2KB)VZsL2(;R!SEaZ8s&3`T2AyePpUlEDv0jB`=H zdfziNDn%M?mx>U_o(+&yY2pV?18ahb$S+3=2p+7OO7IR&^ypFeVXWJ+PFe9@#F%*=gW~JSII<{8xSp(;nW$B zgmbR(PPlQ(;UnEvB3EX~M7Ag+_T8^Tb@V<7>C(vWG7pv_HI}tdtcu`wzu8a?$Hp%~ zvrLH5%drb|Gx(L?iZW~uSL85`2iC+KvKsZkdLJ~K3gI={R1*(vejU?JEqIk!M??Pngd6M+d2=ger*FP`AI4CIOMg^mj4*wU{z4fNC@243DSpcd6rxyyBw&LqeFE=tEcL| zx7{GVWp!2vr#^7(oak*!OB|^`1Gu1(6-W?#y4r@?rKXSa6<6mJI3!(8G$rL(DETkxiL3ejxWEJB5iGM=St)Wec6 zkq_ba4_eC>vyQ&+vg?4~G6R7aG87l9ievWKMD{?ZP~%M(6T!FXK{R}{CK zn&a*{9J=xNvzI9R<_Pa!C*gAHe+J`M2Z8py3AIxzlUMnc1yliSAUb?zvf@W~ChJR! zs$U^i@2oJ45c#X*9rOSOrd0qTO9t2yBM%LPSn%Ei zUW4Vvq{b_wpf^rpENArL$#J6<%i)a|t9jcjSnhN1J_I+Y#@Sg^4QN|N>mnoItQx(HK&CszE*py-=4nv$HnZS%DS_BYf%T?7k)rpY?osA%l-)lscOC$()^<%b@JRr`#m$OKxyT2)1dU1`})<#g##_zne=f}>GF3^xygRkV5yRU@`fm z^FD9MF=H8pS3dz+QxCr2J=-|{Tsbrh-eS&%Rv6q0?v1DLdKa_0RG*nGFdL{9N`9MI z(%V+*g@3s8`}syUDfG(c`W@&K=vfr9hOxpP=BtbW7q(p&-2#cIMh;OXl1x${tBUe^ z7%|s^`m;7yUY1hy_?D#eM&_mW!$~sxFvn4Z-t48(ar_4 z)!F^MuiovkXkw5Y!rehNnSpS|?x(3M`ow%Dy)L?U=QltE&~=2t1?&VPnOf(7Svnxn zh8x;h+VY|771$de8r^00RtH}%@mojaH4O;ZO|~2F1kJMf`K;ojr!Pq%vGFxlWo=6k z8$}pa77EPd%~;L z)(Z^V0})xAf{#+|PR+ykp0N%D|HwcjjT{1J-Xc7)N)=4;0ng~A7P%22<#@Al@9gi{ z?;gJo;1y+`nsJ> z5!m8FiQmLs6-(M3iKEaU15#a0PGOoZn-3<@SP{LI>m`$^`TPHvHzm%y!}q2)I%-r= z(3?oukt5@AWO_1mivbqzHxaDS5E#hcl zr%tuPX4@V+o4T1+lDXOhvzP1KKpdK;*$vz-JkILLF`;8Yhf4|bxv`bAwC*?iiH`CLjA0GLvsm{!&zpW#>8)>1D`o~cf z2yqI+Q^05Y8K4UZKG~YGND!w7sF}%uTeSWo=psLXz=rWDU0BjkvP29kxj@S~ zO`Aw#9|g=Rn%w7zvn!@ zoC>@iuGQ+=+@!|fzQVMpe$XI7#Oy7891U)NjdcoYCe%6yYkh^Zdt?6RLp9{%UIng} z@a{2J>{9CM)9vrQ_xDkS__h3aw#(+oAIcre)Uu$TE+^lSDT5b z;S2`}cs_Xys1@)eXCGTVw{$&N`#;a)J~JT0J>g@)kLBC^fuTFhnp5(_Q=QqoYj^e| zc^D8KZ_8^QWmj}0Q@wX_UCmnZs!QOe+9TOa&9j`A#8C=}7V@w1C{vi2QT(^bv(A<= zW^xH8zfSl1eqPWfUMi!Ma@do44oaCc325sOw$$^IS~P3kcL>=Q7@(v2%(8=!En9$c zC_5{NYf;ZQ-)b5h(R_iuSH1W;RHkM80cJ&KmLkqKNt6y?qwnBZZz3ipW$1SVr;wD| zI||nrDeMO+w99K#{kA^aSm7$Xs7FzxcqT7>Khl6fDa?{lCF=DtkfPOQd7$fKQcVlm zu3w0Ean$OjlJo;t1vFJuGPVsJ+b|}&E6%}|dIH;5EO*cjwt{q0KQ&*r#w3bzlnz5t zO6ABP1K5@NdE`o`ZgndNg-P}bIi)V2hUpQ~c+vMHJ?sNa`99z~Eq|L$xs-cO*)@#~rAYLtUv_Cgi2WH0@T>rd8nN7G~+@!7>wm+WVM>Isl6sMPrLeB;BWy+7eVdQI^^#NKJMZvA=p=q zstOY|P?!ew6iYAKVB|X?E&6ZuW_Dg`MsD({9PffebGWBj-E-LqqJw*%rsGE!G_kN8 zjtf)UL^L4AEWe5KU+eg`-pxOSWgxwefuR~2Aaw>YjCE?RES{pCEAyHczu#2$XT7xv zXICsBHy4I~1w_*d8t$^a6d*HKF#JlGiB2Fz13p3QkiBC>?FJ#R&K40Kj0?X{BDdwC zfNS;n@6w=|6@CdmOMqkqa_t2)i`v5dRhLSe%NX~@PqV*BY|dv7-o~TyT75Uprk77I zgr2CU##eT<_=;Icc;~Rr^$k5~zVY38Q~K=YoXv4%ZCac%NUZrAxFX18s|ggUG(5lY zn!g!28&aS)o2%tO8qaAU+1CuGM5+TltZ1xWR?us$gB*}ePjlWDDRbd!8Hz14 zy-XF*s|pY-AxB|&=i-r(m};n+7tXZJ2sHc*<>XxaXLycssikaYZ1->Z=``mkc;D5U zlA*yC;CpQ^lA0Sog0diJMUHcI7vXDzdJsD-7iy9pDTu?xK*kHLe=o01&at=T zPTEl*a(t4%y{ZBEB{5Iys2S;SlYj+X|`o|j7u+DNXGtzyiBQsni z5I~|-dN^wG&!U&+7jonX9ODqvZI)SMq){~!Ma(cmYQx!O#i0D^9V=wK8YDUbm)OH; zMI=>qxyM(EoN|{cc*DM9@n{Zle)vY?AIqcxPA?0S+YO7tA^VD zggHj+bkdx5{g#4MM@;@%C>3wuc9p1gOx%Fq;2I$cHV}!S{Pb>%EL`{jcU&uK-;^vW z@+~Kgwfcy&*7(KBKo)uD-VoRm4BD^R)ci<+IH#!!Cd>bp<|NlI&TbY{%`3|1ld$uP zgpb{EUvB?ND3KSR6J3>l_h>|*bGpO~955PZ=|AL{9mah{=9U*!7ZPV)g5>x*m8NNq zvapW!`9(ri}Mee9|t^fGTR|Sb% zQ!XQdh(@Um-@U&koo|XL^Imo=iB2y$xee6QR$yPgq=Z#s>g;5WcL9JJpC@u!IF8XtU+` zSB64?lfIk7uvGk#s?;Z8O5i8k6Q9=?aur6gF(&bzN3cg~f&hchd&Ia^YuZnD7iO|X2+~?-JgAc3BF;}5u*D4t&zK`Dt zz-vV*fTONj!F{iQLxA(1^g9tdze9whPhkqAiTMJOvAd-30;$$Uq+wpd=bVBVI{Q6 zYwOytv`yOXLwDs@H3UacP2O$rMR5`$*7k_p7&Gr4n6unRE8O;bVy;aiwKL@lIAF=V zo{twxPYoN?7#&R7Y3^e0o4rP^d9uT=+?s>Jk+3F#M>gLqAOxNjYs#KjyOk?E{ph;4 z#!*Abu?zRCHlEgjX0c*vqEX_2LXMzS<~rC%0;80AoThrC>ytuLo5Sqco5^;`HO|tk z+=}cr<^7bv!(JdbR8FJtGYbB@y!`7nIpq|@fW>;sf4-&7!cC`2!HcZFTU)7JFEQ^N zOW0j*2BafVp^=T;5fmmPr4xZbVn@Q(5T1(S+iEV#cGIwST*vO1)K^m8!7QTZWHj`l zC|Qz3ddsAQ3UpNI$V;ynRu6V+9o!@R&eJKrluEhHiOC3KlYCx1=w1NPXIfY%&F~uX zjbIb`FO`Dn4jUGo>c9O*>~Kdojj|mTahQB*<8v1LOMzk6z_IBPICG?KlW1JMMB!A) z`A^>dz!MLWSk$9!YG1Dwprmg}rD?@N|KE1yduVgVH>aC4^3J33Ygkd-;^A%;H>pYq zsz4X7*_xOoyViQ1-+HIarJ$k8d(gMH&;F5gKjbtxXP^~z z3zkfU$CWE(m=@l~u&Iq8#id{-(3*t2G)~34crLrCj=MpQ@BiX<*2rIArcaBBd14pQ zVt`Um26%p>_{5`@m*18qT6zMYeW~bZ3Ek%LrH-Rg{woSw>PMCI+mmW(NLAD9tML`@ z3ozAL=sq+UGJokm}+v{^H)MOUT+%(MN6TTqxY4Qh*V0qbo9s z>%<8dS2k1#g9f>dCLW{ldiC|7b(&&=ccBM8%-)zo_Nm~Mq66tKPArqsill!f5uG@p zYB-y-A^8l-$p#WW>d$VoomILYKuQg~ewhk3h<04*tjUW7P(UP-^Xx^)4ths}az}zH ziyA0J6<0wLPtt&x`w~kcArUMdr3%hCcYXU^gCFv&Z- zpldrzo@_$)X}T2KKy+i~V8$v<+Tp9b4;69Kr3;z4lFXRXaWA0fBpPUTTO*?q_FrFX z_Bt-7Lxm}kST!e$b2d+er>MuqO*ujB_2%T|X{Gy1L5o@nAqSW=D8ZX z$QLRBS*N6eI%CLtY(ao!RhQ;QN4}J8s$xI%NAod$er?-q`Y`Aaah8u66HuHZN)RS| zLWAl80UkVy)OGoA6B!rUzq8LKA;robCUd+d-xeV7m2=ZZ?XW}vU=Q@>+4+j)z2Nl( z+#C4lj1F>Qu5<{dq^j$Knl6+ZevL#-L1fy{q+qVnA2VN}* zjn0sx1daY=rf9OC5Bil{+xg!Udt>b88pApMY!q;6qWSw2J@$DRXo5F;tvBfdznN zZyy4R?eW=oENUe-kL7n&aC)D(XW~2>@(aUSe|lFB#n*C;G%<_&asZ)pXu|oZvhFfc zVQ}8t=3DXA$}KPWlLb1C=vwWCVJFH2ZE9gLDYhw@^EnswM;;(I;la|fiWSsou=zns z3wP9J(_wjHeu%Uj9Uh09Bw)Cy4tF8A7p0P0E~L15K0=qhk1R0XiMe2Rs&Wq@;b)T| zdP7hh<7a09QB1L^UYr&JsSi8{t|WjVGs$xW^PH$sjNTV>Y!+z}0l6Igr7Y$!KO(B* z)C+!sjrfhom!byRAp@mUW9QZ;E<(iF5=7QdR-#v1JWN3K&r=!ARU`FW=sIcm6<6dW zJgIjvXY3y-#$${Ok#auuiLyR@UtsK$2m?UZ3L^4oAgE)rU-{f zc{7vLL^Y8xhK)veBB(^`m0w}0z`37V-M5F z-#_R|BR_`~pU@zmJSmC-TPzCd<{muv8FMoLU)UgulE?YkX2u#Y?JZ$h=vWUAOacHO zTbazTQ`hl7ud_?CF^@ce+;wpNQaxKN(?sj|mu0Y}8|Gttphn}%1KwSHW7^K1#iDJ7 z2jRW+#WeQ~tK$*Alvk@?>r8QeS_7TE36_G!wQg-L9A6d?0cFcbg~9X8M9-Q#CyT^j zqX`le2l0}T8cirHm>ZFJ#xAb=}{d3YKX#;W3>)%bf|Y-;cmj7E962N*(Tns%mM<+;Wx|o2N8d|BgEfZPMa<=(=18R`NaII<2^{30W`D z%n;YAI}ZV>kuM2RlgQ-Jgc0(!@wPl6XLDG#1*KX_2|AV%^^*^B2*w)KMfWxQvebbU zuMMzLUI>CJuG)cqT{x{Th-_)l-*h9MXnZYZ)s&tu&RywGyg79cs3psON{AO3*c7c7 zZJ9V8c+*EU%qv<4qpeN5s0)c`j#yep>{1ccS1k~9IO}Orv?iDvk_pJ-EcG3T!}LAd zG;~|!)dCf!57-8)5;9MIDB?5G`%|c8FI{1T=0ifGUZBlj`|MF zK3xr)45I%>xs66A2d)}-#vUdq^Zu|&ZY`9uBRHiWbQ$$Zgv&STxe4?Jpd4yTLxqoi zs4&!;H>c|jLRb!<<7Rnaq}i}aUTu@`n-grhB)HlzP}E9jzoR}aET{>P8FM^)FB+C^ zCq)z3?4=NFoe~+55{7}b6oCY^qnX)+b6{I77#F&8(n#YSi9?LQ5Q#=(mt7~_qi*aaPj!|&k9m5LJ{6hav;j)4R9W1ADq)>nX!yf5us z4kLg0i5}_6QmQPNj79h!gGhc>>5TKD@}AX;+@vD@E2Wb5-v`7>j1X5UhWKFTvD8`v zXOzGVg+wj;%C*g)F@%QmYON;fotYra&cGC zGva{lBX>3H@!zgP=Wf_(yvd*$pBxj+)xNB94!&Aqj%{n326T#aZcH1uTJ}R=YL5g? z4w3xjSXHQ7LV}E=pFkY36Fh*1lGC@WVi8W0wbefWmq7<)_cud!cN-z~t{}k@zeE21 z`^-Di@+0h8FH8kOTNKp7b-4&a)tMM$K*J^6@T$$p@YUH$Ue?GhCW6~Othui$Q4bxY z@nrDhe6PL=syfn$>O<_PK=5y(O4_B5h-Iqqmln4uZ#ihzfE}%-)8LR-_bVKgTXq_g zq}@fLl*{mo$NWuaJOJdU3c2VTnkc=v6+}jJG>ShHYm0Vzmn#*lJ)lA7K1aB9ahF4f zz0?t_#saF9FI}w*hhuLG+JwF&OG&n4WWU<*t7vCrgk!5m=q)0$xu$0eG$^yFnOgm| zMN2avU+A_ZZc@~Sa-fagSa5iA$gHqsSBEyMi1m01W8IN)VqMi<)V$nPh%t=+s#lU6I&hq9NhTSGAKz(S2Y`wtTr zI*vP9A&MoeMpt@32Xq&PP&aT(!oK%=a9t$JVw_D2{1kH_#mz5Y>0YXc8XrfHjn;HX ztcPZcBJs`sx!=w6@Tk|!6D@@j2c#3f@0Bz=Sc<{Pve@M2#Ic1)%%XVUy{Ye-o>ndp zx4)Z3693)+8gM;Op{9Hv5(gF+S>)XwIm!YoLxDge+?Mzpl$^pSw8UKJg7r;M)&Hbf zXV9@8{nc_7F$?d)kHh>2(@Qk35^ zjnWnQqW!Lm!GxtQfRrQb2Os2Y;qjXT21fQYtBksp2cr9Xeeey3tCS=7+}&U8petJ> zWz}fc_NAr6S;!p!f{SDtn2~l>q9p;f(;3Mk(#)LSX>_?$)zS?8d8pL(z8k8s?fiiV zmW(DnWNz)%PnR{g0-KEjCo3nnPo@IvRA`eP9RwL8Eq?PRSP>0RiLFCRLo1jMvl*}4 zNua_-tBc$2N%za?ph{Dd#@&ErwQrPYvgNc5^B`e55(Qr)2a;~IHyC_PZnD%m^fTO= zps+~W|FRDDS^eRoEbf%JYUk^-Sf&w@=1l$M2tq>K@Q3#50mqJaa-w zi8}l{$b@2-cF|=RaaH?;$DFsZje?Ck--+p5>{!4Ph!4!00m z<4*w=;ViyTLC-WSQpIhP70TZG@=ocyT6(p|rSTSx9J6gOsX2H#Rl?FJ9qRVReg?fJ zYChEsW)QD{f%q-!DbXi(3o-xKhkq^7#7vMlumlw<0^K0x&6QJx4me7M$d&Mp+(6oS zLD-AI)I)PdR8yY9Z#=?8DmMw9fBS?Vrtn3tCrsJ6-E8S1VDoLe&Ud%OTL%S3{fO77 zfN*n8Bg3`p2iG=tAH07&fWE2&VyyLFdDeqY3jjfc?HzfC*pa44+8AIQ*~Rxj0Z^ZX zO$he7QKgKeK%BFX&@8|{9~r1{6KuNd1U<~Pdd(&Va-I1E&n;WbJd0Bt9XZ2YW0Z1) zW?3;Hl#(%24H?|XsOllkNelq1aChb>i9mOzPMtI0TbwNBQF9waFWhIt1HLuD7V&XN z#}IbDnpd=+;L}jj=k;PUb&I$ zn3638MnxN(_wQn)r@04=-12H^A^**v6_^pg*gp<eZ85vTeqU1|KAIXADCdh$H2$ZK?U}1I9 zwc+Bh{>?xM-fBd64X#jxfZODS$N|%IRey$FuE^!;&6Un_6n9i*$n(<;-Tc z?+gUfLwx?I8BP~a%?rDD^^)&4wv4J2fhRNfgeIunvL!is0f(*Orn@I1WWV75Q392% z*wYXeO@?>&%sgtCXFJ#SA+*W=RSV*z`xoh{zqo#DmdB&<^UCE(Y6^j;2IUFV5y1H) zCjN{nz$2v+IrW@-{r&^0eRH=fY9T%z4Y{(e^2<6mjY10V;3NuYenob@^4ho)`5cjX zkse^S#zt!iBU7=M`4Sj)xV`xn@i3xj$?dsuies4lYWP)3*sB<`8! zuZyG2lLuYRq^n;dv;&}s?wc6bx^E+gP!A^{hENl-F2+j*j=sRd;PxTkYC z=wH>op}8V?Oi)qmAiGUYkAkKyKYw@O=j3mbc_55Y{9ObNGvWu!Ca4yzF@6=6JmPpN zNMs0Q5JcR{(wH=%xcA5Iy2!cvZ8U4();~BR*M6l*i z?l7D=n!pmOg+VICi6tgS^N@L*+OQhu8EL{_7%b`q7MX;|I@;JW8$;w{r)KvNahDZk zMfLMRZ2HqBVeaau(&BGg-(lJk3M&)?8J1ZQif%g($Czq^HWK;hXUgu$g2*|W^S4c6 zE1W$M>5?dUR4)TD*-4%2NT~flA21Ub2;Cg3Sl;xod#Ao!uBHopqsAG*RpV%oY*^(o zc?^Y7LgNB0a^*lt2P3l9BgWg+`-EcBaizR>MWP|y;g)eauew0 zISH!$q(pM?IKkF;sOE`0K<2)3z84D0L{Jv8>@?Tn7M#o) zxt*dF6js4VGhi`5?9qy5sF7~I+FAHZ+_kJhGqV9C>IG=tmYfSnd4%-6k-X-&4cqGAht63kUhM3E)|bN-SNiR8kM?JG#GWoUj2Y9 zU4xe+Gmte0%8cB>nxk3cgTg_>_Jjgf=wl<+mH4L4g9^uHWrBR)II25)TDhkDEQF`LZ&#JXT%eF(Cgf0%m`!r_Y!Jf<(6Ops$!J+`GUZ=-(7GL+9=(i5ynq~JH7|L zaQXT(L$GwtYlB*zSpe7LBuh^SNf75Ed1?RXc~0{wWAx*}xMZ78XsTu1tQb;s0w|Z0 zvbqeh2#S4f%_hB6-sN^3LxrOG0_xnO(A zANVjyKWo27OCbc2@#yr!BoCXY+EVl-2jN~CwzA@iu{$b#)<|RR;*7eyjCO>>F&0>6 z;U|Ni;P(wxKAP8eVd4#Qc7qx&sUwqXdVQF8;Vg9?M*MV!i*P5ik6EeBC{}?+$-Scz z9ZaB%>k2<^)o6Mv66x)l0~6$84xj8uWV!>l-2fvA!rhsiK(W^{;wjPRTQ&%h+~jW zj4lYO1-s*zG!i&W0L(zcWt*WcxTzuJF&#+T7to`gVSBGIwl3-zZG!ho$Wek9Ohk>r zUA&s1m=C_;El2D6lV*Pt~}Zft?yE35OM$j7W%N@DM|bZ6GziG5tB_OGQGyP%?`- zY-!3$_iU_*sAxVN^V&X~hA6Hj-pg1qW}AyLFny04uJ_zOMku2R8%l;z$A<_Uc#p9Y z7Yko8MT6zDdwjq|=Gf%r*-bB#+f7J^ydqO3t`{}srhsgtPChJ7b-kD**(mxG=iF&M z`0>Vz+n+Q~b%99^2U)XcVg}r8bz^?hMi(s=O~S`4X9S=FYg^sQYy6T)FG=M0hp~qE z&G2yI^e2Vt+C%5QTiv65m;*G>N}kjz5N;CQ!`%^@_dY0MbRoJCb`h}y=}-TL^hy}x z;M)Vs+kK|n_>~E9qUg@&oEVXux$G_rM)In?A~s8F6Y^Jf2DGDB?h9|4?Edm^2q#@( zm}RjZSMS^(btO2OkELN?MKCbAwYZ}=ZgoFrkWU9F#>wDZBcoq0 zESK(7e=WMsGigrHW9HoHy!_zY;fHiPJ>JB@sM+2}3NsxoP_#k4E4+T$S~&3#smk{G z?!^Y-)LMJTC!e6xQK*h(W#B(vuMqph+V_eAY3#v2%=3+X17r)s*7=)f#S8OVY?FHk zzwN1B*UjSpF|HG4Ofp!%(IEQ=p^<~gb;+Pk7$C~w0Sgq6hw8!~=6%DkABy}1uF?;8 zllMXr113Bd@_q%`GOe{NVi52yWpNB`c9ei0CN%mdI9!!^x{n?Clr zNT7uQCF51|zf#Lr)3|oaZCLE$d5zD4&qD65OtVuBN}Y%Vc2q9Pl3_E|79MLKKfWN6 zsd5hKR)SG&&@Z|QlK$p!q`DlR|4F9-{N^Ww{nhGhLRj}2?3(^@F^X=KKz@6azmvmw zaSjb)x%V3Ro7B-MJM>8xhgA~mrjtLUnkGefe^jMTbG4qj-r}vXl++Y2DLZMvdp3Tc zY~u|C$N~Olef$c?VW1>=7yT?#6ow_TvMx1{CZin?=cP5LY1+0s8th0R^m}zf46bSJbD>aN^e~yGKlZ^>r(Kw4q|FJu zh_9l!tVP84JI*fRZ(iZs{F68@P1FElBdsDggyx8J!hk*=J3e1&;FQx8)!1AuXuh(1 zs-7&@B*j-ceW#66o-=PaokU$2mXx_8)@5Qp+1suZvC`Fa`WXIqnz-@Xfm^akQ%5tQ z>YkVf#cSs4NbahhnB6m9+t~Zofs;et#UlPq50><;#SLV7OxcUH6@#w+p7hT>;Bhdj zfk^}~-1bB0EB}ScY7g>>_S&b4JG6EXYRa!@q-p$a@tlci92P}Z-=Pkyf_%m%`v{HK8*Y-x>QRWf&G^OwY_dNR2i@F&8mTG+cBX#K%QS)f^l2Sc>HRGOq^Rn|XdVI2U<)kzha* zpwJb0hVE4}LrK_QLD%p5&j(gh7A>>%?F**m&`|V=zf~xa1l_5{zujIqTxFyc=8kVK zeqU@H-=6H~#!hT!;%>1nygsZuDw1ditP#w8$%VxY7}=4Z&)@Wf1syHx!H8??44UDC zfusF+Q;H9o-t{f|gx`FG%Z$u{OZ)yf7g>+(W%Qz0=)9oQD`w@ue$$?ST zBlw{iu@eM-ILuSEWP97^dfTB%Knlr>beSu=5+bh7#nuOV~3fMX_Xur zj(r~B9IM!acwgk#`d1@@*RHZ8!})yvPpk-pJax;qTpo*xS3Kn&iW%x+toN0j+PiBj zAIPbZyzpmaFnV4LE`Yf`GD?97qqJM!H_|>vGcSz0qHl+WyyYV zDh(TWOcO@7p~7WxRFZ4Kt2 zN*(_TVrFG4ApI^kYqWwp@wh?DNA00!ul8`JNFKpl@(WbH6+%;bWHfzCb*m0`V`GgW~`~1a}-H26K%Y_=LI^?nVWv>n=WD_T7l?N^e?hSJuBvp=5_-foj0F8ug*H1+f>Cs=y~lpsH_8l!w$l zYblJMGh>f@k%!^Qiv#35X_%!f$a^8n$bv1WDKG+)Jnbi?jw8#wBFhb`wzkh18u97U z&AZyXH1lkd=uUMP-ngZ{_&q8?Zqt`rzypQde==NRW`*1Xzr- zii(7+@XryLdgaNJo151xBUwNiJ_||0V=$CcT0%n`aM^OlIu}L*Ls`hC2TeO{36Ks^ zGGhM+3!rpx(}+SDN=2eu!=*AofO8=n(lUOVa=ju00Ik^u9pP*KCBr+`b^1%1jqKnq zMR6GQ$9(d4WU(}e&ra$yc9DG!R;P-^b@{}r#4d2p?_dA9wA{Bw-JeSikp=vctP}oc zg@!$ghC^fre< z3QR0?1)U?H@l_>4x2Sfusx$#p(6;Wf?$XKeAQrE%8+oy+57SA?CKGNoQnF^q;P*ia zV<8X#;3+|XhS?l!kksosOCdbAgv|*wwV;=g5Pcd>LJDMv&CLhS3+T2}I?ZOSj$%QG zQ0AwLJRlQ25${;DVuz4gFqs{pbdb3Zwb|T}u`sk?*%!F)o9(+f6gzo-3Ye5R!!nJo zQ64+`0%vn$J{u9d8`nM^6vV3kl>S0>4N!A$0cx;#Hr*wtuDf5XslR#(D^LmUDgX6G z8s^LbY9xRw@~S(>_DFQujtomr=H~g3W59B48oymuZfnd{o}Ev{of%sx^9RRj zklh@LIHXQ36AF3c*WBO#sFWy%f9%k7Uo~JB$algK3Q*O*m>CoQYHc}L@*Ff_7SW}V z@?jcOzenqu^*=R;kv2z{N$wj-p zc0{d7GC14X^tHVe^VDFmmKY1rL*C4vU5_4pA+ksbYnH}Fu=)QExZ!u zWE8a?o%voWpJ>f%qif5v1Cu36b~0cmBhC>vFjJ#_xzu6UmYxx z*)z03i+MImT+|U8vBs|%<=_$T6!q@mqyT@4@nHV?I#f8&#b`x)JhE)tK_bm9s z{ZDo&V!cAd$qEL+^54&}H$dyPlj^CFwcSE34U`*U_tQ}9p)MeL+R1W^cFq9|ray(H zgjt@ui=Z@&8=X1Bb@#`EnxYaJGW$>h)Z|s9^fI2*u=-GZOK8CmpJ8F_>2~7lq!gb2zExaWuZT6 z6&buYILvWdzV_0vH=pS-+UImVwQ;^s1-LjiR=}0YTM`c zS6S9}d-)H-XB@j@qgNm`G$ZOtAytgF|B>+~)Y51r$+}!0RPi`>14(({8MKU+MSx_S z;)R%tG^h)SS{gfwKyWHSBOq?5wEDzTgwEoH@AKVCh$eRIl4Yf5whQwtst(i>Z1r>0 zJuqKtNHnipX1+;{Z#Av&cpXo%hj5xyx1(zZSg`nJIT4*0A=hB2dBCe!9K49Szg0Ug z;~(MFG%V-XgbP?#khW}V7#h&-N`nt;ydQd(tW#J(W^CRlNuzT%lg_CmSIpa*zQw6f z*7?N!dJdu;uHMO(1?;1Wp$)KbBXsFdwB%ED1`)4ub%4ZgDOpqSQxQ+8Qc7Vf7qrH# z8SFJFDhZ|7USjPI1=199_`MDunt0`(6IEX%|4==ku) z(rMPkr!|S<^%UpbS`?^76C-UZ?+RBg3G?m96cB6B`(c4r1&4Fr6kH+G)cWtr4W|yq zVrmL%W(9@!Kto52FR43;Ql8U3Vu4)dbUUcuk{-}DgoOS4&^3D5nq&b*$%?sKOQqEH zyk)dw!V~qM+|@^BdHeClibSW6jk(C^gXTgM=&A)(HJ* zZrq@0S!=9$8;d4ktHivcTcv@bbeYwwd3 zur~|-ibZlw%CDtep$sL1EtdVfVnO-hVPe0ZiBWi9B$T^wW)*(X5U*TG_hz38k-GQ^ zA0PZCV|czRnf0-Ew?}MQSM&o}j{e;}bh~(2PGi!qO7n$jA^Gpm4<+tn=_wI1LwBcs zLr_U)!)>Ztciu=JBtzvH2e;n;w}4$+KixrtIm!M*-#BoaIuT){AEG z-z#3HnqHPRnc7foKggb)A99kP)bCUvT2QV3<%GXw&X17fD8o0{2K;|L|KBu>|4+mJ z>ajBaS4U`+JJA7*Tp2W}>z$g6KHJ!T+dEzo&{ny1zV_tNG0ILen~+rLE3!wh#c$9V zSng~^+9)aiNrgV=hfI$3jsR_`ZI9H(?~Mv&hm_plM)&~NwaRtNx5x|E zH(YD9i!z}7ub+8CLSZk(_US*-b`5`3bPwnn`_9GO6@G}5R&*TMXLxY{ioC!Co?0x* zbQ|QFEqkO^#KEn`0hLYpzC$MMNxf%V*q2TtulDRpqZlV6skB4PR^LTDZC z%bNsx|0~}LJ;15g76fXR;fQ8-4cg=F)A~pEfp}f!YW(kof1i|hGH$VDHm7vB4rpxw zblk)|u!;6pgC7fYDkXFTSzq;sERXXV7EP;SWWN9jwKo+FWYc4FXpGk1WCO{qXwgur zZQabfU0dU#kL9O?ybt2Gk>ZbJUlbLK&C=`Oe|7vchK@}%?N~fm4ssKvU1Z&;@@f27 z0Wasno+93V?azdHC7v<7^?#La4qo5me~m-;+)QTpH0%XEyN&s*1~!j+AxGV}>e1vG z8{}ir9@gOok~c0F6j0}aSR1zf&5ldmCkFWu|B!1?(n0t^>FC{;_*`aIKW4MiGpaia z>TJ)HzEH43-XGK!%|uTB{$e2Vl(kY7V8#1w==hW4<^31?e=c)cw4d+XRdxVXd!lB4?>0w#Lv;CD9VHE={ zMThG%)HI+gxB8*^?PU{k8T~=vu&jXRY}-o{)-0BdUv!!Mosq&8$r7l9Le@=|FQw5c zE|=4>_?Wtp#1d?>1KS+wyz?L1IZu_h&xqSd7)gvmtPoEu5Sjp~WwJ~)w|o#tLh z;j3Y(^M9x1-Q)$Yw^^aIh56t^?bIj#fB-(OWv1{J;Qk7nR5*p^bTo2YF8!H>geNU~ zl{*<(RX7>t+}~Y=+~?gMMUMOYkLCZ#!*qE`yl4QD8H2q7Tlwj)jyhd+O8;+05_Mc1 z>KSNeWlRw)Fk6-%Oq`~{T8|e#%n{$hf3$`<rO}#4f0?_ko}3i25tNL9$O%QvN5lyZ6+kaPg<@ zCsa0qGS03$MrqQ|ID|T)jzP>kHkOOs?TH!4>*Y6xJjkG~C6MK>JCB)OTxp7ET5tm zn(|RM;#=VdU;h3u13T2jKxC1-zrERweP}O+Wk_i8U@X0p#R$^EKjc&(Hd@fVmaUO! zDgQH%ujr5D4-H7l{avy7jS*+14G-T8bld)@bM_X200 zH=LdfZ4#Pv)v#Vzn#5CZn^m!an_bjP(1^Y2@Oa|z%R&PKOyE=L`@AbLK*SjWoPvBh zoe3*w%;tKJ^Io$nI0`E(mCl~~iaV5r{DGBKJZjpGCtGPr=CvKe+JUfylEd!UjP5fs z7Bdf5H3Ec7vjAO{yFGsJU9)Bp$t&_JKzV z%57U+ydCPrXw3b!Eh>bL`>YF}#dC_mgQ=(B%~>X!#)2BK8E^7BNjxK2;xji)W#}_ zvi!oY()X0k7MifZVZ1EAwEtdAM(<8mbEKwnH@RqAUl-eW6KCjldLvx&0a|N1i?yJP zvVho{N~Go8v79dD=LEKWSSR@idDqd0hHt_--Ai>9Iprv+DwqxGg)Y2?IIe$c_d!?( zf6WOT#q9{={A0G5(r`4(c_8UV^!WSC*Ku9XCaj`z{zyyO6_4-m=`;)R~aO7GEFPkVP@9mWZh zUrYH?y$`?MoiBLq>D;AJ;~ln&u&R2VRL>R=S+%UYoEVmI8*IyiOYTNMS0{%+ zZ}N8W<6=;R6XQp^ELo}j^#IldNw(LZlQP#GEw@-N&WIvo=dYEhqsQ}*d@@6z4X-1GrkwyP!0A84-gyk?Iguc3gorNUri z_+$8=u0#rw+hgz3 zv|&7K7w|tQwuZ?Jn;V+u`;T||90P@g0sG0=ylcGN#MMWX z(p*ZxTGMYNejl-p37QECv^8PZ~X34PZ1TqoE|`E zp2ungG&LA;bWHq%?_Yy2Zn(VX9OSZp*!`QkNKSH_851n^2wEkr{i8F{O!xE}R#*fp zFw~LimZ^e;nM&9vnh@Qg_pU~cKCCV|pU2BSsLUBWnSW#J=UmL`uS2gkw?uE zXgJ|>hv2mg_1hSa8MLq#w#==~4MI`Nxv4iAZZ$Hb>4#e+Vv*PMT3=YlMe!?>*Un8P zrdg1&4f;-nD*GxijL7%#ACLZRXY;hC+KCSAo7|4~Q%4J3(@JCJ+FCz}1tgB94qWfS zdv=Wf?acyxr+ycK^muP1c+-_A-HkmK?`|*bxTbnJH7&}V&YyB{Zg4MCN?A`i_e{#E zxP=p~O`7$84(?nU*ZTDNkO_D9zq`hCmMMi8Y?unxgTaIaP`Tf-sq+^epw15DMsuyJ)Uc2KA zZDeuixz8Tj>U_Q$!W(%1y8iBYzUoHm(A&-q6pdL$Phml)M`sq!WY=`qA~iJ;i5q>Z zC`CngZ$3v6#J@6masPK#UQ<(k`g5qMY52G`mD@H;NPsWv^F354vkqh^?&AKe#z>%a zU!R%my;stWhW(JN*eQC`7*|dUYJ_{XzI7%)LBB-y9^{u1DC`{bp{uRgyAZK^s=}ct zwF&6Q-4%1g@QP(T09YqB>FCffgCtqWh_QvD*1NQ?Xy8bSo;}}-`5Ik0&PyM{J@(cK z0%o`mF;4I_Il6>JV<$Eqg~d%_)mr*UTf|4alFq)mc;>IHl3?s~81Z?~6OG$K8jC_k zmh#|STV%9#W`s2Zjn|*8dOB*|Voh7GrBBVTDQeRW0e-GpfXZqPZs_7-Q87y;L#gj8 zqn9icOYniR`WJP9*m0~vqG<3NfNaQa8?8x-NXKucX6H4_1M#Qut_bz^R)LnAcJuta zi|BvIm)4Io0@;J;!GrZQ4?^}mwrtq-}`aY5BDcTU!{#2`_%wP zd@y7+h4Y&W2nfShb2t1qvxn0UKs!ue^dRm(%v4~tNZ>KGKDEdKs@3b=i@>{|>e9}& zuC7OGvl!>nf7vK0HP@ls>w_4MhlXx?p<_lzV3c|EL8;@>Kv_`@1NzW?9*$}oG#gUN z#));rhKITsbVVp=FBu8gZha~;KF@HkuU-g2px_yMTxG0X(5@e>Qpc2yRtC+HC!z{< zq7Zj^Fl{$1n6G>mj+9dx`M|%VO}#UW>1fxW`U2WKl2#>)inYpoh(e3$0-yfffT9&4q1S_zl$|8_qAY%J&|7yZUoa0vo zTSlu%QR}~~Fo=dRKJAA{xR|5_KRF>Tl1xW!+9&F`#_`VW0<4q#$n%jP&mm!2_t?}D8m=L9;jVuVR#`Fql{*)T%bp>GLvvmW4=kgOuz@iu?C8(O`hzIZmD zY*5W+g{{%~B-*0dE8wgdT_Kh*6u_KR$N&+Q7AN?$M87#}VWyfK zj|PaNphw20JJ;8umogoI|J!-Iod=7q1m_Od@AZOe0+K?tJqEplA;YqLQ_8xleNlK+ z{JE~P3Y!ZWdEiP|W+OQQgjOavPH9JX9hEwfSseZQPv&7Xy>jkWp~9v#=Y z!2hX>4ZI%fh1*Xh!RZcr1!{tT*4!K}6S7eu|21Q$()ml(+JF9PKC}Ng zby~|y35}djhZ2TAiOa+oo@qgVwRhX2NDl(3q}XEaD=%U3VJ0&22T7G1p7oT|vkEPk zgMvk`Gf4q<4g`Q=8$I7qcxrkz@Uiuw8Vx~GiHfujQ+(KyzHGZp)Bo*woZVY7xvwm7 zB&A>Fs~b7qR#l?q89aT{+BCUEX*<{n(EpJ)SKrpr)nOfvGpfvLm=~}n@&$WC;#pQ6 zDw@0ZU1evJNq>Bwuw$Z_RY6)kRi~~D-o4Do59AwC%Z_HG%vr%=s9;tHs>oNYiy1ai zvMGMW-|*ZC-y{x8xCG#Z?QmzVty=YCGI`xu>`b>-L2C!wMJCN7HL2t%Za45>kNeC` z&IS$}-c-5t9It=zRfM?(=#JxoZ_%MHP<+_Zf3-nQ4y!zXZM zQ=#%w<0M>iFyB|XFTXM5uGQ)zzAF!S#g~!gS@H5sc$(uj-Rrx%CL3hoze2x=`=Gs1 zq#xzEtsWUUlDJdK80GG%E|)Yo&tt|LD+UN=`qZwvS;D+HyTuB)lS(SM3$Bgac@lEQ zFOfYUd;Vs-oOl1Ba1(ZUabU*{N#=J4i`EqF+_E8lsQ2865<*b3`+bM6)ibK9TKv_& zW=!h72c~MFnbrZBA#a~sal9zw*$jVknDUd&8XH#=?G(LKt7;kEGfTb{ms=Vg5Qd6H z9w|zrZh?d|+DdbbT;f6iSwTMe?iW8}ok0d9S87mDV=)!qNWCTsV$&Uq?Z39D49&f2 zK7Z4K*D!*Al|(bjZs9HexdElB(*61=Pg-7G7tFCZ;?aUw^V~?|$h!!7#D@*vDoi=v=WhNy@U^^V6r`Ags%$D^{ z_rsWBGb@L(1J^oc+i{RndQD3djop_iD7|v49$`6t{bZa zo0CS&uq!Q1(JA(IC+$j9&Id^>mvA`^579@?>Niq8d@E@1n4ZFFTn{YsK8^ZB6DlQx zPa0l8b&gEWqrdbwzN4909wYMAq9)@ei}45tCd-SWH3Abe<9M6}3yUk^yRav&&Jmv) z(y8k*_FQZoy45J)TqAj9X1ob31!mdqHKoTmswt2YJqojSqr3zOc4Wz;K{tT{P(I*Xph?-Zl#^$X!mrFG#tU} z^wSfJCayMMA%!a_o76TdtbC}^Z*m0F&ng6qPYiO%=?9s)S-YcPJ3L=sNB*+p2t&C_ zim8Lgr-U!Zdo@AX{31eKR%rsdYAAZ7?gGJQOt}4c5HgckdZSxb%HeRo6^+@CW9$Sz zq?UX{zE-O&dDH9B-ieOZJi2?`hu%8)(4#@2L!Nco)!#_ae93$eiIC-mTO2Nd>Du&^ zZ*|KOV!4bq`=Qlst(~&z*=#ZyT2^#^hPgwtT8z)8H&plA4R&I<13Ef26FR)^LOHh% z_Agp6-|p9tJj$=DX*t6(U2G$@n3w}PnRl#}bbJ2Yc`M9qAXneReu_ z(n-hY*tTukwr$(CZ95%yY}>5ZcBa0+XJ*!#7thQ;Fst6(b#7GMXRWjMzOM7xKXru+ zFYioD=zF)si^~M-^Z_>#x9_=p(4wdg5`CMk;6x+nrO^}Wqj6ChKW%*R5li@Mq9n4ttBWYwbDXmQxURZe)K4=h- zI8IOb4Zyu&GvRPW=gxh_vZv(qCas!XfYMMxJHhcB++$K99*l;C zWClPNkAcY@6u>_>w!VU{*?70_4Q8nG=3fT!zY6HYSFSNKsOlC&@RURUszb2OUmYWa=|GPmHt zxmRM|Ko^KVevP(~%ibEMM$~RJsgqJ9_yku1%P|iY99oZmwC+3T^mC!4-n(dN;tX35 z#0!&-k#A^t}(H^O78B$fG;ge~o3K;0Z^_uWnk;zh9OFhUs&-T`d-@Nc8&9s+vFrvBDX;SoLS#2}F9s_=7S*hMS5YOHX=)9BILS$y$f@U#E^CQl>_uF3h zGQMp`)GT4rtRSjW7x8PlRGZI@5d$AaWIc{YnGWkDm3-Q&eU}&c}U1#RU9F zZ0j!I7M(UH0Q}wi{#MBmy|LoPe?NR~c<&X?#|Sq>fDKT|XnD_<{k?qJgW^DrtM5UM zg;)Q&td-GhD$Ep8%+6KHMhX@{DD&ZJ$i584il3BC2M9)yNTWhu;?mIVzZh7=G6sbJ zGx3CXe@BwT`mz_;b;LdUxH;WjZ4A;!HYVyD0s7>)-TihM zH$R8dyu&~!5?s{jCD_G9vF=eaaY}QmmMGO*NqR6Hn%mxG{+I4aSR1FCn!UszX{Pp3 zQ!0^MN@Wjl=Pm8Bc6zuH<`LpccgtW^%M2(G=1^crZq%lFP;p*Qp+mRx8YIIp`iGNuv~{C^?xGM8;#f#RF=T1L&(rW*&rR%^h!IRvhLoYLdCq zTw6La=nlKa?^Upv(0d8}wFr_BSvyYQY$xAfQQy9pqIE$`evuY&#rkiRVy(XWWRUS}jz^!VtLm-}k?Ci5P(unuN*}Y)HW8av_+cpd@ zq5^s_j~4C;y|qIHm*1E2?521HSef9tr?I)he{Fy(2p&)@I0(X8efT`a)&{YE1McZYCK*3gtV)E+V_rBR0Tk0ciC{RR^I-ZNa z!GZhRa6$kBPw)B^p$I}mrMJZ#Pw357U?wXDl)U+E9_wu@YcTal?T4qPets8Q@I|2>Q z3>LcSW&Fk6Nl;fah73SNa-`?&7`8?tS1O^L+E|#H-q`9XQrzx=yMbipY4g-A> zelocSVZXp=3<_>BtUuiH=&mr!*o3p zc+|-B^CYyb+H6v$4#siXlfOmldUbW!Ql!ml%fr2eB`=NCvH--{BCB^P|nBOG^S{J9?w z*5ohIy(3SY$rq6J_p*rq&%pqQ$MDoDNf?U2)9myXIi@pV>Pv;e3!UmJN#7i2+NT6U zLRm=J4CY(DrB9Ljmf|C_+DN6GCtoOcMusameM+6L|$bk8cj-_!pxcxkHaFG|J&+7IrMKue`2TF2h8u2%)2>=*u?v#vk)#S{H~Ne zvr7Kj4MDAJ1|tb!bg9BSnljH7$Au0Q-Oblw9R6C;W92;GL59Q;`m@feAfQ3D3rbvy!(yl`qp=vzN_>~$@@ zSLnLH_=wevX)+V^lYJ?_;m-Sli3|#-{y7FQc3{g$l6dIWy)9LFC5fl`X&zv6tt`5Ae<8))VTR zUl|VK9KX~&VtnILQ#BiXBY8zP={KqXQY_o+T z$-b%rp0PT4|F8Q4`GBJ4X_$rVOwowKyG&uqhy!QAG!a(1iQM@H~&*mu$wUfN5rCG(uR7_b6vkcUzSWB{#{+!3L@fxNLb(=!x=U|6G6=Kk8 z6&`RvOSh5p-J^Mx9{M?w6ArMY^T+<^lBOuX@oGP=(23cHIMX{T&A;$_u-<9)hyX98 zwoCcNibf|1%K8!;i|J?vY0Ms=6hW zXnxMK!5}%QMb4vDy?*{4TBE#&ir{p(YTEMbVsE4`$A8`kLQm79eSXx#7|VROGj_n7 z@(rY~-iW)p*OVqNq{;43v|O4!90xr(-!z-<&)S#$Ty$B$f=Bq}8_?tU zLqn5kj2f~~s(Zmu&F)2SPxu77V>HoL|9m2(g-uJDI>(6D?FSz->9L_rNepuR)ooUWBwo~b%NQwxO|nuc{y z6A$G$_JntD4s#<1$?s$hDwOf zSrpJMP_q}W=7*FQduokXVi`9itw*>4I`y+A_tY`&w? zT`5B!OiIu4y(#(tN#q;I~Zye(hR0EOlK|vLM4eR9Pri=Z;SbI z-;YhGS-h!|;cWhA>PipgFyJ8yq{{|T{VWm|%RodkNrekE@N7gltwQ$|>J&JnNH0(j zSKuZMaFDy%V4gWFnnQ)a9HU=sdn3vmq7gui^<9sX(L+~)D@=}KeoP}d=4Jh~3~?hHp+eWCQ!s3Qr^H$Cy!rc0lY`N+YQ z(Xk&zFFv?xfZ!~)itvP

    @ifd-!)1*Ecn=P8KKx)hQEopFSkyJ@-Vy?(|BF?6)6G zb1>}=ea@MnA-Xj>hcv!$TBcx1WL_>r+COfX_67Ar>Z|oeye?A8v0(3m-1R+Of|FPq z0^=^}_XtOaMffyW?+q94U@JM{@Iob2sfxTXap%2n5h2=G;lJD)TdT5)qprT7vl3(n z5|UcuzoB{^=~UQ5jLn(25rlpu%$;8^^5UYwI&z#p@VfirFI_|2>IkF% zo=Ryl9I!<{D=2ttb6z!lk4CDkeGjB7&XG08?b6*{-$eCs`|HA8(tT4%iw&qtAl{cI z=DyKXvzf98In^e-)wiPD189^?<+#x-9}x`F?H`N^+c}(>5nULWgC7^|0=Lse5WCx4 zuwIRM+q;q%@w7e{YZv@z*QcFhYacc`;(-N8T1f4p$t8ea_qom>$*XwNV$gg5zgbh( z(pFa(4_I8qDUzo*w&@$c3J9HO6sKa#f<@F3#$U>89uOx3dUK^m(e95Z?Yf-eHI23| zk`$&F)JG8QEuI>#Yf>sBQ)D=#aCFCk*e;uDb;BZZnjQM$ecqp8(dfh<2N?ZdI3mRoh|8FcHFPL=CZ5B6oS(rOv2Itm| zzPOT(8LeBa5VYy6>{rI9BMhC4R9es(?=_yQeE&@$3nm#tG2z3t!cZ+e&QhAX@PSVC zUz03|#Rr9ERjncoC_2o1ZOW0ueAkVapAbGC{}eAW1-WVi+J<*Rw$goLvD!z?BBH#< zW0}dWu{|UUa=7BwZjdKSL|^6OS*ayns3a|P1h-R$_O#w^p%f#wq@}8ESzwh5@WYH$ z%G;9QpektE)20FbT)N)Mk;ht-5@i-Xp#^^yK=)XE!(w~w!));xAN>FsfBbMtjck+c z^($_1v!01O9uj#@TdJyX4lu;E8uF^-i}UP$!b=X`F?~wCTo_}#OfBCP8m*g|OnRc^ z$x(nkmK5+9C||osZQIwK*k$xS$*Ivdg!V{nhZa0gC?ew3r=>wIkEX}SIAi}f!9Xk6 zyryhtdkY_q&b4RiW%i`4SyK8_$mo;C7w4l@&m8#oGSE5OudPdGo%C8%Xq7b`u?c`V zE8TC?uddg-gQG48`3sxLK-P^e4U`u0E0tpx%j7F{$2Y}H&v;k3&=#&bMHSrK?p5M| z?50u^oE(5}E*#F%f&`|t^wjdP{DbT13yR02sF>}PUTS{h@ou;#)f%1_DY?xUH7e|< zxZ5F{IvZ*@4yM~l1@wr$vHf-##LWGGL@E~V?Ue-l0^6__3l`1Y@M;Al3P{};7Plvu z%8W(tiQm*@?_i0z5bhN6I?Gr%C#h$Aq(D2o_rGw z$O~>pRDy6bR=&Oeuundmm_aS*ky_pokr5x${GQ~8!;Nvo`d#Qb~3 zIC^2-QE3nda%n^W&&jkW%mWtzVSh;wy%i%T%nDniW6vP3zDctJ13J=(HSb9hxuaII z@dmT>PPH`EfVG$a8LQb}k|t1tb-PMJ#jA)i@!mnY^@zW`X;~4sW7aT4!p8@gGZ}P% z@NBn}8O4DKrL`a2i=iv^rz}5Y86kym!hAFDj~#m9KSs18i<@MSi>&D3g1BNbd53|M zWmONY?AQelT6#xYw;*kRVQ5%h+@1DP4Fh?W`0yqh*M!%QN7ugFljpl(ly2!k-J>8@ zk6ed*w(k{v_xD$-C0Y5Ck~R(Z6};8brK0jSp%R82C+ioc{uMXI7=GhV@SrvM$saBt zOTWqC7OoD7TyWCp=jAYe4DHQ7o}sy*R4YA=auwt9-n|v@uV@iw8J!!|-Q$@3`vI_tR_TL7 zbg8QeXssAbCpvH)kgadU9j^C2B+p_Etn{xw%X@sUn+EUac_esr_{xR}&3D1ynQ$F( z`kYMeO(ccj(&vqx=FnkrZUX!)?5Ju9T`S!8r3EzHtvYNBeO6zVdvDLRb-1FRBVdQ^ z@_TcvGd8JItE3EVh_qWZEo!%<*~gOLmGtxo8wEJnI2K%0Ov^J+GzN$v(`ma_8i^Pu z|Ltp+*RX@NL7m(MeR2?IXXGRuI>Z)C51a6d0MlD06O|o~b*K22dJ}U&h~pv0O&Ih5UBdDVLuv95M>TXIwS6ufy@@=tzZWcBMNO~r_o#eFAA$GX+%kPWvWS71 zQ?n(G+0vc-Xx~Je{4NJBPVENPPfg3bC`#I&d7hk`6}LdrFF}K5-BWi>xbI;mJ2xRW z&6mz$nECAWAduZ2-N=FRH{wY1b2a=#Imnv(3(P@*_6V0oPT`@Oz5Ru+MX$9T$KqR1A}?f zmL35JxAA$BpK4~7;q$@SK5x3*zSyZfH$JGP+_|o{jrlpZQ+D`g)h;_MVzUyRARUn! zNp4GaE5emv?=>dSe06^_XFJNk4bKR!1+IVgii^i(l)Mn_M|?%ny|+7Wc2eey6g%W1 z6vG}k?rI+M%XHz@J(_jzKfn%ES#+sM4JBt#Re@I!5tM&e<1Ra*K)=cYkQVR zkOLq_RvgvNeyYm)ss)wM;}AbdvAF9#35u`toYBt6zJg(;Qziy{t1KlYUV0ag@E2>B zRO>2#12%ziA3FX)KM2R#(f}~>KcxlN-Riq&jvd2dKcjFzY`v(-odT)6ve;5w3*+Li zeJvCh+K5%^!t=yHet7WCpSAkBJ(~i(SeR|DWFJEYncl#f&RkEnqO8dFiD<>}qXduy zGCeOr3#TW=`iBQ3=7PyayfAJSUuXVwEe(ow++n{*G3Ylwv18wGU6MB(p)&WtR~f9W zMmd@v55Cm5&ug9$!+3l7OaYB?-uJjP@={+?NERQM!fA>NlyzsUSCq_z=&4cT3q{K#h~HE>79QF&FvLsrlc(- zUZ!H1ZcEZLo=Xs@q1HNXL|L(Seno4d@4f2H{ieMsPPRXv1I}fqw&kK_G--_YOQY~= zt^;GkL_UrX{KbK8Y;2J^{P!SqKI&El!B!`5 zq2Xi)E;MI1JgsBh>752m%>ugE>?0xUGOlymr-_Er0y$}Lqz$@vU(&W0qhKS z5qG(^khl-?0YwDk_O%!h-Ni~lYrHQt5Fu72$&(~!a4(WlWtY}25Lbg=4E~Z@hen?~ zPhLDZs*jkVKOYo-IgFDFkMNTU^D2H7l4Zq{Gli@kr?K;FRrjCvjD?(18;YFGo??+O zl(Z5K?f;1x_mk=ErhL!*lsbt>wRxXr;)|E1)Ry9lCLsRicFq3CyEU%r2k}Me)Xe4p z$}ipZYUzBnXwXX!UfO&RVrw`ap&u#)TczGAmy1uc1z0Z+Rhg7B9{21ox1&HH@#eYA z^RM>?86z;AQrx33zv2RMgYBZoTien%maOtGVE+50_{Eb|mPlPVr-)uLWoF_>69!|k z7N1$U_T~&#Ma)1RyeBg|abm`YSYJq%n& zf6^SaJCyRrdQ}^H8s4_hKZvC+mXp?rW5KQJG@UTqF? z+7VVstCA%U&WrdCOd92F`0wrKojtzTPyE-NW6>9wR&|N3v$O4PWKRJ-S!Vq~&TEis zpv7B}#HW({cpBtCBNJ)MS>G+!?kP|_*2UBbnO9rb_^XYrOc-y2y)AH!dXA$vIYXCA zGlh|b@a3^?%~}%~x_dZQl9Hn_KyG&gLCRQJGAufO5p=WB^F1dquek4IMwOYfgZs|) z+S`8}_Zjq&WymRb9xOqPzcL3lll|yAA3@17-I-Q}6L?!KPGl)G?mpY%OwVPAEdcxQ zlNVo=yTL}r?4K~4TAQdMNi1H%lL%+!&Fs$TzKXgP8-xq#bIb^hbC#~ZFYy8&mU8H<}j25Fejkv$;sCWIoV6?dI=c?;>( zzwYBcQs>rW+$*Fv?VCzb`2}biNdOERw(?iNN>VO5x@Nn=W^|jW1D^eR@Zp8Dl4I&) zQ_7jvP%m@#ciz5w>!EDCc#%%)35Pn&;4rnUgbcW9K+i{^L1WIAs!>xZoST!jl^H*5 zoYqxZIw9)CnO&-8uZ@Gi*NM;J|hTh=Gqn=ow zH%ThL`G$0%3-|ChkL-n?_D5o0_z^1HH3bcVV%5e7dCD`Yc8!qSe*4ZV3FI75D=MwX z#Qpx6{VVHg{u;@ZOU*gq;rYYuc5L(6$1l7ZJtH0U7+nBowdC?&_d{IdHz9iHDJ-W+ zc61IZUZpl`cKW%N#}Dkuuyfhoxe5~$fE*AKQ`!)J#Qc+!qD;O~Dq6(4_DeBG6}DTKy-B{mm()Pbn~{G-&BnwHzcqn)hwlyUto{3Uj{~ruG<+Y~n=76i%bfur z4hU-6n#qb&UeC7nsj?E;MShqtEXAKvg8FdJ*g252c4)H@)~cGxenp=XRRP5L)BlxL zMc8G3q@2XWvkEf5B!CJ%8b2&LLr8}nTQ0o^Loelf8wd|5LzD2QOWQST5>SY7))W|i z@!L4apEPgJo#5*PvCJ)bini&cfwmm`V=I+DaZ5)ETo7!UQp5TkXPM1EGzn-1891|n zt&CRXHv}8Z8xl9p?8lyB+8s;|E28Wez0PD>ejVE@fJ>|g_zcv+9S%GU?Y%leSJcv1 zTrmA5-{ePwO=>j?=>se=V07|^-QX;WP%fnO{k}_l`MHf1rXaq$ao~&c^8EKSn;8vu zUG&CMpyxI2Zv&-0hdfjNG&3#DhxPC;W%4GLg)bO_G$9E~)~pK}V!KVX!^qy}^P zY%nHkq3l5rV_>ia4%CA#LK{NuDZ>%Ik+Z@aLLNz*+Lq{;6M3KldMWWZ#R6{xEg|Bl zfXR@VPr_@$^_HRXMVD9?Vb{*a-tZbB8PMjAVyEkXfkWb1<<Vc3l=Q|-a=Jg zd^e>POc#2pF>6FK|2u5t93)vpo))LFWc&}$1dXcR`Eq>W)&PDb786O1m<;s6l#NwO z%(iCo*!4p1bT+Xc>3N8`VzB61j8Tk&sZr*t`bQ_4fzQE?i`+e0m7KT%E04rYQr;Hm z2g7;B$ElSq%-N4PI$Tc)>POM*~`5p z;adWy;gTCz(Vgl?uCU>{{Tlk6Sja*n*$8jg(e}|cnmlqMK7SVcg>}W5Q zr`??Ji!yCw+`aIm^1=X;E}|PYqB;k76X-&*y}g?~XT=kvW0~6Q})3+e!~T>PeHO z4WFxS^HjX4UY%jETG}pCtEFoBNY|uP~8gc8k;UDC$_+#516hj?tx0>J#bi z6J*_DCY!~#g|WmrQE`fq`ghK$SUyBi-U?PiDqE+NhkrHDP(u|8JC~8 zx}riIwEk?g&v>@y6VnT2{wlUM#~<*zyB>%!E+7cMT^RLJM4QvS0NDPsgKrK+bq0%e zG`#r1ji!VBtFqY#sIdKAH}g!mwn_Rh=}8!%FSyyTp4^0-LQO_&SnvSqkFn&2M$p#q zEg;;Px6QBp81Jx*+2W_^GoW)~MRLbRs`AOK57C@mMCid;W=6AqbXe_1iW1hF2J9DH z8sQDi=GpF-|BjL9^I|JAQOved7oQSq0tkY>5=pNy4G` zj9pB2+=k=*n=JwcqHz1^bBrF7Q~7KomdmXWHxBz6`(3+rrP74;RZC?H*eG=&T0z=U zzq$F?tu>W+YVZYy2=N`3&bk7laj!^EWbRj?m6(SzZ7lYfI0D) z-kNoU_4~5VzendBsDTN&;gdWOuAcp*${nTr4^TVVqJMA>96S<-?Mz5Jnm$G!^8*-E zn!}iK>GNiKZJ9lz>@E4ZZi?d*sC>)jX;szkDZZnQtT>9Ifd&y8Ov|{R7+49pveJ$= zi6E*Zj>A_xHm`X0V%FzQ`vvmM=q-yw%MMDg+#>mm#*wn)-KLQR zNmr9S1`f;Z>r^(JMmu$8tY7pOqySO4o>;FBso47Bqlbi%g!tWx52|B)hfmLl^mecb z-%;JxppqgIw_M^P*!#T$ih^~&qglTh#0E<(W^z6`CxnAuI%e=C?6+lfO6^h)fvlc{ zoISi4{qj0wOV(aBIS3#S322$Jv-&8tS>le-+eh@6gdf8+Fxk+4JH`>g9m8K#e3qTb ziX|?V&zVuJoXb0s*SGeZa9%`~p)s$PSyp2kfMjzl=;=+Db568KhhrWq#xaMh968j^mq6o*kb^9*b@^1cyc%w_gVlw&9ujU&QTIbDI(%NowkRRgQE9(#A% z6MOakqB@#!5{H;q@2)o&IDF6*&aM-K$u*?AQDZ6OcIh=7aS1Ot`d<7f$&=1(a?l!+m&8CtylBr=lYQJ2j zMEdtIdOJn7YLULU>ZAGOy6`)b<)2@chu5eCHVFqQ;-9;X!t2aKb-Qy_DkkFfudLpt zP)^0O+Wn@uQQp<$GKdcUiUEJ4LF>6=53?W6HI__GDyTUm)JnybMid(!sjMr_KLONIhWj`kb_rk4b zHN3b^_!TEjIxY|6HrK+ExE+n8>I>^EUn&CU=^vsKBMV2z(M=cBMPpfLW79pf@O%dO zt%r8X&(v*tv|dP0KD#w5)PtB}OIQOCDu0vTc%h>ULQjGeDI0{q`jx zB;0a(Pj}t=xh4!P`CthFW*jI|vq^t`J+K~}nw9>sZYd~WwaJ-L%xX*ub-pS7cKy}B z@m@)RXDO8!X^c8nHK_Z`YE(pzdPPpih_o0=B1L#~5X&n85%A`~J{=Cx;A~;wC&t1y zK(a5VigNrL{TT&-C=ybSzBj2W=`hZus8kDcp;FhrNk4w;VKcPyMLR1!H5hm~PwQ!g z(Wo%$R6<}!+{3tBnb{_vg}h&!9jlFO7Ccxrmes+Gm0c4q#o~kRtQ>Gtd_5z0W~kj+W2b_a|CVXWxBbTHAAqcwQR5k2lp2f2`@gW05j*@pAWL2yAU3obNs zD3!HD6e->|Sa7oW)I!=4FkQMxhTfOS5tR7zrJ!9S{Ib5X7>byTeO?@}9n!kJfi!DJ z&bzW`%e`m{Aw7(8oK*Tg~&ESPCGyo^%4MS%9_CU7p zV5N%d;5+~tN-LO_JHr1zAM!sDC-Hu```~~3 zJO2O2{6GKAWrSPpN3Expr|H$5@o!|^DI)8P#BjS-PN2!Qu)*&AOKs=h@;}K`C?|kb z57SZ8+8Hwm*g*?;XrF22n0Yz`0juukpO4mSzlTe#FdAx1oQF=CHJGg0pYSfv z&a_8XA)s6-Hb^E9BGPK41IL;q;eIR2Kv&;Sl$PFTn&fXgcOETxWLJ+^d>9$>ZE?~0)(CYsT^Y#eeIo+1ZOD-c1U3m^U-9bo~Qd^mH0;>;pN1It>j{;I|uE zI>|-Wtdl0*cLwQK?Rykjw-q;)57kdINjWdMAi4w5`&92vGu`LUPM&t0_R#Nzs z8AG1xtQuXCpcDgcscTF6lfIcC?Tv4}N;)thK;P8-@DHA`%J{KV)J=#sCy}zuq2Zt8 zbFQMT5(*k!F8)9>U$vXBAL;!DT%d#Bc_!#Y%#d{t7QAgDYj_=E9aOb`6l`d}eQwQ) z%e6~@AD|VGOA??oFL5n#GLHG+Z1&xu@04@EZHQxHLQQyZfoYz*CTNM-iG39&R+ZuQ zbpF0(+bR?*sRinj{FRDR>9qeP$@QX|F)X-_=fifP{}9e+0NesneriRnluWmWLQ^`j zS|ByJTU>z5960=;QF@nWDUA3ztytPmY*W{hc41_Y&0Rs=lJNc2GEKKj z^n{+XzFix=OVpD4fp(%~Wc^=OAvX-NqC|>mR;%fQ%>vrh)iMvkxX-MuX5a17eM&r9 z)f)0N%iN?C;;SRy?ZC{>yzB9RqkWxue@#LR9-I6#; zGpB>yW+|>AEMl4&ZyXMJUY`vf1dTgHNh>X}w3Sp^_qOd5H`h-3JJl-w3Y-tCcZDW@ zoj=NUN&UtkgP^Q4Kvu7f-@*JO?Qdr}b;@sY0KKl|+T*Iq@lYGkIH0DRKWfyVbkKDN z!szd7wOoO#$nHA8AJO)(4TH-hHq`O$_x<`87WXWgM^YEx7ERDe%v*yUr<;cDA9I>%Y5ok(j@SdUay@NlVB&G2hH( z1%YmWS@)!GALV;|#peNCQ*4&Xe?SPC*54A~&h&e>SH5(kMzGI!b@Udlms-rXb8J2x zPv9b|gRlyr>fR(SUaWKG${h({vJKX1u98ymIp0#%S_|vr8#{=cV;k4nBZ2A63`%k4 zox%YISHC2{Wd1oIwFsHlwHJicSOxSF`K^-*S-l-fH*kP=y z1CzBLH$=fhD!*<&41@rCUL4|jxf2)}0JGoxs@PnUP%*Sb|I}xN)(ji@^#PZzqJ%dJ zgtHSF#NT}f_Fdzl6 z$DYUJYy&%DLC7>M7b4Rr+L)NtM5cgZ^#~&uu9SC$&8+>#pBDH$0RmUfP#9{JcuV_pv5q>Xxd3Gr-WFNg{KU(f%Q zT5mmNeIN1~A>P8$-DdZfRbN_1|08jws^;bK;I6M%To!=JF^>Qh&RKaK^dpQXqazG6 zsy1&Aj#*Wku!-8mqx6Z5qNpig6cq3_48pL&7V_jdqF$z0XalBTGK_(|6O(6`lnD8FsS+9a5!mVBx(%1cw9VANhr2a<*Wp%+0ftgXV(NYt2s&mA^alWhDREj$vsb`~H1(fb2a8yHzWzbZ z9v_SA@={@BKg;zqJ4{~Q!V90|jswu{&kirH;BTCcnB1z)uyT;24lhN*{c&%Z3Vd~O z0_V}1gL6sV)Blm=@UY1CZRU)&OnCJHsH5ZhzMTnQL9vW@p(8Cwny%_<#xzf_9KpQW&@6Q)2`FKTQ@wsBb)2?94 zZK>!uHL_km-;K|AEbyHpIGwqrUD$5L;Ph*|y_`mb=ecZ6Okw&^zKc|hY)-@2YoTm+F3q5&|I`2fU0K z8bLJ$1zI0IGJeR&ZT;%wXq7Ew%`u4qTI|7OhnRHdPUnV~KxtS9?$l}5?(OAQ&LkfW z?;*#(k1v4~p%?*cDEtCC1~djC9oA)38aSL8E;O!w*|gld+}sUjEp?qbs*de5Wk%(0ptT-0FLRrlW|0+X4_zwc)w0-~ zg3}!zI}9OU8^QzV#qYzmg|&(4``VytdeG7!#kZbi^8Mwp^9-5e>Cx}W`xbe0DD>8i zV%+d$rkbCZD(f}vel@CASTy{wk1?HIHjJVYoOIyUF?#F#r(JCwh20|jPX#;^_R#F3 zPczu1O5l^qpkF&x0{>=Y8u>8UfZ#((H+zW>_$K6$l$z<$-O_M!SYTCKg$>_&^q z#7f@0z4XS*c`tBvcCC4OB00v&!8o8y*v62h!Ww3#itawIsv?I#WI3A8Y9uO7Qp{UN zvLl1qv+fp(yMlx$%`x8_>-FEWSdRV`l{@=ev1?F3UzUd<6&At7t0A`#c193WIM$KL$tNHW&kaGogeh<15o#pBeFG}Vt`u^^=NnCO zukT~4#Ja@t1xjCJH%?bnbkT7WNq*Wy+Cgr)E%b=%bh4*LcM%;J+OsDG>TZmffoRG8HBu1oF*S9m-Xs-2emOEr?avspuQV9>pMWydu3U8`@MA7JxpUJdH}m#P_~$d--y;xmgG>Q_ zliLfi!sFa%LHm->e3}j>su$=w3jR_5ncL44eQEQD!a}w$mt_!Xwi8K@vob5#dz{h)~3h$P?~hBdb{R< zGl3Zpjguc{`6ct?8=T9%j{YuMbGZK%8K3D1&VSVnyb-XEl1k;hljkaw9BW9$^e}`X z5JkNf{_J6)9Dhv#0s2q13uJQ>XP4lDasb zw>-f_U+*ze-4-~_M=ZeJX>DOTvkp&NgMxHzf}&Mi6qeb+XBXGZ zh3(dROK*5EN!n2QA3a9JH5_3@KC$>WoK^H2ZL#VntsR^kUb`UiVr8thBc( zC0o%5i`4V*=_Mj1Q$Ri!1*i-t0|O%Kvul(0QB3P0rb@{1X+D{ZX#_1JPtDA5yZ##B zAa<`0ZQfGz%*N1WcNy-lqx=}Zw$Ek-^!M$VVUfIEXG=~!Zs~-<&ao$opVH#z=)@g4 z-}uC;whQUI=GOiidEEprNfg7{AFUJU6@Y7X*EUXR1br>rJ+D2LT-cqnzAfX8JW;4+ z9uW`=U9!(#TY?`dM4dr~Tf_AP#?Tri{qi~fXK`WKYk826p}$^f3qngnPQ0aXEjGb= z8Xxvd!!c=XqPfB1bXI$Xo;j7CI>?Q#sORlQ>-EP$c_0;a?5WJI*KQ+}wcUiY-x*tO zv?dl`+quu-B`A+aF>8dWBZ^o{~ zP&&Ypo{J%yS+*hR=6BW)d<&~_!uiM_<@-GAY9HSw2h`b)X#a3dvv!AXICm(SR=z!% z%UKNxvHDZ~4r**`MN^yw|04@oEaEZ!Sg9cNcH9?<2yPn_q(O`NXvz>{iW@aqD|#6? zO4;<(klAOP5bZewF{ndC z=DYqy?vwP0+_c|mKa^xI4i9ei;m)_dxNn^AfNwaN8vBvRk;jVI?;~pGgLyT4&Ud|! zM6|_0(*bTn(v8kb-F_wck5UbKa8mHw zPNOU#_QwK>FnaB6Jw`_#?GIWAS00R2y320yxRcQ@SvRvQehMT?Y&!HJn1vBd+lBi? zQ5083&(Y1NzmQ5BXI_Un^9cL)r6_ptmiDOR?H8f_EO(NljG`KdXyM=k;#<(C)c9+v zz%E&0K`*sTGr_W2V@YTWzOm|py;UM6TzOG1%P=<94!%)7O+4Eg2c_aDuu>zm3Fx(Xrl(#l``eN~9=A`v>4R);3;&ML*zG`j}0k$t3-!A6Wd04O!JG13iTxiedS25SL zn-n$^RkI?_{xJ7oR5NsuT?Z88&fWrnKMq+c4;q+wZ^f3%XI# zWer#5(R;bBF>zwb3`nZu)4)_Ar3`>Q+;+uBCA4+%D0%-}PP7gey!vn3k?#E>eQfe4 zyD?ykaShL^AMzTFcs_p7+j5wk8;e67I^h{0xBPLG9FW>@DT&&87)!SZaO*dNosl#H zl|?1a0XBP4b<5lkd_L{J_=>sv?OhR(Z4&h}-eM-J1bqXS;y0{s=A3H<7X~5^=n}T1 zIhyF!ZWltlhQ^<>?3JtioZL%BhmG2@wjYKBo{L%tBVA$#A9gHQN|=Mz>6S;RWYf;$ zdIQ8y6|IfdABlTe~RCk}@`Ec|L;JrO2lAfH9j-RTnWp9Jroge^ka zHan|Or{Ecnm=ktFd?iac$RFYZUUd`457R9hg!XBqIstfJ*fm;$$>m-dUE-N?*J;S$ zW|9o>-qFPW2U}+q701@K>tqu{6Wk#|gLZI-;O_3h9fCU~XmEGw;O?#+oW>e=3DCGS z(s(x<_J78?_`dUxv94;2TD5A`tab6ucRq8@Hv@EoGG2{U*Zgc-sN)_Q(RE=C)}}&y<^tyP9prn zk!jn#2`hCEA}#m+c;1y0HTp^*R^L7?Xq&}TY<*}67N#u0*okkFpG}ga)!Cu3kBYmg zeuvW9*SgZq!zl*dy|I~dQ|T-JpA-NoA(}eL>%xssCFpzn&B8@JC1u2-u3`o&v*w2rEM>D;*$?K09KAOG+L(X+8BO{$OvE2;OL zMWMT~^}p4!LbdEvma=1t*6W$BxG+rQZIOwGz99>iL76*r&ZoQaL8y}a?*m?=`GeM* zWVYw3R(!Y#GUnwQqLfOUn~w_(b8-=ahWCsz0^lV4?8rf}V){2Jt=gz5-CqYerdHVu zF`lW!R?#!Zc>1GSZ0gv+k;abxnxfYWaZ^nwVgk(q50)kaVNX4S3omYc`2ZeTpH@lVco;BN-y|l_lVX$OwPkmEzRmd z6%)(kFRMl%0H#jgHy_z#S|v&nW%P+nFW`IFY4(WwrTIwgm#4q4kpS}F*(i z1_7Q0^q`Dx6_2mtNoZs7phOU}gb0_xiy3H$4PgA`9P@g1dYSz)R?*Hh+ky4%zxa+a zMD80U+w8%yPXe54JWJ}(h|usMlhl_|Z=$Y^G8TJd_(onj3Kwb{%^ zrz#?3F~Loirt~qWKG%IW_y52N#T#lGg=TXPabQ?^sep180|pxRiu z?;cy5W>x57d9(-(=?T4dC1LW?%BGZ3?+t*Q7(cAZ7bg09 zt&^GIF3hwK9Fn&i9)CG9nnKV1({<=x`TqQHR zaq*2cT~m)Q!`KqXL@Q>JlE>&)AILo+k!2Q3mF!O2d#gukG^+mvFBrC7w4w+&x9aF! zvJ8tUx_sxjNwk^@d^(zbQg->6bFIA_Q^1aOloE_XcWp@nd~g=Qm>$TUCW$2^3ojTe zp8uHXtQ4w7>lj;CajzF(_jQ${qA47` zDHFt)^xkQBa?V4=y1(GtYw#GPH!)1YTvNPvA@wA+VUs_wJ6US}MdoOSnN3irr#WNe z3PjO`GIXO37$Pd`rBS`*BX0SL6|7Oh@5ru53Fg6*1|$SF+d^pRxgSo)M>gKRfnxON z2GqI;d~QGS?l&`4Cbiu0AE!I?We;^u9V;M$z0}&7b(3C;P5)y&?$308l`Pg7Y8G5Ed0>? zD|AFFdVr0|shplOl}g=j2PyXW`8d==OQ2zu_mq#o>&tfCKF4d}>^2|b{g;secx-q&#AA`< zc!%fjKbb7rRwKr;xWQX2PAOLRC4c%S{jGQW>NDwcO7flwEtId)?1wzKwonm0UC4F*z>fL+1EjZ^Ux85p8@Vi}EL6O5DhJ;J8h>bJC>})1N7X zxU)8}drSzp!WX(D^hT$(*11F9OQGyG+yy%g1mkZ`zZOF{I5(?{d7fEA&xcHx00%*`+8Dy%Ud-ctwg4-ITw4wOK9sc}T2K zQ!RZR)57$@>S%F%I!ur#SYic`f7-sQ-orDqk0ueA}@w@Ob47wm@wf&wR z1+oxtnr+!j`nzYi1~_VG>E&H$^0@+9Zs{#C&F1gT8f>@c62BC#I~L%O}seO|u&v z=XIs}me9>gXEwf4)_eJyCLpy8QKDys`@TLS#G#3POFuzzi1p~$NP4ySsb(9-C-izSkjkqD3=(Un7LSvR3ZV5NO(y-p*Rb==|Y`2;(%ya_y| zZCr9cogCRQa~O?uBGr#^B3%iteQAcFzRJU4@Xx2OPbK%nqN9D$QvdY)2&j55u6(6F zr@3)>aO!hdws!zPe+>}&dr?&`O%-^uRMXUL9U%7!bz{5~VJ)*_C#WI?YGoHU`pxRx z1`Qy<^i6iV8XG^pkfsu0EO-q#@9gIsr*Af@-l^G(fN>COHLdC^Tv}QbyH>R?QJ5bQ zt2W5*Geid`=v^~=TOcO$U5 zyLi!z48E{&({i(@KH3eU4>ru@Tsr?T9}be0z-44n%CktUW3q!0GzyMiQyqVHEO3N< zac=SrZXfS%ILm5;hiXDHKJ12K7!w=EJ5Y~qsCorL^Vt0ZTc*U_QgJ2Lr^&#;z zRMs^~gTSM1jnN&eVxHgldlGa5#WcmZZ&r*D3^0D^9)pO!&{3Ev>(3loU)zrd0M{S6 zd>SbBKV0h{Cf|0 zV#;5v4Jzl}B#nXvEz-ofg)a*Dg*rD4It8yq?`q3y7b!B<#4g)dIj$ym^zq+I2k3O> zSsH$e>A|%>fDGTLRhfShpmyr$zMfyq!C&C#DPO@Ayvm``-fzHALvRn+I;NI{4r+)S zuH+=DtNFWVG*uMvNI2y{pym#<+z5; zav&BYIb%8#5nkPkDs9~|35?=TcP*_2Cs7*}9^y6H&zVtt?V)Z}cWU?5E^cF%W13uj zTfKXh*b*b1To_BP<}Y}fAJs!;CFMRw1ZGS?$MM4y=zM)M3LkXGafjnATn3{gk%u5J zgo^_p(37I+y=eLh^_-mI+{oPT>3zQj3TuDqSOgLy?V?y7c)d8D-Ygl(g0vA{T1v7t zUVt84OZ2MO7m@;+ci9t++{$xm<|%=3>wY>3BMX8e+i;1A*QY#INJ;qH2m$&%!>vSQ zM@lzhEN(ia&f1W_%keZ*#m%F>4eO*cQQ9#Heu4#r$%(l z1#=rq+BXd`iSR$mAGuinsEp8*`Wp4m(RfCtpB5kfI$yV=wX@PKF5E%vkLghe7LIVG zSW1Go23xoor++aSi<$ly>6zw525re(Q_$g3a^7oh>q$ST5yumKX7vzBh3P(Ccn8X2 z-WAFezIT-xl#+yxTxKZM7m9?M1x80iN5#}!l>jr5zx?f0#)I#esw!qNJ?mr&C2-BQVANkLY*lP|HjUT~6{1KJB!`3q^ivxNWqaP@D zxTXa^GP6On2|KbM2Us(kzIbmufjMOC-}fGDubv+oECBlC^M~u1YiY&~7A8P!E-M9< zLFe-KH+01sQ`wcQvZ$M}FXicA#_;_e7E2Z;ti(7MG|>K81z(AMMh8P<9%o9Y zNKQEGK{y&>i`T(k7LEwvx7SBuVIC>{`pgENsg5 z)>;{uMt|K{p0B)BWnV@k;%<3wpl3*`L3{X*b3~Gynh5rUYUL}F3{hYE_27QnE1^oy5HF02+A%mtbpY3(Ujfs{z#z%d)+-8~|@xSxR5r+kAf zGcm&0(GDhQAXcuN>tpiXfO$L6qi|$y%B}uD(^G%_pOa)=@5H~E_o;NmWvbZ?{hwCOf&KMf9RxIfOXOKVDxuyfI!N>nj#Hl~|By|aLi3;?Txp2}`z8kJsN%zU}?*HPxfxb!n_j$LSE zIeVCoSV*nOKg#Ekc2YKwtn@Ho7NL{>iwmHn%_jNx*X4~XB_Sp!mwlgu46A)GN+mnS zNTXhbw_S`2=hs|}PHxdnF(VlSN&EVIl}hG@8#Q_WNdbXs$mB)uh%`p-z^ftEEm2si zcUBN7PD{gOq}8veRk+1{++h#md<^?JKs&>MDfHlL|sF_m;QpagJyOKJ27C3EDx^bnOoKUglP8QV{PYnsF}x zl5CATR2}?78Z?J3qYwkb8W-6{5>Y91d>E#v5uSWh&@N*I^pWmwzyOq?}4IobN{JdboXQfdTA7`O7J_i1) z{Vdyyr6l!7@OOJjg^GsW^7{})~r5fw{iKDZ){xiwOUA>N&h{VzHB6d?( zG?2i-I`Ju?Y@3L#k`Vv+U^!+$pnOJ;z?WsZKxW1+3`)!t@`gM+Tiy@6@v_Cy=8IKM zK)%Lb0B83qF7S3P+)At2Lw|z7JO_`G1ZH-n`Z@rct?aw)D7+uGgPtZhN(0sX70huv z$Dg$7I_FlRh+T3JMPb4fk@6D|smJ1a^^2j&Rx=!}?Ypq{bpw@4c;IxkZLakKZqnYI z%U#V$zT{0xhR$IQofoeI=|34==q+FukATgE^VsI9k|psb*5rL_BT#2<(=T~I(ND^~ z+?UP9g*ixU+vG$nRAThkOrBU^@vYxbkAxZ$_pd(ULvL8EYdIt^J-tPelp%R(D~G2n zNo4el1#2@?@tIVGWD0ohjWP6kZjlJ&Sa-RQ)t~H?d1%GFcD{s3Ijv-wVaga|@20KB z=>EGq><_BqH55h+Z-4zPpK}A^(eI+ka=k-kQ%zj(PqU(l96L{ty*loW6`F__3QI4P zNo<~roafVT6n_kkJcL9jK!*wy8Khg*u32Sc<@?&rVI)!N%pdM5-8DY0#m>G(`E)OT ztG8S*j9r_?m@MqkSrsQ}Dd^X^Jv80er66*%cr$jr2>3Dl(fFt4Z$S=A>V`xC#sSYC zKU4RPh9)>~zH0+`^@xp>?2vq>$s+W8rpQe9^`X;;EtaeaT9gq$hApUMj%m`4`y3Sw zg4{gS2x6Gg6`I0xiuA1s7X2i}YgXtMs<3wCfKF-~6HlE|I;(A1uK0k;`}GD3IYbIb z%F`B8b1fX%QNHO&T3z_PcY}}?Xx~^luDZZ$^D3+erS>`7s)2@bJSMg&Bhbj7rWCG~ z{p0q0&|}%l^y{Mu!^Pr#ztzb)HuHe5*e#v3R}{#nN>tCN>ghquHfXO;-k5R3*(wu6|xCrX>3io;GtFCS!tx~&Z*g6 za;WHD+jl^=aL^L8`sU~c;QZxQp^q|VL+hq&7P3(%rmx@|6>7NbN#EXC$$+%s#i9m( z*ja0gW};)al5zk265s&OqGzJ;@u>BY0i>Z9iZ}>JhtE=I{#-iwxH@xx$7&gQ}t5oHWu|#M11sB@byXn200I>2j%I#9Qvrx)_9^dK28GtAnMJ z)Gx;UB;`K9WRv~i{p!#HH-}jOdP0n{R|=J~)UHOJKf4PUfp@K^EmU{CnrbuTU6Ebc zsCP(y9(Eq7BjT(0k>olcc))LOdlFYL(xl_>PwqQa!ShI92#!`d)C4Tp8Rf^#RU5}~ zaYRFRxauclEl!8g@s?HdrOTc0b6~Mt&)S zb6{#y-@N6Bv*M)smT`j2^b@8or{;S7l0|H=r27?|K+91;d;~KdDoZ(h)Vv!sbXENn z{dO-S&5usb2ZZ#J-uAv~xMzTpw-WRrnO@?i0fU^&Dnt-2ToWl68mTA-_?}dyyTBfdD01cnKE> z6=_9II!&)nY9St1QqEV>;8MOGpeXDVDENTn*$wBqifnD9+M5And9E-=Fr^LH#ziCq-m!Gl42CKOM4Z#sfSSXP}Nt)Yu z`A22mI67(HO{@3-aqApCvv4@Mb*^&6Zx+`qTnHEFuoI=|PU0bx6P4aNGf!L}h@&>b ze4Wfr`;aYUs+_gjk+YV_N(&2+WVCegR*HoT&~4xr#drxAb6yG+(?gr7Ghc_(XYu2K z>%(ZJBq}lOh9J58tK2P$vW#94=%LRc*zRfwWIE)$8i!{H_eMt4|((+~Kx~9qAIXdaN zNfLb_myslT9x}??elhuB{oD3;6}w;WX9S}jN6qcj%!k*cz6{MC5-H_pWy5!`#jB{+ zPmB(oIKK^l+m`uE{4SR>VV$mRQ{!=~^Hy$J-X`fZ?ZEK?cU9K5yyI)<*F1&=JJ3;s zBt9F_C<+AtN7|-a^D7eO**z@Y{UeXkwnEIf{;28K=gT)SK?b7X+}=a~m^K!md`G`? zug>N9Fi<8)?dCa(G8H}wVoh7RS!d--b7xNydMJWN9p`-n^nneylD^B5&i83+9o@nx zA|7pdrC>izUA%PX`6LUQ-yhqMGch#?ox}sAD>U|VQ`19>eYFbUE)@zRlkz865!7K5 zIkuw(cYlN(u+$6$T^jcX%50KyrwDT)Gx?0vcQkpMr!ri6dqutiPClC(gv*YK2|x8C zV{!-+F*D_=GBPg_x^@b=oU=TAd(gBrtFW%-Vplp0 zjYp~aY5S`JX6TQ<^4BYp{%$sNgBUc6z1q+1-Ki!3OhxwdZ!|YB(Qh>EV}=WICK%RQ zqn&zwzRn-(OsSmbgObq*U;wnmPPPD|Pj7_q&!!$yJZycX=f2pblkD8nax6RXF&4$1 zTAW~omrs7GrmSmf?SY|5J3nZ7*2j)lyO7V&-WpV^8VbULiAZF(>Qfzl}= z?L##t?2!`u`-(XGfADx_T+SX$wF*5k*bz!&f`X4o=2Qv+re6r<>{F zmCkWHCi3RF``-vb3&|V5d#~9dVvl!p;k(s{9Z#B@vQ%<2eDFEzO5LfmXVQttL&B$t zeAT)m-IEUjfZPDEj_N3zfTP3OeFj%_>RybC#(}L_k!Y&0m`v590E`z_RMI{!cJ>N? zNN}s6p~4c22$FN(% <=N#-sXgjjCpD-A!7^OS1IJKjS=hb^^b9mxi0W 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 GgeCyjc#RGK literal 0 HcmV?d00001 diff --git a/resources/images/tutorial/screenshot_remoteservice_ios_en.png b/resources/images/tutorial/screenshot_remoteservice_ios_en.png new file mode 100755 index 0000000000000000000000000000000000000000..b61ab9963da64ae58a7fb1a40f1ed2292731efe8 GIT binary patch literal 195114 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 z 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

    20yfo0%x8)##LdCFdN##k$hw5` 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 literal 0 HcmV?d00001 diff --git a/resources/images/tutorial/screenshot_sac_menu_de.png b/resources/images/tutorial/screenshot_sac_menu_android_de.png similarity index 100% rename from resources/images/tutorial/screenshot_sac_menu_de.png rename to resources/images/tutorial/screenshot_sac_menu_android_de.png diff --git a/resources/images/tutorial/screenshot_sac_menu_en.png b/resources/images/tutorial/screenshot_sac_menu_android_en.png similarity index 100% rename from resources/images/tutorial/screenshot_sac_menu_en.png rename to resources/images/tutorial/screenshot_sac_menu_android_en.png diff --git a/resources/images/tutorial/src/reader_sac_menu_en.svg b/resources/images/tutorial/src/reader_sac_menu_android_de.svg similarity index 86% rename from resources/images/tutorial/src/reader_sac_menu_en.svg rename to resources/images/tutorial/src/reader_sac_menu_android_de.svg index 40a4fb8..3b48834 100644 --- a/resources/images/tutorial/src/reader_sac_menu_en.svg +++ b/resources/images/tutorial/src/reader_sac_menu_android_de.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/src/reader_sac_menu_de.svg b/resources/images/tutorial/src/reader_sac_menu_android_en.svg similarity index 86% rename from resources/images/tutorial/src/reader_sac_menu_de.svg rename to resources/images/tutorial/src/reader_sac_menu_android_en.svg index e5e262a..8d39c4a 100644 --- a/resources/images/tutorial/src/reader_sac_menu_de.svg +++ b/resources/images/tutorial/src/reader_sac_menu_android_en.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/src/reader_sac_menu_ios_de.svg b/resources/images/tutorial/src/reader_sac_menu_ios_de.svg new file mode 100644 index 0000000..6f4993d --- /dev/null +++ b/resources/images/tutorial/src/reader_sac_menu_ios_de.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/images/tutorial/src/reader_sac_menu_ios_en.svg b/resources/images/tutorial/src/reader_sac_menu_ios_en.svg new file mode 100644 index 0000000..cd92b05 --- /dev/null +++ b/resources/images/tutorial/src/reader_sac_menu_ios_en.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/images/tutorial/src/where_identify_now_de.svg b/resources/images/tutorial/src/where_identify_now_de.svg index a8faa61..3db85d9 100644 --- a/resources/images/tutorial/src/where_identify_now_de.svg +++ b/resources/images/tutorial/src/where_identify_now_de.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/src/where_identify_now_en.svg b/resources/images/tutorial/src/where_identify_now_en.svg index 4634f36..f6121f6 100644 --- a/resources/images/tutorial/src/where_identify_now_en.svg +++ b/resources/images/tutorial/src/where_identify_now_en.svg @@ -1,6 +1,6 @@ - + diff --git a/resources/images/tutorial/src/where_providerlist_screenshot_de.svg b/resources/images/tutorial/src/where_providerlist_screenshot_android_de.svg similarity index 80% rename from resources/images/tutorial/src/where_providerlist_screenshot_de.svg rename to resources/images/tutorial/src/where_providerlist_screenshot_android_de.svg index 116237e..fda962b 100644 --- a/resources/images/tutorial/src/where_providerlist_screenshot_de.svg +++ b/resources/images/tutorial/src/where_providerlist_screenshot_android_de.svg @@ -3,8 +3,8 @@ - - + + diff --git a/resources/images/tutorial/src/where_providerlist_screenshot_en.svg b/resources/images/tutorial/src/where_providerlist_screenshot_android_en.svg similarity index 80% rename from resources/images/tutorial/src/where_providerlist_screenshot_en.svg rename to resources/images/tutorial/src/where_providerlist_screenshot_android_en.svg index 1ff21dc..eace54f 100644 --- a/resources/images/tutorial/src/where_providerlist_screenshot_en.svg +++ b/resources/images/tutorial/src/where_providerlist_screenshot_android_en.svg @@ -3,8 +3,8 @@ - - + + diff --git a/resources/jenkins/clang-gcov.py b/resources/jenkins/clang-gcov.py deleted file mode 100755 index 29cdf28..0000000 --- a/resources/jenkins/clang-gcov.py +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import subprocess -import sys - -cmd = "llvm-cov gcov " + " ".join(sys.argv[1:]) -subprocess.call(cmd, shell=True) diff --git a/resources/jenkins/clang-gcov.sh b/resources/jenkins/clang-gcov.sh deleted file mode 100755 index f932bb8..0000000 --- a/resources/jenkins/clang-gcov.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -llvm-cov gcov $@ diff --git a/resources/jenkins/docker/alpine/Dockerfile b/resources/jenkins/docker/alpine/Dockerfile index 6e05d84..79be345 100644 --- a/resources/jenkins/docker/alpine/Dockerfile +++ b/resources/jenkins/docker/alpine/Dockerfile @@ -1,7 +1,7 @@ FROM scratch MAINTAINER Governikus KG -ARG version="3.9.0" +ARG version="3.10.0" ARG arch="x86_64" ADD alpine-minirootfs-$version-$arch.tar.gz / diff --git a/resources/jenkins/docker/android/Dockerfile b/resources/jenkins/docker/android/Dockerfile deleted file mode 100644 index 495a206..0000000 --- a/resources/jenkins/docker/android/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM arch:latest -MAINTAINER Governikus KG - -ENV NAME=Android LABELS=Android - -RUN echo "[multilib]" >> /etc/pacman.conf && echo 'Include = /etc/pacman.d/mirrorlist' >> /etc/pacman.conf - -RUN chown -R governikus: /var/cache/pacman/pkg/ - -ARG JENKINS_SWARM_VERSION=3.15 -ARG TINI_VERSION=0.18.0 -RUN curl -L -o /sbin/tini https://github.com/krallin/tini/releases/download/v$TINI_VERSION/tini-static-muslc-amd64 && chmod 755 /sbin/tini && \ - curl -L -o /swarm-client.jar https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/swarm-client/$JENKINS_SWARM_VERSION/swarm-client-$JENKINS_SWARM_VERSION.jar -ADD ../swarm/swarm.sh / - -USER governikus -RUN mkdir -p /home/governikus/.ccache && mkdir -p /home/governikus/workspace && mkdir -p /home/governikus/packages -VOLUME /home/governikus/.ccache - -# key for ncurses sources -RUN gpg --receive-keys 702353E0F7E48EDB - -RUN pacaur -Sy --noconfirm cmake ccache python2-hglib apache-ant jdk8-openjdk jre8-openjdk-headless mercurial python2-hglib \ - android-ndk-10e android-sdk-25.2.5 android-sdk-build-tools android-sdk-platform-tools \ - android-platform-18 android-platform-21 android-platform-25 \ - && rm -rf /var/cache/pacman/pkg/* && rm -rf /home/governikus/.cache/pacaur - -ENTRYPOINT ["/sbin/tini", "--"] -CMD sh -l -c /swarm.sh diff --git a/resources/jenkins/docker/arch/Dockerfile b/resources/jenkins/docker/arch/Dockerfile deleted file mode 100644 index 2b38814..0000000 --- a/resources/jenkins/docker/arch/Dockerfile +++ /dev/null @@ -1,55 +0,0 @@ -FROM scratch -MAINTAINER Governikus KG - -ARG box="busybox-x86_64" -ARG version="2018.01.01" - -ADD $box /tmp/busybox -ADD archlinux-bootstrap-$version-x86_64.tar.gz / - -# Clean up rootfs -RUN ["/tmp/busybox", "rm", "-rf", \ - "/root.x86_64/etc/hosts", \ - "/root.x86_64/etc/hostname", \ - "/root.x86_64/etc/mtab", \ - "/root.x86_64/etc/resolv.conf", \ - "/root.x86_64/dev", \ - "/root.x86_64/proc", \ - "/root.x86_64/sys" \ - ] - -RUN ["/tmp/busybox", "sh", "-c", "/tmp/busybox cp -af /root.x86_64/* /"] - -RUN rm -rf /tmp/busybox /root.x86_64 - -# Init Arch -RUN pacman-key --init && pacman-key --populate archlinux - -RUN echo 'Server = http://mirrors.kernel.org/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist &&\ - echo 'Server = http://ftp.uni-hannover.de/archlinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist &&\ - echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen &&\ - echo 'LANG="en_US.UTF-8"' > /etc/locale.conf - -RUN pacman -Syu --noconfirm base-devel lzop -RUN locale-gen; - -RUN sed -i "s|PKGEXT='.pkg.tar.xz'|PKGEXT='.pkg.tar.lzo'|" /etc/makepkg.conf - -RUN useradd governikus -m -s /usr/bin/bash -G wheel -RUN echo '%wheel ALL=(ALL) NOPASSWD: /usr/bin/pacman' > /etc/sudoers.d/pacman - -# Helper for AUR -RUN mkdir /tmp/p &&\ - curl -L -o /tmp/p/cower.tar.gz https://aur.archlinux.org/cgit/aur.git/snapshot/cower.tar.gz &&\ - curl -L -o /tmp/p/pacaur.tar.gz https://aur.archlinux.org/cgit/aur.git/snapshot/pacaur.tar.gz - -RUN cd /tmp/p && tar xf cower.tar.gz && tar xf pacaur.tar.gz &&\ - chown -R governikus /tmp/p &&\ - su - governikus -c "source /etc/profile.d/perlbin.sh && cd /tmp/p/cower && makepkg -si --noconfirm --skippgpcheck" &&\ - su - governikus -c "source /etc/profile.d/perlbin.sh && cd /tmp/p/pacaur && makepkg -si --noconfirm --skippgpcheck" - -# pacaur requires VISUAL, EDITOR or vi -RUN pacman -S --noconfirm vi - - -RUN rm -rf /tmp/p && rm -rf /var/cache/pacman/pkg/* && rm -rf /home/governikus/.cache/pacaur diff --git a/resources/jenkins/docker/generate.py b/resources/jenkins/docker/generate.py new file mode 100755 index 0000000..de27c78 --- /dev/null +++ b/resources/jenkins/docker/generate.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import glob +import subprocess +import sys + +req_version = (3, 5) +cur_version = sys.version_info + +if cur_version < req_version: + print("python version >=3.5 required") + sys.exit(1) + +# Alpine +alpine_images = glob.glob("alpine/alpine-minirootfs-*.tar.gz") +if len(alpine_images) == 0: + print("No alpine image found in ./alpine") + sys.exit(1) + +print("Building base Alpine ...") +proc_args = ["docker", "build", "-t", "alpine:latest", "alpine"] +result = subprocess.run(proc_args).check_returncode() + +images = ["swarm", "trigger", "common", "docs", "linux"] +for image in images: + print("Building %s ..." % (image)) + proc_args = ["docker", "build", "-t", "alpine:%s" % (image), image] + subprocess.run().check_returncode(proc_args) diff --git a/resources/jenkins/docker/generate.sh b/resources/jenkins/docker/generate.sh deleted file mode 100755 index ba38049..0000000 --- a/resources/jenkins/docker/generate.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -e - -################### Alpine -cd alpine -ls alpine-minirootfs-*.tar.gz >/dev/null - -echo "Building base Alpine ..." -docker build -t alpine:latest . - -images=(swarm trigger common docs linux) -for i in "${images[@]}" -do - echo "Building $i ..." - cd ../$i - docker build -t alpine:$i . -done - diff --git a/resources/jenkins/docker/linux/Dockerfile b/resources/jenkins/docker/linux/Dockerfile index 98b2098..5a249aa 100644 --- a/resources/jenkins/docker/linux/Dockerfile +++ b/resources/jenkins/docker/linux/Dockerfile @@ -3,15 +3,12 @@ MAINTAINER Governikus KG ENV NAME=Linux LABELS="Linux g++ clang++" PACKAGES_DIR=/home/governikus/packages -RUN apk --no-cache add cmake make g++ clang clang-analyzer ccache cloc cppcheck pkgconf ninja pcsc-lite-dev binutils-gold \ - mesa-dev libx11-dev libxkbcommon-dev xcb-util-wm-dev xcb-util-image-dev xcb-util-keysyms-dev \ - py2-pip && \ - ln -s /usr/libexec/c++-analyzer /usr/local/bin && ln -s /usr/libexec/ccc-analyzer /usr/local/bin && \ - pip install gcovr && apk del py2-pip +RUN apk --no-cache add cmake make g++ clang clang-analyzer ccache gcovr cloc cppcheck pkgconf ninja pcsc-lite-dev binutils-gold lld \ + py-setuptools mesa-dev libx11-dev libxkbcommon-dev xcb-util-wm-dev xcb-util-image-dev xcb-util-keysyms-dev && \ + ln -s /usr/libexec/c++-analyzer /usr/local/bin && ln -s /usr/libexec/ccc-analyzer /usr/local/bin USER governikus RUN mkdir -p /home/governikus/.ccache && mkdir -p /home/governikus/workspace && mkdir -p /home/governikus/packages -VOLUME /home/governikus/.ccache ENTRYPOINT ["/sbin/tini", "--"] CMD /swarm.sh diff --git a/resources/jenkins/docker/swarm/Dockerfile b/resources/jenkins/docker/swarm/Dockerfile index 185e19c..612a21b 100644 --- a/resources/jenkins/docker/swarm/Dockerfile +++ b/resources/jenkins/docker/swarm/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:latest MAINTAINER Governikus KG -ARG JENKINS_SWARM_VERSION=3.15 +ARG JENKINS_SWARM_VERSION=3.17 ENV EXECUTOR=3 LABELS= NAME= PASSWORD= RUN adduser governikus -s /bin/sh -D diff --git a/resources/jenkins/dsl/Builds/Build_Android.groovy b/resources/jenkins/dsl/Builds/Build_Android.groovy index 8a4faab..06c04ae 100644 --- a/resources/jenkins/dsl/Builds/Build_Android.groovy +++ b/resources/jenkins/dsl/Builds/Build_Android.groovy @@ -42,7 +42,7 @@ j.with androidLint('build/dist/build/outputs/lint-results-*.xml') { thresholds( - unstableTotal: [all: 14] + unstableTotal: [all: 1] ) } } @@ -95,7 +95,7 @@ j.with androidLint('build/dist/build/outputs/lint-results-*.xml') { thresholds( - unstableTotal: [all: 12] + unstableTotal: [all: 0] ) } } diff --git a/resources/jenkins/dsl/Builds/Build_Translation.groovy b/resources/jenkins/dsl/Builds/Build_Translation.groovy index 231e22f..57f718a 100644 --- a/resources/jenkins/dsl/Builds/Build_Translation.groovy +++ b/resources/jenkins/dsl/Builds/Build_Translation.groovy @@ -4,6 +4,7 @@ import static common.Constants.strip def j = new Build ( name: 'Translation', + excludePattern: '', libraries: ['Linux'], label: 'Linux', artifacts: 'source/resources/translations/*.ts' diff --git a/resources/jenkins/dsl/Builds/Build_iOS_IPA.groovy b/resources/jenkins/dsl/Builds/Build_iOS_IPA.groovy index 3df53a8..7141992 100644 --- a/resources/jenkins/dsl/Builds/Build_iOS_IPA.groovy +++ b/resources/jenkins/dsl/Builds/Build_iOS_IPA.groovy @@ -6,7 +6,7 @@ def j = new Build name: 'iOS_IPA', libraries: ['iOS'], label: 'iOS', - artifacts: 'build/*.ipa' + artifacts: 'build/*.ipa,build/*.zip' ).generate(this) @@ -19,13 +19,13 @@ j.with shell(strip('''\ cd build; cmake ../source - -DCMAKE_BUILD_TYPE=release + -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_PREFIX_PATH=\${WORKSPACE}/libs/build/dist -DCMAKE_TOOLCHAIN_FILE=../source/cmake/iOS.toolchain.cmake -GXcode ''')) - shell('cd build; xcodebuild -target install -configuration Release ARCHS=arm64') - shell('cd build; xcodebuild -target ipa -configuration Release') + shell('cd build; xcodebuild -configuration MinSizeRel ARCHS=arm64') + shell('cd build; xcodebuild -target ipa -configuration MinSizeRel') } } diff --git a/resources/jenkins/dsl/Releases/Release_Appcast.groovy b/resources/jenkins/dsl/Releases/Release_Appcast.groovy index a68e750..92aa5ba 100644 --- a/resources/jenkins/dsl/Releases/Release_Appcast.groovy +++ b/resources/jenkins/dsl/Releases/Release_Appcast.groovy @@ -13,4 +13,9 @@ j.with { stringParam('changeset', 'release', 'Build given changeset (tag) as release') } + + wrappers + { + buildName('${changeset}') + } } diff --git a/resources/jenkins/dsl/Releases/Release_Docs.groovy b/resources/jenkins/dsl/Releases/Release_Docs.groovy index 3f35731..d7c9035 100644 --- a/resources/jenkins/dsl/Releases/Release_Docs.groovy +++ b/resources/jenkins/dsl/Releases/Release_Docs.groovy @@ -10,9 +10,14 @@ def j = new Release j.with { + parameters + { + booleanParam("ENABLE_DVCS", true, "Include mercurial tag instead of CMake version number into docs.") + } + steps { - shell('cd build; cmake ../source -DCMAKE_BUILD_TYPE=release -Dtools.only=true') + shell('cd build; cmake ../source -DCMAKE_BUILD_TYPE=release -Dtools.only=true -DENABLE_DVCS=\${ENABLE_DVCS}') shell('cd build; make notes') shell('cd build; make notes.latex.pdf') diff --git a/resources/jenkins/dsl/Releases/Release_iOS.groovy b/resources/jenkins/dsl/Releases/Release_iOS.groovy index 76e370e..a51dc7b 100644 --- a/resources/jenkins/dsl/Releases/Release_iOS.groovy +++ b/resources/jenkins/dsl/Releases/Release_iOS.groovy @@ -6,7 +6,7 @@ def j = new Release name: 'iOS_IPA', libraries: ['iOS'], label: 'iOS', - artifacts: 'build/*.ipa' + artifacts: 'build/*.ipa,build/*.zip' ).generate(this) @@ -26,14 +26,29 @@ j.with shell(strip('''\ cd build; cmake ../source - -DCMAKE_BUILD_TYPE=release + -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_PREFIX_PATH=\${WORKSPACE}/libs/build/dist -DCMAKE_TOOLCHAIN_FILE=../source/cmake/iOS.toolchain.cmake -DUSE_DISTRIBUTION_PROFILE=\${USE_DISTRIBUTION_PROFILE} -GXcode ''')) - shell('cd build; xcodebuild -target install -configuration Release ARCHS=arm64') - shell('cd build; xcodebuild -target ipa -configuration Release') + shell('cd build; xcodebuild -configuration MinSizeRel ARCHS=arm64') + shell('cd build; xcodebuild -target ipa -configuration MinSizeRel') + + conditionalSteps + { + condition + { + booleanCondition('${USE_DISTRIBUTION_PROFILE}') + } + + steps + { + shell('cd build; xcrun altool -t ios --validate-app --verbose -u "ausweisapp@governikus.com" -p @env:PASSWORD -f *.ipa') + + shell('cd build; xcrun altool -t ios --upload-app --verbose -u "ausweisapp@governikus.com" -p @env:PASSWORD -f *.ipa') + } + } } } diff --git a/resources/jenkins/dsl/Reviews/Review_Android.groovy b/resources/jenkins/dsl/Reviews/Review_Android.groovy index 5c0fd48..96f1cc7 100644 --- a/resources/jenkins/dsl/Reviews/Review_Android.groovy +++ b/resources/jenkins/dsl/Reviews/Review_Android.groovy @@ -4,7 +4,7 @@ import static common.Constants.strip // ----------------------------------------------------------------- APK -for(ARCH in Constants.AndroidArchAPK) +for(ARCH in Constants.AndroidArchAPKReview) { def j = new Review @@ -41,7 +41,7 @@ j.with androidLint('build/dist/build/outputs/lint-results-*.xml') { thresholds( - unstableTotal: [all: 14] + unstableTotal: [all: 1] ) } } @@ -101,7 +101,7 @@ j.with androidLint('build/dist/build/outputs/lint-results-*.xml') { thresholds( - unstableTotal: [all: 12] + unstableTotal: [all: 0] ) } } diff --git a/resources/jenkins/dsl/Reviews/Review_Libs_Android.groovy b/resources/jenkins/dsl/Reviews/Review_Libs_Android.groovy index e9fbfce..0bbc618 100644 --- a/resources/jenkins/dsl/Reviews/Review_Libs_Android.groovy +++ b/resources/jenkins/dsl/Reviews/Review_Libs_Android.groovy @@ -17,7 +17,7 @@ j.with { shell('cd source; python resources/jenkins/import.py') - shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE=../source/cmake/android.toolchain.cmake -DPACKAGES_DIR=\${PACKAGES_DIR} -DCMAKE_ANDROID_ARCH_ABI=${ARCH}") + shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DCMAKE_TOOLCHAIN_FILE=../source/cmake/android.toolchain.cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DPACKAGES_DIR=\${PACKAGES_DIR} -DCMAKE_ANDROID_ARCH_ABI=${ARCH}") shell('cd build; make compress') } diff --git a/resources/jenkins/dsl/Reviews/Review_Libs_FreeBSD.groovy b/resources/jenkins/dsl/Reviews/Review_Libs_FreeBSD.groovy index b0bc3b1..505bd31 100644 --- a/resources/jenkins/dsl/Reviews/Review_Libs_FreeBSD.groovy +++ b/resources/jenkins/dsl/Reviews/Review_Libs_FreeBSD.groovy @@ -13,7 +13,7 @@ j.with { shell('cd source; python resources/jenkins/import.py') - shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=\${PACKAGES_DIR}") + shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=debug -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DPACKAGES_DIR=\${PACKAGES_DIR}") shell('cd build; make compress') } diff --git a/resources/jenkins/dsl/Reviews/Review_Libs_Linux.groovy b/resources/jenkins/dsl/Reviews/Review_Libs_Linux.groovy index f5cd9f9..c2ed644 100644 --- a/resources/jenkins/dsl/Reviews/Review_Libs_Linux.groovy +++ b/resources/jenkins/dsl/Reviews/Review_Libs_Linux.groovy @@ -13,7 +13,7 @@ j.with { shell('cd source; python resources/jenkins/import.py') - shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=\${PACKAGES_DIR}") + shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DPACKAGES_DIR=\${PACKAGES_DIR}") shell('cd build; make compress') } diff --git a/resources/jenkins/dsl/Reviews/Review_Libs_MacOS.groovy b/resources/jenkins/dsl/Reviews/Review_Libs_MacOS.groovy index ae9f453..3d163a1 100644 --- a/resources/jenkins/dsl/Reviews/Review_Libs_MacOS.groovy +++ b/resources/jenkins/dsl/Reviews/Review_Libs_MacOS.groovy @@ -13,7 +13,7 @@ j.with { shell('cd source; python resources/jenkins/import.py') - shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DPACKAGES_DIR=\${PACKAGES_DIR}") + shell("cd build; cmake ../source/libs -DCMAKE_BUILD_TYPE=release -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DPACKAGES_DIR=\${PACKAGES_DIR}") shell('cd build; make compress') } diff --git a/resources/jenkins/dsl/Reviews/Review_Trigger.groovy b/resources/jenkins/dsl/Reviews/Review_Trigger.groovy index 8410360..aed7a63 100644 --- a/resources/jenkins/dsl/Reviews/Review_Trigger.groovy +++ b/resources/jenkins/dsl/Reviews/Review_Trigger.groovy @@ -7,7 +7,7 @@ import static common.Constants.createReviewMessage def getJobs() { def list = ['Formatting', 'Source', 'Docs', 'MacOS_DMG', 'Win32_GNU_MSI', 'Win32_MSVC_MSI', 'iOS_IPA', 'Android_AAR'] - for(ARCH in Constants.AndroidArchAPK) + for(ARCH in Constants.AndroidArchAPKReview) { list << 'Android_APK_' + ARCH } @@ -64,7 +64,7 @@ j.with { phaseJob(getName('Android_AAR')) - for(ARCH in Constants.AndroidArchAPK) + for(ARCH in Constants.AndroidArchAPKReview) { phaseJob(getName('Android_APK_' + ARCH)) } diff --git a/resources/jenkins/dsl/Reviews/Review_iOS_IPA.groovy b/resources/jenkins/dsl/Reviews/Review_iOS_IPA.groovy index 192f4f2..239953a 100644 --- a/resources/jenkins/dsl/Reviews/Review_iOS_IPA.groovy +++ b/resources/jenkins/dsl/Reviews/Review_iOS_IPA.groovy @@ -6,7 +6,7 @@ def j = new Review name: 'iOS_IPA', libraries: ['iOS'], label: 'iOS', - artifacts: 'build/*.ipa' + artifacts: 'build/*.ipa,build/*.zip' ).generate(this) @@ -21,13 +21,13 @@ j.with shell(strip('''\ cd build; cmake -Werror=dev ../source - -DCMAKE_BUILD_TYPE=release + -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_PREFIX_PATH=\${WORKSPACE}/libs/build/dist -DCMAKE_TOOLCHAIN_FILE=../source/cmake/iOS.toolchain.cmake -GXcode ''')) - shell('cd build; xcodebuild -target install -configuration Release ARCHS=arm64') - shell('cd build; xcodebuild -target ipa -configuration Release') + shell('cd build; xcodebuild -configuration MinSizeRel ARCHS=arm64') + shell('cd build; xcodebuild -target ipa -configuration MinSizeRel') } } diff --git a/resources/jenkins/dsl/common/Constants.groovy b/resources/jenkins/dsl/common/Constants.groovy index 79effca..e1f7e0e 100644 --- a/resources/jenkins/dsl/common/Constants.groovy +++ b/resources/jenkins/dsl/common/Constants.groovy @@ -2,7 +2,8 @@ package common class Constants { - static final AndroidArchAPK = ["armeabi-v7a", "x86", "arm64-v8a"] + static final AndroidArchAPKReview = ["armeabi-v7a", "arm64-v8a"] + static final AndroidArchAPK = AndroidArchAPKReview + ["x86"] static final AndroidArchAAR = ["arm64-v8a"] static final AndroidArch = (AndroidArchAPK + AndroidArchAAR).unique() diff --git a/resources/jenkins/dsl/common/Release.groovy b/resources/jenkins/dsl/common/Release.groovy index fe599cc..c5000d5 100644 --- a/resources/jenkins/dsl/common/Release.groovy +++ b/resources/jenkins/dsl/common/Release.groovy @@ -23,6 +23,11 @@ class Release extends Build { stringParam('changeset', 'release', 'Build given changeset (tag) as release') } + + wrappers + { + buildName('${changeset}') + } } return j diff --git a/resources/jenkins/dsl/install.py b/resources/jenkins/dsl/install.py index 9905264..9eb2067 100755 --- a/resources/jenkins/dsl/install.py +++ b/resources/jenkins/dsl/install.py @@ -61,12 +61,14 @@ initialSessionId = callJenkins('session-id') alreadyInstalledPlugins = callJenkins('list-plugins') plugins = [] +plugins.append('android-lint') plugins.append('build-timeout') plugins.append('categorized-view') plugins.append('cobertura') plugins.append('copyartifact') plugins.append('cppcheck') plugins.append('depgraph-view') +plugins.append('build-name-setter') plugins.append('description-setter') plugins.append('envinject') plugins.append('extra-columns') diff --git a/resources/jenkins/lcov_cobertura.py b/resources/jenkins/lcov_cobertura.py deleted file mode 100755 index 7aae6d1..0000000 --- a/resources/jenkins/lcov_cobertura.py +++ /dev/null @@ -1,414 +0,0 @@ -#!/usr/bin/env python - -# Copyright 2011-2012 Eric Wendelin -# -# This is free software, licensed under the Apache License, Version 2.0, -# available in the accompanying LICENSE.txt file. - -""" -Converts lcov line coverage output to Cobertura-compatible XML for CI -""" - -import re -import sys -import os -import time -import subprocess -from xml.dom import minidom -from optparse import OptionParser - -from distutils.spawn import find_executable - -CPPFILT = "c++filt" -HAVE_CPPFILT = False - -if find_executable(CPPFILT) is not None: - HAVE_CPPFILT = True - -VERSION = '1.6' -__all__ = ['LcovCobertura'] - - -class Demangler(object): - def __init__(self): - self.pipe = subprocess.Popen( - CPPFILT, stdin=subprocess.PIPE, stdout=subprocess.PIPE) - - def demangle(self, name): - self.pipe.stdin.write(name + "\n") - return self.pipe.stdout.readline().rstrip() - - -class LcovCobertura(object): - """ - Converts code coverage report files in lcov format to Cobertura's XML - report format so that CI servers like Jenkins can aggregate results and - determine build stability etc. - - >>> from lcov_cobertura import LcovCobertura - >>> LCOV_INPUT = 'your lcov input' - >>> converter = LcovCobertura(LCOV_INPUT) - >>> cobertura_xml = converter.convert() - >>> print(cobertura_xml) - """ - - def __init__(self, lcov_data, base_dir='.', excludes=None, demangle=False): - """ - Create a new :class:`LcovCobertura` object using the given `lcov_data` - and `options`. - - :param lcov_data: Path to LCOV data file - :type lcov_data: string - :param base_dir: Path upon which to base all sources - :type base_dir: string - :param excludes: list of regexes to packages as excluded - :type excludes: [string] - :param demangle: whether to demangle function names using c++filt - :type demangle: bool - """ - - if not excludes: - excludes = [] - self.lcov_data = lcov_data - self.base_dir = base_dir - self.excludes = excludes - if demangle: - demangler = Demangler() - self.format = demangler.demangle - else: - self.format = lambda x: x - - def convert(self): - """ - Convert lcov file to cobertura XML using options from this instance. - """ - coverage_data = self.parse() - return self.generate_cobertura_xml(coverage_data) - - def parse(self): - """ - Generate a data structure representing it that can be serialized in any - logical format. - """ - - coverage_data = { - 'packages': {}, - 'summary': {'lines-total': 0, 'lines-covered': 0, - 'branches-total': 0, 'branches-covered': 0}, - 'timestamp': str(int(time.time())) - } - package = None - current_file = None - file_lines_total = 0 - file_lines_covered = 0 - file_lines = {} - file_methods = {} - file_branches_total = 0 - file_branches_covered = 0 - - for line in self.lcov_data.split('\n'): - if line.strip() == 'end_of_record': - if current_file is not None: - package_dict = coverage_data['packages'][package] - package_dict['lines-total'] += file_lines_total - package_dict['lines-covered'] += file_lines_covered - package_dict['branches-total'] += file_branches_total - package_dict['branches-covered'] += file_branches_covered - file_dict = package_dict['classes'][current_file] - file_dict['lines-total'] = file_lines_total - file_dict['lines-covered'] = file_lines_covered - file_dict['lines'] = dict(file_lines) - file_dict['methods'] = dict(file_methods) - file_dict['branches-total'] = file_branches_total - file_dict['branches-covered'] = file_branches_covered - coverage_data['summary']['lines-total'] += file_lines_total - coverage_data['summary']['lines-covered'] += file_lines_covered - coverage_data['summary']['branches-total'] += file_branches_total - coverage_data['summary']['branches-covered'] += file_branches_covered - - line_parts = line.split(':', 1) - input_type = line_parts[0] - - if input_type == 'SF': - # Get file name - file_name = line_parts[-1].strip() - relative_file_name = os.path.relpath(file_name, self.base_dir) - package = '.'.join(relative_file_name.split(os.path.sep)[0:-1]) - class_name = '.'.join(relative_file_name.split(os.path.sep)) - if package not in coverage_data['packages']: - coverage_data['packages'][package] = { - 'classes': {}, 'lines-total': 0, 'lines-covered': 0, - 'branches-total': 0, 'branches-covered': 0 - } - coverage_data['packages'][package]['classes'][ - relative_file_name] = { - 'name': class_name, 'lines': {}, 'lines-total': 0, - 'lines-covered': 0, 'branches-total': 0, - 'branches-covered': 0 - } - package = package - current_file = relative_file_name - file_lines_total = 0 - file_lines_covered = 0 - file_lines.clear() - file_methods.clear() - file_branches_total = 0 - file_branches_covered = 0 - elif input_type == 'DA': - # DA:2,0 - (line_number, line_hits) = line_parts[-1].strip().split(',') - line_number = int(line_number) - if line_number not in file_lines: - file_lines[line_number] = { - 'branch': 'false', 'branches-total': 0, - 'branches-covered': 0 - } - file_lines[line_number]['hits'] = line_hits - # Increment lines total/covered for class and package - try: - if int(line_hits) > 0: - file_lines_covered += 1 - except: - pass - file_lines_total += 1 - elif input_type == 'BRDA': - # BRDA:1,1,2,0 - (line_number, block_number, branch_number, branch_hits) = line_parts[-1].strip().split(',') - line_number = int(line_number) - if line_number not in file_lines: - file_lines[line_number] = { - 'branch': 'true', 'branches-total': 0, - 'branches-covered': 0, 'hits': 0 - } - file_lines[line_number]['branch'] = 'true' - file_lines[line_number]['branches-total'] += 1 - file_branches_total += 1 - if branch_hits != '-' and int(branch_hits) > 0: - file_lines[line_number]['branches-covered'] += 1 - file_branches_covered += 1 - elif input_type == 'BRF': - file_branches_total = int(line_parts[1]) - elif input_type == 'BRH': - file_branches_covered = int(line_parts[1]) - elif input_type == 'FN': - # FN:5,(anonymous_1) - function_line, function_name = line_parts[-1].strip().split(',') - file_methods[function_name] = [function_line, '0'] - elif input_type == 'FNDA': - # FNDA:0,(anonymous_1) - (function_hits, function_name) = line_parts[-1].strip().split(',') - if function_name not in file_methods: - file_methods[function_name] = ['0', '0'] - file_methods[function_name][-1] = function_hits - - # Exclude packages - excluded = [x for x in coverage_data['packages'] for e in self.excludes - if re.match(e, x)] - for package in excluded: - del coverage_data['packages'][package] - - # Compute line coverage rates - for package_data in list(coverage_data['packages'].values()): - package_data['line-rate'] = self._percent( - package_data['lines-total'], - package_data['lines-covered']) - package_data['branch-rate'] = self._percent( - package_data['branches-total'], - package_data['branches-covered']) - - return coverage_data - - def generate_cobertura_xml(self, coverage_data): - """ - Given parsed coverage data, return a String cobertura XML representation. - - :param coverage_data: Nested dict representing coverage information. - :type coverage_data: dict - """ - - dom_impl = minidom.getDOMImplementation() - doctype = dom_impl.createDocumentType("coverage", None, - "http://cobertura.sourceforge.net/xml/coverage-04.dtd") - document = dom_impl.createDocument(None, "coverage", doctype) - root = document.documentElement - summary = coverage_data['summary'] - self._attrs(root, { - 'branch-rate': self._percent(summary['branches-total'], - summary['branches-covered']), - 'branches-covered': str(summary['branches-covered']), - 'branches-valid': str(summary['branches-total']), - 'complexity': '0', - 'line-rate': self._percent(summary['lines-total'], - summary['lines-covered']), - 'lines-covered': str(summary['lines-covered']), - 'lines-valid': str(summary['lines-total']), - 'timestamp': coverage_data['timestamp'], - 'version': '2.0.3' - }) - - sources = self._el(document, 'sources', {}) - source = self._el(document, 'source', {}) - source.appendChild(document.createTextNode(self.base_dir)) - sources.appendChild(source) - - root.appendChild(sources) - - packages_el = self._el(document, 'packages', {}) - - packages = coverage_data['packages'] - for package_name, package_data in list(packages.items()): - package_el = self._el(document, 'package', { - 'line-rate': package_data['line-rate'], - 'branch-rate': package_data['branch-rate'], - 'name': package_name, - 'complexity': '0', - }) - classes_el = self._el(document, 'classes', {}) - for class_name, class_data in list(package_data['classes'].items()): - class_el = self._el(document, 'class', { - 'branch-rate': self._percent(class_data['branches-total'], - class_data['branches-covered']), - 'complexity': '0', - 'filename': class_name, - 'line-rate': self._percent(class_data['lines-total'], - class_data['lines-covered']), - 'name': class_data['name'] - }) - - # Process methods - methods_el = self._el(document, 'methods', {}) - for method_name, (line, hits) in list(class_data['methods'].items()): - method_el = self._el(document, 'method', { - 'name': self.format(method_name), - 'signature': '', - 'line-rate': '1.0' if int(hits) > 0 else '0.0', - 'branch-rate': '1.0' if int(hits) > 0 else '0.0', - }) - method_lines_el = self._el(document, 'lines', {}) - method_line_el = self._el(document, 'line', { - 'hits': hits, - 'number': line, - 'branch': 'false', - }) - method_lines_el.appendChild(method_line_el) - method_el.appendChild(method_lines_el) - methods_el.appendChild(method_el) - - # Process lines - lines_el = self._el(document, 'lines', {}) - lines = list(class_data['lines'].keys()) - lines.sort() - for line_number in lines: - line_el = self._el(document, 'line', { - 'branch': class_data['lines'][line_number]['branch'], - 'hits': str(class_data['lines'][line_number]['hits']), - 'number': str(line_number) - }) - if class_data['lines'][line_number]['branch'] == 'true': - total = int(class_data['lines'][line_number]['branches-total']) - covered = int(class_data['lines'][line_number]['branches-covered']) - percentage = int((covered * 100.0) / total) - line_el.setAttribute('condition-coverage', - '{0}% ({1}/{2})'.format( - percentage, covered, total)) - lines_el.appendChild(line_el) - - class_el.appendChild(methods_el) - class_el.appendChild(lines_el) - classes_el.appendChild(class_el) - package_el.appendChild(classes_el) - packages_el.appendChild(package_el) - root.appendChild(packages_el) - - return document.toprettyxml() - - def _el(self, document, name, attrs): - """ - Create an element within document with given name and attributes. - - :param document: Document element - :type document: Document - :param name: Element name - :type name: string - :param attrs: Attributes for element - :type attrs: dict - """ - return self._attrs(document.createElement(name), attrs) - - def _attrs(self, element, attrs): - """ - Set attributes on given element. - - :param element: DOM Element - :type element: Element - :param attrs: Attributes for element - :type attrs: dict - """ - for attr, val in list(attrs.items()): - element.setAttribute(attr, val) - return element - - def _percent(self, lines_total, lines_covered): - """ - Get the percentage of lines covered in the total, with formatting. - - :param lines_total: Total number of lines in given module - :type lines_total: number - :param lines_covered: Number of lines covered by tests in module - :type lines_covered: number - """ - - if lines_total == 0: - return '0.0' - return str(float(float(lines_covered) / float(lines_total))) - - -def main(argv=None): - """ - Converts LCOV coverage data to Cobertura-compatible XML for reporting. - - Usage: - lcov_cobertura.py lcov-file.dat - lcov_cobertura.py lcov-file.dat -b src/dir -e test.lib -o path/out.xml - - By default, XML output will be written to ./coverage.xml - """ - if argv is None: - argv = sys.argv - parser = OptionParser() - parser.usage = ('lcov_cobertura.py lcov-file.dat [-b source/dir] ' - '[-e ] [-o output.xml] [-d]') - parser.description = 'Converts lcov output to cobertura-compatible XML' - parser.add_option('-b', '--base-dir', action='store', - help='Directory where source files are located', - dest='base_dir', default='.') - parser.add_option('-e', '--excludes', - help='Comma-separated list of regexes of packages to exclude', - action='append', dest='excludes', default=[]) - parser.add_option('-o', '--output', - help='Path to store cobertura xml file', - action='store', dest='output', default='coverage.xml') - parser.add_option('-d', '--demangle', - help='Demangle C++ function names using %s' % CPPFILT, - action='store_true', dest='demangle', default=False) - (options, args) = parser.parse_args(args=argv) - - if options.demangle and not HAVE_CPPFILT: - raise RuntimeError("C++ filter executable (%s) not found!" % CPPFILT) - - if len(args) != 2: - print(main.__doc__) - sys.exit(1) - - try: - with open(args[1], 'r') as lcov_file: - lcov_data = lcov_file.read() - lcov_cobertura = LcovCobertura(lcov_data, options.base_dir, options.excludes, options.demangle) - cobertura_xml = lcov_cobertura.convert() - with open(options.output, mode='wt') as output_file: - output_file.write(cobertura_xml) - except IOError: - sys.stderr.write("Unable to convert %s to Cobertura XML" % args[1]) - -if __name__ == '__main__': - main() diff --git a/resources/packaging/android/AndroidManifest.xml.aar.in b/resources/packaging/android/AndroidManifest.xml.aar.in index 734fc53..429bfc6 100644 --- a/resources/packaging/android/AndroidManifest.xml.aar.in +++ b/resources/packaging/android/AndroidManifest.xml.aar.in @@ -1,6 +1,25 @@ - + + + + + + + + + + + + + + + @@ -10,7 +29,7 @@ android:label="@string/app_name" android:enabled="true" android:name="com.governikus.ausweisapp2.AusweisApp2Service" - android:exported="true" + android:exported="false" > @@ -43,6 +62,7 @@ + @@ -57,17 +77,5 @@ - - - - - - - - - - - diff --git a/resources/packaging/android/AndroidManifest.xml.apk.in b/resources/packaging/android/AndroidManifest.xml.apk.in index 9e19b92..41cfdda 100644 --- a/resources/packaging/android/AndroidManifest.xml.apk.in +++ b/resources/packaging/android/AndroidManifest.xml.apk.in @@ -1,6 +1,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + @@ -75,10 +104,11 @@ + - + @@ -158,26 +188,5 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/resources/packaging/android/backup_rules.xml b/resources/packaging/android/backup_rules.xml new file mode 100644 index 0000000..9e40138 --- /dev/null +++ b/resources/packaging/android/backup_rules.xml @@ -0,0 +1,4 @@ + + + + diff --git a/resources/packaging/android/build.gradle.append b/resources/packaging/android/build.gradle.append index 19efe91..88b043c 100644 --- a/resources/packaging/android/build.gradle.append +++ b/resources/packaging/android/build.gradle.append @@ -5,7 +5,7 @@ task sourcesJar(type: Jar) { } dependencies { - compile "com.android.support:support-v4:21.0.3" + compile "com.android.support:support-v4:28.0.0" } allprojects { @@ -15,3 +15,14 @@ allprojects { } } } + +android { + packagingOptions { + exclude 'META-INF/*.version' + exclude 'META-INF/proguard/androidx-annotations.pro' + } + + lintOptions { + lintConfig file('lint.xml') + } +} diff --git a/resources/packaging/android/lint.aar.xml b/resources/packaging/android/lint.aar.xml new file mode 100644 index 0000000..0999fdc --- /dev/null +++ b/resources/packaging/android/lint.aar.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + diff --git a/resources/packaging/android/lint.apk.xml b/resources/packaging/android/lint.apk.xml new file mode 100644 index 0000000..8818d55 --- /dev/null +++ b/resources/packaging/android/lint.apk.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/packaging/android/res/mipmap-anydpi-v26/npa.xml b/resources/packaging/android/res/mipmap-anydpi-v26/npa.xml new file mode 100644 index 0000000..4c7b81f --- /dev/null +++ b/resources/packaging/android/res/mipmap-anydpi-v26/npa.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/packaging/android/res/values/strings.xml b/resources/packaging/android/res/values/strings.xml new file mode 100644 index 0000000..6eacd99 --- /dev/null +++ b/resources/packaging/android/res/values/strings.xml @@ -0,0 +1,4 @@ + + + AusweisApp2 + diff --git a/resources/packaging/android/styles.xml b/resources/packaging/android/res/values/style.xml similarity index 62% rename from resources/packaging/android/styles.xml rename to resources/packaging/android/res/values/style.xml index 59ebb8e..2088b5c 100644 --- a/resources/packaging/android/styles.xml +++ b/resources/packaging/android/res/values/style.xml @@ -1,8 +1,9 @@ #dcebf6 diff --git a/resources/packaging/ios/AusweisApp2.entitlements b/resources/packaging/ios/AusweisApp2.entitlements new file mode 100644 index 0000000..2bb4dee --- /dev/null +++ b/resources/packaging/ios/AusweisApp2.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.developer.nfc.readersession.formats + + TAG + + + diff --git a/resources/packaging/ios/MacOSXBundleInfo.plist.in b/resources/packaging/ios/MacOSXBundleInfo.plist.in index ef3e8e3..c46ea64 100644 --- a/resources/packaging/ios/MacOSXBundleInfo.plist.in +++ b/resources/packaging/ios/MacOSXBundleInfo.plist.in @@ -2,6 +2,10 @@ + com.apple.developer.nfc.readersession.iso7816.select-identifiers + + E80704007F00070302 + CFBundleDevelopmentRegion English CFBundleExecutable @@ -73,72 +77,12 @@ UIRequiresFullScreen - UILaunchImages - - - UILaunchImageMinimumOSVersion - 10.0 - UILaunchImageName - launchImage568 - UILaunchImageOrientation - Portrait - UILaunchImageSize - {320, 568} - - - UILaunchImageMinimumOSVersion - 10.0 - UILaunchImageName - launchImage667 - UILaunchImageOrientation - Portrait - UILaunchImageSize - {375, 667} - - - UILaunchImageMinimumOSVersion - 10.0 - UILaunchImageName - launchImage736 - UILaunchImageOrientation - Portrait - UILaunchImageSize - {414, 736} - - - UILaunchImages~ipad - - - UILaunchImageMinimumOSVersion - 10.0 - UILaunchImageName - launchImage1024 - UILaunchImageOrientation - Landscape - UILaunchImageSize - {768, 1024} - - - UILaunchImageMinimumOSVersion - 10.0 - UILaunchImageName - launchImage1112 - UILaunchImageOrientation - Landscape - UILaunchImageSize - {834, 1112} - - - UILaunchImageMinimumOSVersion - 10.0 - UILaunchImageName - launchImage1366 - UILaunchImageOrientation - Landscape - UILaunchImageSize - {1024, 1366} - - + UILaunchStoryboardName + launchscreen + UIStatusBarStyle + UIStatusBarStyleLightContent + UIViewControllerBasedStatusBarAppearance + UISupportedInterfaceOrientations UIInterfaceOrientationPortrait @@ -155,6 +99,8 @@ bluetooth-central fetch + NSBluetoothAlwaysUsageDescription + AusweisApp2 needs Bluetooth to enable the required card reader. NSBluetoothPeripheralUsageDescription AusweisApp2 needs Bluetooth to enable the required card reader. NFCReaderUsageDescription diff --git a/resources/packaging/ios/de.lproj/InfoPlist.strings b/resources/packaging/ios/de.lproj/InfoPlist.strings index e000b6b..642604c 100644 --- a/resources/packaging/ios/de.lproj/InfoPlist.strings +++ b/resources/packaging/ios/de.lproj/InfoPlist.strings @@ -1,2 +1,2 @@ -NSBluetoothPeripheralUsageDescription = "Die AusweisApp2 nutzt Bluetooth, um auf das benötigte Kartenlesegerät zuzugreifen."; +NSBluetoothPeripheralUsageDescription = "Die AusweisApp2 nutzt Bluetooth, um auf den benötigten Kartenleser zuzugreifen."; NFCReaderUsageDescription = "Die AusweisApp2 nutzt NFC, um auf den Personalausweis zuzugreifen."; diff --git a/resources/packaging/ios/launchscreen.storyboard b/resources/packaging/ios/launchscreen.storyboard new file mode 100644 index 0000000..bb96682 --- /dev/null +++ b/resources/packaging/ios/launchscreen.storyboard @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/packaging/macos/Info.plist b/resources/packaging/macos/Info.plist index d092360..d9db4ec 100644 --- a/resources/packaging/macos/Info.plist +++ b/resources/packaging/macos/Info.plist @@ -34,7 +34,7 @@ LSBackgroundOnly 0 LSMinimumSystemVersion - 10.11.0 + 10.12.0 LSUIElement 1 NSHighResolutionCapable diff --git a/resources/packaging/macos/autostart_helper/Info.plist b/resources/packaging/macos/autostart_helper/Info.plist index 376b3a2..da8c744 100644 --- a/resources/packaging/macos/autostart_helper/Info.plist +++ b/resources/packaging/macos/autostart_helper/Info.plist @@ -27,7 +27,7 @@ LSBackgroundOnly 1 LSMinimumSystemVersion - 10.11.0 + 10.12.0 NSPrincipalClass NSApplication diff --git a/resources/qml/+desktop/main.qml b/resources/qml/+desktop/main.qml index 60b5267..289ff26 100644 --- a/resources/qml/+desktop/main.qml +++ b/resources/qml/+desktop/main.qml @@ -1,85 +1,229 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import Governikus.Global 1.0 import Governikus.TitleBar 1.0 import Governikus.MainView 1.0 +import Governikus.HistoryView 1.0 +import Governikus.SelfAuthenticationView 1.0 import Governikus.IdentifyView 1.0 +import Governikus.ChangePinView 1.0 import Governikus.ProviderView 1.0 +import Governikus.InformationView 1.0 +import Governikus.SettingsView 1.0 +import Governikus.TutorialView 1.0 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 import Governikus.Type.UiModule 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.SelfAuthModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ChangePinModel 1.0 +import Governikus.Style 1.0 +import QtQml 2.10 +import QtQml.Models 2.10 import QtQuick 2.10 import QtQuick.Controls 2.3 import QtGraphicalEffects 1.0 +import Qt.labs.platform 1.1 ApplicationWindow { - readonly property int initialWidth: Utils.dp(1600) - readonly property int initialHeight: Utils.dp(1200) - id: appWindow - visible: true - width: initialWidth - height: initialHeight - title: "AusweisApp2" - background: Item { - Rectangle { - anchors.fill: parent - color: Constants.background_color - visible: plugin.useFlatStyleOnDesktop() - } - Image { - anchors.fill: parent - fillMode: Image.PreserveAspectCrop - source: visible ? "qrc:///images/desktop/background.png" : "" - visible: !plugin.useFlatStyleOnDesktop() - LinearGradient { - anchors.fill: parent - start: Qt.point(0, 0) - end: Qt.point(0, appWindow.height) - gradient: Gradient { - GradientStop { - position: 0 - color: "#AA659bcd" - } - GradientStop { - position: 1 - color: "#FF659bcd" - } - } - } - } + function openSaveFileDialog(pOnAcceptedCallback, pDefaultFilename, pSuffix) { + //: LABEL DESKTOP_QML + saveFileDialog.nameFilters = [qsTr("Text files") + " (*." + pSuffix + ")"] + saveFileDialog.defaultSuffix = pSuffix + saveFileDialog.currentFile = saveFileDialog.folder + "/" + pDefaultFilename + saveFileDialog.acceptedCallback = pOnAcceptedCallback + saveFileDialog.open() } - onWidthChanged: setScaleFactor(); - onHeightChanged: setScaleFactor(); - function setScaleFactor() { - ApplicationModel.scaleFactor = Math.min(width / initialWidth, height / initialHeight) + visible: false + width: d.initialWidth + height: d.initialHeight + + minimumWidth: 480 + minimumHeight: 360 + + title: Qt.application.name + color: Style.color.background + menuBar: TitleBar { + id: titleBar + contentRoot: contentLoader + onRootClicked: d.activeView = SectionPage.Views.Main } - property int activeView: 0 - function activateView(pName) { - if (pName < 1) { - console.warn("Unknown view requested: " + pName) - return; - } + Component.onCompleted: menuBar.forceActiveFocus() - activeView = pName - titleBar.updateActions() - } + onWidthChanged: d.setScaleFactor() + onHeightChanged: d.setScaleFactor() onClosing: { - hide() - plugin.hide(); + if (SettingsModel.remindUserToClose) { + closeWarning.open() + close.accepted = false + } else { + hide() + plugin.hide() + } + } + onVisibilityChanged: if (visibility !== ApplicationWindow.Minimized) d.lastVisibility = visibility + + QtObject { + id: d + + property int activeView: SectionPage.Views.Main + property int lastVisibility: ApplicationWindow.Windowed + readonly property int initialWidth: ApplicationModel.dpiScale * 1600 + readonly property int initialHeight: ApplicationModel.dpiScale * 1200 + + function closeOpenDialogs() { + saveFileDialog.reject() + closeWarning.close() + } + + function showMainWindow() { + var currentFlags = flags + // Force the window to the foreground if it was minimized (not closed to tray) + if (Qt.platform.os === "windows") { + flags = currentFlags | Qt.WindowStaysOnTopHint + } + + if (d.lastVisibility === ApplicationWindow.Maximized) { + showMaximized() + } else { + show() + } + + flags = currentFlags + raise() + requestActivate() + } + + function setScaleFactor() { + ApplicationModel.scaleFactor = Math.min(width / initialWidth, height / initialHeight) + } + + } + + FileDialog { + id: saveFileDialog + + property var acceptedCallback + + fileMode: FileDialog.SaveFile + folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) + onAccepted: acceptedCallback(file) + } + + ConfirmationPopup { + id: domination + + visible: plugin.dominated + + style: ConfirmationPopup.PopupStyle.NoButtons + //: INFO DESKTOP_QML The AA2 is currently remote controlled via the SDK interface, concurrent usage of the AA2 is not possible. + title: qsTr("Another application uses %1").arg(Qt.application.name) + text: plugin.dominator + closePolicy: Popup.NoAutoClose + } + + ConfirmationPopup { + id: closeWarning + + closePolicy: Popup.NoAutoClose + style: ConfirmationPopup.PopupStyle.OkButton + //: INFO DESKTOP_QML Header of the popup that is shown when the AA2 is closed for the first time. + title: qsTr("The user interface of the %1 is closed.").arg(Qt.application.name) + SettingsModel.translationTrigger + //: INFO DESKTOP_QML Content of the popup that is shown when the AA2 is closed for the first time. + text: qsTr("The program remains available via the icon in the system tray. Click on the %1 icon to reopen the user interface.").arg(Qt.application.name) + SettingsModel.translationTrigger + onConfirmed: { + hide() + plugin.hide() + } + + ToggleableOption { + //: LABEL DESKTOP_QML + text: qsTr("Do not show this dialog again.") + SettingsModel.translationTrigger + textStyle: Style.text.normal + + checked: !SettingsModel.remindUserToClose + + onCheckedChanged: SettingsModel.remindUserToClose = !checked + } } Connections { target: plugin onFireShowRequest: { - showNormal() - raise() - requestActivate() - if (pModule === UiModule.IDENTIFY) activateView(SectionPage.Views.Identify) + d.showMainWindow() + d.closeOpenDialogs() + switch (pModule) { + case UiModule.IDENTIFY: + if (ApplicationModel.currentWorkflow === "") { + d.activeView = SectionPage.Views.SelfAuthentication + } + if (ApplicationModel.currentWorkflow === "authentication" || ApplicationModel.currentWorkflow === "selfauthentication") { + d.activeView = SectionPage.Views.Identify + } + break + case UiModule.PINMANAGEMENT: + if (ApplicationModel.currentWorkflow === "") { + ChangePinModel.startWorkflow() + } + if (ApplicationModel.currentWorkflow === "changepin") { + d.activeView = SectionPage.Views.ChangePin + } + break + case UiModule.DEFAULT: + if (ApplicationModel.currentWorkflow === "") { + d.activeView = SectionPage.Views.Main + } + break + case UiModule.SETTINGS: + if (ApplicationModel.currentWorkflow === "") { + d.activeView = SectionPage.Views.Settings + } + break + case UiModule.CURRENT: + if (SettingsModel.showSetupAssistantOnStart) { + d.activeView = SectionPage.Views.SetupAssistant + } + break + } + } + onFireHideRequest: { + hide() + } + } + + Connections { + target: SettingsModel + onFireAppUpdateDataChanged: { + var updateData = SettingsModel.appUpdateData + + if (!updateData.valid) { + //: INFO DESKTOP_QML Message that the update data is invalid and can't be used. + ApplicationModel.showFeedback(qsTr("Unsupported version of %1.").arg(Qt.application.name)) + } + else { + if (pUpdateAvailable) { + //: INFO DESKTOP_QML An update was found which matches the current platform, the new version number is shown in the message. + ApplicationModel.showFeedback(qsTr("An update is available (Version: %1).").arg(updateData.version)) + //: INFO DESKTOP_QML An update was found. This is the caption of the download button, clicking it opens the link in the browser. + ApplicationModel.showFeedback("".arg(updateData.url) + qsTr("Download") + "") + //: INFO DESKTOP_QML An update was found. This is the caption of the release note button, clicking it opens the note in the browser. + ApplicationModel.showFeedback("".arg(updateData.notesUrl) + qsTr("Release notes") + "") + } + else { + //: INFO DESKTOP_QML The AA2 is up-to-date, this message is only shown if the update check is started by the user and not via the auto-update functionality. + ApplicationModel.showFeedback(qsTr("Current version %1 is up to date.").arg(updateData.currentVersion)) + } + } } } @@ -88,52 +232,90 @@ ApplicationWindow { onTriggered: plugin.developerBuild ? plugin.doRefresh() : "" } - menuBar: TitleBar { - id: titleBar - contentRoot: contentArea - onRootClicked: activateView(SectionPage.Views.Main) - navSuccessor: { - if (viewMain.visible) { - return viewMain - } - if (viewIdentify.visible) { - return viewIdentify.tabTarget - } - if (viewProvider.visible) { - return viewProvider - } - return null - } + Shortcut { + sequence: StandardKey.HelpContents + onActivated: ApplicationModel.openOnlineHelp("index") } - Item { - id: contentArea + Loader { + id: contentLoader + + // Keep in sync with the order/length of the SectionPage.Views enum + property var sectionPages: ObjectModel { + Component {MainView {}} + Component {SelfAuthenticationView {}} + Component {IdentifyView {}} + Component {ChangePinView {}} + Component {ProviderView {}} + Component {InformationView {}} + Component {SettingsView {}} + Component {HistoryView {}} + Component {SetupAssistantView {}} + } + + Keys.onEscapePressed: { + if (d.activeView !== SectionPage.Views.Main) { + d.activeView = SectionPage.Views.Main + } + } + + Connections { + target: contentLoader.item + onNextView: d.activeView = pName + onVisibleChildrenChanged: titleBar.updateActions() + } + anchors.fill: parent - MainView { - id: viewMain + onItemChanged: titleBar.updateActions() + sourceComponent: sectionPages.get(d.activeView) + } - visible: appWindow.activeView === 0 || appWindow.activeView === SectionPage.Views.Main - onVisibleChildrenChanged: titleBar.updateActions() - onNextView: activateView(pName) - navSuccessor: titleBar + Rectangle { + visible: SettingsModel.developerMode && d.activeView !== SectionPage.Views.Settings + height: childrenRect.height + width: childrenRect.width + anchors { + bottom: parent.bottom + bottomMargin: 4 + right: parent.right + rightMargin: 4 } - IdentifyView { - id: viewIdentify + color: Constants.white + opacity: 0.7 + radius: ApplicationModel.scaleFactor * 4 - visible: appWindow.activeView === SectionPage.Views.Identify - onNextView: activateView(pName) - navSuccessor: titleBar - } - - ProviderView { - id: viewProvider - - visible: appWindow.activeView === SectionPage.Views.Provider - onVisibleChildrenChanged: titleBar.updateActions() - onNextView: activateView(pName) - navSuccessor: titleBar + Row { + spacing: Constants.groupbox_spacing + padding: Constants.pane_padding / 2 + Label { + //: LABEL DESKTOP_QML + text: qsTr("Developer Mode: Enabled!") + SettingsModel.translationTrigger + color: Constants.red + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: Style.dimens.normal_font_size + } + GButton { + //: LABEL DESKTOP_QML Global button to disable developer mode. + text: qsTr("Disable") + SettingsModel.translationTrigger + onClicked: SettingsModel.developerMode = false + } } } + + Rectangle { + id: developerWarning + + visible: SettingsModel.developerMode && d.activeView !== SectionPage.Views.Settings + height: ApplicationModel.scaleFactor * 50 + width: Math.sqrt(contentLoader.width * contentLoader.width + contentLoader.height * contentLoader.height) + anchors.verticalCenter: parent.bottom + + color: Constants.red + opacity: 0.5 + rotation: -Math.atan(contentLoader.height / contentLoader.width) * 180 / Math.PI + transformOrigin: Item.Left + antialiasing: true + } } diff --git a/resources/qml/+mobile/main.qml b/resources/qml/+mobile/main.qml index 7665133..315b5f1 100644 --- a/resources/qml/+mobile/main.qml +++ b/resources/qml/+mobile/main.qml @@ -1,6 +1,9 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 -import QtQuick.Window 2.2 import Governikus.Global 1.0 import Governikus.TitleBar 1.0 @@ -9,16 +12,80 @@ import Governikus.SplashScreen 1.0 import Governikus.View 1.0 import Governikus.FeedbackView 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Style 1.0 ApplicationWindow { id: appWindow + visible: true width: 750 / 2 //Screen.desktopAvailableWidth height: 1334 / 2 - title: "Governikus AusweisApp2" - color: Constants.background_color - property var lastCloseInvocation: 0 + title: "Governikus AusweisApp2" + color: Style.color.background + Component.onCompleted: { + flags |= Qt.MaximizeUsingFullscreenGeometryHint + } + + menuBar: TitleBar { + id: titleBar + + property var currentSectionPage: if (contentArea) contentArea.currentSectionPage + + visible: !splashScreen.visible && (!currentSectionPage || currentSectionPage.titleBarVisible) + + navigationAction: currentSectionPage ? currentSectionPage.navigationAction : null + title: currentSectionPage ? currentSectionPage.title : "" + rightAction: currentSectionPage ? currentSectionPage.rightTitleBarAction : null + subTitleBarAction: currentSectionPage ? currentSectionPage.subTitleBarAction : null + color: currentSectionPage ? currentSectionPage.titleBarColor : null + titleBarOpacity: contentArea.visibleItem && contentArea.visibleItem.stack.currentItem ? contentArea.visibleItem.stack.currentItem.titleBarOpacity : 1 + } + + onClosing: { // back button pressed + if (contentArea.visibleItem) + { + var activeStackView = contentArea.visibleItem.stack + var navigationAction = activeStackView.currentItem.navigationAction + + if (activeStackView.depth <= 1 + && (!navigationAction || navigationAction.state === "")) { + if (contentArea.state === "identify" + || SettingsModel.showSetupAssistantOnStart) { // Don't go back to "identify" section page when setup tutorial is active + var currentTime = new Date().getTime(); + if( currentTime - d.lastCloseInvocation < 1000 ) { + plugin.fireQuitApplicationRequest() + return + } + + d.lastCloseInvocation = currentTime + //: INFO ANDROID IOS Hint that is shown if the users pressed the "back" button on the top-most navigation level for the first time (a second press closes the app). + ApplicationModel.showFeedback(qsTr("To close the app, quickly press the back button twice.")) + } else { + navBar.state = "identify" + navBar.currentIndex = 0 + navBar.lockedAndHidden = false + } + } + else if (navigationAction) { + if (navBar.isOpen) { + navBar.close() + } + else if (navigationAction.state !== "hidden") { + navigationAction.clicked(undefined) + } + } + } + + close.accepted = false + } + + QtObject { + id: d + + property var lastCloseInvocation: 0 + } Action { shortcut: "Ctrl+Alt+R" @@ -30,32 +97,34 @@ ApplicationWindow { onTriggered: appWindow.close() } - menuBar: TitleBar { - id: titleBar - visible: !splashScreen.visible && contentArea.state !== "tutorial" - - titleBarOpacity: contentArea.visibleItem && contentArea.visibleItem.stack.currentItem ? contentArea.visibleItem.stack.currentItem.titleBarOpacity : 1 - - property var currentSectionPage: if (contentArea) contentArea.currentSectionPage - - leftAction: if (currentSectionPage) currentSectionPage.leftTitleBarAction - titleItem: if (currentSectionPage) currentSectionPage.headerTitleBarAction - rightAction: if (currentSectionPage) currentSectionPage.rightTitleBarAction - subTitleBarAction: if (currentSectionPage) currentSectionPage.subTitleBarAction - color: if (currentSectionPage) currentSectionPage.titleBarColor + Connections { + target: plugin + enabled: contentArea.ready + onFireApplicationActivated: feedback.showIfNecessary() } ContentAreaLoader { id: contentArea - state: navBar.state - anchors.left: Constants.leftNavigation ? navBar.right : parent.left - anchors.top: parent.top - anchors.right: parent.right - anchors.bottom: Constants.bottomNavigation ? navBar.top : parent.bottom + anchors { + left: Constants.leftNavigation ? navBar.right : parent.left + top: parent.top + right: parent.right + bottom: Constants.bottomNavigation ? navBar.top : parent.bottom + bottomMargin: ( + currentSectionPage && currentSectionPage.automaticSafeAreaMarginHandling && + (!Constants.bottomNavigation || navBar.lockedAndHidden) + ) ? plugin.safeAreaMargins.bottom : 0 + + Behavior on bottomMargin { + NumberAnimation {duration: Constants.animation_duration} + } + } + + state: navBar.state onReadyChanged: { splashScreen.hide() - if (!ApplicationModel.currentWorkflow && !settingsModel.showTutorialOnStart) { + if (!ApplicationModel.currentWorkflow && !SettingsModel.showSetupAssistantOnStart) { navBar.lockedAndHidden = false } @@ -63,74 +132,47 @@ ApplicationWindow { } } + SplashScreen { + id: splashScreen + + color: appWindow.color + } + Navigation { id: navBar + visible: !splashScreen.visible anchors.left: parent.left anchors.top: Constants.leftNavigation ? parent.top : undefined anchors.right: Constants.bottomNavigation ? parent.right : undefined anchors.bottom: parent.bottom + + onReselectedState: contentArea.reselectedState() } - onClosing: { // back button pressed - if (contentArea.visibleItem) - { - var activeStackView = contentArea.visibleItem.stack - var leftTitleBarAction = activeStackView.currentItem.leftTitleBarAction + ConfirmationPopup { + id: toast - if (activeStackView.depth <= 1 - && (!leftTitleBarAction || leftTitleBarAction.state === "") - && contentArea.state != "tutorial") // Don't go back to "identify" section page when tutorial is active - { - if (contentArea.state != "identify") { - navBar.state = "identify" - navBar.currentIndex = 0 - } else { - var currentTime = new Date().getTime(); - if( currentTime - lastCloseInvocation < 1000 ) { - plugin.fireQuitApplicationRequest() - return - } + visible: ApplicationModel.feedback !== "" - lastCloseInvocation = currentTime - qmlExtension.showFeedback(qsTr("To close the app, quickly press the back button twice.")) - } - } - else if (leftTitleBarAction) { - if (navBar.isOpen) { - navBar.close() - } - else if (leftTitleBarAction.state !== "hidden") { - leftTitleBarAction.clicked(undefined) - } - } - } + style: ApplicationModel.isScreenReaderRunning() ? ConfirmationPopup.PopupStyle.OkButton : ConfirmationPopup.PopupStyle.NoButtons + closePolicy: Popup.NoAutoClose + modal: ApplicationModel.isScreenReaderRunning() + dim: true - close.accepted = false + text: ApplicationModel.feedback + + onConfirmed: ApplicationModel.onShowNextFeedback() } StoreFeedbackPopup { id: feedback - x: (appWindow.width - width) / 2 - y: (appWindow.height - height) / 2 - function showIfNecessary() { - if (ApplicationModel.areStoreFeedbackDialogConditionsMet()) { - ApplicationModel.hideFutureStoreFeedbackDialogs() + if (!ApplicationModel.currentWorkflow && SettingsModel.requestStoreFeedback()) { + SettingsModel.hideFutureStoreFeedbackDialogs() feedback.open() } } } - - Connections { - target: plugin - enabled: contentArea.ready - onFireApplicationActivated: feedback.showIfNecessary() - } - - SplashScreen { - id: splashScreen - color: appWindow.color - } } diff --git a/resources/qml/Governikus/ChangePinView/+desktop/ChangePinController.qml b/resources/qml/Governikus/ChangePinView/+desktop/ChangePinController.qml new file mode 100644 index 0000000..cb6d881 --- /dev/null +++ b/resources/qml/Governikus/ChangePinView/+desktop/ChangePinController.qml @@ -0,0 +1,99 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.ChangePinModel 1.0 +import Governikus.Type.NumberModel 1.0 + + +Controller { + id: controller + + enum WorkflowStates { + Initial, + Reader, + Card, + Update, + Password, + Processing + } + + + property int workflowState: ChangePinController.WorkflowStates.Initial + + QtObject { + id: d + + property bool showRemoveCardFeedback: false + } + + Connections { + target: ChangePinModel + + onFireCurrentStateChanged: processStateChange() + // This is necessary because onCurrentStateChanged is not + // working, when we need to process a state a second time. + } + + function processStateChange() { + switch (ChangePinModel.currentState) { + case "Initial": + ChangePinModel.setInitialPluginType() + break + case "StateSelectReader": + controller.nextView(ChangePinView.SubViews.Workflow) + setPinWorkflowStateAndContinue(ChangePinController.WorkflowStates.Reader) + break + case "StateConnectCard": + setPinWorkflowStateAndContinue(ChangePinController.WorkflowStates.Card) + break + case "StateEnterPacePassword": + setPinWorkflowStateAndRequestInput(ChangePinController.WorkflowStates.Password) + break + case "StateUnfortunateCardPosition": + controller.nextView(ChangePinView.SubViews.CardPosition) + break + case "StateEnterNewPacePin": + NumberModel.requestNewPin() + setPinWorkflowStateAndRequestInput(ChangePinController.WorkflowStates.Password) + break + case "StateCleanUpReaderManager": + d.showRemoveCardFeedback = ChangePinModel.selectedReaderHasCard() && !ChangePinModel.error; + setPinWorkflowStateAndContinue(ChangePinController.WorkflowStates.Processing) + break + case "FinalState": + if (d.showRemoveCardFeedback) { + d.showRemoveCardFeedback = false + //: INFO DESKTOP_QML Changing the PIN was successful; hint that the id card may now be removed from the card reader. + ApplicationModel.showFeedback(qsTr("You may now remove your ID card from the device.")) + } + if (ChangePinModel.shouldSkipResultView()) { + controller.nextView(ChangePinView.SubViews.ReturnToMain) + ChangePinModel.continueWorkflow() + } else { + controller.nextView(ChangePinView.SubViews.Result) + } + break + default: + ChangePinModel.continueWorkflow() + } + } + + function setPinWorkflowStateAndContinue(pState) { + controller.workflowState = pState + ChangePinModel.continueWorkflow() + } + + function setPinWorkflowStateAndRequestInput(pState) { + controller.workflowState = pState + if (ChangePinModel.isBasicReader) { + controller.nextView(ChangePinView.SubViews.Password) + } else { + ChangePinModel.continueWorkflow() + } + } +} diff --git a/resources/qml/Governikus/ChangePinView/+desktop/ChangePinView.qml b/resources/qml/Governikus/ChangePinView/+desktop/ChangePinView.qml new file mode 100644 index 0000000..a8d301b --- /dev/null +++ b/resources/qml/Governikus/ChangePinView/+desktop/ChangePinView.qml @@ -0,0 +1,235 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.EnterPasswordView 1.0 +import Governikus.Global 1.0 +import Governikus.TitleBar 1.0 +import Governikus.ProgressView 1.0 +import Governikus.ResultView 1.0 +import Governikus.SettingsView 1.0 +import Governikus.View 1.0 +import Governikus.Workflow 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ChangePinModel 1.0 +import Governikus.Type.NumberModel 1.0 + + +SectionPage { + id: baseItem + + enum SubViews { + Undefined, + Workflow, + Password, + PasswordInfo, + Progress, + CardPosition, + InputError, + Data, + PinUnlocked, + Result, + ReturnToMain, + ReaderSettings + } + + Keys.onEscapePressed: if (d.cancelAllowed) ChangePinModel.cancelWorkflow() + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("PIN Management") + SettingsModel.translationTrigger + rootEnabled: false + helpTopic: "pinTab" + showSettings: (changePinController.workflowState === ChangePinController.WorkflowStates.Initial || + changePinController.workflowState === ChangePinController.WorkflowStates.Reader || + changePinController.workflowState === ChangePinController.WorkflowStates.Card) + && d.activeView !== ChangePinView.SubViews.Progress + + onClicked: { + if (d.activeView === ChangePinView.SubViews.PasswordInfo) { + d.view = ChangePinView.SubViews.Password + ApplicationWindow.menuBar.updateActions() + } + else if (d.activeView === ChangePinView.SubViews.ReaderSettings) { + d.view = readerView.preceedingView + ApplicationWindow.menuBar.updateActions() + } + } + + customSubAction: CancelAction { + visible: d.cancelAllowed + + onClicked: { + if (pinResult.visible) { + ChangePinModel.continueWorkflow() + baseItem.nextView(SectionPage.Views.Main) + } else { + ChangePinModel.cancelWorkflow() + } + } + } + + customSettingsHandler: function(){ + readerView.preceedingView = d.activeView + d.view = ChangePinView.SubViews.ReaderSettings + ApplicationWindow.menuBar.updateActions() + } + } + + QtObject { + id: d + + property var view: ChangePinView.SubViews.Undefined + readonly property int activeView: inputError.visible ? ChangePinView.SubViews.InputError : pinUnlocked.visible ? ChangePinView.SubViews.PinUnlocked : view + readonly property bool cancelAllowed: ChangePinModel.isBasicReader || generalWorkflow.waitingFor != Workflow.WaitingFor.Password + } + + TabbedReaderView { + id: readerView + + property int preceedingView: ChangePinView.SubViews.Undefined + + visible: d.activeView === ChangePinView.SubViews.ReaderSettings + onCloseView: { + d.view = preceedingView + ApplicationWindow.menuBar.updateActions() + } + } + + ChangePinController { + id: changePinController + + onNextView: { + if (pName === ChangePinView.SubViews.ReturnToMain) { + baseItem.nextView(SectionPage.Views.Main) + return; + } + + d.view = pName + } + } + + GeneralWorkflow { + id: generalWorkflow + + visible: d.activeView === ChangePinView.SubViews.Workflow + + isPinChange: true + waitingFor: switch (changePinController.workflowState) { + case ChangePinController.WorkflowStates.Reader: + return Workflow.WaitingFor.Reader + case ChangePinController.WorkflowStates.Card: + return Workflow.WaitingFor.Card + case ChangePinController.WorkflowStates.Password: + return Workflow.WaitingFor.Password + default: + return Workflow.WaitingFor.None + } + } + + EnterPasswordView { + id: enterPasswordView + + visible: d.activeView === ChangePinView.SubViews.Password + + onPasswordEntered: { + d.view = ChangePinView.SubViews.Progress + ChangePinModel.continueWorkflow() + } + + onChangePinLength: { + NumberModel.requestTransportPin = !NumberModel.requestTransportPin + } + + onRequestPasswordInfo: { + d.view = ChangePinView.SubViews.PasswordInfo + ApplicationWindow.menuBar.updateActions() + } + } + + PasswordInfoView { + id: passwordInfoView + + visible: d.activeView === ChangePinView.SubViews.PasswordInfo + + onClose: { + d.view = ChangePinView.SubViews.Password + ApplicationWindow.menuBar.updateActions() + } + } + + ProgressView { + id: pinProgressView + + visible: d.activeView === ChangePinView.SubViews.Progress + + //: LABEL DESKTOP_QML + text: qsTr("Change PIN") + SettingsModel.translationTrigger + //: INFO DESKTOP_QML Processing screen text while the card communication is running after the PIN has been entered during PIN change process. + subText: qsTr("Please wait a moment...") + SettingsModel.translationTrigger + } + + ResultView { + id: inputError + + property bool errorConfirmed: false + + visible: !errorConfirmed && NumberModel.hasPasswordError && d.view != ChangePinView.SubViews.Result + + resultType: ResultView.Type.IsError + text: NumberModel.inputError + onNextView: errorConfirmed = true + + Connections { + target: NumberModel + onFireInputErrorChanged: inputError.errorConfirmed = false + } + } + + ResultView { + id: pinUnlocked + + property bool confirmed: true + + visible: !confirmed && (d.view === ChangePinView.SubViews.Password || generalWorkflow.waitingFor === Workflow.WaitingFor.Password) + + resultType: ResultView.Type.IsSuccess + //: INFO DESKTOP_QML The ID card has just been unblocked and the user can now continue with their PIN change. + text: qsTr("Your ID card is unblocked. You now have three more tries to change your PIN") + SettingsModel.translationTrigger + onNextView: confirmed = true + + Connections { + target: ChangePinModel + onFireOnPinUnlocked: pinUnlocked.confirmed = false + } + } + + ResultView { + id: cardPositionView + + visible: d.activeView === ChangePinView.SubViews.CardPosition + + resultType: ResultView.Type.IsInfo + //: INFO DESKTOP_QML The NFC signal is weak or unstable, the user is asked to change the card's position to (hopefully) reduce the distance to the NFC chip. + text: qsTr("Weak NFC signal.\nPlease reposition your card.") + SettingsModel.translationTrigger + onNextView: ChangePinModel.continueWorkflow() + } + + ResultView { + id: pinResult + + visible: d.activeView === ChangePinView.SubViews.Result + + resultType: ChangePinModel.error ? ResultView.Type.IsError : ResultView.Type.IsSuccess + text: ChangePinModel.resultString + onNextView: { + ChangePinModel.continueWorkflow() + baseItem.nextView(pName) + } + emailButtonVisible: ChangePinModel.error && !ChangePinModel.isCancellationByUser() + onEmailButtonPressed: ChangePinModel.sendResultMail() + } +} diff --git a/resources/qml/Governikus/ChangePinView/+ios/ChangePinViewContent.qml b/resources/qml/Governikus/ChangePinView/+ios/ChangePinViewContent.qml deleted file mode 100644 index f55910f..0000000 --- a/resources/qml/Governikus/ChangePinView/+ios/ChangePinViewContent.qml +++ /dev/null @@ -1,64 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 -import Governikus.Type.ChangePinModel 1.0 - - -Item { - readonly property int spacing: (height - pinHeader.height - pinDesc.height - pinIcon.height - govButton.height - Utils.dp(40)) / 3 - - Text { - id: pinHeader - - text: qsTr("PIN Management") + settingsModel.translationTrigger - - anchors.top: parent.top - anchors.topMargin: spacing - anchors.horizontalCenter: parent.horizontalCenter - - font.pixelSize: Constants.header_font_size - color: Constants.blue - } - - Text { - id: pinDesc - color: Constants.secondary_text - - width: parent.width * 0.9 - - text: qsTr("You have the opportunity to change your transport PIN into a personal PIN. You can also change the PIN at any time or unblock the PIN using the personal unblocking key (PUK). The transport PIN and the PUK can be found in the letter sent to you by your competent authority.") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap - - anchors.top: pinHeader.bottom - anchors.topMargin: Utils.dp(10) - anchors.horizontalCenter: parent.horizontalCenter - } - - Image { - id: pinIcon - - height: parent.height * 0.25 - width: height - - anchors.top: pinDesc.bottom - anchors.topMargin: spacing - anchors.horizontalCenter: parent.horizontalCenter - - fillMode: Image.PreserveAspectFit - smooth: true - source: "qrc:///images/icon_Pin.svg" - } - - GButton { - id: govButton - - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - anchors.bottomMargin: Utils.dp(30) - - text: qsTr("Change PIN now") + settingsModel.translationTrigger - onClicked: ChangePinModel.startWorkflow() - } -} diff --git a/resources/qml/Governikus/ChangePinView/ChangePinController.qml b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinController.qml similarity index 80% rename from resources/qml/Governikus/ChangePinView/ChangePinController.qml rename to resources/qml/Governikus/ChangePinView/+mobile/ChangePinController.qml index 1b0cd8d..50b21ee 100644 --- a/resources/qml/Governikus/ChangePinView/ChangePinController.qml +++ b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinController.qml @@ -1,10 +1,13 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Type.ApplicationModel 1.0 import Governikus.Type.ChangePinModel 1.0 import Governikus.Type.NumberModel 1.0 import Governikus.Type.ReaderPlugIn 1.0 -import Governikus.Type.PacePasswordId 1.0 Item { @@ -69,7 +72,7 @@ Item { function processStateChange() { switch (currentState) { - case "": + case "Initial": break case "StateSelectReader": fireReplace(pinWorkflow) @@ -89,17 +92,19 @@ Item { setPinWorkflowStateAndContinue(ChangePinController.WorkflowStates.Update) break case "StateEnterPacePassword": - if (NumberModel.establishPaceChannelType == PacePasswordId.PACE_PIN) { + if (NumberModel.passwordType === NumberModel.PASSWORD_PIN) { setPinWorkflowStateAndRequestInput(ChangePinController.WorkflowStates.Pin, "PIN") } - else if (NumberModel.establishPaceChannelType == PacePasswordId.PACE_CAN) { + else if (NumberModel.passwordType === NumberModel.PASSWORD_CAN) { setPinWorkflowStateAndRequestInput(ChangePinController.WorkflowStates.Can, "CAN") } - else if (NumberModel.establishPaceChannelType == PacePasswordId.PACE_PUK) { + else if (NumberModel.passwordType === NumberModel.PASSWORD_PUK) { setPinWorkflowStateAndRequestInput(ChangePinController.WorkflowStates.Puk, "PUK") } break case "StateUnfortunateCardPosition": + //: INFO IOS The NFC signal is weak or unstable. The scan is stopped with this information in the iOS dialog. + ApplicationModel.stopNfcScanWithError(qsTr("Weak NFC signal") + SettingsModel.translationTrigger) baseItem.firePush(cardPositionView) break case "StateEnterNewPacePin": @@ -112,7 +117,14 @@ Item { case "FinalState": if (controller.showRemoveCardFeedback) { controller.showRemoveCardFeedback = false - qmlExtension.showFeedback(qsTr("You may now remove your ID card from the device.")) + //: INFO ANDROID IOS Hint that the id card may be removed from the card reader since the PIN was changed successfully. + ApplicationModel.showFeedback(qsTr("You may now remove your ID card from the device.")) + } + if (ChangePinModel.shouldSkipResultView()) { + ChangePinModel.continueWorkflow() + firePopAll() + navBar.lockedAndHidden = false + break } baseItem.firePush(pinResult) navBar.lockedAndHidden = true @@ -132,6 +144,7 @@ Item { if (ChangePinModel.isBasicReader) { enterPinView.state = pInput baseItem.firePush(enterPinView) + ApplicationModel.nfcRunning = false } else { ChangePinModel.continueWorkflow() } diff --git a/resources/qml/Governikus/ChangePinView/ChangePinView.qml b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinView.qml similarity index 57% rename from resources/qml/Governikus/ChangePinView/ChangePinView.qml rename to resources/qml/Governikus/ChangePinView/+mobile/ChangePinView.qml index 143874c..514b0d5 100644 --- a/resources/qml/Governikus/ChangePinView/ChangePinView.qml +++ b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinView.qml @@ -1,12 +1,19 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import Governikus.EnterPinView 1.0 +import Governikus.EnterPasswordView 1.0 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.ProgressView 1.0 import Governikus.ResultView 1.0 import Governikus.View 1.0 import Governikus.Workflow 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ChangePinModel 1.0 import Governikus.Type.NumberModel 1.0 @@ -14,14 +21,20 @@ import Governikus.Type.NumberModel 1.0 SectionPage { id: baseItem - disableFlicking: true - headerTitleBarAction: TitleBarAction { text: qsTr("PIN Management") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("PIN Management") + SettingsModel.translationTrigger ChangePinController { id: changePinController } - content: ChangePinViewContent { + Connections { + target: ChangePinModel + //: INFO ANDROID IOS The ID card has just been unblocked and the user can now continue with their PIN change. + onFireOnPinUnlocked: ApplicationModel.showFeedback(qsTr("Your ID card is unblocked. You now have three more tries to change your PIN")) + } + + ChangePinViewContent { height: baseItem.height width: baseItem.width } @@ -32,7 +45,8 @@ SectionPage { controller: changePinController workflowModel: ChangePinModel - workflowTitle: qsTr("PIN Management") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + workflowTitle: qsTr("PIN Management") + SettingsModel.translationTrigger waitingFor: switch (changePinController.workflowState) { case ChangePinController.WorkflowStates.Reader: @@ -51,10 +65,13 @@ SectionPage { ResultView { id: cardPositionView - headerTitleBarAction: TitleBarAction { text: qsTr("PIN Management") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("PIN Management") + SettingsModel.translationTrigger resultType: ResultView.Type.IsInfo - buttonText: qsTr("Retry") + settingsModel.translationTrigger - text: qsTr("Weak NFC signal. Please reposition your card.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + buttonText: qsTr("Retry") + SettingsModel.translationTrigger + //: INFO ANDROID IOS The NFC signal is weak or unstable, the user is asked to change the card's position to (hopefully) reduce the distance to the NFC chip. + text: qsTr("Weak NFC signal. Please reposition your card.") + SettingsModel.translationTrigger onClicked: { firePop() ChangePinModel.continueWorkflow() @@ -64,7 +81,8 @@ SectionPage { ResultView { id: pinResult - headerTitleBarAction: TitleBarAction { text: qsTr("PIN Management") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("PIN Management") + SettingsModel.translationTrigger resultType: ChangePinModel.error ? ResultView.Type.IsError : ResultView.Type.IsSuccess text: ChangePinModel.resultString onClicked: { @@ -75,13 +93,14 @@ SectionPage { visible: false } - EnterPinView { + EnterPasswordView { id: enterPinView - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: ChangePinModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Change PIN") + settingsModel.translationTrigger } + navigationAction: NavigationAction { state: "cancel"; onClicked: ChangePinModel.cancelWorkflow() } + //: LABEL ANDROID IOS + title: qsTr("Change PIN") + SettingsModel.translationTrigger visible: false - onPinEntered: { + onPasswordEntered: { firePop() ChangePinModel.continueWorkflow() } @@ -91,23 +110,31 @@ SectionPage { ProgressView { id: pinProgressView - leftTitleBarAction: TitleBarAction { state: ChangePinModel.isBasicReader ? "cancel" : "hidden"; onClicked: ChangePinModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("PIN Management") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction { state: ChangePinModel.isBasicReader ? "cancel" : "hidden"; onClicked: ChangePinModel.cancelWorkflow() } + //: LABEL ANDROID IOS + title: qsTr("PIN Management") + SettingsModel.translationTrigger visible: false - text: qsTr("Change PIN") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Change PIN") + SettingsModel.translationTrigger subText: (!visible ? "" + //: INFO ANDROID IOS Loading screen during PIN change process, data communcation is currently ongoing. Message is usually not visible since the password handling with basic reader is handled by EnterPasswordView. : ChangePinModel.isBasicReader ? qsTr("Please wait a moment...") : !!NumberModel.inputError ? NumberModel.inputError + //: INFO ANDROID IOS The card communcation was aborted, the online identification functionality is deactivated and needs to be actived by the authorities. : NumberModel.pinDeactivated ? qsTr("The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function.") : changePinController.workflowState === ChangePinController.WorkflowStates.Update || changePinController.workflowState === ChangePinController.WorkflowStates.Pin + //: INFO ANDROID IOS Either an comfort card reader or smartphone-as-card-reader is used, the user needs to react to request on that device. || changePinController.workflowState === ChangePinController.WorkflowStates.NewPin ? qsTr("Please observe the display of your card reader.") + //: INFO ANDROID IOS The wrong PIN was entered twice, the next attempt requires additional verifcation via CAN. : changePinController.workflowState === ChangePinController.WorkflowStates.Can ? qsTr("You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card.") + //: INFO ANDROID IOS The PIN (including the CAN) was entered wrongfully three times, the PUK is required to unlock the id card. : changePinController.workflowState === ChangePinController.WorkflowStates.Puk ? qsTr("You have entered a wrong PIN three times. Your PIN is now blocked. You have to enter the PUK now for unblocking.") - : qsTr("Please wait a moment...")) + settingsModel.translationTrigger + //: INFO ANDROID IOS Generic progress message during PIN change process. + : qsTr("Please wait a moment...")) + SettingsModel.translationTrigger subTextColor: !ChangePinModel.isBasicReader && (NumberModel.inputError || NumberModel.pinDeactivated || changePinController.workflowState === ChangePinController.WorkflowStates.Can - || changePinController.workflowState === ChangePinController.WorkflowStates.Puk) ? Constants.red : Constants.secondary_text + || changePinController.workflowState === ChangePinController.WorkflowStates.Puk) ? Constants.red : Style.color.secondary_text } } diff --git a/resources/qml/Governikus/ChangePinView/+android/ChangePinViewContent.qml b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinViewContent.qml similarity index 58% rename from resources/qml/Governikus/ChangePinView/+android/ChangePinViewContent.qml rename to resources/qml/Governikus/ChangePinView/+mobile/ChangePinViewContent.qml index 56d19e0..b10d0b3 100644 --- a/resources/qml/Governikus/ChangePinView/+android/ChangePinViewContent.qml +++ b/resources/qml/Governikus/ChangePinView/+mobile/ChangePinViewContent.qml @@ -1,11 +1,17 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ChangePinModel 1.0 Item { - readonly property int spacing: (height - pinIcon.height - pinHeader.height - pinDesc.height - govButton.height - Utils.dp(40)) / 3 + readonly property int spacing: (height - pinIcon.height - pinHeader.height - pinDesc.height - govButton.height - 2 * Constants.pane_padding) / 3 Image { id: pinIcon @@ -22,33 +28,32 @@ Item { source: "qrc:///images/icon_Pin.svg" } - Text { + GText { id: pinHeader - text: qsTr("PIN Management") + settingsModel.translationTrigger - anchors.top: pinIcon.bottom anchors.topMargin: spacing anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Constants.header_font_size - color: Constants.blue + //: LABEL ANDROID IOS + text: qsTr("PIN Management") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + visible: Constants.is_layout_android } - Text { + GText { id: pinDesc - color: Constants.secondary_text - anchors.margins: Utils.dp(10) + anchors.margins: Constants.pane_padding anchors.top: pinHeader.bottom - anchors.topMargin: Utils.dp(10) anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("You have the opportunity to change your transport PIN into a personal PIN. You can also change the PIN at any time or unblock the PIN using the personal unblocking key (PUK). The transport PIN and the PUK can be found in the letter sent to you by your competent authority.") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size + //: LABEL ANDROID IOS + text: qsTr("You have the opportunity to change your transport PIN into a personal PIN. You can also change the PIN at any time or unblock the PIN using the personal unblocking key (PUK). The transport PIN and the PUK can be found in the letter sent to you by your competent authority.") + SettingsModel.translationTrigger + textStyle: Style.text.normal + horizontalAlignment: Text.AlignHCenter - width: parent.width - Utils.dp(60) - wrapMode: Text.WordWrap + width: Math.min(parent.width - 2 * Constants.pane_padding, Style.dimens.max_text_width) } GButton { @@ -56,9 +61,10 @@ Item { anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter - anchors.bottomMargin: Utils.dp(30) + anchors.bottomMargin: Constants.pane_padding - text: qsTr("Change PIN now") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Change PIN now") + SettingsModel.translationTrigger onClicked: ChangePinModel.startWorkflow() } } diff --git a/resources/qml/Governikus/DeveloperView/DeveloperView.qml b/resources/qml/Governikus/DeveloperView/DeveloperView.qml index fb07abf..c77483e 100644 --- a/resources/qml/Governikus/DeveloperView/DeveloperView.qml +++ b/resources/qml/Governikus/DeveloperView/DeveloperView.qml @@ -1,15 +1,22 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 SectionPage { id: root - leftTitleBarAction: TitleBarAction { state: !topLevelPage ? "back" : ""; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Developer options") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction { state: !topLevelPage ? "back" : ""; onClicked: firePop() } + //: LABEL ALL_PLATFORMS + title: qsTr("Developer options") + SettingsModel.translationTrigger content: Column { id: mainColumn @@ -31,33 +38,35 @@ SectionPage { anchors.right: testUriSwitch.left anchors.rightMargin: Constants.component_spacing anchors.verticalCenter: testUriContainer.verticalCenter - Text { + + GText { id: testUriNameText - anchors.bottomMargin: Utils.dp(2) - font.pixelSize: Utils.dp(16) - color: Constants.secondary_text - opacity: 0.87 - text: qsTr("Test environment") + settingsModel.translationTrigger + anchors.bottomMargin: 2 + //: LABEL ALL_PLATFORMS + text: qsTr("Test environment") + SettingsModel.translationTrigger + textStyle: Style.text.normal_accent } - Text { + GText { id: testUriDateText width: parent.width anchors.top: testUriNameText.bottom - font.pixelSize: Utils.dp(14) - color: Constants.secondary_text - opacity: 0.38 - text: qsTr("Use the test environment during a selfauthentication") + settingsModel.translationTrigger - wrapMode: Text.WordWrap + //: LABEL ALL_PLATFORMS + text: qsTr("Use the test environment during a self-authentication") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } } GSwitch { id: testUriSwitch + anchors.right: testUriContainer.right anchors.verticalCenter: testUriContainer.verticalCenter - initialState: settingsModel.useSelfauthenticationTestUri - onSwitched: settingsModel.useSelfauthenticationTestUri = testUriSwitch.isOn + + Accessible.name: qsTr("Test environment") + SettingsModel.translationTrigger + + initialState: SettingsModel.useSelfauthenticationTestUri + onSwitched: SettingsModel.useSelfauthenticationTestUri = testUriSwitch.isOn } } @@ -73,57 +82,61 @@ SectionPage { anchors.right: devModeSwitch.left anchors.rightMargin: Constants.component_spacing anchors.verticalCenter: devModeContainer.verticalCenter - Text { + + GText { id: devModeNameText - anchors.bottomMargin: Utils.dp(2) - font.pixelSize: Utils.dp(16) - color: Constants.secondary_text - opacity: 0.87 - text: qsTr("Developer Mode") + settingsModel.translationTrigger + anchors.bottomMargin: 2 + //: LABEL ALL_PLATFORMS + text: qsTr("Developer Mode") + SettingsModel.translationTrigger + textStyle: Style.text.normal_accent } - Text { + GText { id: devModeDateText width: parent.width anchors.top: devModeNameText.bottom - font.pixelSize: Utils.dp(14) - color: Constants.secondary_text - opacity: 0.38 - text: qsTr("Use a more tolerant mode") + settingsModel.translationTrigger - wrapMode: Text.WordWrap + //: LABEL ALL_PLATFORMS + text: qsTr("Use a more tolerant mode") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } } GSwitch { id: devModeSwitch + anchors.right: devModeContainer.right anchors.verticalCenter: devModeContainer.verticalCenter - initialState: settingsModel.developerMode - onSwitched: settingsModel.developerMode = devModeSwitch.isOn + + Accessible.name: qsTr("Developer mode") + SettingsModel.translationTrigger + + initialState: SettingsModel.developerMode + onSwitched: SettingsModel.developerMode = devModeSwitch.isOn } } - Text { - text: qsTr("Change the layout style") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - font.bold: true - color: Constants.blue + GText { + //: LABEL ALL_PLATFORMS + text: qsTr("Change the layout style") + SettingsModel.translationTrigger + textStyle: Style.text.normal_accent } GRadioButton { - text: qsTr("iOS") + settingsModel.translationTrigger + //: LABEL ALL_PLATFORMS + text: qsTr("iOS") + SettingsModel.translationTrigger checked: plugin.platformStyle === text.toLowerCase() onCheckedChanged: if (checked) { plugin.applyPlatformStyle(text.toLowerCase()) } } GRadioButton { - text: qsTr("Android") + settingsModel.translationTrigger + //: LABEL ALL_PLATFORMS + text: qsTr("Android") + SettingsModel.translationTrigger checked: plugin.platformStyle === text.toLowerCase() onCheckedChanged: if (checked) { plugin.applyPlatformStyle(text.toLowerCase()) } } GRadioButton { - text: qsTr("Tablet, Android") + settingsModel.translationTrigger + //: LABEL ALL_PLATFORMS + text: qsTr("Tablet, Android") + SettingsModel.translationTrigger checked: plugin.platformStyle === text.toLowerCase() onCheckedChanged: if (checked) { plugin.applyPlatformStyle(text.toLowerCase()) } } diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml new file mode 100644 index 0000000..8a39b09 --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/+desktop/EnterPasswordView.qml @@ -0,0 +1,313 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.AuthModel 1.0 +import Governikus.Type.CardReturnCode 1.0 +import Governikus.Type.NumberModel 1.0 +import Governikus.Type.RemoteServiceModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +SectionPage +{ + id: baseItem + + signal passwordEntered() + signal changePinLength() + signal requestPasswordInfo() + + property alias statusIcon: statusIcon.source + property int passwordType: NumberModel.passwordType + + Accessible.name: qsTr("Enter %1 view. You can start to enter the number.").arg(d.passwordString) + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the enter password view of the AusweisApp2.") + SettingsModel.translationTrigger + Keys.onPressed: { + if (focus && event.key >= Qt.Key_0 && event.key <= Qt.Key_9) { + numberField.append(event.key - Qt.Key_0) + numberField.forceActiveFocus() + return + } + } + + onPasswordTypeChanged: numberField.inputConfirmation = "" + onVisibleChanged: if (!visible) numberField.text = "" + + QtObject { + id: d + + readonly property string passwordString: passwordType === NumberModel.PASSWORD_PIN ? "PIN" + : passwordType === NumberModel.PASSWORD_NEW_PIN ? "PIN" + : passwordType === NumberModel.PASSWORD_CAN ? "CAN" + : passwordType === NumberModel.PASSWORD_PUK ? "PUK" + : passwordType === NumberModel.PASSWORD_REMOTE_PIN ? "Remote PIN" + : "UNKNOWN" + + function setPassword() { + if (!numberField.validInput) { + return + } + + if (passwordType === NumberModel.PASSWORD_PIN) { + NumberModel.pin = numberField.text + } + else if (passwordType === NumberModel.PASSWORD_CAN) { + NumberModel.can = numberField.text + } + else if (passwordType === NumberModel.PASSWORD_PUK) { + NumberModel.puk = numberField.text + } + else if (passwordType === NumberModel.PASSWORD_NEW_PIN) { + if (numberField.inputConfirmation === "") { + numberField.inputConfirmation = numberField.text + } else { + NumberModel.newPin = numberField.text + numberField.inputConfirmation = "" + } + } + else if (passwordType === NumberModel.PASSWORD_REMOTE_PIN) { + RemoteServiceModel.connectToRememberedServer(numberField.text) + } + + numberField.text = "" + if (numberField.inputConfirmation === "") { + baseItem.passwordEntered() + } + } + } + + GText { + visible: retryCounter.visible + anchors.horizontalCenter: retryCounter.horizontalCenter + anchors.bottom: retryCounter.top + anchors.bottomMargin: Constants.component_spacing + + //: LABEL DESKTOP_QML + text: qsTr("Attempts") + SettingsModel.translationTrigger + } + + StatusIcon { + id: retryCounter + + visible: NumberModel.retryCounter >= 0 && passwordType === NumberModel.PASSWORD_PIN + height: Style.dimens.status_icon_small + anchors.left: parent.left + anchors.top: parent.top + anchors.margins: height + + activeFocusOnTab: true + //: LABEL DESKTOP_QML + Accessible.name: qsTr("Remaining attempts: %1").arg(NumberModel.retryCounter) + SettingsModel.translationTrigger + + text: NumberModel.retryCounter + + FocusFrame {} + } + + StatusIcon { + id: statusIcon + + height: Style.dimens.status_icon_large + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.top + anchors.verticalCenterOffset: parent.height / 4 + + busy: true + source: AuthModel.readerImage + } + + GText { + id: mainText + + visible: text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: statusIcon.bottom + anchors.topMargin: Constants.component_spacing + + activeFocusOnTab: true + Accessible.role: Accessible.Paragraph + Accessible.name: mainText.text + + //: LABEL DESKTOP_QML %1 can be "PIN, CAN, PUK or UNKNOWN" + text: qsTr("%1-Entry").arg(d.passwordString) + SettingsModel.translationTrigger + textStyle: Style.text.header + horizontalAlignment: Text.AlignHCenter + + FocusFrame {} + } + + GText { + id: subText + + visible: text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: mainText.bottom + anchors.topMargin: Constants.text_spacing + + activeFocusOnTab: true + Accessible.role: Accessible.Paragraph + Accessible.name: subText.text + Keys.onSpacePressed: onLinkActivated(d.passwordString) + + textFormat: Text.StyledText + linkColor: Constants.white + text: { + SettingsModel.translationTrigger + + if (!numberField.confirmedInput) { + //: INFO DESKTOP_QML The changed PIN was entered wrongfully during the confirmation process. + return qsTr("The entered PIN does not match the new PIN. Please correct your input.") + } + if (passwordType === NumberModel.PASSWORD_PIN) { + if (NumberModel.requestTransportPin) { + //: INFO DESKTOP_QML The AA2 expects a PIN with 5 digit which can be entered via the physical or onscreen keyboard. + return ("%1
    %2").arg(qsTr("Please enter your 5-digit Transport PIN. Use the keyboard or numpad.")).arg(qsTr("More information")) + } else { + //: INFO DESKTOP_QML The AA2 expects a PIN with 6 digit which can be entered via the physical or onscreen keyboard. + return ("%1
    %2").arg(qsTr("Please enter your 6-digit PIN. Use the keyboard or numpad.")).arg(qsTr("More information")) + } + } + if (passwordType === NumberModel.PASSWORD_CAN) { + if (NumberModel.isCanAllowedMode) { + //: INFO DESKTOP_QML The user is required to enter the 6 digit CAN. + return qsTr("Please enter the 6-digit CAN you can find on the front of your ID card.") + } + //: INFO DESKTOP_QML The PIN was entered wrongfully twice, this may have happened during an earlier session of the AA2, too. The user needs to enter the CAN for additional verification. + return ("%1
    %2").arg(qsTr("You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card.")).arg(qsTr("More information")) + } + if (passwordType === NumberModel.PASSWORD_PUK) { + //: INFO DESKTOP_QML The PUK is required to unlock the id card. + return ("%1
    %2").arg(qsTr("The online identification function is blocked. Please use your personal unblocking key (PUK) to unblock your ID card.")).arg(qsTr("More information")) + } + if (passwordType === NumberModel.PASSWORD_NEW_PIN) { + if (numberField.inputConfirmation === "") { + //: INFO DESKTOP_QML A new 6-digit PIN needs to be supplied. + return qsTr("Please enter a new 6-digit PIN of your choice.") + } else { + //: INFO DESKTOP_QML The new PIN needs to be entered again for verification. + return qsTr("Please enter your new 6-digit PIN again.") + } + } + if (passwordType === NumberModel.PASSWORD_REMOTE_PIN) { + return ("%1
    %2").arg(qsTr("Please start the remote service in order to use your smartphone as a card reader with AusweisApp2.")).arg(qsTr("More information")) + } + + //: INFO DESKTOP_QML Error message during PIN/CAN/PUK input procedure, the requested password type is unknown; internal error. + return qsTr("Unknown password type:") + " " + passwordType + } + textStyle: numberField.confirmedInput ? Style.text.header_secondary : Style.text.header_warning + onLinkActivated: baseItem.requestPasswordInfo() + + horizontalAlignment: Text.AlignHCenter + + FocusFrame {} + } + + Item { + anchors.top: subText.bottom + anchors.bottom: button.top + anchors.horizontalCenter: parent.horizontalCenter + + NumberField { + id: numberField + + anchors.centerIn: parent + + activeFocusOnTab: true + Accessible.name: numberField.text + + passwordLength: passwordType === NumberModel.PASSWORD_PIN && NumberModel.requestTransportPin ? 5 + : passwordType === NumberModel.PASSWORD_PUK ? 10 + : passwordType === NumberModel.PASSWORD_REMOTE_PIN ? 4 + : 6 + + onVisibleChanged: if (visible) forceActiveFocus() + + MouseArea { + anchors.fill: parent + + onClicked: numberField.forceActiveFocus() + } + + Keys.onPressed: { + if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9) { + numberField.append(event.key - Qt.Key_0) + return + } + + if (event.key === Qt.Key_Backspace) { + numberField.removeLast() + return + } + + if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) { + d.setPassword() + } + } + } + + GText { + id: changePinLengthText + + function changePinLength() { + baseItem.changePinLength() + } + + visible: passwordType === NumberModel.PASSWORD_PIN + anchors.horizontalCenter: numberField.horizontalCenter + anchors.top: numberField.bottom + anchors.topMargin: Constants.text_spacing + + activeFocusOnTab: true + Keys.onSpacePressed: changePinLengthText.changePinLength() + Accessible.name: text + + textStyle: Style.text.hint + textFormat: Text.StyledText + //: LABEL DESKTOP_QML Button, mit dem der Benutzer eine TransportPIN-Änderung starten kann. + text: "" + (NumberModel.requestTransportPin ? qsTr("Your PIN has 6 digits?") : qsTr("Your PIN has 5 digits?")) + "" + SettingsModel.translationTrigger + linkColor: Constants.white + onLinkActivated: changePinLengthText.changePinLength() + + FocusFrame {} + } + } + + NumberPad { + id: numberPad + + anchors.right: parent.right + anchors.bottom: parent.bottom + + submitEnabled: numberField.validInput + deleteEnabled: numberField.text.length > 0 + onDigitPressed: numberField.append(digit) + onDeletePressed: numberField.removeLast() + onSubmitPressed: d.setPassword() + } + + NavigationButton { + id: button + + anchors { + margins: Constants.component_spacing + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + } + + activeFocusOnTab: true + + buttonType: Qt.ForwardButton + enabled: numberField.validInput + onClicked: d.setPassword() + } +} diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/NumberField.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberField.qml new file mode 100644 index 0000000..847ebbe --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberField.qml @@ -0,0 +1,82 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 + +Item { + id: baseItem + + property alias text: echoField.text + property alias passwordLength: echoField.maximumLength + readonly property bool validInput: echoField.acceptableInput && confirmedInput + + property string inputConfirmation + readonly property bool confirmedInput: inputConfirmation.length != text.length || inputConfirmation === text + + function append(number) { + echoField.insert(echoField.length, number) + } + function removeLast() { + echoField.remove(echoField.length-1, echoField.length) + } + + height: echoField.height + lines.anchors.topMargin + lines.height + width: lines.width + + FocusFrame { + marginFactor: 2 + } + + TextInput { + id: sample + visible: false + echoMode: echoField.echoMode + font: echoField.font + text: "0" + } + + TextInput { + id: echoField + anchors.top: parent.top + anchors.left: lines.left + anchors.leftMargin: sample.font.letterSpacing / 4 + + color: Constants.white + verticalAlignment: TextInput.AlignVCenter + echoMode: TextInput.Password + font.bold: true + font.pixelSize: ApplicationModel.scaleFactor * 50 + font.letterSpacing: ApplicationModel.scaleFactor * 40 + passwordMaskDelay: 500 + cursorVisible: false + activeFocusOnPress: false + focus: false + validator: RegExpValidator { + regExp: new RegExp("[0-9]{" + echoField.maximumLength + "}") + } + maximumLength: 6 + } + + Row { + id: lines + anchors.top: echoField.bottom + anchors.topMargin: Constants.groupbox_spacing + anchors.horizontalCenter: parent.horizontalCenter + + spacing: echoField.font.letterSpacing / 2 + + Repeater { + model: baseItem.passwordLength + delegate: Rectangle { + width: sample.contentWidth - (sample.font.letterSpacing / 2) + height: Math.max(ApplicationModel.scaleFactor * 4, 1) + color: Constants.white + } + } + } +} diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPad.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPad.qml new file mode 100644 index 0000000..8698516 --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPad.qml @@ -0,0 +1,163 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +Item { + id: baseItem + + property alias deleteEnabled: deleteButton.enabled + property alias submitEnabled: submitButton.enabled + + signal digitPressed(string digit) + signal deletePressed() + signal submitPressed() + + QtObject { + id: d + + property var numbers + + Component.onCompleted: orderNumbers() + + function orderNumbers() { + if (SettingsModel.shuffleScreenKeyboard) { + var newNumbers = [] + for (var i = 0; i < 10; i++) { + var random = Math.floor(Math.random() * (newNumbers.length + 1)) + newNumbers.splice(random, 0, i); + } + numbers = newNumbers + } + else { + numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] + } + } + } + + NumberPadTab { + id: numberPadTab + + height: ApplicationModel.scaleFactor * 100 + + anchors.top: numPadContainer.top + anchors.right: numPadContainer.left + anchors.rightMargin: -radius + + activeFocusOnTab: true + Accessible.role: Accessible.Grouping + Accessible.name: qsTr("Numberpad to enter the password") + SettingsModel.translationTrigger + Keys.onSpacePressed: numPadContainer.toggle() + + MouseArea { + anchors.fill: parent + onClicked: numPadContainer.toggle() + } + } + + Rectangle { + id: numPadContainer + + property bool fadeIn: true + + width: grid.width + 2 * Constants.pane_padding + height: grid.height + 2 * Constants.pane_padding + + anchors.right: parent.right + anchors.rightMargin: fadeIn ? 0 : -width + anchors.bottom: parent.bottom + + color: Qt.lighter(Constants.blue, 1.15) + border.width: Math.max(1, ApplicationModel.scaleFactor * 3) + border.color: Constants.blue + + Component.onCompleted: init() + onVisibleChanged: init() + + function init() { + setVisible(SettingsModel.useScreenKeyboard) + } + + function toggle() { + if (!fadingAnimation.running) { + setVisible(!fadeIn) + } + } + + function setVisible(pVisible) { + if (pVisible) { + d.orderNumbers() + } + fadeIn = pVisible + } + + Behavior on anchors.rightMargin { + PropertyAnimation { + id: fadingAnimation + duration: 1000 + easing.type: Easing.InOutQuad + } + } + + Grid { + id: grid + + anchors.centerIn: parent + + columns: 3 + spacing: Constants.component_spacing + + Repeater { + id: numberRepeater + + model: 9 + + NumberPadButton { + activeFocusOnTab: numPadContainer.fadeIn + + text: d.numbers[index] + onClicked: baseItem.digitPressed(text) + } + } + + NumberPadButton { + id: deleteButton + + activeFocusOnTab: numPadContainer.fadeIn + + text: "C" + color: "yellow" + fontScale: 0.75 + onClicked: baseItem.deletePressed() + enabled: baseItem.deleteEnabled + } + + NumberPadButton { + id: zeroButton + + activeFocusOnTab: numPadContainer.fadeIn + + text: d.numbers[9] + onClicked: baseItem.digitPressed(text) + } + + NumberPadButton { + id: submitButton + + activeFocusOnTab: numPadContainer.fadeIn + + text: "OK" + color: "lime" + fontScale: 0.75 + onClicked: baseItem.submitPressed() + enabled: baseItem.submitEnabled + } + } + } +} diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadButton.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadButton.qml new file mode 100644 index 0000000..74e00bb --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadButton.qml @@ -0,0 +1,67 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 + + +Button { + id: control + + height: (1.5 * contentItem.font.pixelSize) / fontScale + width: height + + padding: 0 + + property real fontScale: 1 + property alias color: circle.color + + contentItem: GText { + text: control.text + textStyle: Style.text.header_inverse + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.pixelSize: fontScale * ApplicationModel.scaleFactor * 50 + visible: control.enabled + } + + background: Rectangle { + id: circle + + border.color: Constants.black + border.width: control.focus ? Math.max(1, ApplicationModel.scaleFactor * 2) : 0 + radius: control.height / 2 + color: Constants.white + visible: control.enabled + + Rectangle { + anchors.centerIn: parent + radius: height / 2 + color: Constants.black + opacity: 0.1 + + SequentialAnimation on height { + running: control.pressed + alwaysRunToEnd: true + + NumberAnimation { from: 0; to: background.height } + PauseAnimation { duration: 100 } + PropertyAction { value: 0 } + } + + SequentialAnimation on width { + running: control.pressed + alwaysRunToEnd: true + + NumberAnimation { from: 0; to: background.width } + PauseAnimation { duration: 100 } + PropertyAction { value: 0 } + } + } + } +} diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadTab.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadTab.qml new file mode 100644 index 0000000..4c9f69b --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/+desktop/NumberPadTab.qml @@ -0,0 +1,121 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Type.ApplicationModel 1.0 + + +Rectangle { + width: height / 2 + radius + + border.color: focus ? Constants.white : Constants.blue + border.width: Math.max(1, ApplicationModel.scaleFactor * 3) + color: Qt.lighter(Constants.blue, 1.15) + radius: height / 5 + + Timer { + id: onTimer + + property int index + + interval: 1500 + running: true + triggeredOnStart: true + + onTriggered: { + onTimer.triggeredOnStart = false + onTimer.index = Utils.getRandomInt(0, 12) + repeater.itemAt(onTimer.index).state = "on" + offTimer.restart() + } + } + + Timer { + id: offTimer + + interval: 500 + onTriggered: { + if (onTimer.index != undefined) + { + repeater.itemAt(onTimer.index).state = "" + } + + onTimer.restart() + } + } + + Rectangle { + id: reader + + width: 0.75 * height + height: parent.height - 2 * parent.radius + + anchors.left: parent.left + anchors.leftMargin: Math.max(1, ApplicationModel.scaleFactor * 4) + anchors.verticalCenter: parent.verticalCenter + + color: "skyblue" + radius: height * 0.1 + + Grid { + id: pinGrid + + anchors.fill: parent + + columns: 3 + padding: parent.width * 0.1 + spacing: parent.width * 0.1 + + Repeater { + id: repeater + + model: 12 + + Item { + id: pinButton + + width: (reader.width - 4 * pinGrid.spacing) / 3 + height: width + + Rectangle { + id: pinButtonCircle + + width: pinButton.width + height: width + + anchors.centerIn: parent + + state: parent.state + radius: width * 0.5 + color: index == 9 ? "yellow" : index == 11 ? "lime" : Constants.white + + Behavior on color { + ColorAnimation { + duration: 250 + } + } + + Behavior on width { + NumberAnimation { + duration: 1000 + easing.type: Easing.OutElastic + } + } + + states: [ + State { + name: "on" + + PropertyChanges {target: pinButtonCircle; color: Constants.blue} + PropertyChanges {target: pinButtonCircle; width: pinButton.width + pinButton.width * 0.3} + } + ] + } + } + } + } + } +} diff --git a/resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml b/resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml new file mode 100644 index 0000000..4572ced --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/+desktop/PasswordInfoView.qml @@ -0,0 +1,146 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.NumberModel 1.0 + + +SectionPage { + id: root + + signal close() + + property int passwordType: NumberModel.passwordType + + Accessible.name: qsTr("Password information") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the password information section of the AusweisApp2.") + SettingsModel.translationTrigger + Keys.onReturnPressed: close() + Keys.onEnterPressed: close() + Keys.onEscapePressed: close() + + titleBarAction: TitleBarAction { + rootEnabled: false + showSettings: false + text: d.passwordString + } + + QtObject { + id: d + + readonly property string passwordString: passwordType === NumberModel.PASSWORD_PIN ? "PIN" + : passwordType === NumberModel.PASSWORD_CAN ? "CAN" + : passwordType === NumberModel.PASSWORD_PUK ? "PUK" + : passwordType === NumberModel.PASSWORD_REMOTE_PIN ? "Remote PIN" + : "UNKNOWN" + } + + GText { + id: headline + + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: Constants.pane_padding + + activeFocusOnTab: true + Accessible.name: headline.text + + wrapMode: Text.WordWrap + //: %1 can be "PIN, CAN, PUK or UNKNOWN" + text: qsTr("%1 information").arg(d.passwordString) + SettingsModel.translationTrigger + textStyle: Style.text.header + FocusFrame { + dynamic: false + } + } + + GText { + id: infoText + + anchors.top: headline.bottom + anchors.left: parent.left + anchors.right: infoImage.left + anchors.margins: Constants.pane_padding + + activeFocusOnTab: true + Accessible.name: infoText.text + + text: { + SettingsModel.translationTrigger + + if (passwordType === NumberModel.PASSWORD_CAN) { + //: INFO DESKTOP_QML Description text of CAN + return qsTr("The card access number (CAN) is only required if you have already entered the PIN incorrectly twice. In order to prevent a third incorrect entry and thus the blocking of the ID card without your consent, the CAN is also requested at this point. The CAN is a six-digit number that can be found on the front of the ID card. It is located at the bottom right next to the validity date (marked in red).") + } + if (passwordType === NumberModel.PASSWORD_PUK) { + //: INFO DESKTOP_QML Description text of PUK + return qsTr("The personal unblocking key (PUK) is only required if you entered the the wrong PIN three times. The online eID function is blocked at this time. The PUK is a ten-digit number you received with the letter sent to you by your competent authority (marked in red). Please note that you can only use the PUK to unblock the PIN entry. If you have forgotten your PIN, you can have a new PIN set at your competent authority.") + } + if (passwordType === NumberModel.PASSWORD_REMOTE_PIN) { + //: INFO DESKTOP_QML Description text of SaC pairing + return qsTr("You may use your smartphone as a card reader with AusweisApp2. The smartphone needs to feature a supported NFC chipset and both devices, your smartphone and this machine, need to be connected to the same WiFi network.

    Please make sure that the remote service is running on your smartphone. Start the pairing process by clicking the \"Start pairing\" button and enter the shown 4-digit PIN.") + } + + //: INFO DESKTOP_QML Description text of PIN + return qsTr("The personal identification number (PIN) is required for every use of the online eID function. You can change it anytime and indefinitely if you know your valid PIN. For your 6-digit PIN choose a combination of numbers, that is not easy to guess, neither \"123456\" nor your birth date, or any other numbers printed on the ID card. If you are no longer aware of your valid PIN, you will need to contact the authority responsible for issuing your identification document to renew your PIN.\n\nWhen changing the PIN for the first time, please use your 5-digit transport PIN. You will find the transport PIN in the letter you received from the authority responsible for issuing your identification document (marked in red) after you have applied for your identity card.\n\nPlease note that you can not use the online eID function with your 5-digit transport PIN. A change to a 6-digit PIN is mandatory.") + } + textStyle: Style.text.header + + FocusFrame { + dynamic: false + } + } + + Image { + id: infoImage + + sourceSize.width: (passwordType === NumberModel.PASSWORD_CAN ? 800 : 560) * ApplicationModel.scaleFactor + anchors.top: headline.bottom + anchors.right: parent.right + anchors.margins: Constants.pane_padding + + verticalAlignment: Image.AlignTop + fillMode: Image.PreserveAspectFit + source: passwordType === NumberModel.PASSWORD_CAN ? "qrc:///images/desktop/id_card.png" + : passwordType === NumberModel.PASSWORD_PUK ? "qrc:///images/desktop/pin-letter-page2.png" + : passwordType === NumberModel.PASSWORD_REMOTE_PIN ? "qrc:///images/phone_to_pc.svg" + : "qrc:///images/desktop/pin-letter-page1.png" + + Rectangle { + visible: passwordType === NumberModel.PASSWORD_CAN + height: 50 * ApplicationModel.scaleFactor + width: 160 * ApplicationModel.scaleFactor + anchors.top: parent.top + anchors.topMargin: 333 * ApplicationModel.scaleFactor + anchors.left: parent.left + anchors.leftMargin: 598 * ApplicationModel.scaleFactor + + color: Style.color.transparent + border.color: Constants.red + border.width: Math.max(1, 6 * ApplicationModel.scaleFactor) + } + } + + NavigationButton { + id: button + + anchors { + margins: Constants.component_spacing + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + } + + buttonType: Qt.BackButton + onClicked: root.close() + } +} diff --git a/resources/qml/Governikus/EnterPinView/EnterPinView.qml b/resources/qml/Governikus/EnterPasswordView/+mobile/EnterPasswordView.qml similarity index 73% rename from resources/qml/Governikus/EnterPinView/EnterPinView.qml rename to resources/qml/Governikus/EnterPasswordView/+mobile/EnterPasswordView.qml index 1dde17b..e2a844e 100644 --- a/resources/qml/Governikus/EnterPinView/EnterPinView.qml +++ b/resources/qml/Governikus/EnterPasswordView/+mobile/EnterPasswordView.qml @@ -1,8 +1,14 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.1 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 import Governikus.Type.NumberModel 1.0 @@ -11,7 +17,7 @@ SectionPage { id: baseItem property alias enableTransportPinLink: transportPinLink.enableTransportPinLink - signal pinEntered() + signal passwordEntered() signal changePinLength() onVisibleChanged: { @@ -33,34 +39,32 @@ SectionPage Item {/*spacer*/ Layout.fillWidth: true; height: parent.height} Image { Layout.alignment: Qt.AlignVCenter - width: Utils.dp(58) + width: 58 height: width // because RowLayout uses implicitHeight that is based on sourceSize we have to explicitly set the sourceSize - sourceSize.height: baseItem.state === "REMOTE_PIN" ? Utils.dp(58) : 143 + sourceSize.height: baseItem.state === "REMOTE_PIN" ? 58 : 143 Layout.maximumWidth: width source: baseItem.state === "REMOTE_PIN" ? "qrc:///images/icon_remote.svg" : "qrc:///images/NFCPhoneCard.png" fillMode: Image.PreserveAspectFit } - Text { + GText { Layout.alignment: Qt.AlignVCenter Layout.fillWidth: true Layout.maximumWidth: Math.ceil(implicitWidth) - wrapMode: Text.WordWrap - font.pixelSize: text.length > 150 && !Constants.is_tablet? Utils.dp(15) : Constants.header_font_size - font.bold: true - color: { + textStyle: { if (!pinField.confirmedInput || !!NumberModel.inputError || baseItem.state === "CAN" || baseItem.state === "PUK") { - Constants.red + Style.text.normal_warning } else { - Constants.blue + Style.text.normal_accent } } text: { - settingsModel.translationTrigger + SettingsModel.translationTrigger if (!pinField.confirmedInput) { + //: INFO ANDROID IOS The changed PIN was entered wrongfully during confirmation. return qsTr("The entered PIN does not match the new PIN. Please correct your input.") } if (!!NumberModel.inputError) { @@ -68,26 +72,34 @@ SectionPage } if (baseItem.state === "CAN") { if (NumberModel.isCanAllowedMode) { + //: INFO ANDROID IOS The CAN needs to be entered in CAN-allowed mode, hint where the CAN can be found. return qsTr("Please enter the six-digit card access number. You can find the card access number on the front of the ID card.") } + //: INFO ANDROID IOS The wrong PIN was entered twice, the third attempt requires the CAN for additional verification, hint where the CAN is found. return qsTr("You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card.") } if (baseItem.state === "PUK") { + //: INFO ANDROID IOS The PUK is required to unlock the id card since the wrong PIN entered three times. return qsTr("You have entered a wrong PIN three times. Your PIN is now blocked. You have to enter the PUK now for unblocking.") } if (baseItem.state === "PIN_NEW") { + //: INFO ANDROID IOS A new 6-digit PIN needs to be supplied. return qsTr("Please enter a new 6-digit PIN of your choice.") } if (baseItem.state === "PIN_NEW_AGAIN") { + //: INFO ANDROID IOS The new PIN needs to be confirmed. return qsTr("Please enter your new 6-digit PIN again.") } if (baseItem.state === "PIN" && NumberModel.requestTransportPin) { + //: INFO ANDROID IOS The transport PIN is required by AA2, it needs to be change to an actual PIN. return qsTr("Please enter your transport PIN.") } if (baseItem.state === "REMOTE_PIN") { + //: INFO ANDROID IOS The pairing code for the smartphone is required. return qsTr("Enter the pairing code shown on your other device to use it as a card reader.") } - return qsTr("Please enter your personal PIN.") + //: LABEL ANDROID IOS + return qsTr("Please enter your PIN.") } } Item {/*spacer*/ Layout.fillWidth: true; height: parent.height} @@ -95,7 +107,7 @@ SectionPage Item {/*spacer*/ Layout.fillHeight: true; width: parent.width } - PinField { + NumberField { id: pinField Layout.alignment: Qt.AlignHCenter passwordLength: baseItem.state === "REMOTE_PIN" ? 4 @@ -106,29 +118,29 @@ SectionPage Layout.preferredWidth: width } - Text { + GText { id: transportPinLink property alias enableTransportPinLink: myMouse.enabled visible: baseItem.state === "PIN" && enableTransportPinLink - text: (NumberModel.requestTransportPin ? qsTr("Your PIN has 6 digits?") : qsTr("Your PIN has 5 digits?")) + settingsModel.translationTrigger + //: LABEL ANDROID IOS Button, mit dem der Benutzer eine TransportPIN-Änderung starten kann. + text: (NumberModel.requestTransportPin ? qsTr("Your PIN has 6 digits?") : qsTr("Your PIN has 5 digits?")) + SettingsModel.translationTrigger Layout.alignment: Qt.AlignHCenter - font.pixelSize: Constants.small_font_size - color: Constants.blue + textStyle: Style.text.hint_accent font.underline: true MouseArea { id: myMouse enabled: true anchors.fill: parent - anchors.margins: -Utils.dp(12) + anchors.margins: -12 onClicked: baseItem.changePinLength() } } Item {/*spacer*/ height: Constants.component_spacing; width: parent.width } - PinPad { + NumberPad { state: baseItem.state Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: width @@ -142,7 +154,7 @@ SectionPage switch(baseItem.state) { case "PIN": NumberModel.pin = pinField.text - baseItem.pinEntered() + baseItem.passwordEntered() break case "PIN_NEW": pinField.inputConfirmation = pinField.text @@ -151,19 +163,19 @@ SectionPage break case "PIN_NEW_AGAIN": NumberModel.newPin = pinField.text - baseItem.pinEntered() + baseItem.passwordEntered() break case "CAN": NumberModel.can = pinField.text - baseItem.pinEntered() + baseItem.passwordEntered() break case "PUK": NumberModel.puk = pinField.text - baseItem.pinEntered() + baseItem.passwordEntered() break case "REMOTE_PIN": RemoteServiceModel.connectToRememberedServer(pinField.text) - baseItem.pinEntered() + baseItem.passwordEntered() break } } diff --git a/resources/qml/Governikus/EnterPinView/PinField.qml b/resources/qml/Governikus/EnterPasswordView/+mobile/NumberField.qml similarity index 87% rename from resources/qml/Governikus/EnterPinView/PinField.qml rename to resources/qml/Governikus/EnterPasswordView/+mobile/NumberField.qml index 7f34f8e..4d35168 100644 --- a/resources/qml/Governikus/EnterPinView/PinField.qml +++ b/resources/qml/Governikus/EnterPasswordView/+mobile/NumberField.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { id: baseItem @@ -24,11 +29,11 @@ Item { TextInput { id: echoField - color: Constants.secondary_text + color: Style.color.primary_text verticalAlignment: TextInput.AlignVCenter echoMode: TextInput.Password - font.pixelSize: Utils.dp(18) - font.letterSpacing: Utils.dp(10) + font.pixelSize: 18 + font.letterSpacing: 10 passwordMaskDelay: 500 cursorVisible: false activeFocusOnPress: false diff --git a/resources/qml/Governikus/EnterPasswordView/+mobile/NumberPad.qml b/resources/qml/Governikus/EnterPasswordView/+mobile/NumberPad.qml new file mode 100644 index 0000000..0346901 --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/+mobile/NumberPad.qml @@ -0,0 +1,70 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.1 + +import Governikus.Global 1.0 +import Governikus.Type.SettingsModel 1.0 + +GridLayout { + id: baseItem + + property bool deleteEnabled: true + property bool submitEnabled: true + + signal digitPressed(string digit) + signal deletePressed() + signal submitPressed() + + columns: 3 + columnSpacing: 10 + rowSpacing: columnSpacing + width: 250 + height: width + Layout.fillHeight: false + Layout.fillWidth: false + + NumberPadButton { text: "1"; onClicked: baseItem.digitPressed("1"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "2"; onClicked: baseItem.digitPressed("2"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "3"; onClicked: baseItem.digitPressed("3"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "4"; onClicked: baseItem.digitPressed("4"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "5"; onClicked: baseItem.digitPressed("5"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "6"; onClicked: baseItem.digitPressed("6"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "7"; onClicked: baseItem.digitPressed("7"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "8"; onClicked: baseItem.digitPressed("8"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { text: "9"; onClicked: baseItem.digitPressed("9"); Layout.fillHeight: true; Layout.fillWidth: true } + NumberPadButton { + visible: baseItem.deleteEnabled + Layout.fillHeight: true + Layout.fillWidth: true + + Accessible.name: qsTr("Delete last digit") + SettingsModel.translationTrigger + + source: "qrc:///images/delete.svg" + + onClicked: baseItem.deletePressed() + } + NumberPadButton { + Layout.fillHeight: true + Layout.fillWidth: true + Layout.column: 1 + Layout.row: 3 + + text: "0" + + onClicked: baseItem.digitPressed("0") + } + NumberPadButton { + visible: baseItem.submitEnabled + Layout.fillHeight: true + Layout.fillWidth: true + + Accessible.name: qsTr("Submit") + SettingsModel.translationTrigger + + source: "qrc:///images/submit.svg" + + onClicked: baseItem.submitPressed() + } +} diff --git a/resources/qml/Governikus/EnterPinView/PinPadButton.qml b/resources/qml/Governikus/EnterPasswordView/+mobile/NumberPadButton.qml similarity index 62% rename from resources/qml/Governikus/EnterPinView/PinPadButton.qml rename to resources/qml/Governikus/EnterPasswordView/+mobile/NumberPadButton.qml index 0e62880..90da38c 100644 --- a/resources/qml/Governikus/EnterPinView/PinPadButton.qml +++ b/resources/qml/Governikus/EnterPasswordView/+mobile/NumberPadButton.qml @@ -1,25 +1,37 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 import Governikus.Global 1.0 +import Governikus.Style 1.0 MouseArea { id: baseItem + property alias text: textItem.text property alias source: imageItem.source - Text { + Accessible.role: Accessible.Button + Accessible.name: text + Accessible.onPressAction: if (Qt.platform.os === "ios" && enabled) clicked(null) + + GText { id: textItem + anchors.centerIn: parent - font.pixelSize: Utils.dp(24) - wrapMode: Text.WordWrap - color: Constants.secondary_text + + Accessible.ignored: true + + textStyle: Style.text.title } Image { id: imageItem anchors.centerIn: parent - height:Utils.dp(36) + height: 36 width: height fillMode: Image.PreserveAspectFit } @@ -29,14 +41,14 @@ MouseArea { anchors.centerIn: parent height: width radius: width /2 - color: "#000000" + color: Constants.black opacity: 0.1 SequentialAnimation on width { running: baseItem.pressed alwaysRunToEnd: true NumberAnimation { from: 0; to: Math.SQRT2 * baseItem.width } PauseAnimation { duration: 100 } - PropertyAction { value: 0} + PropertyAction { value: 0 } } } } diff --git a/resources/qml/Governikus/EnterPasswordView/qmldir b/resources/qml/Governikus/EnterPasswordView/qmldir new file mode 100644 index 0000000..5ff2ee6 --- /dev/null +++ b/resources/qml/Governikus/EnterPasswordView/qmldir @@ -0,0 +1,9 @@ +module EnterPasswordView + +internal NumberField NumberField.qml +internal NumberPad NumberPad.qml +internal NumberPadButton NumberPadButton.qml +internal NumberPadTab NumberPadTab.qml + +PasswordInfoView 1.0 PasswordInfoView.qml +EnterPasswordView 1.0 EnterPasswordView.qml diff --git a/resources/qml/Governikus/EnterPinView/PinPad.qml b/resources/qml/Governikus/EnterPinView/PinPad.qml deleted file mode 100644 index fccc4c6..0000000 --- a/resources/qml/Governikus/EnterPinView/PinPad.qml +++ /dev/null @@ -1,46 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Layouts 1.1 - -import Governikus.Global 1.0 - -GridLayout { - id: baseItem - - property bool deleteEnabled: true - property bool submitEnabled: true - - signal digitPressed(string digit) - signal deletePressed() - signal submitPressed() - - columns: 3 - columnSpacing: Utils.dp(10) - rowSpacing: columnSpacing - width: Utils.dp(250) - height: width - Layout.fillHeight: false - Layout.fillWidth: false - - PinPadButton { text: "1"; onClicked: baseItem.digitPressed("1"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "2"; onClicked: baseItem.digitPressed("2"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "3"; onClicked: baseItem.digitPressed("3"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "4"; onClicked: baseItem.digitPressed("4"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "5"; onClicked: baseItem.digitPressed("5"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "6"; onClicked: baseItem.digitPressed("6"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "7"; onClicked: baseItem.digitPressed("7"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "8"; onClicked: baseItem.digitPressed("8"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { text: "9"; onClicked: baseItem.digitPressed("9"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { - source: baseItem.deleteEnabled ? "qrc:///images/delete.svg" : "" - onClicked: baseItem.deletePressed() - enabled: baseItem.deleteEnabled - Layout.fillHeight: true; Layout.fillWidth: true - } - PinPadButton { text: "0"; onClicked: baseItem.digitPressed("0"); Layout.fillHeight: true; Layout.fillWidth: true } - PinPadButton { - source: baseItem.submitEnabled ? "qrc:///images/submit.svg" : "" - onClicked: baseItem.submitPressed() - enabled: baseItem.submitEnabled - Layout.fillHeight: true; Layout.fillWidth: true - } -} diff --git a/resources/qml/Governikus/EnterPinView/qmldir b/resources/qml/Governikus/EnterPinView/qmldir deleted file mode 100644 index f333009..0000000 --- a/resources/qml/Governikus/EnterPinView/qmldir +++ /dev/null @@ -1,7 +0,0 @@ -module EnterPinView - -internal PinField PinField.qml -internal PinPadButton PinPadButton.qml -internal PinPad PinPad.qml - -EnterPinView 1.0 EnterPinView.qml diff --git a/resources/qml/Governikus/FeedbackView/+desktop/LogView.qml b/resources/qml/Governikus/FeedbackView/+desktop/LogView.qml new file mode 100644 index 0000000..e566591 --- /dev/null +++ b/resources/qml/Governikus/FeedbackView/+desktop/LogView.qml @@ -0,0 +1,179 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.LogModel 1.0 + + +SectionPage +{ + id: root + + Accessible.name: qsTr("Logfile viewer") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the logfile viewer of the AusweisApp2.") + SettingsModel.translationTrigger + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Application log") + SettingsModel.translationTrigger + } + + TabbedPane { + id: tabbedPane + + anchors.fill: parent + anchors.margins: Constants.pane_padding + + sectionsModel: LogModel.logFiles + onCurrentIndexChanged: LogModel.setLogfile(currentIndex) + + contentDelegate: logSectionDelegate + + footerItem: Item { + height: buttonLayout.implicitHeight + + ColumnLayout { + id: buttonLayout + + anchors.fill: parent + anchors.rightMargin: Constants.groupbox_spacing + spacing: Constants.groupbox_spacing + + GButton { + id: saveLog + + Layout.fillWidth: true + activeFocusOnTab: true + + icon.source: "qrc:///images/icon_save.svg" + //: LABEL DESKTOP_QML + text: qsTr("Save logfile") + SettingsModel.translationTrigger + enabled: tabbedPane.sectionsModel.length > 0 + onClicked: { + var creationDate = LogModel.getCurrentLogfileDate().toLocaleString(Qt.locale(), "yyyy-MM-dd_HH-mm") + var filenameSuggestion = "%1.%2.log".arg(Qt.application.name).arg(creationDate) + appWindow.openSaveFileDialog(LogModel.saveCurrentLogfile, filenameSuggestion, "log") + } + } + + GButton { + id: removeLog + + Layout.fillWidth: true + activeFocusOnTab: true + + icon.source: "qrc:///images/trash_icon_white.svg" + //: LABEL DESKTOP_QML + text: qsTr("Delete logfile") + SettingsModel.translationTrigger + enabled: tabbedPane.currentIndex > 0 + onClicked: { + confirmationPopup.deleteAll = false + confirmationPopup.open() + } + } + + GButton { + id: removeAllLogs + + Layout.fillWidth: true + activeFocusOnTab: true + + icon.source: "qrc:///images/trash_icon_all.svg" + //: LABEL DESKTOP_QML + text: qsTr("Delete old logfiles") + SettingsModel.translationTrigger + enabled: tabbedPane.sectionsModel.length > 1 + onClicked: { + confirmationPopup.deleteAll = true + confirmationPopup.open() + } + } + } + } + } + + Component { + id: logSectionDelegate + + Item { + height: tabbedPane.availableHeight + width: parent.width + + ListView { + id: logView + + anchors.fill: parent + + activeFocusOnTab: true + + displayMarginBeginning: Constants.pane_padding + displayMarginEnd: Constants.pane_padding + boundsBehavior: Flickable.StopAtBounds + model: LogModel + delegate: GText { + width: parent.width - 2 * Constants.pane_padding + bottomPadding: index % 2 ? Constants.groupbox_spacing : 0 + + textStyle: index % 2 ? Style.text.hint_inverse : Style.text.hint_secondary_inverse + text: display + } + ScrollBar.vertical: ScrollBar { + id: verticalScrollbar + + width: ApplicationModel.scaleFactor * 18 + anchors.horizontalCenter: parent.right + anchors.horizontalCenterOffset: Constants.pane_padding / 2 + + policy: ScrollBar.AlwaysOn + minimumSize: Style.dimens.minimumScrollBarSize + stepSize: logView.height / logView.contentHeight + } + + Connections { + target: LogModel + onFireNewLogMsg: if (logView.atYEnd) logView.positionViewAtEnd() + } + } + + FocusFrame { + scope: logView + framee: logView + dynamic: false + border.color: Constants.black + } + } + } + + Keys.onPressed: { + if (event.key === Qt.Key_PageDown) + verticalScrollbar.increase() + else if (event.key === Qt.Key_PageUp) + verticalScrollbar.decrease() + else if (event.key === Qt.Key_End) + logView.positionViewAtEnd() + else if (event.key === Qt.Key_Home) + logView.positionViewAtBeginning() + } + + ConfirmationPopup { + id: confirmationPopup + + property bool deleteAll: true + + //: LABEL DESKTOP_QML + title: (deleteAll ? qsTr("Delete old logfiles") : qsTr("Delete selected logfile")) + SettingsModel.translationTrigger + //: INFO DESKTOP_QML The current/all logfile(s) are about to be removed, user confirmation required. + text: (deleteAll ? qsTr("Please confirm that you want to delete your old logfiles.") + : qsTr("Please confirm that you want to delete the logfile.") + ) + SettingsModel.translationTrigger + onConfirmed: deleteAll ? LogModel.removeOtherLogfiles() : LogModel.removeCurrentLogfile() + } +} diff --git a/resources/qml/Governikus/FeedbackView/+mobile/+android/StoreFeedbackPopup.qml b/resources/qml/Governikus/FeedbackView/+mobile/+android/StoreFeedbackPopup.qml new file mode 100644 index 0000000..ffac994 --- /dev/null +++ b/resources/qml/Governikus/FeedbackView/+mobile/+android/StoreFeedbackPopup.qml @@ -0,0 +1,24 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + +ConfirmationPopup { + //: INFO ANDROID Header of the app rating popup. + title: qsTr("Would you like to rate this app?") + SettingsModel.translationTrigger + //: INFO ANDROID Content of the app rating popup. + text: qsTr("We would be very grateful if you could leave a rating on the Google Play Store!") + SettingsModel.translationTrigger + //: LABEL ANDROID + cancelButtonText: qsTr("No, thanks") + SettingsModel.translationTrigger + //: LABEL ANDROID + okButtonText: qsTr("Rate") + SettingsModel.translationTrigger + + onConfirmed: Qt.openUrlExternally("market://details?id=" + ApplicationModel.packageName) +} diff --git a/resources/qml/Governikus/FeedbackView/+mobile/+ios/StoreFeedbackPopup.qml b/resources/qml/Governikus/FeedbackView/+mobile/+ios/StoreFeedbackPopup.qml new file mode 100644 index 0000000..7114861 --- /dev/null +++ b/resources/qml/Governikus/FeedbackView/+mobile/+ios/StoreFeedbackPopup.qml @@ -0,0 +1,13 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Type.ApplicationModel 1.0 + +Item { + function open() { + ApplicationModel.showAppStoreRatingDialog(); + } +} \ No newline at end of file diff --git a/resources/qml/Governikus/FeedbackView/+mobile/Feedback.qml b/resources/qml/Governikus/FeedbackView/+mobile/Feedback.qml index 9fc14b8..f443eca 100644 --- a/resources/qml/Governikus/FeedbackView/+mobile/Feedback.qml +++ b/resources/qml/Governikus/FeedbackView/+mobile/Feedback.qml @@ -1,24 +1,28 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.2 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 -import Governikus.Type.LogModel 1.0 - import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.LogModel 1.0 SectionPage { id: root - headerTitleBarAction: TitleBarAction { text: qsTr("Help & Feedback") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("Help & Feedback") + SettingsModel.translationTrigger Component { id: lineSeparator - Rectangle { - height: 1 - color: Constants.grey + GSeparator { } } Component { @@ -30,18 +34,13 @@ SectionPage { anchors.left: parent.left anchors.right: parent.right spacing: Constants.component_spacing - Text { + GText { width: parent.width - font.pixelSize: Utils.dp(18) - color: Constants.blue - wrapMode: Text.WordWrap text: titleText + textStyle: Style.text.normal_accent } - Text { - color: Constants.secondary_text + GText { width: parent.width - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap text: descriptionText } } @@ -51,7 +50,7 @@ SectionPage { } } } - Log { + LogView { id: logPage visible: false } @@ -69,40 +68,52 @@ SectionPage { Pane { Loader { - readonly property string titleText: qsTr("FAQ") + settingsModel.translationTrigger - readonly property string descriptionText: qsTr("Do you have questions how to use AusweisApp2?") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string titleText: qsTr("FAQ") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string descriptionText: qsTr("Do you have questions how to use AusweisApp2?") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS function onClickFunction() { Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/")) } width: parent.width sourceComponent: subMenu } Loader { width: parent.width; sourceComponent: lineSeparator } Loader { - readonly property string titleText: qsTr("Support") + settingsModel.translationTrigger - readonly property string descriptionText: qsTr("You need further help?") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string titleText: qsTr("Support") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string descriptionText: qsTr("You need further help?") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS function onClickFunction() { Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/support/")) } width: parent.width sourceComponent: subMenu } Loader { width: parent.width; sourceComponent: lineSeparator } Loader { - readonly property string titleText: qsTr("Rate AusweisApp2") + settingsModel.translationTrigger - readonly property string descriptionText: qsTr("Please rate us in the Google Play Store.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string titleText: qsTr("Rate AusweisApp2") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string descriptionText: qsTr("Please rate us in the Google Play Store.") + SettingsModel.translationTrigger function onClickFunction() { Qt.openUrlExternally("market://details?id=" + ApplicationModel.packageName) } width: parent.width sourceComponent: subMenu } Loader { width: parent.width; sourceComponent: lineSeparator } Loader { - readonly property string titleText: qsTr("Report error") + settingsModel.translationTrigger - readonly property string descriptionText: qsTr("You found a bug? Please tell us, so we can fix it.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string titleText: qsTr("Report error") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string descriptionText: qsTr("You found a bug? Please tell us, so we can fix it.") + SettingsModel.translationTrigger function onClickFunction() { LogModel.mailLog() } width: parent.width sourceComponent: subMenu } Loader { width: parent.width; sourceComponent: lineSeparator } Loader { - readonly property string titleText: qsTr("Show log") + settingsModel.translationTrigger - readonly property string descriptionText: qsTr("You can view the logs of the AusweisApp2 here.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string titleText: qsTr("Show log") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string descriptionText: qsTr("You can view the logs of the AusweisApp2 here.") + SettingsModel.translationTrigger function onClickFunction() { firePush(logPage) } width: parent.width sourceComponent: subMenu diff --git a/resources/qml/Governikus/FeedbackView/+mobile/Log.qml b/resources/qml/Governikus/FeedbackView/+mobile/Log.qml deleted file mode 100644 index 94080ce..0000000 --- a/resources/qml/Governikus/FeedbackView/+mobile/Log.qml +++ /dev/null @@ -1,143 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 -import Governikus.View 1.0 -import Governikus.Type.LogModel 1.0 - - -SectionPage -{ - id: root - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Log") + settingsModel.translationTrigger; font.bold: true } - rightTitleBarAction: LogTitleBarControls { - allowRemove: comboBox.currentIndex > 0 - - onShare: { - LogModel.shareLog() - } - - onRemove: { - confirmationPopup.deleteAll = false - confirmationPopup.open() - } - - onRemoveAll: { - confirmationPopup.deleteAll = true - confirmationPopup.open() - } - } - - Item { - id: logSelector - height: comboBox.height - width: parent.width - 2 * Constants.pane_padding - anchors.top: parent.top - anchors.topMargin: Constants.pane_padding - anchors.horizontalCenter: parent.horizontalCenter - - Text { - id: comboText - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - - color: Constants.black - font.pixelSize: Constants.normal_font_size - text: qsTr("Log:") + settingsModel.translationTrigger - } - - GComboBox { - id: comboBox - width: parent.width - comboText.width - Constants.component_spacing - anchors.right: parent.right - model: LogModel.logFiles - onActivated: LogModel.setLogfile(comboBox.currentIndex) - } - } - - Pane { - id: pane - anchors.top: logSelector.bottom - anchors.bottom: parent.bottom - anchors.margins: Constants.pane_padding - - Item { - height: pane.height - 2 * Constants.pane_padding - width: pane.width - 2 * Constants.pane_padding - - ListView { - id: logView - clip: true - model: LogModel - anchors.fill: parent - maximumFlickVelocity: Constants.scrolling_speed - - delegate: Text { - width: pane.width - 2* Constants.pane_padding - wrapMode: Text.Wrap - font.pixelSize: Constants.small_font_size - font.bold: !(index % 2) - text: model.display - textFormat: Text.PlainText - } - - onAtYEndChanged: LogModel.autoFlick = atYEnd - - onContentYChanged: { - if (visibleArea.yPosition < 0.1) { - LogModel.moveView(-20) - return - } - - if (visibleArea.yPosition + visibleArea.heightRatio > 0.9) { - LogModel.moveView(20) - } - } - - Connections { - target: LogModel - onFireNewLogMsg: logView.positionViewAtEnd() - } - } - - ScrollBar { - id: mainScroll - width: Utils.dp(8) - anchors.top: parent.top - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.right - anchors.horizontalCenterOffset: Constants.pane_padding / 2 - - active: true - orientation: Qt.Vertical - minimumSize: 2 * (width / height) - size: LogModel.heightRatio * logView.visibleArea.heightRatio - position: LogModel.yPosition + LogModel.heightRatio * logView.visibleArea.yPosition - onPressedChanged: { - if (pressed) { - logView.cancelFlick() - } else { - active = true - LogModel.yPosition = position - } - } - } - } - } - - ConfirmationPopup { - id: confirmationPopup - - property bool deleteAll: true - - baseItem: root - title: (deleteAll ? qsTr("Delete all") : qsTr("Delete")) + settingsModel.translationTrigger - text: (deleteAll ? qsTr("Please confirm that you want to delete your old logfiles.") - : qsTr("Please confirm that you want to delete the logfile.") - ) + settingsModel.translationTrigger - confirmText: qsTr("Delete") + settingsModel.translationTrigger - onConfirmed: deleteAll ? LogModel.removeOtherLogfiles() : LogModel.removeCurrentLogfile() - } -} diff --git a/resources/qml/Governikus/FeedbackView/+mobile/LogTitleBarControls.qml b/resources/qml/Governikus/FeedbackView/+mobile/LogTitleBarControls.qml index 3aabb00..b07b766 100644 --- a/resources/qml/Governikus/FeedbackView/+mobile/LogTitleBarControls.qml +++ b/resources/qml/Governikus/FeedbackView/+mobile/LogTitleBarControls.qml @@ -1,57 +1,91 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 Row { id: logControls - signal share() + signal share(point popupPosition) signal remove() signal removeAll() readonly property int contentWidth: width property alias allowRemove: removeButton.visible + property alias allowRemoveAll: removeAllButton.visible - spacing: Utils.dp(18) + spacing: 18 anchors.verticalCenter: parent ? parent.verticalCenter : undefined Image { - height: Constants.titlebar_font_size * 1.5 + height: Style.dimens.small_icon_size width: height + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Share logfile") + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform.os === "ios") mouseAreaShare.clicked(null) + fillMode: Image.PreserveAspectFit source: "qrc:///images/share.svg" MouseArea { + id: mouseAreaShare + anchors.fill: parent - anchors.margins: -Utils.dp(8) - onClicked: logControls.share() + anchors.margins: -8 + + onClicked: logControls.share(mapToGlobal(width / 2, height)) } } Image { id: removeButton - height: Constants.titlebar_font_size * 1.5 + + height: Style.dimens.small_icon_size width: height + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Delete logfile") + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform.os === "ios") mouseAreaRemove.clicked(null) + fillMode: Image.PreserveAspectFit source: "qrc:///images/trash_icon_white.svg" MouseArea { + id: mouseAreaRemove + anchors.fill: parent - anchors.margins: -Utils.dp(8) + anchors.margins: -8 + onClicked: logControls.remove() } } Image { - height: Constants.titlebar_font_size * 1.5 + id: removeAllButton + + height: Style.dimens.small_icon_size width: height + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Delete all logfiles") + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform.os === "ios") mouseAreaRemove.clicked(null) + fillMode: Image.PreserveAspectFit source: "qrc:///images/trash_icon_all.svg" MouseArea { + id: mouseAreaRemoveAll + anchors.fill: parent - anchors.margins: -Utils.dp(8) + anchors.margins: -8 + onClicked: logControls.removeAll() } } diff --git a/resources/qml/Governikus/FeedbackView/+mobile/LogView.qml b/resources/qml/Governikus/FeedbackView/+mobile/LogView.qml new file mode 100644 index 0000000..1a40f52 --- /dev/null +++ b/resources/qml/Governikus/FeedbackView/+mobile/LogView.qml @@ -0,0 +1,127 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.LogModel 1.0 + + +SectionPage +{ + id: root + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + //: LABEL ANDROID IOS + title: qsTr("Log") + SettingsModel.translationTrigger + rightTitleBarAction: LogTitleBarControls { + allowRemove: comboBox.currentIndex > 0 + allowRemoveAll: comboBox.model.length > 1 // comboBox.count doesn't seem to update reliably + + onShare: LogModel.shareLog(popupPosition) + + onRemove: { + confirmationPopup.deleteAll = false + confirmationPopup.open() + } + + onRemoveAll: { + confirmationPopup.deleteAll = true + confirmationPopup.open() + } + } + + sectionPageFlickable: logView + + Item { + id: logSelector + height: comboBox.height + width: parent.width - 2 * Constants.pane_padding + anchors.top: parent.top + anchors.topMargin: Constants.pane_padding + anchors.horizontalCenter: parent.horizontalCenter + + GText { + id: comboText + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + + //: LABEL ANDROID IOS + text: qsTr("Log:") + SettingsModel.translationTrigger + } + + GComboBox { + id: comboBox + + width: parent.width - comboText.width - Constants.component_spacing + anchors.right: parent.right + + Accessible.description: qsTr("Select logfile from list.") + SettingsModel.translationTrigger + + model: LogModel.logFiles + onActivated: LogModel.setLogfile(comboBox.currentIndex) + } + } + + Pane { + id: pane + + anchors { + top: logSelector.bottom + bottom: parent.bottom + left: parent.left + right: parent.right + margins: Constants.pane_padding + } + + clip: true + + GListView { + id: logView + + height: pane.height - 2 * Constants.pane_padding + width: pane.width - Constants.pane_padding + displayMarginBeginning: Constants.pane_padding + displayMarginEnd: Constants.pane_padding + + model: LogModel + + delegate: GText { + width: logView.width - Constants.pane_padding + + Accessible.onScrollDownAction: logView.scrollPageDown() + Accessible.onScrollUpAction: logView.scrollPageUp() + + bottomPadding: index % 2 ? Constants.groupbox_spacing : 0 + text: model.display + textStyle: index % 2 ? Style.text.hint : Style.text.hint_secondary + } + + Connections { + target: LogModel + onFireNewLogMsg: if (logView.atYEnd) logView.positionViewAtEnd() + } + } + } + + ConfirmationPopup { + id: confirmationPopup + + property bool deleteAll: true + + //: LABEL ANDROID IOS + title: (deleteAll ? qsTr("Delete all") : qsTr("Delete")) + SettingsModel.translationTrigger + //: INFO ANDROID IOS The current/all logfile(s) are about to be removed, user confirmation required. + text: (deleteAll ? qsTr("Please confirm that you want to delete your old logfiles.") + : qsTr("Please confirm that you want to delete the logfile.") + ) + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + okButtonText: qsTr("Delete") + SettingsModel.translationTrigger + onConfirmed: deleteAll ? LogModel.removeOtherLogfiles() : LogModel.removeCurrentLogfile() + } +} diff --git a/resources/qml/Governikus/FeedbackView/+mobile/StoreFeedbackPopup.qml b/resources/qml/Governikus/FeedbackView/+mobile/StoreFeedbackPopup.qml deleted file mode 100644 index 460b6d2..0000000 --- a/resources/qml/Governikus/FeedbackView/+mobile/StoreFeedbackPopup.qml +++ /dev/null @@ -1,67 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 - -import Governikus.Type.ApplicationModel 1.0 - - -Popup { - id: popup - - modal: true - focus: true - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent - - width: Utils.dp(350) - height: contentColumn.height + 2 * Constants.pane_padding - padding: Constants.pane_padding - - Column { - id: contentColumn - width: parent.width - spacing: Constants.pane_spacing - - Text { - id: header - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size - font.bold: true - wrapMode: Text.WordWrap - text: qsTr("Would you like to rate this app?") + settingsModel.translationTrigger - } - - Text { - id: info - color: Constants.secondary_text - width: parent.width - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - text: qsTr("We would be very grateful if you could leave a rating on the Google Play Store!") + settingsModel.translationTrigger - } - - Row { - width: parent.width - spacing: Constants.pane_spacing - - GButton { - text: qsTr("No, Thanks") + settingsModel.translationTrigger - width: (parent.width - Constants.pane_spacing) / 2 - - onClicked: { - close() - } - } - - GButton { - text: qsTr("Rate") + settingsModel.translationTrigger - width: (parent.width - Constants.pane_spacing) / 2 - - onClicked: { - Qt.openUrlExternally("market://details?id=" + ApplicationModel.packageName) - close() - } - } - } - } -} diff --git a/resources/qml/Governikus/FeedbackView/qmldir b/resources/qml/Governikus/FeedbackView/qmldir index 3dd910f..e2f874c 100644 --- a/resources/qml/Governikus/FeedbackView/qmldir +++ b/resources/qml/Governikus/FeedbackView/qmldir @@ -3,5 +3,5 @@ module FeedbackView internal LogTitleBarControls LogTitleBarControls.qml Feedback 1.0 Feedback.qml -Log 1.0 Log.qml +LogView 1.0 LogView.qml StoreFeedbackPopup 1.0 StoreFeedbackPopup.qml diff --git a/resources/qml/Governikus/Global/+desktop/+mac/BrandConstants.qml b/resources/qml/Governikus/Global/+desktop/+mac/BrandConstants.qml index 6406eff..c4387f4 100644 --- a/resources/qml/Governikus/Global/+desktop/+mac/BrandConstants.qml +++ b/resources/qml/Governikus/Global/+desktop/+mac/BrandConstants.qml @@ -1,6 +1,8 @@ -import QtQuick 2.10 +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ -import Governikus.Type.ApplicationModel 1.0 +import QtQuick 2.10 Item { } diff --git a/resources/qml/Governikus/Global/+desktop/+win/BrandConstants.qml b/resources/qml/Governikus/Global/+desktop/+win/BrandConstants.qml index 6406eff..c4387f4 100644 --- a/resources/qml/Governikus/Global/+desktop/+win/BrandConstants.qml +++ b/resources/qml/Governikus/Global/+desktop/+win/BrandConstants.qml @@ -1,6 +1,8 @@ -import QtQuick 2.10 +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ -import Governikus.Type.ApplicationModel 1.0 +import QtQuick 2.10 Item { } diff --git a/resources/qml/Governikus/Global/+desktop/ConfirmationPopup.qml b/resources/qml/Governikus/Global/+desktop/ConfirmationPopup.qml new file mode 100644 index 0000000..8b4ea11 --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/ConfirmationPopup.qml @@ -0,0 +1,41 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + + +BaseConfirmationPopup { + id: root + + buttons: Row { + width: parent.width + + layoutDirection: Qt.RightToLeft + spacing: Constants.component_spacing + bottomPadding: Constants.pane_padding + rightPadding: Constants.pane_padding + + GButton { + visible: style & ConfirmationPopup.PopupStyle.OkButton + + text: root.okButtonText + + onClicked: root.accept() + } + + GButton { + visible: style & ConfirmationPopup.PopupStyle.CancelButton + + text: root.cancelButtonText + + onClicked: root.cancel() + } + } +} + diff --git a/resources/qml/Governikus/Global/+desktop/ContinueButton.qml b/resources/qml/Governikus/Global/+desktop/ContinueButton.qml deleted file mode 100644 index 3637884..0000000 --- a/resources/qml/Governikus/Global/+desktop/ContinueButton.qml +++ /dev/null @@ -1,37 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.View 1.0 - - -Button { - id: control - width: height - - Accessible.role: Accessible.Button - Accessible.name: qsTr("Continue") - - FocusFrame {} - - background: Rectangle { - anchors.fill: parent - anchors.margins: control.down ? control.height / 32 : 0 - radius: height / 2 - border.width: height / 40; - border.color: Constants.white - color: "transparent" - - Rectangle { - radius: height / 2 - anchors.fill: parent - anchors.margins: parent.height / 8; - color: Qt.lighter(Constants.blue, 1.1) - - Image { - anchors.centerIn: parent - sourceSize.height: parent.height / 2; - source: "qrc:///images/desktop/continue_arrow.svg" - } - } - } -} diff --git a/resources/qml/Governikus/Global/+desktop/GButton.qml b/resources/qml/Governikus/Global/+desktop/GButton.qml index e4ec061..062006a 100644 --- a/resources/qml/Governikus/Global/+desktop/GButton.qml +++ b/resources/qml/Governikus/Global/+desktop/GButton.qml @@ -1,43 +1,61 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 Button { id: control - padding: Constants.pane_padding / 3 - contentItem: Row { + property var textStyle: enabled ? Style.text.button : Style.text.button_disabled + property color buttonColor: Style.color.accent + property alias cursorShape: mouseArea.cursorShape + + padding: Constants.pane_padding / 2 + + contentItem: RowLayout { spacing: Constants.groupbox_spacing Image { - source: control.icon.source visible: source.toString().length > 0 - sourceSize.height: textContainer.height + sourceSize.height: ApplicationModel.scaleFactor * 40 + + source: control.icon.source } Item { id: textContainer - height: originalSize.height - width: originalSize.width - Text { + Layout.fillWidth: true + implicitHeight: originalSize.implicitHeight + implicitWidth: originalSize.implicitWidth + + GText { id: originalSize + visible: false + anchors.fill: parent + text: control.text - font.bold: true - font.pixelSize: Constants.normal_font_size + textStyle: control.textStyle } - Text { + GText { + anchors.fill: parent + text: control.text - color: Constants.white - font.bold: true - font.pixelSize: Constants.normal_font_size - ApplicationModel.scaleFactor * (control.down ? 1 : 0) - anchors.centerIn: parent + textStyle: control.textStyle + font.pixelSize: textStyle.textSize - ApplicationModel.scaleFactor * (control.down ? 1 : 0) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter FocusFrame { scope: control @@ -47,7 +65,16 @@ Button { } background: Rectangle { - color: Constants.blue - radius: ApplicationModel.scaleFactor * 4 + color: enabled ? buttonColor : Style.color.accent_disabled + radius: Style.dimens.button_radius + } + + MouseArea { + id: mouseArea + + anchors.fill: parent + + onPressed: mouse.accepted = false + cursorShape: Qt.PointingHandCursor } } diff --git a/resources/qml/Governikus/Global/+desktop/GCheckBox.qml b/resources/qml/Governikus/Global/+desktop/GCheckBox.qml index 39c0b40..185055b 100644 --- a/resources/qml/Governikus/Global/+desktop/GCheckBox.qml +++ b/resources/qml/Governikus/Global/+desktop/GCheckBox.qml @@ -1,24 +1,37 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Type.ApplicationModel 1.0 CheckBox { id: control + implicitHeight: ApplicationModel.scaleFactor * 26 + implicitWidth: implicitHeight + indicator: Rectangle { anchors.fill: parent - color: Constants.blue + + color: control.checked ? (enabled ? Style.color.accent : Style.color.accent_disabled) : Style.color.transparent radius: Math.max(ApplicationModel.scaleFactor * 4, 1) + border.width: Math.max(ApplicationModel.scaleFactor * 4, 1) + border.color: enabled ? Style.color.accent : Style.color.accent_disabled Image { - source: "qrc:///images/check.svg" + visible: control.checked + anchors.fill: parent anchors.margins: Math.max(ApplicationModel.scaleFactor * 4, 1) + + source: "qrc:///images/check.svg" fillMode: Image.PreserveAspectFit - visible: control.checked } } } diff --git a/resources/qml/Governikus/Global/+desktop/GComboBox.qml b/resources/qml/Governikus/Global/+desktop/GComboBox.qml new file mode 100644 index 0000000..ad6818f --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/GComboBox.qml @@ -0,0 +1,61 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.View 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 + +ComboBox { + id: control + + property var textStyle: Style.text.normal_inverse + + spacing: Constants.groupbox_spacing + font.pixelSize: textStyle.fontSize + + indicator: Image { + visible: control.model.length > 1 || control.model.count > 1 + x: control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + source: "qrc:///images/triangle.svg" + sourceSize.width: ApplicationModel.scaleFactor * 20 + sourceSize.height: ApplicationModel.scaleFactor * 20 + } + + contentItem: GText { + padding: control.spacing + rightPadding: control.indicator.width + control.spacing + text: control.displayText + textStyle: control.textStyle + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + delegate: ItemDelegate { + width: control.width + highlighted: control.highlightedIndex === index + + GText { + anchors.verticalCenter: parent.verticalCenter + leftPadding: ApplicationModel.scaleFactor * 5 + + text: modelData + textStyle: control.textStyle + font.bold: control.currentIndex === index + } + } + + FocusFrame { + scope: control + marginFactor: 1.5 + } + + background: Rectangle { + border.color: Constants.black + } +} diff --git a/resources/qml/Governikus/Global/+desktop/GText.qml b/resources/qml/Governikus/Global/+desktop/GText.qml deleted file mode 100644 index c5b278c..0000000 --- a/resources/qml/Governikus/Global/+desktop/GText.qml +++ /dev/null @@ -1,5 +0,0 @@ -import QtQuick 2.10 - -Text { - renderType: Text.NativeRendering -} diff --git a/resources/qml/Governikus/Global/+desktop/GTextField.qml b/resources/qml/Governikus/Global/+desktop/GTextField.qml index 4b6ad7f..e9929f7 100644 --- a/resources/qml/Governikus/Global/+desktop/GTextField.qml +++ b/resources/qml/Governikus/Global/+desktop/GTextField.qml @@ -1,14 +1,26 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 +import Governikus.Style 1.0 +import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 Item { + id: baseItem + property alias text: field.text - property alias font: field.font + property var textStyle: Style.text.normal property alias displayText: field.displayText property alias echoMode: field.echoMode + property alias textAnchors: field.anchors + property alias validator: field.validator + property alias maximumLength: field.maximumLength + readonly property alias acceptableInput: field.acceptableInput signal accepted property bool valid: true @@ -18,24 +30,34 @@ Item { Rectangle { id: textBackground - radius: ApplicationModel.scaleFactor * 6 + anchors.fill: parent + + radius: ApplicationModel.scaleFactor * 6 + color: enabled ? Constants.white : Constants.grey border.color: Constants.red - color: enabled ? "white" : Constants.grey border.width: valid ? 0 : ApplicationModel.scaleFactor * 2 } TextField { id: field + anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right anchors.margins: textBackground.radius + + activeFocusOnTab: true padding: 0 - font.pixelSize: Constants.normal_font_size - onAccepted: parent.accepted() + font.pixelSize: baseItem.textStyle.textSize + color: baseItem.textStyle.textColor + onAccepted: baseItem.accepted() background: Item {} } onActiveFocusChanged: if (focus) field.forceActiveFocus() + + FocusFrame { + scope: field + } } diff --git a/resources/qml/Governikus/Global/+desktop/LabeledText.qml b/resources/qml/Governikus/Global/+desktop/LabeledText.qml index ae27d5d..61f487e 100644 --- a/resources/qml/Governikus/Global/+desktop/LabeledText.qml +++ b/resources/qml/Governikus/Global/+desktop/LabeledText.qml @@ -1,32 +1,61 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import Governikus.View 1.0 +import Governikus.Global 1.0 +import Governikus.Style 1.0 + + +Item { + id: baseItem + signal linkActivated(string link) -Column { property alias label: label.text property alias text: body.text property alias textFormat: body.textFormat property alias textUppercase: body.font.capitalization + property alias underlineLabel: label.font.underline + readonly property double focusFrameMargins: focusFrame.anchors.margins - signal linkActivated(string link) + implicitHeight: column.implicitHeight + implicitWidth: Math.max(label.implicitWidth, body.implicitWidth) - width: Math.max(label.implicitWidth, body.implicitWidth) + Accessible.role: Accessible.Section + Accessible.name: label.text + (label.text.trim().endsWith(":") ? " " : ": ") + body.text - Text { - id: label - anchors.left: parent.left - anchors.right: parent.right - font.pixelSize: Constants.normal_font_size - color: Constants.blue - wrapMode: Text.WordWrap + FocusFrame { + id: focusFrame + dynamic: false + border.color: Constants.black } - Text { - id: body - color: Constants.black - anchors.left: parent.left - anchors.right: parent.right - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap - onLinkActivated: parent.linkActivated(link) + Column { + id: column + + anchors.fill: parent + + GText { + id: label + + visible: label.text !== "" + + width: parent.width + + textStyle: Style.text.normal_accent + } + + GText { + id: body + + visible: body.text !== "" + + width: parent.width + + textStyle: Style.text.normal_inverse + onLinkActivated: baseItem.linkActivated(link) + } } } diff --git a/resources/qml/Governikus/Global/+desktop/LocationButton.qml b/resources/qml/Governikus/Global/+desktop/LocationButton.qml new file mode 100644 index 0000000..02d516a --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/LocationButton.qml @@ -0,0 +1,24 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +GButton { + id: root + + property string language + property alias image: root.icon.source + + cursorShape: SettingsModel.language === language ? Qt.ArrowCursor : Qt.PointingHandCursor + opacity: SettingsModel.language === language ? 1.0 : 0.5 + onClicked: SettingsModel.language = language +} diff --git a/resources/qml/Governikus/Global/+desktop/NavigationButton.qml b/resources/qml/Governikus/Global/+desktop/NavigationButton.qml new file mode 100644 index 0000000..0d7bdd4 --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/NavigationButton.qml @@ -0,0 +1,60 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ApplicationModel 1.0 + + +Button { + id: control + + property int buttonType // Qt.ForwardButton || Qt.BackButton + + width: ApplicationModel.scaleFactor * 160 + height: ApplicationModel.scaleFactor * 160 + + Accessible.role: Accessible.Button + //: LABEL DESKTOP_QML + Accessible.name: { + if (buttonType === Qt.ForwardButton) { + return qsTr("Continue") + SettingsModel.translationTrigger + } + console.assert(buttonType === Qt.BackButton, "Use either Qt.ForwardButton or Qt.BackButton") + return qsTr("Back") + SettingsModel.translationTrigger + } + + background: Rectangle { + anchors.fill: parent + anchors.margins: control.down ? control.height / 32 : 0 + + radius: height / 2 + border.width: height / 40; + border.color: enabled ? Constants.white : Constants.red + color: Style.color.transparent + + Rectangle { + anchors.fill: parent + anchors.margins: parent.height / 8; + + radius: height / 2 + color: Qt.lighter(Constants.blue, 1.1) + + Image { + anchors.centerIn: parent + + source: "qrc:///images/desktop/continue_arrow.svg" + sourceSize.height: parent.height / 2; + transformOrigin: Item.Center + rotation: buttonType === Qt.BackButton ? 180 : 0 + } + } + } + + FocusFrame {} +} diff --git a/resources/qml/Governikus/Global/+desktop/Pane.qml b/resources/qml/Governikus/Global/+desktop/Pane.qml index 5dc37b1..7708a94 100644 --- a/resources/qml/Governikus/Global/+desktop/Pane.qml +++ b/resources/qml/Governikus/Global/+desktop/Pane.qml @@ -1,21 +1,60 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 +import Governikus.View 1.0 +import Governikus.Style 1.0 import Governikus.Type.ApplicationModel 1.0 -Rectangle { +Item { id: root - property alias title: titleText.text - default property alias paneChildren: paneContent.children - anchors.left: parent.left - anchors.right: parent.right - height: childrenRect.height - color: Constants.white - radius: ApplicationModel.scaleFactor * 10 + Accessible.role: Accessible.Heading + Accessible.name: titleText.text + + property alias title: titleText.text + property alias titleTextStyle: titleText.textStyle + + property alias checkBox: titleText.checkBox + property alias content: paneContent + default property alias children: paneContent.children + + implicitHeight: containerCol.implicitHeight + implicitWidth: containerCol.implicitWidth + + Keys.onPressed: if (event.key === Qt.Key_Space) checkBox.toggle() + + Item { + id: shadowLayer + + anchors.fill: parent + + layer.enabled: true + layer.effect: DropShadow { + radius: 8 + samples: 8 + source: background + color: Qt.darker(Constants.grey, 1.2) + verticalOffset: 2 + } + } + + Rectangle { + id: background + + anchors.fill: parent + + color: Style.color.background_pane + radius: Style.dimens.corner_radius + } Column { + id: containerCol + anchors.left: parent.left anchors.right: parent.right anchors.leftMargin: Constants.pane_padding @@ -26,21 +65,22 @@ Rectangle { PaneTitle { id: titleText + + width: Math.max(implicitWidth + 2 * Constants.pane_padding, parent.width) + + FocusFrame { + scope: root + dynamic: false + border.color: Constants.black + } } Column { id: paneContent + width: parent.width spacing: Constants.pane_spacing } } - layer.enabled: true - layer.effect: DropShadow { - radius: 8 - samples: 8 - source: root - color: Qt.darker(Constants.grey, 1.2) - verticalOffset: 2 - } } diff --git a/resources/qml/Governikus/Global/+desktop/PaneTitle.qml b/resources/qml/Governikus/Global/+desktop/PaneTitle.qml new file mode 100644 index 0000000..34224d8 --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/PaneTitle.qml @@ -0,0 +1,32 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Style 1.0 + +GText { + property alias checkBox: optionState + + visible: text !== "" + + textStyle: Style.text.header_accent + + GCheckBox { + id: optionState + + visible: false + + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + + activeFocusOnTab: false + } + MouseArea { + anchors.fill: parent + + onReleased: if (mouse.button === Qt.LeftButton) optionState.toggle() + cursorShape: optionState.visible ? Qt.PointingHandCursor : Qt.ArrowCursor + } +} diff --git a/resources/qml/Governikus/Global/+desktop/PlatformConstants.qml b/resources/qml/Governikus/Global/+desktop/PlatformConstants.qml index 3193a0e..2c85e04 100644 --- a/resources/qml/Governikus/Global/+desktop/PlatformConstants.qml +++ b/resources/qml/Governikus/Global/+desktop/PlatformConstants.qml @@ -1,28 +1,19 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Type.ApplicationModel 1.0 BrandConstants { - readonly property color blue: Qt.darker(background_color, 1.2) - readonly property color background_color: "#659bcd" - readonly property color grey_light: "#bbbbbb" - readonly property color secondary_text: "#dadada" - readonly property color accent_color: "#7879b2" - - readonly property int header_font_size: ApplicationModel.scaleFactor * 42 - readonly property int pane_title_font_size: ApplicationModel.scaleFactor * 32 - readonly property int normal_font_size: ApplicationModel.scaleFactor * 26 - readonly property int label_font_size: ApplicationModel.scaleFactor * 20 - readonly property int small_font_size: ApplicationModel.scaleFactor * 18 - - readonly property int titlebar_padding: ApplicationModel.scaleFactor * 20 - readonly property int titlebar_spacing: ApplicationModel.scaleFactor * 20 - readonly property int titlebar_font_size: ApplicationModel.scaleFactor * 24 + readonly property color blue: "#5481ab" readonly property int component_spacing: ApplicationModel.scaleFactor * 30 readonly property int pane_padding: ApplicationModel.scaleFactor * 30 readonly property int pane_spacing: ApplicationModel.scaleFactor * 30 readonly property int groupbox_spacing: ApplicationModel.scaleFactor * 20 + readonly property int text_spacing: ApplicationModel.scaleFactor * 10 readonly property bool is_desktop: true } diff --git a/resources/qml/Governikus/Global/+desktop/RoundedRectangle.qml b/resources/qml/Governikus/Global/+desktop/RoundedRectangle.qml new file mode 100644 index 0000000..aecf01e --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/RoundedRectangle.qml @@ -0,0 +1,99 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + +Item { + id: roundedRectangle + + property real radius: Style.dimens.corner_radius + property real borderWidth: 0 + + property color color: Style.color.background + property color borderColor: Style.color.border + + property bool topLeftCorner: true + property bool topRightCorner: true + property bool bottomLeftCorner: true + property bool bottomRightCorner: true + + onVisibleChanged: canvas.requestPaint() + onRadiusChanged: canvas.requestPaint() + onBorderWidthChanged: canvas.requestPaint() + onBorderColorChanged: canvas.requestPaint() + onColorChanged: canvas.requestPaint() + onTopLeftCornerChanged: canvas.requestPaint() + onTopRightCornerChanged: canvas.requestPaint() + onBottomRightCornerChanged: canvas.requestPaint() + onBottomLeftCornerChanged: canvas.requestPaint() + + + Canvas { + id: canvas + + anchors.fill: parent + + onPaint: { + let context = getContext("2d") + if (context === null) { + return + } + + context.save() + + context.reset() + + context.beginPath() + + context.moveTo(0, height / 2) + + if (topLeftCorner){ + context.lineTo(0, radius) + context.arcTo(0, 0, radius, 0, radius) + } else { + context.lineTo(0, 0) + } + + if (topRightCorner){ + context.lineTo(width - radius, 0) + context.arcTo(width, 0, width, radius, radius) + } else { + context.lineTo(width, 0) + } + + if (bottomRightCorner) { + context.lineTo(width, height - radius) + context.arcTo(width, height, width - radius, height, radius) + } else { + context.lineTo(width, height) + } + + if (bottomLeftCorner) { + context.lineTo(radius, height) + context.arcTo(0, height, 0, height - radius, radius) + } else { + context.lineTo(0, height) + } + + context.lineTo(height / 2) + context.closePath() + + context.fillStyle = color + context.fill() + + if (borderWidth > 0) { + context.clip() + context.lineWidth = borderWidth * 2 + context.strokeStyle = borderColor + context.stroke() + } + + context.restore() + } + } + +} diff --git a/resources/qml/Governikus/Global/+desktop/ScrollGradients.qml b/resources/qml/Governikus/Global/+desktop/ScrollGradients.qml new file mode 100644 index 0000000..3cab396 --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/ScrollGradients.qml @@ -0,0 +1,47 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + + +Item { + id: baseItem + + property color color + + Rectangle { + height: Constants.pane_padding + anchors { + top: parent.top + left: parent.left + right: parent.right + leftMargin: Constants.pane_padding + rightMargin: Constants.pane_padding + } + + gradient: Gradient { + GradientStop { position: 0.0; color: baseItem.color } + GradientStop { position: 1.0; color: Style.color.transparent } + } + } + + Rectangle { + height: Constants.pane_padding + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + leftMargin: Constants.pane_padding + rightMargin: Constants.pane_padding + } + + gradient: Gradient { + GradientStop { position: 0.0; color: Style.color.transparent } + GradientStop { position: 1.0; color: baseItem.color } + } + } +} diff --git a/resources/qml/Governikus/Global/+desktop/ScrollablePane.qml b/resources/qml/Governikus/Global/+desktop/ScrollablePane.qml new file mode 100644 index 0000000..aea86e8 --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/ScrollablePane.qml @@ -0,0 +1,123 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 +import QtGraphicalEffects 1.0 + +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 + + +Item { + id: root + + function scrollYPositionIntoView(pYposition) { + var availableFlickableHeight = flickable.height - paneContent.anchors.margins + var dy = pYposition - flickable.contentY - availableFlickableHeight + + if (dy > 0 || flickable.contentY > 0) { + flickable.contentY += dy + + if (flickable.contentY < 0) + flickable.contentY = 0 + else if (flickable.contentY + availableFlickableHeight > flickable.contentHeight) + flickable.contentY = flickable.contentHeight - availableFlickableHeight + } + } + + Accessible.role: Accessible.Heading + Accessible.name: titleText.text + + property alias title: titleText.text + property alias content: paneContent + default property alias children: paneContent.children + + Item { + id: shadowLayer + + anchors.fill: parent + + layer.enabled: true + layer.effect: DropShadow { + radius: 8 + samples: 8 + source: background + color: Qt.darker(Constants.grey, 1.2) + verticalOffset: 2 + } + } + + Rectangle { + id: background + + anchors.fill: parent + + color: Style.color.background_pane + radius: Style.dimens.corner_radius + } + + Item { + anchors.fill: parent + + clip: true + + Flickable { + id: flickable + + anchors.fill: parent + anchors.topMargin: Constants.pane_padding + anchors.leftMargin: Constants.pane_padding + anchors.bottomMargin: Constants.pane_padding + + boundsBehavior: Flickable.StopAtBounds + contentHeight: contentColumn.implicitHeight + ScrollBar.vertical: ScrollBar { + policy: size === 1.0 ? ScrollBar.AlwaysOff : ScrollBar.AlwaysOn + } + + Column { + id: contentColumn + + anchors.fill: parent + anchors.rightMargin: Constants.pane_padding + + spacing: Constants.pane_spacing + + GText { + id: titleText + + visible: text !== "" + width: parent.width + + textStyle: Style.text.header_accent + elide: Text.ElideRight + + FocusFrame { + scope: root + dynamic: false + border.color: Constants.black + } + } + + Column { + id: paneContent + + width: parent.width + + spacing: Constants.pane_spacing + } + } + } + + ScrollGradients { + anchors.fill: parent + color: background.color + } + } + +} diff --git a/resources/qml/Governikus/Global/+desktop/SearchBar.qml b/resources/qml/Governikus/Global/+desktop/SearchBar.qml new file mode 100644 index 0000000..0fa994a --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/SearchBar.qml @@ -0,0 +1,80 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +GTextField { + id: searchField + + function clear() { + searchField.text = "" + searchField.forceActiveFocus() + } + + width: 400 * ApplicationModel.scaleFactor + + Accessible.name: qsTr("Search") + SettingsModel.translationTrigger + + textAnchors.leftMargin: glassIcon.width + Constants.groupbox_spacing + textAnchors.rightMargin: iconItem.width + Constants.groupbox_spacing + + textStyle: Style.text.normal_inverse + + Image { + id: glassIcon + + sourceSize.height: parent.height - 2 * anchors.leftMargin + sourceSize.width: height + anchors.left: parent.left + anchors.leftMargin: parent.height / 8 + anchors.verticalCenter: parent.verticalCenter + + source: "qrc:///images/search_icon.svg" + } + + GText { + visible: searchField.text === "" + anchors.centerIn: searchField + + //: LABEL DESKTOP_QML + text: qsTr("Search") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary_inverse + } + + Image { + id: iconItem + + visible: parent.displayText !== "" + height: parent.height - 2 * anchors.rightMargin + width: height + anchors.right: parent.right + anchors.rightMargin: parent.height / 8 + anchors.verticalCenter: parent.verticalCenter + + activeFocusOnTab: true + Accessible.role: Accessible.Button + Accessible.name: qsTr("Clear") + SettingsModel.translationTrigger + + source: "qrc:///images/search_cancel.svg" + Keys.onSpacePressed: searchField.clear() + + MouseArea { + anchors.fill: parent + + onClicked: searchField.clear() + } + + FocusFrame { + border.color: Constants.black + } + } +} diff --git a/resources/qml/Governikus/Global/+desktop/TabbedPane.qml b/resources/qml/Governikus/Global/+desktop/TabbedPane.qml new file mode 100644 index 0000000..a542a71 --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/TabbedPane.qml @@ -0,0 +1,244 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.View 1.0 + + +Item { + id: root + + property var sectionsModel: undefined + property var contentObjectModel: undefined + property Component contentDelegate: null + property Component footerItem: null + property Component sectionDelegate: TabbedPaneDelegateOneLineText { + sectionName: model ? (model.display ? model.display : model.modelData) : "" + } + property alias currentIndex: sectionNameList.currentIndex + property alias sectionCount: sectionNameList.count + + readonly property var currentItemModel: sectionNameList.currentItem ? sectionNameList.currentItem.itemModel : null + readonly property int horizonalSeparatorHeight: Math.max(ApplicationModel.scaleFactor * 1, 1) + readonly property int verticalSeparatorWidth: Math.max(ApplicationModel.scaleFactor * 4, 1) + readonly property real relativeListViewWidth: 0.3 + readonly property int availableHeight: height - 2 * contentPadding + property var contentPadding: Constants.pane_padding + + function scrollYPositionIntoView(pYposition) { + var dy = pYposition - flickable.contentY - flickable.height + + if (dy > 0 || flickable.contentY > 0) { + flickable.contentY += dy + + if (flickable.contentY < 0) + flickable.contentY = 0 + else if (flickable.contentY + flickable.height > flickable.contentHeight) + pFlickable.contentY = flickable.contentHeight - flickable.height + } + } + + Row { + anchors.fill: parent + + ColumnLayout { + height: parent.height + width: parent.width * relativeListViewWidth + + spacing: Constants.component_spacing + + ListView { + id: sectionNameList + + Layout.fillWidth: true + Layout.fillHeight: true + + activeFocusOnTab: true + + clip: true + boundsBehavior: Flickable.StopAtBounds + model: sectionsModel + highlightFollowsCurrentItem: true + highlight: null + delegate: sectionNameDelegate + } + + Loader { + Layout.preferredHeight: status === Loader.Ready ? item.height : 0 + Layout.fillWidth: true + Layout.alignment: Qt.AlignLeft + + sourceComponent: footerItem + } + } + + RoundedRectangle { + height: parent.height + width: parent.width * (1.0 - relativeListViewWidth) + + radius: Style.dimens.corner_radius + color: Style.color.background_pane_active + topLeftCorner: false + bottomLeftCorner: sectionNameList.contentHeight < height + clip: true + + Flickable { + id: flickable + + anchors { + fill: parent + bottomMargin: contentPadding + topMargin: contentPadding + } + + ScrollBar.vertical: ScrollBar { + policy: size === 1.0 ? ScrollBar.AlwaysOff : ScrollBar.AlwaysOn + } + contentHeight: contentLoader.item.height + boundsBehavior: Flickable.StopAtBounds + + Loader { + id: contentLoader + + anchors { + top: parent.top + left: parent.left + right: parent.right + leftMargin: contentPadding + rightMargin: contentPadding + } + + sourceComponent: { + if (contentDelegate !== null) { + return contentDelegate + } + + if (contentObjectModel === undefined) { + return null + } + + if (sectionNameList.currentIndex < contentObjectModel.count){ + return contentObjectModel.get(sectionNameList.currentIndex) + } + } + } + } + + ScrollGradients { + anchors.fill: parent + color: parent.color + } + } + } + + + Component { + id: sectionNameDelegate + + Control { + id: delegateItem + + readonly property bool isFirstItem: index === 0 + readonly property bool isLastItem: index === ListView.view.count - 1 + readonly property bool isCurrentItem: ListView.isCurrentItem + readonly property bool isPreviousToCurrentItem: index === ListView.view.currentIndex - 1 + readonly property var itemModel: model + + Accessible.role: Accessible.Grouping + + width: parent.width + height: delegateLoader.height + 2 * Constants.pane_padding + + RoundedRectangle { + id: background + + anchors.fill: parent + + radius: Style.dimens.corner_radius + color: isCurrentItem ? Style.color.background_pane_active : Style.color.background_pane + + topLeftCorner: isFirstItem + topRightCorner: false + bottomRightCorner: false + bottomLeftCorner: isLastItem + } + + Rectangle { + id: horizontalSeparator + + visible: !isLastItem + + width: parent.width + height: isCurrentItem || isPreviousToCurrentItem ? verticalSeparatorWidth : horizonalSeparatorHeight + anchors.bottom: parent.bottom + + color: isCurrentItem || isPreviousToCurrentItem ? Style.color.background : Style.color.border + } + + Rectangle { + id: verticalSeparator + + height: parent.height + width: verticalSeparatorWidth + anchors.right: parent.right + + color: !isCurrentItem ? Style.color.background : Style.color.background_pane_active + } + + Rectangle { + id: missingPiece + + visible: !isLastItem + + height: isCurrentItem ? verticalSeparatorWidth : horizonalSeparatorHeight + width: verticalSeparatorWidth + anchors { + right: parent.right + bottom: parent.bottom + } + + color: Style.color.background + } + + FocusFrame { + visible: delegateItem.focusReason !== Qt.MouseFocusReason + + framee: delegateLoader + border.color: Constants.black + dynamic: false + } + + Loader { + id: delegateLoader + + property var model: itemModel + + anchors { + verticalCenter: parent.verticalCenter + left: parent.left + right: parent.right + leftMargin: Constants.pane_padding + rightMargin: Constants.pane_padding + } + + sourceComponent: sectionDelegate + } + + MouseArea { + anchors.fill: parent + + cursorShape: index === currentIndex ? Qt.ArrowCursor : Qt.PointingHandCursor + onClicked: { + delegateItem.ListView.view.currentIndex = index + } + } + } + } +} diff --git a/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndText.qml b/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndText.qml new file mode 100644 index 0000000..c79f51a --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndText.qml @@ -0,0 +1,41 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 + +Row { + id: root + + property string sectionName + property string iconPath + + Accessible.role: Accessible.PageTab + Accessible.name: sectionName + + spacing: Constants.groupbox_spacing + + Image { + id: sectionIcon + + visible: source !== "" + sourceSize.height: ApplicationModel.scaleFactor * 60 + sourceSize.width: ApplicationModel.scaleFactor * 60 + + source: iconPath + fillMode: Image.PreserveAspectFit + } + + GText { + width: parent.width - sectionIcon.width + anchors.verticalCenter: parent.verticalCenter + + text: sectionName + textStyle: Style.text.header_inverse + maximumLineCount: 1 + elide: Text.ElideRight + } +} diff --git a/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndThreeLineText.qml b/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndThreeLineText.qml new file mode 100644 index 0000000..aab428c --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateIconAndThreeLineText.qml @@ -0,0 +1,68 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.2 + +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 + +RowLayout { + id: root + + property string mainText + property string headerText + property string footerText + property string iconPath + + Accessible.role: Accessible.PageTab + Accessible.name: headerText + " " + mainText + " " + footerText + + width: parent.width + + spacing: Constants.groupbox_spacing + + Image { + id: sectionIcon + + visible: source !== "" + sourceSize.height: ApplicationModel.scaleFactor * 60 + sourceSize.width: ApplicationModel.scaleFactor * 60 + + source: iconPath + fillMode: Image.PreserveAspectFit + } + + Column { + Layout.fillWidth: true + + spacing: Constants.text_spacing + + GText { + width: parent.width + + text: headerText + textStyle: Style.text.normal_inverse + maximumLineCount: 1 + } + + GText { + width: parent.width + + text: mainText + textStyle: Style.text.header_inverse + maximumLineCount: 1 + elide: Text.ElideRight + } + + GText { + width: parent.width + + text: footerText + textStyle: Style.text.normal_inverse + maximumLineCount: 1 + elide: Text.ElideRight + } + } +} diff --git a/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateOneLineText.qml b/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateOneLineText.qml new file mode 100644 index 0000000..1a1ffef --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/TabbedPaneDelegateOneLineText.qml @@ -0,0 +1,23 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Style 1.0 + +GText { + id: root + + property string sectionName + + Accessible.role: Accessible.PageTab + Accessible.name: sectionName + + width: parent.width + + textStyle: Style.text.header_inverse + text: sectionName + maximumLineCount: 1 + elide: Text.ElideRight +} diff --git a/resources/qml/Governikus/Global/+desktop/ToggleableOption.qml b/resources/qml/Governikus/Global/+desktop/ToggleableOption.qml new file mode 100644 index 0000000..6c720e9 --- /dev/null +++ b/resources/qml/Governikus/Global/+desktop/ToggleableOption.qml @@ -0,0 +1,70 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +Item { + id: root + + property alias text: optionText.text + property alias checked: optionState.checked + + property TextStyle textStyle: enabled ? Style.text.normal_inverse : Style.text.normal_secondary_inverse + + implicitHeight: layout.implicitHeight + implicitWidth: layout.implicitWidth + + activeFocusOnTab: true + + Accessible.name: root.text + " " + (checked ? qsTr("is enabled") : qsTr("is disabled")) + SettingsModel.translationTrigger + Accessible.description: root.text + Accessible.role: Accessible.CheckBox + + Keys.onSpacePressed: optionState.toggle() + + RowLayout { + id: layout + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + + spacing: Constants.groupbox_spacing + + GCheckBox { + id: optionState + + activeFocusOnTab: false + } + + GText { + id: optionText + + Layout.fillWidth: true + activeFocusOnTab: false + + textStyle: root.textStyle + } + } + + FocusFrame { + border.color: optionText.color + dynamic: false + } + + MouseArea { + anchors.fill: parent + onClicked: optionState.toggle() + cursorShape: Qt.PointingHandCursor + } +} diff --git a/resources/qml/Governikus/Global/+mobile/+android/+phone/DeviceConstants.qml b/resources/qml/Governikus/Global/+mobile/+android/+phone/DeviceConstants.qml index 2f7c0dc..7c0ed0a 100644 --- a/resources/qml/Governikus/Global/+mobile/+android/+phone/DeviceConstants.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/+phone/DeviceConstants.qml @@ -1,6 +1,8 @@ -import QtQuick 2.10 +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ -import "Utils.js" as Utils +import QtQuick 2.10 Item { readonly property bool is_tablet: false diff --git a/resources/qml/Governikus/Global/+mobile/+android/+tablet/DeviceConstants.qml b/resources/qml/Governikus/Global/+mobile/+android/+tablet/DeviceConstants.qml index 11a5f6c..4afbd01 100644 --- a/resources/qml/Governikus/Global/+mobile/+android/+tablet/DeviceConstants.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/+tablet/DeviceConstants.qml @@ -1,6 +1,8 @@ -import QtQuick 2.10 +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ -import "Utils.js" as Utils +import QtQuick 2.10 Item { readonly property bool is_tablet: true diff --git a/resources/qml/Governikus/Global/+mobile/+android/BrandConstants.qml b/resources/qml/Governikus/Global/+mobile/+android/BrandConstants.qml index 0a230b0..6b8d648 100644 --- a/resources/qml/Governikus/Global/+mobile/+android/BrandConstants.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/BrandConstants.qml @@ -1,22 +1,13 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import "Utils.js" as Utils - DeviceConstants { - readonly property color grey_light: "#bbbbbb" - readonly property color blue_dark: "#324d66" - readonly property color blue_light: "#659bcd" - readonly property color accent_color: "#7879b2" - readonly property color primary_text: "#ffffff" - readonly property color secondary_text: "#4a4a4a" - readonly property int titlebar_font_size: Utils.dp(18) - readonly property int provider_section_height: Utils.dp(62) - readonly property int history_delegate_spacing: Utils.dp(10) - readonly property color history_delegate_address_color: "#7879b2" - readonly property int button_height: Utils.dp(36) - readonly property bool is_layout_android: true readonly property bool is_layout_ios: false + readonly property string layout: "android" readonly property bool leftNavigation: true readonly property bool bottomNavigation: false } diff --git a/resources/qml/Governikus/Global/+mobile/+android/ConfirmationPopup.qml b/resources/qml/Governikus/Global/+mobile/+android/ConfirmationPopup.qml new file mode 100644 index 0000000..d944c24 --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/+android/ConfirmationPopup.qml @@ -0,0 +1,44 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + + +BaseConfirmationPopup { + id: root + + buttons: Row { + width: parent.width + + layoutDirection: Qt.RightToLeft + rightPadding: Constants.groupbox_spacing / 2 + bottomPadding: Constants.groupbox_spacing / 2 + spacing: 0 + + GButton { + visible: style & ConfirmationPopup.PopupStyle.OkButton + + buttonColor: Style.color.transparent + text: root.okButtonText + textStyle: Style.text.normal_accent + + onClicked: root.accept() + } + + GButton { + visible: style & ConfirmationPopup.PopupStyle.CancelButton + + buttonColor: Style.color.transparent + text: root.cancelButtonText + textStyle: Style.text.normal_accent + + onClicked: root.cancel() + } + } +} + diff --git a/resources/qml/Governikus/Global/+mobile/+android/GButton.qml b/resources/qml/Governikus/Global/+mobile/+android/GButton.qml index 9784afb..9609343 100644 --- a/resources/qml/Governikus/Global/+mobile/+android/GButton.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/GButton.qml @@ -1,8 +1,16 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 +import Governikus.Style 1.0 + import "Utils.js" as Utils +import Governikus.Style 1.0 + /* * Custom implementation to be replaced with template specialization of Qt.labs.controls Button * Android style guide for material design is adapted. @@ -10,25 +18,29 @@ import "Utils.js" as Utils Item { id: baseItem property alias text: textItem.text - property color buttonColor: Constants.blue + property var textStyle: enabled ? Style.text.button : Style.text.button_disabled + property color buttonColor: Style.color.accent property int maxWidth: 0 property alias iconSource: icon.source property bool animationsDisabled: false signal clicked - height: Constants.button_height - width: Math.max(textItem.implicitWidth + (icon.visible ? (icon.width + icon.anchors.leftMargin) : 0) + (2 * Utils.dp(16)), Utils.dp(88)) + Accessible.role: Accessible.Button + Accessible.name: text + + height: Style.dimens.button_height + width: Math.max(textItem.implicitWidth + (icon.visible ? (icon.width + icon.anchors.leftMargin) : 0) + 2 * 16, 88) state: "normal" states: [ State { name: "normal"; when: baseItem.animationsDisabled || !mouseArea.pressed PropertyChanges { target: darkLayer; width: 0 } - PropertyChanges { target: shadow; verticalOffset: Utils.dp(2) } + PropertyChanges { target: shadow; verticalOffset: 2 } }, State { name: "pressed"; when: !baseItem.animationsDisabled && mouseArea.pressed PropertyChanges { target: darkLayer; width: 2 * rect.width } - PropertyChanges { target: shadow; verticalOffset: Utils.dp(8) } + PropertyChanges { target: shadow; verticalOffset: 8 } } ] transitions: [ @@ -42,8 +54,8 @@ Item { Rectangle { id: rect anchors.fill: parent - color: enabled ? buttonColor : "#10000000" - radius: Utils.dp(3) + color: enabled ? buttonColor : Style.color.accent_disabled + radius: Style.dimens.button_radius Item { anchors.fill: parent @@ -52,9 +64,9 @@ Item { id: darkLayer x: mouseArea.containsMouse ? mouseArea.mouseX - width * 0.5 : 0 height: parent.height - color: "#000000" + color: Constants.black opacity: 0.2 - radius: Utils.dp(3) + radius: Style.dimens.button_radius } } } @@ -71,24 +83,26 @@ Item { Image { id: icon visible: source.toString().length > 0 - height: rect.height - Utils.dp(10) + height: rect.height - 10 width: height anchors.left: rect.left - anchors.leftMargin: Utils.dp(5) + anchors.leftMargin: 5 anchors.verticalCenter: rect.verticalCenter } - Text { + GText { id: textItem + anchors.left: rect.left anchors.right: rect.right anchors.verticalCenter: rect.verticalCenter anchors.leftMargin: icon.visible ? icon.width + icon.anchors.leftMargin : 0 + + Accessible.ignored: true + horizontalAlignment: Text.AlignHCenter - color: enabled ? "white" : "#40000000" font.capitalization: Font.AllUppercase - font.bold: true - font.pixelSize: Utils.dp(16) + textStyle: baseItem.textStyle } MouseArea { diff --git a/resources/qml/Governikus/Global/+mobile/+android/GCheckBox.qml b/resources/qml/Governikus/Global/+mobile/+android/GCheckBox.qml index c57af7b..2091990 100644 --- a/resources/qml/Governikus/Global/+mobile/+android/GCheckBox.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/GCheckBox.qml @@ -1,7 +1,12 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import "Utils.js" as Utils @@ -10,19 +15,19 @@ CheckBox { id: control indicator: Rectangle { - implicitHeight: Utils.dp(20) - implicitWidth: Utils.dp(20) + implicitHeight: 20 + implicitWidth: 20 anchors.centerIn: parent - color: control.checked ? Constants.accent_color : Constants.white - border.color: control.checked ? Constants.accent_color : Constants.black - border.width: Utils.dp(2) - radius: Utils.dp(2) + color: control.checked ? Style.color.accent : Style.color.accent_disabled + border.color: control.checked ? Style.color.accent : Constants.black + border.width: 2 + radius: 2 Image { source: "qrc:///images/check.svg" anchors.fill: parent - anchors.margins: Utils.dp(3) + anchors.margins: 3 fillMode: Image.PreserveAspectFit visible: control.checked } diff --git a/resources/qml/Governikus/Global/+mobile/+android/LabeledText.qml b/resources/qml/Governikus/Global/+mobile/+android/LabeledText.qml index b3317c2..cacdcaa 100644 --- a/resources/qml/Governikus/Global/+mobile/+android/LabeledText.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/LabeledText.qml @@ -1,39 +1,39 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import Governikus.Style 1.0 + Item { property alias label: labelText.text property alias text: bodyText.text property alias textFormat: bodyText.textFormat property int margin - property int fontUppercase signal linkActivated(string link) height: childrenRect.height + margin - Text { + GText { id: bodyText anchors.top: parent.top anchors.left: parent.left anchors.leftMargin: margin anchors.right: parent.right anchors.rightMargin: margin - font.pixelSize: Constants.normal_font_size - font.capitalization: fontUppercase - color: Constants.secondary_text - wrapMode: Text.WordWrap + textStyle: Style.text.normal onLinkActivated: parent.linkActivated(link) } - Text { + GText { id: labelText anchors.top: bodyText.bottom anchors.left: parent.left anchors.leftMargin: margin anchors.right: parent.right anchors.rightMargin: margin - font.pixelSize: Constants.label_font_size - color: Constants.blue - wrapMode: Text.WordWrap + textStyle: Style.text.hint_accent } } diff --git a/resources/qml/Governikus/Global/+mobile/+android/Pane.qml b/resources/qml/Governikus/Global/+mobile/+android/Pane.qml index 9fe7d08..6ec2b27 100644 --- a/resources/qml/Governikus/Global/+mobile/+android/Pane.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/Pane.qml @@ -1,6 +1,12 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 +import Governikus.Style 1.0 + Rectangle { id: root property alias title: titleText.text @@ -9,7 +15,7 @@ Rectangle { anchors.left: parent.left anchors.right: parent.right height: childrenRect.height - color: "white" + color: Style.color.background_pane radius: 16 Column { diff --git a/resources/qml/Governikus/ProviderView/+mobile/+android/SearchBar.qml b/resources/qml/Governikus/Global/+mobile/+android/SearchBar.qml similarity index 75% rename from resources/qml/Governikus/ProviderView/+mobile/+android/SearchBar.qml rename to resources/qml/Governikus/Global/+mobile/+android/SearchBar.qml index 4de7099..b097f53 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+android/SearchBar.qml +++ b/resources/qml/Governikus/Global/+mobile/+android/SearchBar.qml @@ -1,7 +1,12 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 Row { @@ -12,19 +17,21 @@ Row { readonly property alias searchText: searchField.displayText anchors.top: parent ? parent.top : undefined - anchors.topMargin: Constants.titlebar_padding + anchors.topMargin: Style.dimens.titlebar_padding anchors.right: parent ? parent.right : undefined anchors.bottom: parent ? parent.bottom : undefined - anchors.bottomMargin: Constants.titlebar_padding - spacing: Constants.titlebar_padding + anchors.bottomMargin: Style.dimens.titlebar_padding + spacing: Style.dimens.titlebar_padding GTextField { id: searchField height: parent.height - width: root.availableWidth - parent.spacing - iconItem.width - 2 * Constants.titlebar_padding + width: root.availableWidth - parent.spacing - iconItem.width - Style.dimens.titlebar_padding visible: false + enterKeyType: Qt.EnterKeySearch + onAccepted: { iconItem.forceActiveFocus(Qt.MouseFocusReason) } @@ -42,7 +49,7 @@ Row { height: parent.height width: height fillMode: Image.PreserveAspectFit - source: "qrc:///images/search.svg" + source: "qrc:///images/android/search_icon.svg" MouseArea { anchors.fill: parent @@ -56,7 +63,7 @@ Row { searchField.forceActiveFocus(Qt.MouseFocusReason) Qt.inputMethod.show() } else { - iconItem.source = "qrc:///images/search.svg" + iconItem.source = "qrc:///images/android/search_icon.svg" iconItem.forceActiveFocus(Qt.MouseFocusReason) searchField.text = "" Qt.inputMethod.hide() diff --git a/resources/qml/Governikus/Global/+mobile/+ios/+phone/DeviceConstants.qml b/resources/qml/Governikus/Global/+mobile/+ios/+phone/DeviceConstants.qml index 59348c1..7c0ed0a 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/+phone/DeviceConstants.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/+phone/DeviceConstants.qml @@ -1,9 +1,9 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import "Utils.js" as Utils - Item { - readonly property int history_section_height: Utils.dp(85) - readonly property bool is_tablet: false } diff --git a/resources/qml/Governikus/Global/+mobile/+ios/+phone/Pane.qml b/resources/qml/Governikus/Global/+mobile/+ios/+phone/Pane.qml index 091b234..09ebb79 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/+phone/Pane.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/+phone/Pane.qml @@ -1,43 +1,43 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import Governikus.Style 1.0 + import "Utils.js" as Utils Column { id: root property alias title: titleText.text - property alias spacing: paneContent.spacing + property alias contentSpacing: paneContent.spacing default property alias paneData: paneContent.data anchors.left: parent.left anchors.right: parent.right + spacing: Constants.groupbox_spacing + PaneTitle { id: titleText - height: Utils.dp(30) anchors.margins: Constants.pane_padding font.capitalization: Font.AllUppercase - color: Constants.grey } - Rectangle { width: parent.width; height: 1; color: Constants.grey} Rectangle { - color: "white" + color: Style.color.background_pane width: parent.width - height: childrenRect.height + height: paneContent.height + 2 * Constants.pane_padding + radius: Style.dimens.corner_radius Column { - width: parent.width - Item { width: parent.width; height: Constants.pane_padding } - Column { - id: paneContent - anchors.left: parent.left - anchors.leftMargin: Constants.pane_padding - anchors.right: parent.right - anchors.rightMargin: Constants.pane_padding - spacing: Constants.component_spacing - } - Item { width: parent.width; height: Constants.pane_padding } + id: paneContent + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: Constants.pane_padding + spacing: Constants.component_spacing } } - Rectangle { width: parent.width; height: 1; color: Constants.grey} } diff --git a/resources/qml/Governikus/Global/+mobile/+ios/+tablet/DeviceConstants.qml b/resources/qml/Governikus/Global/+mobile/+ios/+tablet/DeviceConstants.qml index 91e4b85..4afbd01 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/+tablet/DeviceConstants.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/+tablet/DeviceConstants.qml @@ -1,9 +1,9 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import "Utils.js" as Utils - Item { - readonly property int history_section_height: Utils.dp(60) - readonly property bool is_tablet: true } diff --git a/resources/qml/Governikus/Global/+mobile/+ios/+tablet/Pane.qml b/resources/qml/Governikus/Global/+mobile/+ios/+tablet/Pane.qml index 4919635..e848b11 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/+tablet/Pane.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/+tablet/Pane.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 +import Governikus.Style 1.0 Rectangle { id: root @@ -10,35 +15,30 @@ Rectangle { anchors.left: parent.left anchors.right: parent.right - height: childrenRect.height - color: "white" + height: content.implicitHeight + 2 * Constants.pane_padding + color: Style.color.background_pane + radius: Style.dimens.corner_radius Column { - anchors.left: parent.left - anchors.right: parent.right - anchors.leftMargin: Constants.pane_padding - anchors.rightMargin: Constants.pane_padding + id: content - Text { + anchors { + fill: parent + margins: Constants.pane_padding + } + + spacing: Constants.pane_padding + + PaneTitle { id: titleText height: implicitHeight * 2 verticalAlignment: Text.AlignVCenter } - Item { width: parent.width; height: Constants.pane_padding } + Column { id: paneContent width: parent.width spacing: Constants.pane_spacing } - Item { width: parent.width; height: Constants.pane_padding } - } - - layer.enabled: true - layer.effect: DropShadow { - radius: 8 - samples: 8 - source: root - color: Constants.grey - verticalOffset: 2 } } diff --git a/resources/qml/Governikus/Global/+mobile/+ios/BrandConstants.qml b/resources/qml/Governikus/Global/+mobile/+ios/BrandConstants.qml index 83e0a90..0aef4b2 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/BrandConstants.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/BrandConstants.qml @@ -1,24 +1,13 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import "Utils.js" as Utils - DeviceConstants { - readonly property color grey_light: "#8e8e93" - readonly property color blue_dark: "#0076ff" - readonly property color blue_light: "#54c7fc" - readonly property color accent_color: "#000000" - readonly property color secondary_text: "#000000" - readonly property int titlebar_font_size: Utils.dp(16) - readonly property int provider_section_height: Utils.dp(50) - readonly property int history_delegate_spacing: 0 - readonly property color history_delegate_address_color: "#00878F" - readonly property int button_height: Utils.dp(40) - readonly property bool is_layout_android: false readonly property bool is_layout_ios: true + readonly property string layout: "ios" readonly property bool leftNavigation: false readonly property bool bottomNavigation: true - - readonly property int searchbar_height: Utils.dp(48) - readonly property int tabbar_height: Utils.dp(48) } diff --git a/resources/qml/Governikus/Global/+mobile/+ios/ConfirmationPopup.qml b/resources/qml/Governikus/Global/+mobile/+ios/ConfirmationPopup.qml new file mode 100644 index 0000000..216ff28 --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/+ios/ConfirmationPopup.qml @@ -0,0 +1,65 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + + +BaseConfirmationPopup { + id: root + + horizontalTextAlignment: Text.AlignHCenter + + buttons: ColumnLayout { + width: parent.width + + spacing: 0 + + GSeparator { + Layout.fillWidth: true + visible: style !== ConfirmationPopup.PopupStyle.NoButtons + } + + RowLayout { + Layout.fillWidth: true + + spacing: 0 + + GButton { + visible: style & ConfirmationPopup.PopupStyle.CancelButton + + Layout.fillWidth: true + + buttonColor: Style.color.transparent + text: root.cancelButtonText + textStyle: Style.text.normal_accent + + onClicked: root.cancel() + } + + GSeparator { + visible: style & ConfirmationPopup.PopupStyle.CancelButton && style & ConfirmationPopup.PopupStyle.OkButton + Layout.fillHeight: true + orientation: Qt.Vertical + } + + GButton { + visible: style & ConfirmationPopup.PopupStyle.OkButton + + Layout.fillWidth: true + + buttonColor: Style.color.transparent + text: root.okButtonText + textStyle: Style.text.normal_accent + + onClicked: root.accept() + } + } + } +} + diff --git a/resources/qml/Governikus/Global/+mobile/+ios/GButton.qml b/resources/qml/Governikus/Global/+mobile/+ios/GButton.qml index c484da6..f231083 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/GButton.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/GButton.qml @@ -1,46 +1,60 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 import "Utils.js" as Utils +import Governikus.Style 1.0 + /* Custom implementation to be replaced with template specialization of Qt.labs.controls Button*/ Rectangle { id: rect property alias text: textItem.text - property color buttonColor : Constants.blue + property var textStyle: enabled ? Style.text.button : Style.text.button_disabled + property color buttonColor : Style.color.accent property int maxWidth: 0 - property int preferedWidth: Math.max(textItem.implicitWidth + (icon.visible ? (icon.width + icon.anchors.leftMargin) : 0) + (2 * Utils.dp(16)), Utils.dp(88)) + property int preferedWidth: Math.max(textItem.implicitWidth + (icon.visible ? (icon.width + icon.anchors.leftMargin) : 0) + (2 * 16), 88) property alias iconSource: icon.source property bool animationsDisabled: false signal clicked - color: enabled ? buttonColor : "#10000000" - height: Constants.button_height + Accessible.role: Accessible.Button + Accessible.name: text + Accessible.onPressAction: clicked() + + color: enabled ? buttonColor : Style.color.accent_disabled + height: Style.dimens.button_height width: maxWidth > 0 ? Math.min(maxWidth, preferedWidth) : preferedWidth clip: true + radius: Style.dimens.button_radius Image { id: icon visible: source.toString().length > 0 - height: rect.height - Utils.dp(10) + height: rect.height - 10 width: height anchors.left: rect.left - anchors.leftMargin: Utils.dp(5) + anchors.leftMargin: 5 anchors.verticalCenter: rect.verticalCenter } - Text { + GText { id: textItem + anchors.left: rect.left anchors.right: rect.right anchors.verticalCenter: rect.verticalCenter - color: enabled ? "white" : "#40000000" horizontalAlignment: Text.AlignHCenter + + Accessible.ignored: true + opacity: mouseArea.containsMouse ? 0.5 : 1 anchors.leftMargin: icon.visible ? icon.width + icon.anchors.leftMargin : 0 - font.pixelSize: Utils.dp(16) - font.bold: true + textStyle: rect.textStyle } MouseArea{ diff --git a/resources/qml/Governikus/Global/+mobile/+ios/GCheckBox.qml b/resources/qml/Governikus/Global/+mobile/+ios/GCheckBox.qml index c098ea7..c6ea829 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/GCheckBox.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/GCheckBox.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 @@ -9,19 +13,25 @@ import "Utils.js" as Utils CheckBox { id: control + Accessible.role: Accessible.CheckBox + Accessible.checkable: true + Accessible.checked: checked + Accessible.name: text + Accessible.onPressAction: toggle() + indicator: Rectangle { - implicitHeight: Utils.dp(26) - implicitWidth: Utils.dp(26) + implicitHeight: 26 + implicitWidth: 26 anchors.centerIn: parent color: Constants.white border.color: Constants.black - border.width: Utils.dp(1) + border.width: 1 Image { source: "qrc:///images/iOS/CheckedCheckbox.png" anchors.fill: parent - anchors.margins: Utils.dp(2) + anchors.margins: 2 fillMode: Image.PreserveAspectFit visible: control.checked } diff --git a/resources/qml/Governikus/Global/+mobile/+ios/LabeledText.qml b/resources/qml/Governikus/Global/+mobile/+ios/LabeledText.qml index a5e05f0..10094c5 100644 --- a/resources/qml/Governikus/Global/+mobile/+ios/LabeledText.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/LabeledText.qml @@ -1,40 +1,49 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import Governikus.Style 1.0 Item { property alias label: labelText.text property alias text: bodyText.text property alias textFormat: bodyText.textFormat property int margin - property int fontUppercase signal linkActivated(string link) height: childrenRect.height + margin - Text { + Accessible.role: Accessible.StaticText + Accessible.name: label + ": " + text + + GText { id: labelText + + Accessible.ignored: true + anchors.top: parent.top anchors.left: parent.left anchors.leftMargin: margin anchors.right: parent.right anchors.rightMargin: margin - font.pixelSize: Constants.normal_font_size - color: Constants.blue - wrapMode: Text.WordWrap + + textStyle: Style.text.normal_accent } - Text { + GText { id: bodyText - color: Constants.secondary_text + + Accessible.ignored: true + anchors.top: labelText.bottom anchors.left: parent.left anchors.leftMargin: margin anchors.right: parent.right anchors.rightMargin: margin - font.pixelSize: Constants.normal_font_size - font.capitalization: fontUppercase - wrapMode: Text.WordWrap + textStyle: Style.text.normal_secondary onLinkActivated: parent.linkActivated(link) } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+ios/SearchBar.qml b/resources/qml/Governikus/Global/+mobile/+ios/SearchBar.qml similarity index 61% rename from resources/qml/Governikus/ProviderView/+mobile/+ios/SearchBar.qml rename to resources/qml/Governikus/Global/+mobile/+ios/SearchBar.qml index 05a454a..ca34423 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+ios/SearchBar.qml +++ b/resources/qml/Governikus/Global/+mobile/+ios/SearchBar.qml @@ -1,20 +1,29 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 Item { readonly property alias searchText: searchField.text id: baseItem - height: Constants.searchbar_height + height: Style.dimens.searchbar_height + + Accessible.role: Accessible.EditableText + Accessible.description: qsTr("Enter search string") + SettingsModel.translationTrigger MouseArea { id: pageArea onClicked: pageArea.focus = true - height: Constants.searchbar_height + height: Style.dimens.searchbar_height width: parent.width anchors.bottom: parent.bottom @@ -23,31 +32,38 @@ Item { anchors.right: cancelButton.left anchors.top: parent.top anchors.bottom: parent.bottom - anchors.leftMargin: Utils.dp(8) - anchors.rightMargin: Utils.dp(10) - anchors.topMargin: Utils.dp(6) - anchors.bottomMargin: Utils.dp(8) - radius: Utils.dp(6) - color: "white" + anchors.leftMargin: 8 + anchors.rightMargin: 10 + anchors.topMargin: 6 + anchors.bottomMargin: 8 + radius: 6 + color: Constants.white Image { id: glassIcon height: parent.height - 2 * anchors.leftMargin width: height anchors.left: parent.left - anchors.leftMargin: Utils.dp(4) + anchors.leftMargin: 4 anchors.verticalCenter: parent.verticalCenter + sourceSize.width: width source: "qrc:///images/iOS/search_icon.svg" } TextField { id: searchField - anchors.margins: Utils.dp(8) + + anchors.margins: 8 anchors.verticalCenter: parent.verticalCenter anchors.left: glassIcon.right anchors.right: textEditX.left + + Accessible.role: Accessible.EditableText + Accessible.name: displayText + horizontalAlignment: Text.AlignLeft background: Item {} + EnterKey.type: Qt.EnterKeySearch onVisibleChanged: { if (visible === false){ @@ -58,49 +74,55 @@ Item { Label { id: searchLabel - anchors.left: searchField.left - anchors.leftMargin: Utils.dp(8) - anchors.verticalCenter: searchField.verticalCenter - text: qsTr("Search") + settingsModel.translationTrigger - color: Constants.grey - font.pixelSize: Constants.normal_font_size + visible: searchField.text.trim().length === 0 + anchors.left: searchField.left + anchors.leftMargin: 8 + anchors.verticalCenter: searchField.verticalCenter + + Accessible.ignored: true + + //: LABEL IOS + text: qsTr("Search") + SettingsModel.translationTrigger + color: Constants.grey + font.pixelSize: Style.dimens.normal_font_size } MouseArea { id: textEditX + + visible: searchField.text.length > 0 height: parent.height width: height anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - enabled: searchField.text.length > 0 - onClicked: { - searchField.text = "" - } + Accessible.role: Accessible.Button + Accessible.name: qsTr("Clear search string") + SettingsModel.translationTrigger + Accessible.onPressAction: textEditX.clicked(null) + Accessible.ignored: !visible + + onClicked: searchField.text = "" Image { - anchors.margins: Utils.dp(4) + anchors.margins: 4 anchors.fill: parent source: "qrc:///images/iOS/search_cancel.svg" - visible: parent.enabled } } } - DimmableTextButton { + GButton { id: cancelButton - anchors.right: parent.right - anchors.rightMargin: visible ? Utils.dp(8) : 0 - anchors.verticalCenter: parent.verticalCenter - clip: true visible: false - width: visible ? cancelButton.implicitWidth : 0 - font.family: "Helvetica" - font.pixelSize: Constants.normal_font_size - color: "white" - text: qsTr("Cancel") + settingsModel.translationTrigger + anchors.right: parent.right + anchors.rightMargin: visible ? 8 : 0 + anchors.verticalCenter: parent.verticalCenter + + width: visible ? preferedWidth : 0 + //: LABEL IOS + text: qsTr("Cancel") + SettingsModel.translationTrigger onClicked: { searchField.text = "" pageArea.clicked(null) diff --git a/resources/qml/Governikus/Global/+mobile/ConfirmationPopup.qml b/resources/qml/Governikus/Global/+mobile/ConfirmationPopup.qml deleted file mode 100644 index fb9369a..0000000 --- a/resources/qml/Governikus/Global/+mobile/ConfirmationPopup.qml +++ /dev/null @@ -1,87 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 - -Popup { - id: popupObject - signal confirmed - - property var baseItem: Item { } - x: (baseItem.width - width) / 2 - y: (baseItem.height - height) / 2 - - property alias title: header.text - property alias text: info.text - property alias confirmText: textItemDelete.text - - modal: true - focus: true - closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape - width: Utils.dp(250) - height: popupColumn.height - - Column { - id: popupColumn - width: parent.width - spacing: Constants.pane_spacing - padding: Constants.pane_padding - - Text { - id: header - color: Constants.secondary_text - font.pixelSize: Constants.header_font_size - font.bold: true - } - - Text { - id: info - color: Constants.secondary_text - width: parent.width - 2 * Constants.pane_padding - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - } - - Row { - id: buttonBox - anchors.right: parent.right - anchors.rightMargin: Constants.pane_padding - spacing: Constants.pane_spacing - - MouseArea { - height: textItemCancel.height + 2 * Utils.dp(10) - width: textItemCancel.width + 2 * Utils.dp(10) - - Text { - id: textItemCancel - anchors.centerIn: parent - text: qsTr("Cancel") + settingsModel.translationTrigger - color: Constants.blue - font.pixelSize: Constants.titlebar_font_size - } - - onClicked: { - popupObject.close() - } - } - - MouseArea { - height: textItemDelete.height + 2 * Utils.dp(10) - width: textItemDelete.width + 2 * Utils.dp(10) - - Text { - id: textItemDelete - anchors.centerIn: parent - color: Constants.blue - font.pixelSize: Constants.titlebar_font_size - } - - onClicked: { - popupObject.confirmed() - popupObject.close() - } - } - } - } -} - diff --git a/resources/qml/Governikus/Global/+mobile/GComboBox.qml b/resources/qml/Governikus/Global/+mobile/GComboBox.qml index bfb3fd6..688560a 100644 --- a/resources/qml/Governikus/Global/+mobile/GComboBox.qml +++ b/resources/qml/Governikus/Global/+mobile/GComboBox.qml @@ -1,28 +1,33 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import "Utils.js" as Utils +import Governikus.Style 1.0 + ComboBox { id: control - spacing: Constants.groupbox_spacing - font.pixelSize: Constants.normal_font_size - QtObject { - id: d - readonly property var mainColor: Constants.black - readonly property var pressedColor: Constants.black - } + property var textStyle: Style.text.normal + + Accessible.role: Accessible.ComboBox + Accessible.name: displayText + + spacing: Constants.groupbox_spacing + font.pixelSize: textStyle.fontSize onPressedChanged: canvas.requestPaint() Component.onCompleted: canvas.requestPaint() delegate: ItemDelegate { width: control.width - contentItem: Text { + contentItem: GText { text: modelData - color: d.mainColor - font: control.font + textStyle: control.textStyle elide: Text.ElideRight verticalAlignment: Text.AlignVCenter } @@ -33,8 +38,8 @@ ComboBox { id: canvas x: control.width - width - control.rightPadding y: control.topPadding + (control.availableHeight - height) / 2 - width: Utils.dp(12) - height: Utils.dp(8) + width: 12 + height: 8 contextType: "2d" onPaint: { @@ -43,33 +48,32 @@ ComboBox { context.lineTo(width, 0); context.lineTo(width / 2, height); context.closePath(); - context.fillStyle = control.pressed ? d.pressedColor : d.mainColor; + context.fillStyle = Constants.black context.fill(); } } - contentItem: Text { + contentItem: GText { padding: control.spacing rightPadding: control.indicator.width + control.spacing text: control.displayText - font: control.font - color: control.pressed ? d.pressedColor : d.mainColor + textStyle: control.textStyle verticalAlignment: Text.AlignVCenter elide: Text.ElideRight } background: Rectangle { - border.color: control.pressed ? d.pressedColor : d.mainColor - border.width: control.visualFocus ? Utils.dp(2) : Utils.dp(1) - radius: Utils.dp(2) + border.color: Constants.black + border.width: control.visualFocus ? 2 : 1 + radius: 2 } popup: Popup { y: control.height - 1 width: control.width implicitHeight: contentItem.implicitHeight - padding: Utils.dp(1) + padding: 1 contentItem: ListView { clip: true @@ -81,8 +85,8 @@ ComboBox { } background: Rectangle { - border.color: d.mainColor - radius: Utils.dp(2) + border.color: Constants.black + radius: 2 } } } diff --git a/resources/qml/Governikus/Global/+mobile/GFlickable.qml b/resources/qml/Governikus/Global/+mobile/GFlickable.qml new file mode 100644 index 0000000..d5f3570 --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/GFlickable.qml @@ -0,0 +1,51 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.10 + +import Governikus.Style 1.0 + +Flickable { + id: baseItem + + property bool scrollBarEnabled: true + property real scrollBarTopPadding: 0 + property real scrollBarBottomPadding: 0 + + function scrollPageDown() { + if (contentHeight > height) { + Utils.scrollPageDown(baseItem) + } + } + + function scrollPageUp() { + if (contentHeight > height) { + Utils.scrollPageUp(baseItem) + } + } + + function highlightScrollbar() { + if (ScrollBar.vertical) ScrollBar.vertical.highlight() + } + + ScrollBar.vertical: scrollBarEnabled ? scrollBar.createObject() : null + + maximumFlickVelocity: Constants.scrolling_speed + flickableDirection: Flickable.VerticalFlick + + boundsMovement: Flickable.FollowBoundsBehavior + boundsBehavior: contentHeight <= height ? Flickable.StopAtBounds : Flickable.DragAndOvershootBounds + + onVisibleChanged: if (visible) highlightScrollbar() + + Component { + id: scrollBar + GScrollBar { + topPadding: baseItem.scrollBarTopPadding + Style.dimens.scrollbar_padding + bottomPadding: baseItem.scrollBarBottomPadding + Style.dimens.scrollbar_padding + } + } +} diff --git a/resources/qml/Governikus/Global/+mobile/GGridView.qml b/resources/qml/Governikus/Global/+mobile/GGridView.qml new file mode 100644 index 0000000..991edb5 --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/GGridView.qml @@ -0,0 +1,51 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.10 + +import Governikus.Style 1.0 + +GridView { + id: baseItem + + property bool scrollBarEnabled: true + property real scrollBarTopPadding: 0 + property real scrollBarBottomPadding: 0 + + function scrollPageDown() { + if (contentHeight > height) { + Utils.scrollPageDown(baseItem) + } + } + + function scrollPageUp() { + if (contentHeight > height) { + Utils.scrollPageUp(baseItem) + } + } + + function highlightScrollbar() { + if (ScrollBar.vertical) ScrollBar.vertical.highlight() + } + + ScrollBar.vertical: scrollBarEnabled ? scrollBar.createObject() : null + + maximumFlickVelocity: Constants.scrolling_speed + flickableDirection: Flickable.VerticalFlick + + boundsMovement: Flickable.FollowBoundsBehavior + boundsBehavior: contentHeight <= height ? Flickable.StopAtBounds : Flickable.DragAndOvershootBounds + + onVisibleChanged: if (visible) highlightScrollbar() + + Component { + id: scrollBar + GScrollBar { + topPadding: baseItem.scrollBarTopPadding + Style.dimens.scrollbar_padding + bottomPadding: baseItem.scrollBarBottomPadding + Style.dimens.scrollbar_padding + } + } +} diff --git a/resources/qml/Governikus/Global/+mobile/GListView.qml b/resources/qml/Governikus/Global/+mobile/GListView.qml new file mode 100644 index 0000000..ca063fd --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/GListView.qml @@ -0,0 +1,51 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.10 + +import Governikus.Style 1.0 + +ListView { + id: baseItem + + property bool scrollBarEnabled: true + property real scrollBarTopPadding: 0 + property real scrollBarBottomPadding: 0 + + function scrollPageDown() { + if (contentHeight > height) { + Utils.scrollPageDown(baseItem) + } + } + + function scrollPageUp() { + if (contentHeight > height) { + Utils.scrollPageUp(baseItem) + } + } + + function highlightScrollbar() { + if (ScrollBar.vertical) ScrollBar.vertical.highlight() + } + + ScrollBar.vertical: scrollBarEnabled ? scrollBar.createObject() : null + + maximumFlickVelocity: Constants.scrolling_speed + flickableDirection: Flickable.VerticalFlick + + boundsMovement: Flickable.FollowBoundsBehavior + boundsBehavior: contentHeight <= height ? Flickable.StopAtBounds : Flickable.DragAndOvershootBounds + + onVisibleChanged: if (visible) highlightScrollbar() + + Component { + id: scrollBar + GScrollBar { + topPadding: baseItem.scrollBarTopPadding + Style.dimens.scrollbar_padding + bottomPadding: baseItem.scrollBarBottomPadding + Style.dimens.scrollbar_padding + } + } +} diff --git a/resources/qml/Governikus/Global/+mobile/GRadioButton.qml b/resources/qml/Governikus/Global/+mobile/GRadioButton.qml index f806df0..0d20557 100644 --- a/resources/qml/Governikus/Global/+mobile/GRadioButton.qml +++ b/resources/qml/Governikus/Global/+mobile/GRadioButton.qml @@ -1,14 +1,25 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import "Utils.js" as Utils +import Governikus.Style 1.0 + RadioButton { id: control + + property var textStyle: Style.text.normal + + Accessible.name: text + spacing: Constants.groupbox_spacing indicator: Rectangle { - implicitWidth: Utils.dp(26) + implicitWidth: 26 implicitHeight: implicitWidth x: control.leftPadding y: parent.height / 2 - height / 2 @@ -16,7 +27,7 @@ RadioButton { border.color: Qt.darker(Constants.blue, control.down ? 1.5 : 1) Rectangle { - width: Utils.dp(14) + width: 14 height: width x: (parent.width - width) / 2 y: x @@ -26,10 +37,11 @@ RadioButton { } } - contentItem: Text { + contentItem: GText { + Accessible.ignored: true + text: control.text - font.pixelSize: Constants.label_font_size - color: Constants.secondary_text + textStyle: control.textStyle verticalAlignment: Text.AlignVCenter leftPadding: control.indicator.width + control.spacing } diff --git a/resources/qml/Governikus/Global/+mobile/GScrollBar.qml b/resources/qml/Governikus/Global/+mobile/GScrollBar.qml new file mode 100644 index 0000000..e9ab49d --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/GScrollBar.qml @@ -0,0 +1,45 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Style 1.0 + +ScrollBar { + id: baseItem + + function highlight() { + highlighted = true + highlightTimer.restart() + } + + property bool highlighted: false + + // Using only ScrollBar.AsNeeded leads to the scrollbar becoming visible when highlighted + policy: size < 1.0 ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff + minimumSize: Style.dimens.minimumScrollBarSize + + contentItem: Rectangle { + implicitWidth: 3 + implicitHeight: 100 + radius: width / 2 + color: baseItem.pressed ? Style.color.accent : Constants.grey + opacity: (active || highlighted) ? 1.0 : 0.0 + + Behavior on opacity { + NumberAnimation { + duration: Constants.animation_duration + easing.type: Easing.InOutCubic + } + } + } + + onPolicyChanged: if (policy == ScrollBar.AlwaysOn) highlight() + + Timer { + id: highlightTimer + onTriggered: baseItem.highlighted = false + } +} diff --git a/resources/qml/Governikus/Global/+mobile/GSwitch.qml b/resources/qml/Governikus/Global/+mobile/GSwitch.qml index 2f0c793..4253010 100644 --- a/resources/qml/Governikus/Global/+mobile/GSwitch.qml +++ b/resources/qml/Governikus/Global/+mobile/GSwitch.qml @@ -1,17 +1,30 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import "Utils.js" as Utils +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + MouseArea { id: baseItem property bool initialState: false - property color color: Constants.blue + property color color: Style.color.accent readonly property alias isOn: toggleswitch.isOn signal switched() - width: Utils.dp(60) - height: Utils.dp(48) + width: 60 + height: 48 + + Accessible.role: Accessible.CheckBox + Accessible.name: qsTr("Switch") + SettingsModel.translationTrigger + Accessible.checkable: true + Accessible.checked: isOn + Accessible.onPressAction: if (Qt.platform.os === "ios") clicked(null) onClicked: toggleswitch.toggle() Component.onCompleted: toggleswitch.isOn = baseItem.initialState @@ -19,8 +32,8 @@ MouseArea { Item { id: toggleswitch anchors.fill: parent - anchors.topMargin: Utils.dp(12) - anchors.bottomMargin: Utils.dp(12) + anchors.topMargin: 12 + anchors.bottomMargin: 12 onIsOnChanged: updateState() property bool isOn: false @@ -49,7 +62,7 @@ MouseArea { anchors.fill: parent anchors.margins: parent.height / 4 radius: height / 2 - color: isOn ? Qt.lighter(baseItem.color, 1.55) : "lightgray" + color: isOn ? Qt.lighter(baseItem.color, 1.4) : Qt.darker(Style.color.accent_disabled, 1.1) } Rectangle { @@ -57,7 +70,7 @@ MouseArea { height: parent.height width: height radius: width - color: isOn ? baseItem.color : "darkgray" + color: isOn ? baseItem.color : Style.color.accent_disabled MouseArea { anchors.fill: parent diff --git a/resources/qml/Governikus/Global/+mobile/GTextField.qml b/resources/qml/Governikus/Global/+mobile/GTextField.qml index eb90814..214d06a 100644 --- a/resources/qml/Governikus/Global/+mobile/GTextField.qml +++ b/resources/qml/Governikus/Global/+mobile/GTextField.qml @@ -1,36 +1,48 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 +import Governikus.Style 1.0 + import "Utils.js" as Utils Item { property alias text: field.text property alias displayText: field.displayText property alias echoMode: field.echoMode + property int enterKeyType: Qt.EnterKeyDefault signal accepted property bool valid: true - height: Utils.dp(24) - width: Utils.dp(240) + height: 24 + width: 240 + + Accessible.role: Accessible.EditableText + Accessible.editable: true + Accessible.name: echoMode === TextInput.Normal ? displayText : "" Rectangle { - radius: Utils.dp(6) + radius: 6 anchors.fill: parent border.color: Constants.red - color: enabled ? "white" : Constants.grey - border.width: valid ? 0 : Utils.dp(2) + color: enabled ? Constants.white : Constants.grey + border.width: valid ? 0 : 2 } TextField { id: field anchors.fill: parent - anchors.leftMargin: Utils.dp(6) - anchors.rightMargin: Utils.dp(6) + anchors.leftMargin: 6 + anchors.rightMargin: 6 padding: 0 - font.pixelSize: Constants.normal_font_size + font.pixelSize: Style.dimens.normal_font_size onAccepted: parent.accepted() background: Item {} + EnterKey.type: enterKeyType } onActiveFocusChanged: if (focus) field.forceActiveFocus() diff --git a/resources/qml/Governikus/Global/+mobile/ListItem.qml b/resources/qml/Governikus/Global/+mobile/ListItem.qml new file mode 100644 index 0000000..6b6609f --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/ListItem.qml @@ -0,0 +1,139 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 +import QtGraphicalEffects 1.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + +Rectangle { + id: baseItem + + property alias icon: imageItem.source + property alias headerText: headerItem.text + property alias text: textItem.text + property alias footerText: footerItem.text + + property real contentMarginLeft: Constants.groupbox_spacing + property real contentMarginRight: Constants.groupbox_spacing + + property bool showRightArrow: Constants.is_layout_ios + property bool showSeparator: true + property bool pressed: mouseArea.pressed + property alias mouseAreaEnabled: mouseArea.enabled + + signal clicked + + width: parent.width + height: Style.dimens.list_item_height + + Accessible.role: Accessible.ListItem + Accessible.name: headerText + ". " + text + ". " + footerText + Accessible.onPressAction: if (Qt.platform.os === "ios") mouseArea.clicked(null) + + color: pressed ? Constants.lightgrey : Style.color.background_pane + + GSeparator { + visible: showSeparator + + width: Constants.is_layout_ios ? (parent.width - textLayout.x - contentMarginLeft) : parent.width + anchors.top: parent.bottom + anchors.topMargin: -height + anchors.right: parent.right + } + + RowLayout { + id: content + + anchors.fill: parent + anchors.leftMargin: contentMarginLeft + anchors.rightMargin: contentMarginRight + + spacing: Constants.groupbox_spacing + + Image { + id: imageItem + + visible: baseItem.icon !== "" + sourceSize.height: parent.height - 2 * Constants.groupbox_spacing + + asynchronous: true + fillMode: Image.PreserveAspectFit + } + + ColumnLayout { + id: textLayout + + Layout.fillWidth: true + + spacing: 0 + + GText { + id: headerItem + + visible: baseItem.headerText !== "" + Layout.fillWidth: true + + Accessible.ignored: true + + elide: Text.ElideRight + textStyle: Style.text.hint_accent + maximumLineCount: 1 + } + + GText { + id: textItem + + visible: baseItem.text !== "" + Layout.fillWidth: true + + Accessible.ignored: true + + elide: Text.ElideRight + textStyle: Style.text.normal + maximumLineCount: 2 + } + + GText { + id: footerItem + + visible: baseItem.footerText !== "" + Layout.fillWidth: true + + Accessible.ignored: true + + elide: Text.ElideRight + textStyle: Style.text.hint_secondary + maximumLineCount: 1 + } + } + + Image { + id: arrowRight + + visible: showRightArrow + + sourceSize.height: Style.dimens.small_icon_size + fillMode: Image.PreserveAspectFit + source: "qrc:///images/arrowRight.svg" + + ColorOverlay { + anchors.fill: arrowRight + source: arrowRight + color: Style.color.secondary_text + } + } + } + + MouseArea { + id: mouseArea + + anchors.fill: parent + + onClicked: baseItem.clicked() + } +} diff --git a/resources/qml/Governikus/Global/+mobile/LocationButton.qml b/resources/qml/Governikus/Global/+mobile/LocationButton.qml index ff9806f..9170375 100644 --- a/resources/qml/Governikus/Global/+mobile/LocationButton.qml +++ b/resources/qml/Governikus/Global/+mobile/LocationButton.qml @@ -1,48 +1,64 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + import "Utils.js" as Utils + MouseArea { property string language property string name property string image - height: Utils.dp(35) - width: height - - onClicked: { - settingsModel.language = language + function setLanguage() { + SettingsModel.language = language if (typeof(navigationController) !== "undefined") { navigationController.close() } } + height: 48 + width: height + + Accessible.role: Accessible.Button + Accessible.onPressAction: if (Qt.platform.os === "ios") clicked(null) + onClicked: setLanguage() + Rectangle { opacity: 0.1 border.color: "black" - border.width: settingsModel.language === language ? 0 : Utils.dp(1) - color: settingsModel.language === language ? "black" : Constants.background_color + border.width: SettingsModel.language === language ? 0 : 1 + color: SettingsModel.language === language ? Constants.black : Style.color.accent anchors.fill: parent - radius: Utils.dp(3) + radius: Style.dimens.button_radius } - Text { - text: name - color: Constants.secondary_text + GText { + id: nameText - anchors.margins: Utils.dp(2) + anchors.topMargin: 4 anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Constants.small_font_size + + Accessible.ignored: true + + text: name + textStyle: Style.text.hint_secondary } Image { source: image fillMode: Image.PreserveAspectFit - anchors.margins: Utils.dp(4) + anchors.margins: 4 anchors.left: parent.left anchors.bottom: parent.bottom anchors.right: parent.right + anchors.top: nameText.bottom } } diff --git a/resources/qml/Governikus/Global/+mobile/PaneTitle.qml b/resources/qml/Governikus/Global/+mobile/PaneTitle.qml new file mode 100644 index 0000000..35e3278 --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/PaneTitle.qml @@ -0,0 +1,19 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Style 1.0 + +GText { + visible: text !== "" + anchors.left: parent.left + anchors.right: parent.right + + Accessible.role: Accessible.TitleBar + Accessible.name: text + + textStyle: Style.text.header_accent + elide: Text.ElideRight +} diff --git a/resources/qml/Governikus/Global/+mobile/PlatformConstants.qml b/resources/qml/Governikus/Global/+mobile/PlatformConstants.qml index 56c6f8b..2ef23f8 100644 --- a/resources/qml/Governikus/Global/+mobile/PlatformConstants.qml +++ b/resources/qml/Governikus/Global/+mobile/PlatformConstants.qml @@ -1,49 +1,16 @@ -import QtQuick 2.10 -import QtQuick.Window 2.2 +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ -import "Utils.js" as Utils +import QtQuick 2.10 BrandConstants { readonly property color blue: "#659bcd" - readonly property color background_color: "#dcebf6" - readonly property color grey_border: "lightslategrey" - readonly property color tutorial_orange: "#f9a501" - readonly property color tutorial_green: "#73d7b3" - readonly property color tutorial_blue: "#659bcd" - readonly property color tutorial_red: "#fb7a59" - readonly property color tutorial_very_light_grey: "#f2f2f2" - - readonly property int header_font_size: thresholdReduce(22) - readonly property int pane_title_font_size: header_font_size - readonly property int normal_font_size: thresholdReduce(16) - readonly property int label_font_size: Utils.dp(14) - readonly property int small_font_size: Utils.dp(12) - - readonly property int tutorial_component_spacing: Utils.dp(40) - readonly property int tutorial_header_font_size: Utils.dp(60) - readonly property int tutorial_content_header_h1_font_size: Utils.dp(26) - readonly property int tutorial_content_header_h2_font_size: Utils.dp(20) - readonly property int tutorial_content_font_size: Utils.dp(16) - - readonly property int menubar_width: Utils.dp(60) - - readonly property int titlebar_height: Utils.dp(48) - readonly property int titlebar_padding: Utils.dp(12) - readonly property int titlebar_spacing: Utils.dp(18) - - readonly property int component_spacing: Utils.dp(20) - readonly property int pane_padding: Utils.dp(20) - readonly property int pane_spacing: Utils.dp(20) - readonly property int groupbox_spacing: Utils.dp(10) + readonly property int component_spacing: 20 + readonly property int pane_padding: 20 + readonly property int pane_spacing: 20 + readonly property int groupbox_spacing: 10 readonly property bool is_desktop: false - - function thresholdReduce(value) { - var w = Screen.width - if (w > 415) { - return Utils.dp(value) - } - return Utils.dp(value * w / 415) - } } diff --git a/resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml b/resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml new file mode 100644 index 0000000..927e70d --- /dev/null +++ b/resources/qml/Governikus/Global/+mobile/SwipeActionDelegate.qml @@ -0,0 +1,110 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +Rectangle { + id: baseItem + + property alias contentItem: content.children + property alias pressed: mouseArea.downOnContent + property alias actionColor: baseItem.color + property alias actionIcon: actionImage.source + property string actionAccessibleName + + signal clicked + signal actionClicked + + height: content.childrenRect.height + width: parent.width + + Image { + Accessible.role: Accessible.Button + Accessible.name: actionAccessibleName + Accessible.onPressAction: baseItem.actionClicked() + + id: actionImage + anchors { + top: parent.top + bottom: parent.bottom + right: parent.right + margins: 20 + } + width: Math.abs(mouseArea.actionOpenOffset) - anchors.margins * 2 + fillMode: Image.PreserveAspectFit + } + + Item { + id: content + + width: parent.width + height: parent.height + + Behavior on x { + NumberAnimation { + duration: Constants.animation_duration + onRunningChanged: { + if (!running && content.x <= -content.width) { + baseItem.actionClicked() + } + } + } + } + } + + MouseArea { + id: mouseArea + + readonly property real actionOpenOffset: -parent.width / 4 + readonly property bool isActionOpen: contentX === actionOpenOffset + + readonly property bool downOnContent: pressed && startX < contentStartX + content.width + readonly property bool downOnAction: pressed && !downOnContent + readonly property bool deleteOffsetReached: contentX < 2 * actionOpenOffset + property bool didDrag: false + + property real startX: 0.0 + property alias contentX: content.x + property real contentStartX: 0.0 + + anchors.fill: parent + + drag { + target: content + axis: Drag.XAxis + maximumX: 0 + minimumX: -content.width + filterChildren: true + threshold: 10 + onActiveChanged: didDrag = true + } + + onPressed: { + startX = mouse.x + contentStartX = content.x + didDrag = false + } + + onReleased: { + if (didDrag) { + if (contentX > actionOpenOffset / 2) { + contentX = 0 + } else if (deleteOffsetReached) { + contentX = drag.minimumX + } else { + contentX = actionOpenOffset + } + } else if (downOnContent) { + if (isActionOpen) { + contentX = 0 + } else { + baseItem.clicked() + } + } else if (downOnAction) { + baseItem.actionClicked() + } + } + } +} diff --git a/resources/qml/Governikus/Global/BaseConfirmationPopup.qml b/resources/qml/Governikus/Global/BaseConfirmationPopup.qml new file mode 100644 index 0000000..9d80daa --- /dev/null +++ b/resources/qml/Governikus/Global/BaseConfirmationPopup.qml @@ -0,0 +1,124 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +Popup { + id: root + + enum PopupStyle { + NoButtons = 0, + OkButton = 1, + CancelButton = 2 + } + + property alias buttons: buttonContainer.children + default property alias children: customContent.children + property string title + property string text + //: LABEL ALL_PLATFORMS + property string okButtonText: qsTr("Ok") + SettingsModel.translationTrigger + //: LABEL ALL_PLATFORMS + property string cancelButtonText: qsTr("Cancel") + SettingsModel.translationTrigger + property int style: ConfirmationPopup.PopupStyle.OkButton | ConfirmationPopup.PopupStyle.CancelButton + property var horizontalTextAlignment: Text.AlignLeft + + signal confirmed + signal cancelled + + function accept(){ + root.confirmed() + if (root.closePolicy !== Popup.NoAutoClose) { + root.close() + } + } + + function cancel() { + root.cancelled() + if (root.closePolicy !== Popup.NoAutoClose) { + root.close() + } + } + + anchors.centerIn: Overlay.overlay + margins: Constants.pane_padding + padding: 0 + topPadding: Constants.pane_padding + + modal: true + closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape + + background: Rectangle { + color: Style.color.background_popup + radius: Style.dimens.corner_radius_popup + } + + ColumnLayout { + id: contentLayout + + width: root.availableWidth + spacing: Constants.pane_padding + + GText { + visible: text !== "" + Layout.fillWidth: true + Layout.rightMargin: Constants.pane_padding + Layout.leftMargin: Constants.pane_padding + + activeFocusOnTab: true + + text: root.title + textStyle: Style.text.header + font.bold: true + horizontalAlignment: root.horizontalTextAlignment + + FocusFrame { + dynamic: false + } + } + + GText { + visible: text !== "" + Layout.fillWidth: true + Layout.rightMargin: Constants.pane_padding + Layout.leftMargin: Constants.pane_padding + + activeFocusOnTab: true + + text: root.text + textStyle: Style.text.normal + horizontalAlignment: root.horizontalTextAlignment + + FocusFrame { + dynamic: false + } + } + + Column { + id: customContent + visible: children.length > 0 + + Layout.fillWidth: true + Layout.rightMargin: Constants.pane_padding + Layout.leftMargin: Constants.pane_padding + } + + Item { + id: buttonContainer + + Layout.fillWidth: true + height: childrenRect.height + } + } +} + diff --git a/resources/qml/Governikus/Global/Constants.qml b/resources/qml/Governikus/Global/Constants.qml index 2b89145..a1f7982 100644 --- a/resources/qml/Governikus/Global/Constants.qml +++ b/resources/qml/Governikus/Global/Constants.qml @@ -1,9 +1,11 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + pragma Singleton import QtQuick 2.10 -import Governikus.Type.ApplicationModel 1.0 - PlatformConstants { readonly property color green: "#a3cb7f" readonly property color red: "#cc0000" @@ -13,4 +15,6 @@ PlatformConstants { readonly property color black: "#000000" readonly property double scrolling_speed: 7500.0 + + readonly property int animation_duration: 250 } diff --git a/resources/qml/Governikus/Global/GSeparator.qml b/resources/qml/Governikus/Global/GSeparator.qml new file mode 100644 index 0000000..41306b8 --- /dev/null +++ b/resources/qml/Governikus/Global/GSeparator.qml @@ -0,0 +1,16 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Style 1.0 + +Rectangle { + property int orientation: Qt.Horizontal // Qt.Vertical + + height: orientation === Qt.Horizontal ? Style.dimens.separator_size : undefined + width: orientation === Qt.Vertical ? Style.dimens.separator_size : undefined + + color: Style.color.border +} diff --git a/resources/qml/Governikus/Global/GText.qml b/resources/qml/Governikus/Global/GText.qml new file mode 100644 index 0000000..ab63e0b --- /dev/null +++ b/resources/qml/Governikus/Global/GText.qml @@ -0,0 +1,31 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import Governikus.Style 1.0 + +Text { + property TextStyle textStyle: Style.text.normal + + Accessible.role: Accessible.StaticText + Accessible.name: text + + color: textStyle.textColor + font.pixelSize: textStyle.textSize + + wrapMode: Text.Wrap + + onTextStyleChanged: { + if (textStyle.textFamily !== "") { + font.family = textStyle.textFamily + } + } + + MouseArea { + anchors.fill: parent + + acceptedButtons: Qt.NoButton + cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + } +} diff --git a/resources/qml/Governikus/Global/PaneTitle.qml b/resources/qml/Governikus/Global/PaneTitle.qml deleted file mode 100644 index 4087927..0000000 --- a/resources/qml/Governikus/Global/PaneTitle.qml +++ /dev/null @@ -1,11 +0,0 @@ -import QtQuick 2.10 - - -Text { - anchors.left: parent.left - anchors.right: parent.right - visible: text !== "" - font.pixelSize: Constants.pane_title_font_size - color: Constants.blue - elide: Text.ElideRight -} diff --git a/resources/qml/Governikus/Global/StatusIcon.qml b/resources/qml/Governikus/Global/StatusIcon.qml index c8878b7..0254ec1 100644 --- a/resources/qml/Governikus/Global/StatusIcon.qml +++ b/resources/qml/Governikus/Global/StatusIcon.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 @@ -8,13 +12,12 @@ Rectangle { property alias busy: busyIndicator.visible property alias source: image.source property alias text: text.text - property alias font: text.font width: height radius: height / 2 border.width: height / 40; border.color: Constants.white - color: "transparent" + color: Style.color.transparent BusyIndicator { id: busyIndicator @@ -39,12 +42,10 @@ Rectangle { visible: source.toString().length > 0 } - Text { + GText { id: text anchors.centerIn: parent - color: Constants.blue - font.bold: true - font.pixelSize: Constants.header_font_size + textStyle: Style.text.title_accent visible: text !== "" } } diff --git a/resources/qml/Governikus/Global/Utils.js b/resources/qml/Governikus/Global/Utils.js index f161cac..40b5c7b 100644 --- a/resources/qml/Governikus/Global/Utils.js +++ b/resources/qml/Governikus/Global/Utils.js @@ -1,8 +1,3 @@ -function noTest() -{ - return typeof(plugin) !== 'undefined' -} - function escapeHtml(str) { return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); @@ -41,15 +36,30 @@ function getRandomInt(min, max) return Math.floor(Math.random() * (max - min)) + min; } -var contentScaleFactor = noTest() ? screenDpiScale : 1 - -function dp(value) -{ - return value * contentScaleFactor -} - function providerIconSource(baseName) { var platform = plugin.platformStyle.indexOf("tablet") !== -1 ? "+tablet/" : "" return "qrc:///images/provider/" + platform + baseName + ".png" } + +function scrollPageDown(pFlickable) { + if (pFlickable.height >= pFlickable.contentHeight) { + return + } + + pFlickable.contentY += pFlickable.height + if (pFlickable.contentY + pFlickable.height > pFlickable.contentHeight) { + pFlickable.contentY = pFlickable.contentHeight - pFlickable.height + } +} + +function scrollPageUp(pFlickable) { + if (pFlickable.height >= pFlickable.contentHeight) { + return + } + + pFlickable.contentY -= pFlickable.height + if (pFlickable.contentY < 0) { + pFlickable.contentY = 0 + } +} diff --git a/resources/qml/Governikus/Global/qmldir b/resources/qml/Governikus/Global/qmldir index 5f9b951..b3fb4e2 100644 --- a/resources/qml/Governikus/Global/qmldir +++ b/resources/qml/Governikus/Global/qmldir @@ -1,6 +1,7 @@ module Global singleton Constants 1.0 Constants.qml +internal BaseConfirmationPopup BaseConfirmationPopup.qml internal PlatformConstants PlatformConstants.qml internal BrandConstants BrandConstants.qml internal DeviceConstants DeviceConstants.qml @@ -9,16 +10,32 @@ Utils 1.0 Utils.js Category 1.0 Category.js ConfirmationPopup 1.0 ConfirmationPopup.qml -ContinueButton 1.0 ContinueButton.qml GButton 1.0 GButton.qml GCheckBox 1.0 GCheckBox.qml GComboBox 1.0 GComboBox.qml GRadioButton 1.0 GRadioButton.qml +GSeparator 1.0 GSeparator.qml GSwitch 1.0 GSwitch.qml GText 1.0 GText.qml GTextField 1.0 GTextField.qml +GFlickable 1.0 GFlickable.qml +GGridView 1.0 GGridView.qml +GListView 1.0 GListView.qml +GScrollBar 1.0 GScrollBar.qml LabeledText 1.0 LabeledText.qml +ListItem 1.0 ListItem.qml LocationButton 1.0 LocationButton.qml +NavigationButton 1.0 NavigationButton.qml Pane 1.0 Pane.qml +RoundedRectangle 1.0 RoundedRectangle.qml +ScrollablePane 1.0 ScrollablePane.qml +ScrollGradients 1.0 ScrollGradients.qml PaneTitle 1.0 PaneTitle.qml +SearchBar 1.0 SearchBar.qml StatusIcon 1.0 StatusIcon.qml +SwipeActionDelegate 1.0 SwipeActionDelegate.qml +TabbedPane 1.0 TabbedPane.qml +TabbedPaneDelegateIconAndText 1.0 TabbedPaneDelegateIconAndText.qml +TabbedPaneDelegateIconAndThreeLineText 1.0 TabbedPaneDelegateIconAndThreeLineText.qml +TabbedPaneDelegateOneLineText 1.0 TabbedPaneDelegateOneLineText.qml +ToggleableOption 1.0 ToggleableOption.qml diff --git a/resources/qml/Governikus/HistoryView/+android/+phone/HistoryView.qml b/resources/qml/Governikus/HistoryView/+android/+phone/HistoryView.qml deleted file mode 100644 index b3045a6..0000000 --- a/resources/qml/Governikus/HistoryView/+android/+phone/HistoryView.qml +++ /dev/null @@ -1,61 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 -import QtQuick.Layouts 1.2 - -import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 -import Governikus.View 1.0 - -SectionPage { - id: rootPage - property alias listViewModel: listView.model - property var selectedIndices: [] - - headerTitleBarAction: TitleBarAction { text: qsTr("History") + settingsModel.translationTrigger; font.bold: true } - rightTitleBarAction: HistoryViewTitleBarControls { - id: historyControls - deleteHistoryConfirmationPopup: deleteHistoryConfirmationPopup - } - - HistoryViewConfirmationPopup { - id: deleteHistoryConfirmationPopup - baseItem: rootPage - } - - Text { - color: Constants.secondary_text - anchors.centerIn: parent - text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - visible: listView.count === 0 - } - - ListView { - id: listView - anchors.fill: parent - model: historyModel - onContentYChanged: { - if (contentY < 0) { - // prevent flicking over the top - contentY = 0 - } - } - - delegate: - HistoryListViewDelegate { - id: historyDelegate - anchors.left: parent.left - anchors.right: parent.right - height: Utils.dp(120) - listModel: historyModel - property var historyModelItem: model - showDetail: false - } - } - - HistoryViewDetails { - id: detailsHistoryView - visible: false - } -} diff --git a/resources/qml/Governikus/HistoryView/+android/+tablet/HistoryView.qml b/resources/qml/Governikus/HistoryView/+android/+tablet/HistoryView.qml deleted file mode 100644 index fe88448..0000000 --- a/resources/qml/Governikus/HistoryView/+android/+tablet/HistoryView.qml +++ /dev/null @@ -1,67 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 -import QtQuick.Layouts 1.2 - -import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 -import Governikus.Provider 1.0 -import Governikus.View 1.0 - -SectionPage { - id: rootPage - property alias listViewModel: listView.model - property var selectedIndices: [] - - headerTitleBarAction: TitleBarAction { text: qsTr("History") + settingsModel.translationTrigger; font.bold: true } - rightTitleBarAction: HistoryViewTitleBarControls { - id: historyControls - deleteHistoryConfirmationPopup: deleteHistoryConfirmationPopup - } - - HistoryViewConfirmationPopup { - id: deleteHistoryConfirmationPopup - baseItem: rootPage - } - - Text { - color: Constants.secondary_text - anchors.centerIn: parent - text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - visible: listView.count === 0 - } - - ListView { - id: listView - anchors.fill: parent - model: historyModel - onContentYChanged: { - if (contentY < 0) { - // prevent flicking over the top - contentY = 0 - } - } - - delegate: - HistoryListViewDelegate { - id: historyDelegate - anchors.left: parent.left - anchors.right: parent.right - height: Utils.dp(120) - property var historyModelItem: model - listModel: historyModel - showDetail: false - } - } - - ProviderDetailView { - id: providerHistoryView - visible: false - } - - HistoryViewDetails { - id: detailsHistoryView - visible: false - } -} diff --git a/resources/qml/Governikus/HistoryView/+android/HistoryItemImage.qml b/resources/qml/Governikus/HistoryView/+android/HistoryItemImage.qml deleted file mode 100644 index e5ac63a..0000000 --- a/resources/qml/Governikus/HistoryView/+android/HistoryItemImage.qml +++ /dev/null @@ -1,51 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Item { - id: baseItem - - property string imageUrl: "" - - readonly property int imageMargin: Utils.dp(10) - - anchors.left: parent.left - anchors.top: parent.top - anchors.bottom: parent.bottom - - height: parent.height - width: Utils.dp(80) - - Rectangle { - id: background - anchors.centerIn: parent - height: parent.height - 2 * parent.imageMargin - width: parent.width - 2 * parent.imageMargin - color: historyModelItem ? Category.displayColor(historyModelItem.providerCategory) : Category.displayColor("unknown" ) - - visible: baseItem.imageUrl !== "" - } - - Image { - id: categoryImage - anchors.centerIn: parent - height: parent.height - 2 * parent.imageMargin - width: parent.width - 2 * parent.imageMargin - source: historyModelItem ? Category.sectionImageSource(historyModelItem.providerCategory) : Category.sectionImageSource("unknown") - asynchronous: true - clip: true - - visible: baseItem.imageUrl === "" - } - - Image { - id: foregroundImage - source: baseItem.imageUrl - anchors.fill: background - anchors.margins: parent.imageMargin - asynchronous: true - - visible: baseItem.imageUrl !== "" - fillMode: Image.PreserveAspectFit - } -} diff --git a/resources/qml/Governikus/HistoryView/+android/HistoryListViewDelegate.qml b/resources/qml/Governikus/HistoryView/+android/HistoryListViewDelegate.qml deleted file mode 100644 index 257523c..0000000 --- a/resources/qml/Governikus/HistoryView/+android/HistoryListViewDelegate.qml +++ /dev/null @@ -1,23 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Rectangle { - property alias showDetail: contentItem.showDetail - property alias listModel: contentItem.listModel - - HistoryListViewDelegateContent { - id: contentItem - height: parent.height - borderLine.height - width: parent.width - anchors.top: parent.top - } - Rectangle { - id: borderLine - color: "black" - height: Utils.dp(1) - width: parent.width - anchors.top: contentItem.bottom - anchors.bottom: parent.bottom - } -} diff --git a/resources/qml/Governikus/HistoryView/+desktop/HistoryRemovalTimePeriodControl.qml b/resources/qml/Governikus/HistoryView/+desktop/HistoryRemovalTimePeriodControl.qml new file mode 100644 index 0000000..9484fec --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+desktop/HistoryRemovalTimePeriodControl.qml @@ -0,0 +1,64 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany +*/ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ApplicationModel 1.0 + + +RowLayout { + id: root + + property string period + property alias description: description + property alias removalPeriod: removalPeriod + + Accessible.role: Accessible.Heading + Accessible.name: description.text + + spacing: Constants.groupbox_spacing + + GText { + id: description + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Time period") + SettingsModel.translationTrigger + + FocusFrame { + dynamic: false + } + } + + GComboBox { + id: removalPeriod + + Layout.fillWidth: true + height: ApplicationModel.scaleFactor * 50 + + activeFocusOnTab: true + model: ListModel { + id: timePeriods + + //: LABEL DESKTOP_QML + ListElement { modelData: qsTr("Past hour"); value: "PAST_HOUR" } + //: LABEL DESKTOP_QML + ListElement { modelData: qsTr("Past day"); value: "PAST_DAY" } + //: LABEL DESKTOP_QML + ListElement { modelData: qsTr("Past week"); value: "PAST_WEEK" } + //: LABEL DESKTOP_QML + ListElement { modelData: qsTr("Last four weeks"); value: "LAST_FOUR_WEEKS" } + //: LABEL DESKTOP_QML + ListElement { modelData: qsTr("All history"); value: "ALL_HISTORY" } + } + + onCurrentIndexChanged: root.period = timePeriods.get(currentIndex).value + } +} diff --git a/resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml b/resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml new file mode 100644 index 0000000..9039037 --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+desktop/HistoryView.qml @@ -0,0 +1,147 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany +*/ + +import QtQml 2.10 +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.View 1.0 + +SectionPage { + id: root + + Accessible.name: qsTr("History view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the history view of the AusweisApp2.") + SettingsModel.translationTrigger + + ConfirmationPopup { + id: deleteHistoryConfirmationPopup + + //: INFO DESKTOP_QML Header of the confirmation dialog to clear the entire authentication history. + title: qsTr("Delete history?") + SettingsModel.translationTrigger + //: INFO DESKTOP_QML Content of the confirmation dialog to clear the entire authentication history. + text: qsTr("Please confirm that you want to delete your history entries.") + SettingsModel.translationTrigger + + onConfirmed: { + var timePeriod = removalPeriod.period + var removedItemCount = SettingsModel.removeHistory(timePeriod) + tabbedPane.currentIndex = tabbedPane.count > 0 ? 0 : -1 + //: INFO DESKTOP_QML Feedback how many history entries were removed. + ApplicationModel.showFeedback(qsTr("Removed %1 entries from the history.").arg(removedItemCount)) + } + + HistoryRemovalTimePeriodControl { + id: removalPeriod + width: parent.width + } + } + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("History") + SettingsModel.translationTrigger + customSubAction: SearchBar { + id: searchBar + + onDisplayTextChanged: HistoryModel.searchFilter.setFilterString(displayText) + } + } + + onVisibleChanged: if (!visible) deleteHistoryConfirmationPopup.close() + + TabbedPane { + id: tabbedPane + + visible: sectionCount > 0 + anchors.fill: parent + anchors.margins: Constants.pane_padding + + sectionsModel: HistoryModel.searchFilter + + sectionDelegate: TabbedPaneDelegateIconAndThreeLineText { + headerText: (model ? ( Utils.isToday(model.dateTime) ? qsTr("today") : + Utils.isYesterday(model.dateTime) ? qsTr("yesterday") : + Utils.isThisWeek(model.dateTime) ? model.dateTime.toLocaleString(Qt.locale(), qsTr("dddd")) : + model.dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) ) : "") + SettingsModel.translationTrigger + mainText: model ? model.subject : "" + footerText: model ? model.purpose : "" + iconPath: model ? model.providerIcon : "" + } + + contentDelegate: HistoryViewDetails { + historyModelItem: tabbedPane.currentItemModel ? tabbedPane.currentItemModel.model : undefined + + activeFocusOnTab: true + } + + footerItem: Item { + height: Math.max(clearHistoryButton.implicitHeight, saveHistoryToPdf.implicitHeight) + + GButton { + id: clearHistoryButton + + anchors { + top: parent.top + bottom: parent.bottom + left: parent.left + right: parent.horizontalCenter + rightMargin: (Constants.groupbox_spacing / 2) + } + + Accessible.name: text + activeFocusOnTab: true + + icon.source: "qrc:///images/trash_icon_white.svg" + //: LABEL DESKTOP_QML + text: qsTr("Clear history") + SettingsModel.translationTrigger + onClicked: deleteHistoryConfirmationPopup.open() + } + + GButton { + id: saveHistoryToPdf + + anchors { + top: parent.top + bottom: parent.bottom + left: parent.horizontalCenter + right: parent.right + rightMargin: Constants.groupbox_spacing + leftMargin: Math.floor(Constants.groupbox_spacing / 2) + } + + Accessible.name: text + activeFocusOnTab: true + + icon.source: "qrc:///images/icon_save.svg" + //: LABEL DESKTOP_QML + text: qsTr("Save to pdf") + SettingsModel.translationTrigger + onClicked: { + var now = new Date().toLocaleDateString(Qt.locale(), "yyyy-MM-dd") + var filenameSuggestion = "%1.%2.%3.pdf".arg(Qt.application.name).arg(qsTr("History")).arg(now) + console.log("filenameSuggestion", filenameSuggestion) + appWindow.openSaveFileDialog(HistoryModel.exportHistory, filenameSuggestion, "pdf") + } + } + } + } + + GText { + id: textNoHistoryEntries + + visible: tabbedPane.sectionCount === 0 + anchors.centerIn: parent + + Accessible.name: text + activeFocusOnTab: true + + //: INFO DESKTOP_QML No authentication history, placeholder text. + text: qsTr("Currently there are no history entries.") + SettingsModel.translationTrigger + textStyle: Style.text.header + } +} diff --git a/resources/qml/Governikus/HistoryView/+desktop/HistoryViewDetails.qml b/resources/qml/Governikus/HistoryView/+desktop/HistoryViewDetails.qml new file mode 100644 index 0000000..4fa72dc --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+desktop/HistoryViewDetails.qml @@ -0,0 +1,104 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + + +Item { + id: root + property var historyModelItem + + height: columnLayout.height + + Accessible.name: qsTr("Details for history entry") + SettingsModel.translationTrigger + + ColumnLayout { + id: columnLayout + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + + spacing: Constants.pane_spacing + + GText { + text: qsTr("Provider Information") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + LabeledText { + id: providerName + + Layout.fillWidth: true + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + label: qsTr("Provider name") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.subject : "" + } + + LabeledText { + id: purpose + + Layout.fillWidth: true + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + label: qsTr("Purpose") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.purpose : "" + } + + LabeledText { + id: date + + Layout.fillWidth: true + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + label: qsTr("Date") + SettingsModel.translationTrigger + text:{ + if (!historyModelItem) { + return ""; + } + return historyModelItem.dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) + SettingsModel.translationTrigger + } + textUppercase: Font.AllUppercase + } + + LabeledText { + id: requestedData + + Layout.fillWidth: true + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + label: qsTr("Requested data") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.requestedData : "" + } + + LabeledText { + id: termsOfUsage + + Layout.fillWidth: true + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + label: qsTr("Terms of usage") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.termsOfUsage : "" + } + } +} diff --git a/resources/qml/Governikus/HistoryView/+ios/+phone/HistoryView.qml b/resources/qml/Governikus/HistoryView/+ios/+phone/HistoryView.qml deleted file mode 100644 index c194efa..0000000 --- a/resources/qml/Governikus/HistoryView/+ios/+phone/HistoryView.qml +++ /dev/null @@ -1,101 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 -import Governikus.View 1.0 - -SectionPage { - id: baseItem - - leftTitleBarAction: TitleBarAction { - id: leftAction - - state: "edit" - states: [ - State { name: "edit"; when: !historyListView.editMode }, - State { name: "cancel"; when: historyListView.editMode } - ] - onClicked: { - if (state === "edit") { - state = "cancel" - historyListView.editMode = true - } - else { - state = "edit" - historyListView.editMode = false - } - } - } - - headerTitleBarAction: Text { text: qsTr("History") + settingsModel.translationTrigger; font.bold: true } - - rightTitleBarAction: TitleBarAction { - id: rightAction - - states: [ - State { - name: "none" - when: leftAction.state === "edit" - PropertyChanges { target: rightAction; text: "" } - }, - State { - name: "deleteAll" - when: historyListView.editMode - PropertyChanges { target: rightAction; text: qsTr("Delete all") + settingsModel.translationTrigger } - } - ] - onClicked: { - if (historyListView.editMode){ - deleteHistoryConfirmationPopup.setValues("ALL_HISTORY", qsTr("Please confirm that you want to delete your complete history.")) - deleteHistoryConfirmationPopup.open() - } - historyListView.editMode = false - } - } - - HistoryViewConfirmationPopup { - id: deleteHistoryConfirmationPopup - baseItem: baseItem - } - - Text { - color: Constants.secondary_text - anchors.centerIn: parent - text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - visible: historyListView.count === 0 - } - - ListView { - id: historyListView - anchors.fill: parent - focus: true - spacing: Utils.dp(5) - - property bool editMode: false - - model: historyModel - delegate: HistoryListViewDelegate { - historyModelItem: model - - onClicked: { - detailsHistoryView.historyModelItem = historyModelItem - firePush(detailsHistoryView) - } - - Connections { - target: historyListView - onEditModeChanged: { - reactToEditModeChanged(historyListView.editMode) - } - } - } - } - - HistoryViewDetails { - id: detailsHistoryView - visible: false - } -} diff --git a/resources/qml/Governikus/HistoryView/+ios/+tablet/HistoryView.qml b/resources/qml/Governikus/HistoryView/+ios/+tablet/HistoryView.qml deleted file mode 100644 index c194efa..0000000 --- a/resources/qml/Governikus/HistoryView/+ios/+tablet/HistoryView.qml +++ /dev/null @@ -1,101 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 -import Governikus.View 1.0 - -SectionPage { - id: baseItem - - leftTitleBarAction: TitleBarAction { - id: leftAction - - state: "edit" - states: [ - State { name: "edit"; when: !historyListView.editMode }, - State { name: "cancel"; when: historyListView.editMode } - ] - onClicked: { - if (state === "edit") { - state = "cancel" - historyListView.editMode = true - } - else { - state = "edit" - historyListView.editMode = false - } - } - } - - headerTitleBarAction: Text { text: qsTr("History") + settingsModel.translationTrigger; font.bold: true } - - rightTitleBarAction: TitleBarAction { - id: rightAction - - states: [ - State { - name: "none" - when: leftAction.state === "edit" - PropertyChanges { target: rightAction; text: "" } - }, - State { - name: "deleteAll" - when: historyListView.editMode - PropertyChanges { target: rightAction; text: qsTr("Delete all") + settingsModel.translationTrigger } - } - ] - onClicked: { - if (historyListView.editMode){ - deleteHistoryConfirmationPopup.setValues("ALL_HISTORY", qsTr("Please confirm that you want to delete your complete history.")) - deleteHistoryConfirmationPopup.open() - } - historyListView.editMode = false - } - } - - HistoryViewConfirmationPopup { - id: deleteHistoryConfirmationPopup - baseItem: baseItem - } - - Text { - color: Constants.secondary_text - anchors.centerIn: parent - text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - visible: historyListView.count === 0 - } - - ListView { - id: historyListView - anchors.fill: parent - focus: true - spacing: Utils.dp(5) - - property bool editMode: false - - model: historyModel - delegate: HistoryListViewDelegate { - historyModelItem: model - - onClicked: { - detailsHistoryView.historyModelItem = historyModelItem - firePush(detailsHistoryView) - } - - Connections { - target: historyListView - onEditModeChanged: { - reactToEditModeChanged(historyListView.editMode) - } - } - } - } - - HistoryViewDetails { - id: detailsHistoryView - visible: false - } -} diff --git a/resources/qml/Governikus/HistoryView/+ios/HistoryDetails.qml b/resources/qml/Governikus/HistoryView/+ios/HistoryDetails.qml deleted file mode 100644 index aa43a18..0000000 --- a/resources/qml/Governikus/HistoryView/+ios/HistoryDetails.qml +++ /dev/null @@ -1,33 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Item { - property string providerAddress: "" - - property int listItemIndex: -1 - - property var listModel - - anchors.right: parent.right - anchors.margins: Utils.dp(5) - height: parent.height - width: parent.height * 0.4 - - Rectangle { - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - height: width - - border.color: Constants.history_delegate_address_color - border.width: Utils.dp(1) - radius: width - - Text { - anchors.centerIn: parent - text: "i" - color: parent.border.color - } - } -} diff --git a/resources/qml/Governikus/HistoryView/+ios/HistoryItemImage.qml b/resources/qml/Governikus/HistoryView/+ios/HistoryItemImage.qml deleted file mode 100644 index ed59fe0..0000000 --- a/resources/qml/Governikus/HistoryView/+ios/HistoryItemImage.qml +++ /dev/null @@ -1,26 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Item { - property string imageUrl: "" - - id: baseItem - - anchors.left: parent.left - anchors.leftMargin: Utils.dp(10) - - height: parent.height - width: Utils.dp(40) - - Image { - source: baseItem.imageUrl !== "" ? - baseItem.imageUrl : - (historyModelItem ? Category.imageSource(historyModelItem.providerCategory) : Category.imageSource("unknown")) - asynchronous: true - height: Math.min(parent.height * 0.6, parent.width) - width: height - fillMode: Image.PreserveAspectFit - anchors.centerIn: parent - } -} diff --git a/resources/qml/Governikus/HistoryView/+ios/HistoryListViewDelegate.qml b/resources/qml/Governikus/HistoryView/+ios/HistoryListViewDelegate.qml deleted file mode 100644 index e02f246..0000000 --- a/resources/qml/Governikus/HistoryView/+ios/HistoryListViewDelegate.qml +++ /dev/null @@ -1,133 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 - -Item { - id: baseItem - property var historyModelItem: historyModel - - height: swipeComponent.height - width: parent.width - - signal clicked() - - function reactToEditModeChanged(pNewValue){ - if (pNewValue){ - swipeComponent.swipe.open(SwipeDelegate.Right) - } else { - swipeComponent.swipe.close() - } - } - - SwipeDelegate { - id: swipeComponent - height: Constants.history_section_height - anchors.left: parent.left - anchors.right: parent.right - - onClicked: { - baseItem.clicked() - } - - contentItem: Rectangle { - id: background - color: "white" - anchors.top: parent.top - anchors.bottom: parent.bottom - - HistoryItemImage { - id: categoryImage - imageUrl: providerIcon - visible: true - } - - Rectangle { - id: purposeObject - anchors.verticalCenter: parent.verticalCenter - anchors.left: categoryImage.right - anchors.leftMargin: Utils.dp(15) - anchors.right: parent.right - - Column { - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.right: parent.right - - spacing: Constants.history_delegate_spacing - - Text { - id: dateTimeText - - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.label_font_size - font.capitalization: Font.AllUppercase - color: Constants.blue - text: (Utils.isToday(dateTime) ? qsTr("today") : - Utils.isYesterday(dateTime) ? qsTr("yesterday") : - Utils.isThisWeek(dateTime) ? dateTime.toLocaleString(Qt.locale(), qsTr("dddd")) : - dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) - ) + settingsModel.translationTrigger - } - Text { - id: subjectText - - anchors.left: parent.left - anchors.right: parent.right - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.label_font_size - wrapMode: Text.WordWrap - text: subject - } - Text { - id: purposeText - - anchors.left: parent.left - anchors.right: parent.right - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.small_font_size - color: Constants.history_delegate_address_color - wrapMode: Text.WordWrap - text: !!purpose ? historyModelItem.purpose : qsTr("Tap for more details") + settingsModel.translationTrigger - } - } - } - - Image { - height: Utils.dp(35) - source: "qrc:///images/arrowRight.svg" - anchors.right: parent.right - anchors.verticalCenter: purposeObject.verticalCenter - anchors.rightMargin: Utils.dp(2) - fillMode: Image.PreserveAspectFit - } - } - - swipe.right: Rectangle { - id: confirmDeletionRect - height: parent.height - width: parent.width / 4 - anchors.right: parent.right - anchors.top: parent.top - - color: Constants.red - border.width: Constants.groupbox_spacing - border.color: Constants.white - - MouseArea { - anchors.fill: parent - onClicked: { - historyModel.removeRows(index, 1) - } - } - - Image { - anchors.fill: parent - anchors.margins: Utils.dp(20) - source: "qrc:///images/trash_icon_white.svg" - fillMode: Image.PreserveAspectFit - } - } - } -} - diff --git a/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryListViewDelegate.qml b/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryListViewDelegate.qml new file mode 100644 index 0000000..5fb8d1b --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryListViewDelegate.qml @@ -0,0 +1,36 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.HistoryModel 1.0 + +HistoryListItem { + id: listItem + + width: parent.width + + contentMarginRight: deleteButton.width + 2 * Constants.groupbox_spacing + + showRightArrow: false + + Image { + id: deleteButton + sourceSize.width: Style.dimens.small_icon_size + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: Constants.groupbox_spacing + + source: "qrc:///images/trash_icon.svg" + fillMode: Image.PreserveAspectFit + + MouseArea { + anchors.fill: parent + + onClicked: HistoryModel.removeRows(historyModelItem ? historyModelItem.index : -1, 1) + } + } +} diff --git a/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryView.qml b/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryView.qml new file mode 100644 index 0000000..34a688a --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryView.qml @@ -0,0 +1,19 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.2 + +import Governikus.Global 1.0 +import Governikus.View 1.0 + + +BaseHistoryView { + id: baseItem + + rightTitleBarAction: HistoryViewTitleBarControls { + showDeleteAll: baseItem.historyItemCount !== 0 + } +} diff --git a/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryViewTitleBarControls.qml b/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryViewTitleBarControls.qml new file mode 100644 index 0000000..e48b721 --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/+android/HistoryViewTitleBarControls.qml @@ -0,0 +1,59 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +RowLayout { + id: historyControls + + property bool showDeleteAll: true + + height: Style.dimens.titlebar_height + + spacing: Constants.component_spacing + + HistoryViewConfirmationPopup { + id: deleteHistoryConfirmationPopup + } + + GSwitch { + id: enableHistorySwitch + + color: Constants.green + initialState: SettingsModel.historyEnabled + onSwitched: { + SettingsModel.historyEnabled = enableHistorySwitch.isOn + //: LABEL ANDROID IOS + ApplicationModel.showFeedback((SettingsModel.historyEnabled ? qsTr("History enabled") : qsTr("History disabled")) + SettingsModel.translationTrigger) + } + } + + Image { + id: deleteEntriesButtonImage + + visible: historyControls.showDeleteAll + + sourceSize.height: 36 + sourceSize.width: 36 + + fillMode: Image.PreserveAspectFit + source: "qrc:///images/trash_icon_white.svg" + + MouseArea { + id: deleteEntriesButton + + anchors.fill: parent + + onClicked: deleteHistoryConfirmationPopup.open() + } + } + } diff --git a/resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryListViewDelegate.qml b/resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryListViewDelegate.qml new file mode 100644 index 0000000..55b8387 --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryListViewDelegate.qml @@ -0,0 +1,30 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 + +SwipeActionDelegate { + id: swipeComponent + + property var historyModelItem + + actionColor: Constants.red + actionIcon: "qrc:///images/trash_icon_white.svg" + //: INFO IOS Accessible name for the trash icon of a history entry. + actionAccessibleName: qsTr("Delete history entry: %1").arg(historyModelItem.subject) + SettingsModel.translationTrigger + + contentItem: HistoryListItem { + historyModelItem: swipeComponent.historyModelItem + mouseAreaEnabled: false + pressed: swipeComponent.pressed + } + + onActionClicked: HistoryModel.removeRows(index, 1) +} diff --git a/resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryView.qml b/resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryView.qml new file mode 100644 index 0000000..64a78b1 --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/+ios/HistoryView.qml @@ -0,0 +1,45 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +BaseHistoryView { + id: baseItem + + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + rightTitleBarAction: TitleBarAction { + id: rightAction + + states: [ + State { + name: "none" + when: baseItem.historyItemCount === 0 + PropertyChanges { target: rightAction; text: "" } + }, + State { + name: "deleteAll" + when: baseItem.historyItemCount !== 0 + PropertyChanges { + target: rightAction + //: LABEL IOS + text: qsTr("Delete all") + SettingsModel.translationTrigger + } + } + ] + + onClicked: deleteHistoryConfirmationPopup.open() + } + + HistoryViewConfirmationPopup { + id: deleteHistoryConfirmationPopup + } +} diff --git a/resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml b/resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml new file mode 100644 index 0000000..9a8ec4b --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/BaseHistoryView.qml @@ -0,0 +1,68 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.2 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +SectionPage { + id: rootPage + property alias listViewModel: listView.model + property alias historyItemCount: listView.count + + sectionPageFlickable: listView + + //: INFO ANDROID IOS + title: qsTr("History") + SettingsModel.translationTrigger + + GText { + anchors.centerIn: parent + //: INFO ANDROID IOS No authentication history, placeholder text. + text: qsTr("Currently there are no history entries.") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary + visible: listView.count === 0 + } + + GListView { + id: listView + + anchors.fill: parent + + model: HistoryModel + + remove: Transition { + NumberAnimation { property: "opacity"; from: 1.0; to: 0; duration: Constants.animation_duration / 2 } + } + + removeDisplaced: Transition { + SequentialAnimation { + PauseAnimation { duration: Constants.animation_duration / 2 } + NumberAnimation { properties: "y"; duration: Constants.animation_duration / 2 } + } + } + + delegate: HistoryListViewDelegate { + historyModelItem: model + + Accessible.onScrollDownAction: historyListView.positionViewAtIndex(index, ListView.Beginning) + Accessible.onScrollUpAction: historyListView.positionViewAtIndex(index, ListView.End) + + onClicked: firePushWithProperties(detailsHistoryView, {historyModelItem: historyModelItem}) + } + } + + Component { + id: detailsHistoryView + + HistoryViewDetails {} + } +} diff --git a/resources/qml/Governikus/HistoryView/+mobile/HistoryListItem.qml b/resources/qml/Governikus/HistoryView/+mobile/HistoryListItem.qml new file mode 100644 index 0000000..02b5946 --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/HistoryListItem.qml @@ -0,0 +1,29 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 + +ListItem { + property var historyModelItem + + height: 72 + + Accessible.description: qsTr("Click to view details of history entry.") + SettingsModel.translationTrigger + + icon: providerIcon !== "" ? providerIcon : (historyModelItem ? Category.imageSource(historyModelItem.providerCategory) : Category.imageSource("unknown")) + //: LABEL ANDROID IOS + headerText: (Utils.isToday(dateTime) ? qsTr("today") : + Utils.isYesterday(dateTime) ? qsTr("yesterday") : + Utils.isThisWeek(dateTime) ? dateTime.toLocaleString(Qt.locale(), qsTr("dddd")) : + dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) + ) + SettingsModel.translationTrigger + text: subject + //: LABEL ANDROID IOS + footerText: historyModelItem.purpose !== "" ? historyModelItem.purpose : qsTr("Tap for more details") + SettingsModel.translationTrigger +} diff --git a/resources/qml/Governikus/HistoryView/+mobile/HistoryViewConfirmationPopup.qml b/resources/qml/Governikus/HistoryView/+mobile/HistoryViewConfirmationPopup.qml new file mode 100644 index 0000000..05f0d18 --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/HistoryViewConfirmationPopup.qml @@ -0,0 +1,22 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + +ConfirmationPopup { + //: LABEL ANDROID IOS + title: qsTr("Delete history") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS Confirmaton popup to clear all history entries. + text: qsTr("Please confirm that you want to delete your complete history.") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + okButtonText: qsTr("Delete") + SettingsModel.translationTrigger + + onConfirmed: SettingsModel.removeHistory("ALL_HISTORY") +} diff --git a/resources/qml/Governikus/HistoryView/+mobile/HistoryViewDetails.qml b/resources/qml/Governikus/HistoryView/+mobile/HistoryViewDetails.qml new file mode 100644 index 0000000..5e39751 --- /dev/null +++ b/resources/qml/Governikus/HistoryView/+mobile/HistoryViewDetails.qml @@ -0,0 +1,93 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.2 + +import Governikus.Global 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + + +SectionPage { + id: root + property var historyModelItem + + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + title: historyModelItem ? historyModelItem.subject : "" + titleBarColor: Category.displayColor(historyModelItem ? historyModelItem.providerCategory : "") + + content: Item { + height: pane.height + 2 * Constants.component_spacing + width: root.width + + Column { + anchors.fill: parent + anchors.margins: Constants.component_spacing + + Pane { + id: pane + //: LABEL ANDROID IOS + title: qsTr("Provider Information") + SettingsModel.translationTrigger + + LabeledText { + Accessible.onScrollDownAction: scrollPageDown() + Accessible.onScrollUpAction: scrollPageUp() + + //: LABEL ANDROID IOS + label: qsTr("Provider name") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.subject : "" + width: parent.width + } + + LabeledText { + Accessible.onScrollDownAction: scrollPageDown() + Accessible.onScrollUpAction: scrollPageUp() + + //: LABEL ANDROID IOS + label: qsTr("Purpose") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.purpose : "" + width: parent.width + } + + LabeledText { + Accessible.onScrollDownAction: scrollPageDown() + Accessible.onScrollUpAction: scrollPageUp() + + //: LABEL ANDROID IOS + label: qsTr("Date") + SettingsModel.translationTrigger + text:{ + if (!historyModelItem) { + return ""; + } + return historyModelItem.dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) + SettingsModel.translationTrigger + } + width: parent.width + } + + LabeledText { + Accessible.onScrollDownAction: scrollPageDown() + Accessible.onScrollUpAction: scrollPageUp() + + //: LABEL ANDROID IOS + label: qsTr("Requested data") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.requestedData : "" + width: parent.width + } + + LabeledText { + Accessible.onScrollDownAction: scrollPageDown() + Accessible.onScrollUpAction: scrollPageUp() + + //: LABEL ANDROID IOS + label: qsTr("Terms of usage") + SettingsModel.translationTrigger + text: historyModelItem ? historyModelItem.termsOfUsage : "" + width: parent.width + } + } + } + } +} diff --git a/resources/qml/Governikus/HistoryView/HistoryListViewDelegateContent.qml b/resources/qml/Governikus/HistoryView/HistoryListViewDelegateContent.qml deleted file mode 100644 index 214354e..0000000 --- a/resources/qml/Governikus/HistoryView/HistoryListViewDelegateContent.qml +++ /dev/null @@ -1,135 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Item { - id: baseItem - - property bool showDetail: false - property var listModel - - Rectangle { - id: background - color: "white" - anchors.left: parent.left - anchors.leftMargin: Utils.dp(5) - anchors.right: parent.right - anchors.rightMargin: Utils.dp(5) - anchors.top: parent.top - anchors.bottom: parent.bottom - - HistoryItemImage { - id: categoryImage - imageUrl: historyModelItem ? historyModelItem.providerIcon : "" - visible: !showDetail - } - - Rectangle { - id: purposeObject - height: purposeColumn.height - property alias truncated: purposeText.truncated - - anchors.verticalCenter: parent.verticalCenter - anchors.left: showDetail ? parent.left : categoryImage.right - anchors.leftMargin: showDetail ? 0 : Utils.dp(15) - anchors.right: deleteButton.left - - Column { - id: purposeColumn - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.right: parent.right - - spacing: Constants.history_delegate_spacing - - Text { - id: dateTimeText - - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.label_font_size - font.capitalization: Font.AllUppercase - color: Constants.blue - text: (!historyModelItem ? "" : - Utils.isToday(historyModelItem.dateTime) ? qsTr("today") : - Utils.isYesterday(historyModelItem.dateTime) ? qsTr("yesterday") : - Utils.isThisWeek(historyModelItem.dateTime) ? historyModelItem.dateTime.toLocaleString(Qt.locale(), qsTr("dddd")) : - historyModelItem.dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) - ) + settingsModel.translationTrigger - } - Text { - id: subjectText - color: Constants.secondary_text - - anchors.left: parent.left - anchors.right: parent.right - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.label_font_size - wrapMode: Text.WordWrap - text: historyModelItem ? historyModelItem.subject : "" - } - Text { - id: purposeText - - anchors.left: parent.left - anchors.right: parent.right - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.small_font_size - color: Constants.history_delegate_address_color - wrapMode: Text.WordWrap - maximumLineCount: 2 - text: historyModelItem ? !!historyModelItem.purpose ? historyModelItem.purpose : qsTr("Tap for more details") + settingsModel.translationTrigger : "" - } - } - } - - Text { - visible: purposeText.truncated - anchors.left: purposeObject.right - anchors.bottom: purposeObject.bottom - font.pixelSize: Constants.small_font_size - color: Constants.history_delegate_address_color - text: "..." - } - - Image { - height: Utils.dp(35) - source: "qrc:///images/arrowRight.svg" - anchors.right: parent.right - anchors.verticalCenter: purposeObject.verticalCenter - anchors.rightMargin: Utils.dp(2) - fillMode: Image.PreserveAspectFit - } - - MouseArea { - anchors.fill: parent - onClicked: { - detailsHistoryView.historyModelItem = historyModelItem - firePush(detailsHistoryView) - } - } - - MouseArea { - id: deleteButton - anchors.right: parent.right - anchors.top: parent.top - anchors.topMargin: Utils.dp(5) - height: parent.height * 0.3 - width: height - visible: Constants.is_layout_ios ? false : true - - onClicked: { - if (typeof(listModel) === "object") { - listModel.removeRows(historyModelItem ? historyModelItem.index : -1, 1) - } - } - - Image { - height: Utils.dp(21) - anchors.right: parent.right - anchors.top: parent.top - source: "qrc:///images/trash_icon.svg" - fillMode: Image.PreserveAspectFit - } - } - } -} diff --git a/resources/qml/Governikus/HistoryView/HistoryViewConfirmationPopup.qml b/resources/qml/Governikus/HistoryView/HistoryViewConfirmationPopup.qml deleted file mode 100644 index c779d11..0000000 --- a/resources/qml/Governikus/HistoryView/HistoryViewConfirmationPopup.qml +++ /dev/null @@ -1,92 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 - -Popup { - id: popupObject - property string timePeriod: "UNKNOWN" - property string popupDescriptionString: "" - property var baseItem: Item { } - x: (baseItem.width - width) / 2 - y: (baseItem.height - height) / 2 - - function setValues(pPeriodToRemove, pNewDescriptionString) { - timePeriod = pPeriodToRemove - popupDescriptionString = pNewDescriptionString - } - - modal: true - focus: true - closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape - width: Utils.dp(250) - height: popupColumn.height - - Column { - id: popupColumn - width: parent.width - spacing: Constants.pane_spacing - padding: Constants.pane_padding - - Text { - id: header - color: Constants.secondary_text - text: qsTr("Delete history") + settingsModel.translationTrigger - font.pixelSize: Constants.header_font_size - font.bold: true - } - - Text { - id: info - color: Constants.secondary_text - width: parent.width - 2 * Constants.pane_padding - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - text: popupObject.popupDescriptionString - } - - Row { - id: buttonBox - anchors.right: parent.right - anchors.rightMargin: Constants.pane_padding - spacing: Constants.pane_spacing - - MouseArea { - height: textItemCancel.height + 2 * Utils.dp(10) - width: textItemCancel.width + 2 * Utils.dp(10) - - Text { - id: textItemCancel - anchors.centerIn: parent - text: qsTr("Cancel") + settingsModel.translationTrigger - color: Constants.blue - font.pixelSize: Constants.titlebar_font_size - } - - onClicked: { - popupObject.close() - } - } - - MouseArea { - height: textItemDelete.height + 2 * Utils.dp(10) - width: textItemDelete.width + 2 * Utils.dp(10) - - Text { - id: textItemDelete - anchors.centerIn: parent - text: qsTr("Delete") + settingsModel.translationTrigger - color: Constants.blue - font.pixelSize: Constants.titlebar_font_size - } - - onClicked: { - var removedItems = settingsModel.removeHistory(popupObject.timePeriod); - qmlExtension.showFeedback(qsTr("Removed %1 entries from the history.").arg(removedItems)) - popupObject.close() - } - } - } - } -} - diff --git a/resources/qml/Governikus/HistoryView/HistoryViewDetails.qml b/resources/qml/Governikus/HistoryView/HistoryViewDetails.qml deleted file mode 100644 index 08a75ae..0000000 --- a/resources/qml/Governikus/HistoryView/HistoryViewDetails.qml +++ /dev/null @@ -1,67 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 -import QtQuick.Layouts 1.2 - -import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 -import Governikus.View 1.0 - -SectionPage { - id: root - property var historyModelItem - - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: historyModelItem ? historyModelItem.subject : ""; font.bold: true } - titleBarColor: Category.displayColor(historyModelItem ? historyModelItem.providerCategory : "") - - content: Item { - height: pane.height + 2 * Constants.component_spacing - width: root.width - - Column { - anchors.fill: parent - anchors.margins: Constants.component_spacing - - Pane { - id: pane - title: qsTr("Provider Information") + settingsModel.translationTrigger - - LabeledText { - label: qsTr("Provider name") + settingsModel.translationTrigger - text: historyModelItem ? historyModelItem.subject : "" - width: parent.width - } - - LabeledText { - label: qsTr("Purpose") + settingsModel.translationTrigger - text: historyModelItem ? historyModelItem.purpose : "" - width: parent.width - } - - LabeledText { - label: qsTr("Date") + settingsModel.translationTrigger - text:{ - if (!historyModelItem) { - return ""; - } - return historyModelItem.dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) + settingsModel.translationTrigger - } - width: parent.width - fontUppercase: Font.AllUppercase - } - - LabeledText { - label: qsTr("Requested data") + settingsModel.translationTrigger - text: historyModelItem ? historyModelItem.requestedData : "" - width: parent.width - } - - LabeledText { - label: qsTr("Terms of usage") + settingsModel.translationTrigger - text: historyModelItem ? historyModelItem.termsOfUsage : "" - width: parent.width - } - } - } - } -} diff --git a/resources/qml/Governikus/HistoryView/HistoryViewTitleBarControls.qml b/resources/qml/Governikus/HistoryView/HistoryViewTitleBarControls.qml deleted file mode 100644 index 92813e1..0000000 --- a/resources/qml/Governikus/HistoryView/HistoryViewTitleBarControls.qml +++ /dev/null @@ -1,45 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 - -Item { - id: historyControls - property var deleteHistoryConfirmationPopup: HistoryViewConfirmationPopup { } - anchors.verticalCenter: parent ? parent.verticalCenter : undefined - - GSwitch { - id: enableHistorySwitch - anchors.verticalCenter: parent.verticalCenter - anchors.rightMargin: Utils.dp(20) - anchors.right: deleteEntriesButton.left - - color: Constants.green - initialState: settingsModel.historyEnabled - onSwitched: { - settingsModel.historyEnabled = enableHistorySwitch.isOn - qmlExtension.showFeedback((settingsModel.historyEnabled ? qsTr("History enabled") : qsTr("History disabled")) + settingsModel.translationTrigger) - } - } - - MouseArea { - id: deleteEntriesButton - width: deleteEntriesButtonImage.width - height: deleteEntriesButtonImage.height - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: Utils.dp(10) - - onClicked: { - deleteHistoryConfirmationPopup.setValues("ALL_HISTORY", qsTr("Please confirm that you want to delete your complete history.")) - deleteHistoryConfirmationPopup.open() - } - - Image { - id: deleteEntriesButtonImage - height: Constants.titlebar_font_size * 1.5 - fillMode: Image.PreserveAspectFit - source: "qrc:///images/trash_icon_white.svg" - } - } - } diff --git a/resources/qml/Governikus/HistoryView/qmldir b/resources/qml/Governikus/HistoryView/qmldir index f90cead..04cb879 100644 --- a/resources/qml/Governikus/HistoryView/qmldir +++ b/resources/qml/Governikus/HistoryView/qmldir @@ -1,10 +1,11 @@ module HistoryView -internal HistoryDetails HistoryDetails.qml -internal HistoryItemImage HistoryItemImage.qml -internal HistoryListViewDelegateContent HistoryListViewDelegateContent.qml +internal BaseHistoryView BaseHistoryView.qml +internal HistoryViewConfirmationPopup HistoryViewConfirmationPopup.qml internal HistoryListViewDelegate HistoryListViewDelegate.qml +internal HistoryRemovalTimePeriodControl HistoryRemovalTimePeriodControl.qml internal HistoryViewDetails HistoryViewDetails.qml +internal HistoryListItem HistoryListItem.qml internal HistoryViewTitleBarControls HistoryViewTitleBarControls.qml HistoryView 1.0 HistoryView.qml diff --git a/resources/qml/Governikus/IdentifyView/+desktop/CertificateDescriptionPage.qml b/resources/qml/Governikus/IdentifyView/+desktop/CertificateDescriptionPage.qml index b3b47dd..9115352 100644 --- a/resources/qml/Governikus/IdentifyView/+desktop/CertificateDescriptionPage.qml +++ b/resources/qml/Governikus/IdentifyView/+desktop/CertificateDescriptionPage.qml @@ -1,45 +1,70 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtQuick.Controls 2.3 import Governikus.Global 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { signal exit() + Accessible.name: qsTr("Self-authentication data view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the self-authentication data view of the AusweisApp2.") + SettingsModel.translationTrigger + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML text: qsTr("Provider Information") - showSettings: false + rootEnabled: false showHelp: false } Pane { id: pane + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right anchors.margins: Constants.pane_padding - title: qsTr("Provider Information") + settingsModel.translationTrigger + + //: LABEL DESKTOP_QML + title: qsTr("Provider Information") + SettingsModel.translationTrigger Repeater { id: listView + model: certificateDescriptionModel LabeledText { - id: delegate + width: parent.width + + activeFocusOnTab: true + label: model.label text: model.text textFormat: Text.PlainText - width: parent.width } } } GButton { id: button + anchors.right: pane.right anchors.bottom: pane.bottom anchors.margins: Constants.pane_padding - text: qsTr("Close") + + activeFocusOnTab: true + Accessible.name: button.text + + //: LABEL DESKTOP_QML + text: qsTr("Close") + SettingsModel.translationTrigger onClicked: parent.exit() } } diff --git a/resources/qml/Governikus/IdentifyView/+desktop/DataGroup.qml b/resources/qml/Governikus/IdentifyView/+desktop/DataGroup.qml index 9e0eda3..10d66f4 100644 --- a/resources/qml/Governikus/IdentifyView/+desktop/DataGroup.qml +++ b/resources/qml/Governikus/IdentifyView/+desktop/DataGroup.qml @@ -1,99 +1,148 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 Column { - id: column - visible: count > 0 - spacing: Constants.pane_spacing + id: root + readonly property alias count: repeater.count property alias title: dataTitle.text property alias columns: grid.columns property alias chat: repeater.model - readonly property alias count: repeater.count + + visible: count > 0 + spacing: Constants.pane_spacing PaneTitle { id: dataTitle + + activeFocusOnTab: true + Accessible.role: Accessible.Heading + Accessible.name: dataTitle.text + + FocusFrame { + dynamic: false + border.color: Constants.black + } } Item { + visible: count < 1 width: parent.width height: noDataText * 1.5 - visible: count < 1 - Text { + GText { id: noDataText - color: Constants.black - anchors.verticalCenter: parent.verticalCenter + width: parent.width - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap - text: qsTr("No data requested") + settingsModel.translationTrigger + anchors.verticalCenter: parent.verticalCenter + + activeFocusOnTab: true + Accessible.role: Accessible.Paragraph + Accessible.name: noDataText.text + + //: LABEL DESKTOP_QML + text: qsTr("No data requested") + SettingsModel.translationTrigger + textStyle: Style.text.normal_inverse } Rectangle { - anchors.bottom: parent.bottom height: Math.max(ApplicationModel.scaleFactor * 1, 1) width: parent.width + anchors.bottom: parent.bottom + color: Constants.grey } } Grid { id: grid - columnSpacing: Constants.pane_spacing + width: parent.width + + columnSpacing: Constants.pane_spacing verticalItemAlignment: Grid.AlignBottom Repeater { id: repeater + visible: count > 0 Item { + id: rightItem + + property alias checked: checkBox.checked + width: (grid.width - ((grid.columns - 1) * grid.columnSpacing)) / grid.columns height: dataText.height * 1.5 - Text { + activeFocusOnTab: true + Accessible.role: optional ? Accessible.CheckBox : Accessible.Paragraph + Accessible.name: dataText.text + (optional ? ": " + (selected ? qsTr("selected") : qsTr("not selected")) : "") + SettingsModel.translationTrigger + + Keys.onSpacePressed: if (optional) selected = !selected + + GText { id: dataText - color: Constants.black + anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.right: parent.right anchors.rightMargin: checkBox.visible ? checkBox.width + Constants.pane_spacing : 0 - font.pixelSize: Constants.normal_font_size + text: name - wrapMode: Text.WordWrap + textStyle: Style.text.normal_inverse + + FocusFrame { + scope: rightItem + marginFactor: 0.7 + border.color: Constants.black + dynamic: false + } } Rectangle { - anchors.bottom: parent.bottom height: Math.max(ApplicationModel.scaleFactor * 1, 1) width: parent.width + anchors.bottom: parent.bottom + color: Constants.grey } GCheckBox { id: checkBox + + visible: optional anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - height: parent.height / 2 - width: height - visible: optional + + activeFocusOnTab: false + checked: selected } MouseArea { anchors.fill: parent + enabled: optional onClicked: selected = !selected Rectangle { anchors.fill: parent - color: Constants.accent_color + + color: Style.color.accent opacity: parent.pressed ? 0.5 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } } } diff --git a/resources/qml/Governikus/IdentifyView/+desktop/EditRights.qml b/resources/qml/Governikus/IdentifyView/+desktop/EditRights.qml index f0f6a92..0e3fc31 100644 --- a/resources/qml/Governikus/IdentifyView/+desktop/EditRights.qml +++ b/resources/qml/Governikus/IdentifyView/+desktop/EditRights.qml @@ -1,12 +1,19 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 -import Governikus.Type.AuthModel 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.AuthModel 1.0 +import Governikus.Type.NumberModel 1.0 SectionPage { @@ -16,29 +23,59 @@ SectionPage { function showProviderInformation(show) { detailView = show + if (!detailView) onVisibleChanged() ApplicationWindow.menuBar.updateActions() } + Accessible.name: qsTr("Edit rights view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the edit rights view of the AusweisApp2.") + SettingsModel.translationTrigger + Keys.onReturnPressed: d.onKeyboardConfirmPressed(event) + Keys.onEnterPressed: d.onKeyboardConfirmPressed(event) + Keys.onEscapePressed: { + if (!detailView) { + event.accepted = false + return + } + + showProviderInformation(false) + } + + QtObject { + id: d + + function onKeyboardConfirmPressed(event) { + if (detailView) { + showProviderInformation(false) + } else { + confirmButton.onClicked() + } + } + } + Column { visible: !root.detailView - anchors.left: parent.left anchors.right: parent.right + spacing: Constants.pane_spacing topPadding: providerRect.height Rectangle { id: providerRect + height: providerColumn.height anchors.left: parent.left anchors.right: parent.right + color: Constants.white Column { id: providerColumn + anchors.left: parent.left anchors.right: parent.right anchors.margins: Constants.pane_padding + topPadding: Constants.pane_padding bottomPadding: Constants.pane_padding spacing: Constants.pane_spacing @@ -49,21 +86,33 @@ SectionPage { Image { id: providerImage - source: "qrc:///images/npa.svg" - sourceSize.height: providerText.height * 4 + anchors.left: parent.left anchors.bottom: parent.bottom + + source: "qrc:///images/npa.svg" + sourceSize.height: providerText.height * 4 } - Text { + GText { id: providerText + anchors.left: providerImage.right anchors.leftMargin: Constants.pane_spacing anchors.right: parent.right - color: Constants.black - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap - text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger + + activeFocusOnTab: true + Accessible.role: Accessible.Heading + Accessible.name: providerText.text + + //: LABEL DESKTOP_QML + text: qsTr("You are about to identify yourself towards the following service provider:") + SettingsModel.translationTrigger + textStyle: Style.text.normal_inverse + + FocusFrame { + border.color: Constants.black + dynamic: false + } } } @@ -73,65 +122,116 @@ SectionPage { Row { id: providerRow + spacing: Constants.component_spacing ProviderInfoSection { + id: purposeInfo + + activeFocusOnTab: true + image: "qrc:///images/provider/purpose.svg" - title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger + //: LABEL DESKTOP_QML + title: qsTr("Purpose for reading out requested data") + SettingsModel.translationTrigger name: certificateDescriptionModel.purpose } ProviderInfoSection { + id: providerInfo + + activeFocusOnTab: true + image: "qrc:///images/provider/information.svg" - title: qsTr("Service provider") + settingsModel.translationTrigger + //: LABEL DESKTOP_QML + title: qsTr("Service provider") + SettingsModel.translationTrigger name: certificateDescriptionModel.subjectName } } GButton { + id: moreButton + anchors.right: parent.right anchors.bottom: parent.bottom - text: qsTr("more...") + settingsModel.translationTrigger + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("more...") + SettingsModel.translationTrigger onClicked: showProviderInformation(true) } } } } - Text { - color: Constants.black - font.pixelSize: Constants.normal_font_size + GText { + id: dataIntroduction + anchors.left: parent.left anchors.right: parent.right anchors.margins: Constants.pane_padding - wrapMode: Text.WordWrap - text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger + + activeFocusOnTab: true + Accessible.role: Accessible.Heading + Accessible.name: dataIntroduction.text + + //: LABEL DESKTOP_QML + text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + SettingsModel.translationTrigger + textStyle: Style.text.normal_inverse + + FocusFrame { + dynamic: false + } } Pane { anchors.margins: Constants.pane_padding + anchors.left: parent.left + anchors.right: parent.right Column { id: transactionInfo + + visible: !!transactionText.text width: parent.width - visible: !!transactionInfoText.text + spacing: Constants.pane_spacing - Text { + GText { + id: transactionHeading + width: parent.width - text: qsTr("Transactional information") + settingsModel.translationTrigger - color: Constants.blue - font.pixelSize: Constants.pane_title_font_size - wrapMode: Text.WordWrap + + activeFocusOnTab: true + Accessible.role: Accessible.Section + Accessible.name: transactionHeading.text + + //: LABEL DESKTOP_QML + text: qsTr("Transactional information") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + + FocusFrame { + border.color: Constants.black + dynamic: false + } } - Text { - id: transactionInfoText + GText { + id: transactionText + width: parent.width + + activeFocusOnTab: true + Accessible.role: Accessible.Paragraph + Accessible.name: transactionText.text + text: AuthModel.transactionInfo - color: Constants.black - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + textStyle: Style.text.normal_inverse + + FocusFrame { + border.color: Constants.black + dynamic: false + } } } @@ -142,9 +242,11 @@ SectionPage { DataGroup { id: requiredData + width: columns * parent.columnWidth + ((columns - 1) * Constants.pane_spacing) - title: qsTr("Required Data") + settingsModel.translationTrigger + //: LABEL DESKTOP_QML + title: qsTr("Required Data") + SettingsModel.translationTrigger columns: !optionalData.visible ? 3 : count > optionalData.count ? 2 : 1 @@ -153,18 +255,27 @@ SectionPage { DataGroup { id: optionalData + width: columns * parent.columnWidth + ((columns - 1) * Constants.pane_spacing) - title: qsTr("Optional Data") + settingsModel.translationTrigger + //: LABEL DESKTOP_QML + title: qsTr("Optional Data") + SettingsModel.translationTrigger columns: 3 - (requiredData.visible ? requiredData.columns : 0) chat: chatModel.optional } } GButton { - icon.source: "qrc:///images/npa.svg" + id: confirmButton + anchors.right: parent.right - text: qsTr("Identify now") + settingsModel.translationTrigger + + activeFocusOnTab: true + Accessible.name: confirmButton.text + + icon.source: "qrc:///images/npa.svg" + //: LABEL DESKTOP_QML %1 can be CAN or PIN + text: qsTr("Proceed to %1 entry").arg(NumberModel.isCanAllowedMode ? "CAN" : "PIN") + SettingsModel.translationTrigger onClicked: { chatModel.transferAccessRights() AuthModel.continueWorkflow() @@ -175,7 +286,9 @@ SectionPage { CertificateDescriptionPage { id: certificateDescriptionPage + visible: root.detailView + onExit: showProviderInformation(false) } } diff --git a/resources/qml/Governikus/IdentifyView/+desktop/IdentifyController.qml b/resources/qml/Governikus/IdentifyView/+desktop/IdentifyController.qml index 26b796e..2872610 100644 --- a/resources/qml/Governikus/IdentifyView/+desktop/IdentifyController.qml +++ b/resources/qml/Governikus/IdentifyView/+desktop/IdentifyController.qml @@ -1,17 +1,22 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 import Governikus.Type.AuthModel 1.0 +import Governikus.Type.NumberModel 1.0 +import Governikus.Type.CardReturnCode 1.0 -SectionPage { +Controller { enum WorkflowStates { Initial, Reader, Card, Update, - Can, - Pin, + Password, Processing } @@ -20,7 +25,6 @@ SectionPage { property bool connectedToCard: false property int workflowState: 0 - property int workflowProgressValue: 0 property bool workflowProgressVisible: false states: [ @@ -47,22 +51,22 @@ SectionPage { target: AuthModel onFireCurrentStateChanged: processStateChange() // This is necessary because onCurrentStateChanged is not - // working, when we need to process a state a second time + // working, when we need to process a state a second time. } function showRemoveCardFeedback() { if (controller.connectedToCard) { controller.connectedToCard = false - qmlExtension.showFeedback(qsTr("You may now remove your ID card from the device.")) + //: INFO DESKTOP_QML The authentication process is completed, the id card may be removed from the card reader. + ApplicationModel.showFeedback(qsTr("You may now remove your ID card from the device.")) } } function processStateChange() { switch (AuthModel.currentState) { - case "": + case "Initial": break; case "StateGetTcToken": - // enterPinView.state = "INITIAL" controller.workflowState = IdentifyController.WorkflowStates.Initial break case "StateEditAccessRights": @@ -77,57 +81,50 @@ SectionPage { setIdentifyWorkflowStateAndContinue(IdentifyController.WorkflowStates.Card) break case "StateHandleRetryCounter": - controller.nextView(IdentifyView.SubViews.Progress) setIdentifyWorkflowStateAndContinue(IdentifyController.WorkflowStates.Update) break - case "StateEstablishPaceCan": - setIdentifyWorkflowStateAndRequestInput(IdentifyController.WorkflowStates.Can, "CAN") + case "StateEnterPacePassword": + controller.workflowState = IdentifyController.WorkflowStates.Password + if (AuthModel.isBasicReader) { + controller.nextView(IdentifyView.SubViews.Password) + } else { + AuthModel.continueWorkflow() + } break - case "StateEstablishPacePin": - setIdentifyWorkflowStateAndRequestInput(IdentifyController.WorkflowStates.Pin, "PIN") + case "StateUnfortunateCardPosition": + controller.nextView(IdentifyView.SubViews.CardPosition) break - case "StateDidAuthenticateEac1": - controller.workflowProgressVisible = true - controller.workflowProgressValue = 1 + case "StateSendDIDAuthenticateResponseEAC1": + controller.nextView(IdentifyView.SubViews.Progress) + if (NumberModel.inputErrorCode == CardReturnCode.OK) { + controller.workflowProgressVisible = true + } setIdentifyWorkflowStateAndContinue(IdentifyController.WorkflowStates.Processing) break - case "StateEstablishPacePuk": - AuthModel.cancelWorkflowOnPinBlocked() - break - case "StateDidAuthenticateEac2": - controller.workflowProgressValue = 2 - AuthModel.continueWorkflow() - break - case "StateTransmit": - controller.workflowProgressValue = 3 - AuthModel.continueWorkflow() - break case "StateCleanUpReaderManager": controller.connectedToCard = AuthModel.selectedReaderHasCard() && !AuthModel.isError; AuthModel.continueWorkflow() break; - case "StateCheckRefreshAddress": - controller.workflowProgressValue = 4 - AuthModel.continueWorkflow() - break case "StateWriteHistory": showRemoveCardFeedback() - controller.workflowProgressValue = 5 AuthModel.continueWorkflow() break - case "StateShowSelfInfo": - controller.nextView(IdentifyView.SubViews.Data) - break case "FinalState": if (AuthModel.error) { - showRemoveCardFeedback() - controller.nextView(IdentifyView.SubViews.Result) + if (AuthModel.shouldSkipResultView()) { + controller.nextView(IdentifyView.SubViews.ReturnToMain) + AuthModel.continueWorkflow() + } else { + showRemoveCardFeedback() + controller.nextView(IdentifyView.SubViews.Result) + } + } else if (ApplicationModel.currentWorkflow === "selfauthentication") { + controller.nextView(IdentifyView.SubViews.Data) } else { - AuthModel.continueWorkflow() controller.nextView(IdentifyView.SubViews.ReturnToMain) + AuthModel.continueWorkflow() } controller.workflowProgressVisible = false - controller.workflowProgressValue = 0 break default: AuthModel.continueWorkflow() @@ -138,14 +135,4 @@ SectionPage { controller.workflowState = pState AuthModel.continueWorkflow() } - - function setIdentifyWorkflowStateAndRequestInput(pState, pInput) { - controller.workflowState = pState - if (AuthModel.isBasicReader) { - // enterPinView.state = pInput - controller.nextView(IdentifyView.SubViews.Password) - } else { - AuthModel.continueWorkflow() - } - } } diff --git a/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml b/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml index c9680fa..7ae3165 100644 --- a/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml +++ b/resources/qml/Governikus/IdentifyView/+desktop/IdentifyView.qml @@ -1,50 +1,76 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 -import Governikus.EnterPinView 1.0 +import Governikus.EnterPasswordView 1.0 import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 +import Governikus.Style 1.0 import Governikus.ProgressView 1.0 import Governikus.ResultView 1.0 +import Governikus.SettingsView 1.0 +import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Workflow 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ChangePinModel 1.0 import Governikus.Type.AuthModel 1.0 import Governikus.Type.NumberModel 1.0 +import Governikus.Type.CardReturnCode 1.0 SectionPage { + id: identifyView + enum SubViews { - Connectivity = 1, + Undefined, + Connectivity, Progress, AccessRights, Workflow, Password, + PasswordInfo, + PasswordLength, + CardPosition, + InputError, Data, Result, - ReturnToMain + ReturnToMain, + ReaderSettings } - id: identifyView - - KeyNavigation.tab: visibleChildren.length > 1 ? visibleChildren[1] : navSuccessor - - Accessible.role: Accessible.Grouping - Accessible.name: qsTr("Identify view") + settingsModel.translationTrigger - Accessible.description: qsTr("This is the identify view of the AusweisApp2.") + settingsModel.translationTrigger - - readonly property var tabTarget: visibleChildren.length > 1 ? visibleChildren[1] : identifyView - - property int activeView: 0 + activeFocusOnTab: true + Keys.onEscapePressed: if (d.cancelAllowed) AuthModel.cancelWorkflow() titleBarAction: TitleBarAction { - text: qsTr("Identify") - showSettings: false - showHelp: false + //: LABEL DESKTOP_QML + text: qsTr("Identify") + SettingsModel.translationTrigger + rootEnabled: false + helpTopic: "ausweisenPage" + showSettings: (identifyController.workflowState === IdentifyController.WorkflowStates.Initial || + identifyController.workflowState === IdentifyController.WorkflowStates.Reader || + identifyController.workflowState === IdentifyController.WorkflowStates.Card) + && d.activeView !== IdentifyView.SubViews.Progress - onClicked: editRights.showProviderInformation(false) + onClicked: { + editRights.showProviderInformation(false) + if (d.activeView === IdentifyView.SubViews.PasswordInfo || d.activeView === IdentifyView.SubViews.PasswordLength) { + d.view = IdentifyView.SubViews.Password + ApplicationWindow.menuBar.updateActions() + } + else if (d.activeView === IdentifyView.SubViews.ReaderSettings) { + d.view = readerView.preceedingView + ApplicationWindow.menuBar.updateActions() + } + } customSubAction: CancelAction { + visible: d.cancelAllowed + onClicked: { if (identifyResult.visible) { AuthModel.continueWorkflow() @@ -54,113 +80,225 @@ SectionPage } } } + + customSettingsHandler: function(){ + readerView.preceedingView = d.activeView + d.view = IdentifyView.SubViews.ReaderSettings + ApplicationWindow.menuBar.updateActions() + } } -/* - content: IdentifyViewInfo { - id: identifyViewInfo - width: identifyEditChatView.width - height: identifyEditChatView.height + + QtObject { + id: d + + property int view: IdentifyView.SubViews.Undefined + readonly property int activeView: inputError.visible ? IdentifyView.SubViews.InputError : view + readonly property bool cancelAllowed: AuthModel.isBasicReader || generalWorkflow.waitingFor != Workflow.WaitingFor.Password } -*/ + + TabbedReaderView { + id: readerView + + property int preceedingView: IdentifyView.SubViews.Undefined + + visible: d.activeView === IdentifyView.SubViews.ReaderSettings + onCloseView: { + d.view = preceedingView + ApplicationWindow.menuBar.updateActions() + } + } + IdentifyController { id: identifyController onNextView: { - if (pName < 1) { - console.warn("Unknown view requested: " + pName) - return; - } - if (pName === IdentifyView.SubViews.ReturnToMain) { identifyView.nextView(SectionPage.Views.Main) return; } - identifyView.activeView = pName + d.view = pName } } + ProgressView { + id: checkConnectivityView + + visible: d.activeView === IdentifyView.SubViews.Connectivity + + //: INFO DESKTOP_QML Header of the message that no network connection is present during the authentication procedure. + text: qsTr("No network connectivity") + SettingsModel.translationTrigger + //: INFO DESKTOP_QML Content of the message that no network connection is present during the authentication procedure. + subText: qsTr("Please enable the network interface or cancel the workflow.") + SettingsModel.translationTrigger + subTextColor: Constants.red + } + EditRights { id: editRights - visible: identifyView.activeView === IdentifyView.SubViews.AccessRights + + visible: d.activeView === IdentifyView.SubViews.AccessRights } - SelfAuthenticationData { - visible: identifyView.activeView === IdentifyView.SubViews.Data - onVisibleChanged: ApplicationWindow.menuBar.updateActions() - } -/* - IdentifyWorkflow { - id: identifyWorkflow - visible: false - } + GeneralWorkflow { + id: generalWorkflow - EnterPinView { - id: enterPinView - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger } - visible: false + visible: d.activeView === IdentifyView.SubViews.Workflow - onPinEntered: { - firePop() - AuthModel.continueWorkflow() + isPinChange: false + waitingFor: switch (identifyController.workflowState) { + case IdentifyController.WorkflowStates.Reader: + return Workflow.WaitingFor.Reader + case IdentifyController.WorkflowStates.Card: + return Workflow.WaitingFor.Card + case IdentifyController.WorkflowStates.Password: + return Workflow.WaitingFor.Password + default: + return Workflow.WaitingFor.None } } -*/ + + EnterPasswordView { + id: enterPasswordView + + visible: d.activeView === IdentifyView.SubViews.Password + + onPasswordEntered: { + d.view = IdentifyView.SubViews.Progress + AuthModel.continueWorkflow() + } + + onChangePinLength: { + d.view = IdentifyView.SubViews.PasswordLength + ApplicationWindow.menuBar.updateActions() + } + + onRequestPasswordInfo: { + d.view = IdentifyView.SubViews.PasswordInfo + ApplicationWindow.menuBar.updateActions() + } + } + + PasswordInfoView { + id: passwordInfoView + + visible: d.activeView === IdentifyView.SubViews.PasswordInfo + + onClose: { + d.view = IdentifyView.SubViews.Password + ApplicationWindow.menuBar.updateActions() + } + } + + ResultView { + id: passwordLengthView + + visible: d.activeView === IdentifyView.SubViews.PasswordLength + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Transport PIN") + SettingsModel.translationTrigger + rootEnabled: false + helpTopic: "pinTab" + customSubAction: CancelAction { + onClicked: { + d.view = IdentifyView.SubViews.Password + ApplicationWindow.menuBar.updateActions() + } + } + } + resultType: ResultView.Type.IsInfo + //: INFO DESKTOP_QML The user clicked that the current PIN has 5 digits (transport PIN) which needs to be changed to a 6-digit PIN. The current process will be aborted and needs to be restarted *manually* by the user. + text: qsTr("You have to change your transport PIN into a personal PIN to use the online ID function. You are currently leaving the started process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed.") + SettingsModel.translationTrigger + onNextView: { + ChangePinModel.startWorkflow() + AuthModel.cancelWorkflowToChangePin() + } + } + + ResultView { + id: inputError + + property bool errorConfirmed: false + + visible: !errorConfirmed && NumberModel.hasPasswordError && d.view != IdentifyView.SubViews.Result + + resultType: ResultView.Type.IsError + text: NumberModel.inputError + onNextView: errorConfirmed = true + + Connections { + target: NumberModel + onFireInputErrorChanged: inputError.errorConfirmed = false + } + } + + ResultView { + id: cardPositionView + + visible: d.activeView === IdentifyView.SubViews.CardPosition + + resultType: ResultView.Type.IsInfo + //: INFO DESKTOP_QML A weak NFC signal was detected since the card communication was aborted. The card's position needs to be adjusted to hopefully achieve better signal strength. + text: qsTr("Weak NFC signal.\nPlease reposition your card.") + SettingsModel.translationTrigger + onNextView: AuthModel.continueWorkflow() + } ProgressView { id: identifyProgressView readonly property bool inProgress: identifyController.workflowState !== IdentifyController.WorkflowStates.Initial - visible: identifyView.activeView === IdentifyView.SubViews.Progress - text: (inProgress ? qsTr("Authentication in progress") : qsTr("Acquiring provider certificate")) + settingsModel.translationTrigger + visible: d.activeView === IdentifyView.SubViews.Progress + + //: INFO DESKTOP_QML Header of the progress information during the authentication process. + text: (inProgress ? qsTr("Authentication in progress") : qsTr("Acquiring provider certificate")) + SettingsModel.translationTrigger subText: { - settingsModel.translationTrigger; + SettingsModel.translationTrigger; if (!visible) { return "" } if (AuthModel.isBasicReader) { + //: INFO DESKTOP_QML Second line text if a basic card reader is used and data is exchanged with the card/server in the background. Is not actually visible since the basic reader password handling is done by EnterPasswordView. return qsTr("Please wait a moment...") } if (!!NumberModel.inputError) { return NumberModel.inputError } if (NumberModel.pinDeactivated) { + //: INFO DESKTOP_QML The online authentication feature of the id card is deactivated and needs to be activated by the local authorities. return qsTr("The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function.") } + //: INFO DESKTOP_QML Generic progress status message during authentication. return qsTr("Please wait a moment...") } - subTextColor: !AuthModel.isBasicReader && (NumberModel.inputError || NumberModel.pinDeactivated) ? "red" : Constants.secondary_text - progressValue: identifyController.workflowProgressValue - progressText: (progressValue === 0 ? "" : - progressValue === 1 ? qsTr("Service provider is being verified") : - progressValue === 2 ? qsTr("Card is being verified") : - progressValue === 3 ? qsTr("Reading data") : - progressValue === 4 ? qsTr("Sending data to service provider") : - progressValue === 5 ? qsTr("Preparing results") : - "") + settingsModel.translationTrigger + subTextColor: !AuthModel.isBasicReader && (NumberModel.inputError || NumberModel.pinDeactivated) ? Style.color.warning_text : Style.color.secondary_text + progressValue: AuthModel.progressValue + progressText: AuthModel.progressMessage progressBarVisible: identifyController.workflowProgressVisible } - ProgressView { - id: checkConnectivityView - visible: identifyView.activeView === IdentifyView.SubViews.Connectivity - text: qsTr("No network connectivity") + settingsModel.translationTrigger - subText: qsTr("Please enable the network interface or cancel the workflow.") + settingsModel.translationTrigger - subTextColor: Constants.red + SelfAuthenticationData { + visible: d.activeView === IdentifyView.SubViews.Data + + onVisibleChanged: ApplicationWindow.menuBar.updateActions() + onNextView: { + identifyView.nextView(pName) + AuthModel.continueWorkflow() + } } ResultView { id: identifyResult - navSuccessor: identifyView.navSuccessor - isError: AuthModel.resultString + visible: d.activeView === IdentifyView.SubViews.Result + + resultType: AuthModel.resultString ? ResultView.Type.IsError : ResultView.Type.IsSuccess text: AuthModel.resultString onNextView: { - AuthModel.continueWorkflow() identifyView.nextView(pName) + AuthModel.continueWorkflow() } - visible: identifyView.activeView === IdentifyView.SubViews.Result + emailButtonVisible: AuthModel.resultString + onEmailButtonPressed: AuthModel.sendResultMail() } } diff --git a/resources/qml/Governikus/IdentifyView/+desktop/SelfAuthenticationData.qml b/resources/qml/Governikus/IdentifyView/+desktop/SelfAuthenticationData.qml index bf57822..990b75f 100644 --- a/resources/qml/Governikus/IdentifyView/+desktop/SelfAuthenticationData.qml +++ b/resources/qml/Governikus/IdentifyView/+desktop/SelfAuthenticationData.qml @@ -1,73 +1,118 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 -import Governikus.Type.AuthModel 1.0 - import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.AuthModel 1.0 +import Governikus.Type.SelfAuthModel 1.0 SectionPage { + id: baseItem + + Accessible.name: qsTr("Self-authentication data view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the self-authentication data view of the AusweisApp2.") + SettingsModel.translationTrigger + Keys.onReturnPressed: okButton.onClicked() + Keys.onEnterPressed: okButton.onClicked() + Keys.onEscapePressed: okButton.onClicked() + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML text: qsTr("Read data") - showSettings: false + rootEnabled: false showHelp: false } Row { id: statusRow + height: parent.height / 4 anchors.top: parent.top anchors.topMargin: Constants.component_spacing anchors.horizontalCenter: parent.horizontalCenter - height: parent.height / 4 + spacing: Constants.component_spacing StatusIcon { - height: ApplicationModel.scaleFactor * 200 + height: Style.dimens.status_icon_medium anchors.verticalCenter: parent.verticalCenter + source: "qrc:///images/status_ok.svg" } - Text { + GText { id: successText + anchors.verticalCenter: parent.verticalCenter - text: qsTr("Successfull reading data") + settingsModel.translationTrigger - font.pixelSize: Constants.header_font_size - color: Constants.white + + activeFocusOnTab: true + Accessible.name: successText.text + + //: INFO DESKTOP_QML Status message that the self authentication successfully completed. + text: qsTr("Successfully read data") + SettingsModel.translationTrigger + textStyle: Style.text.header + + FocusFrame {} } } Pane { id: pane + anchors.top: statusRow.bottom + anchors.left: parent.left + anchors.right: parent.right anchors.margins: Constants.pane_padding - title: qsTr("Read data") + settingsModel.translationTrigger + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + title: qsTr("Read data") + SettingsModel.translationTrigger Grid { id: grid + width: parent.width + columns: 3 - spacing: Utils.dp(15) + spacing: Constants.groupbox_spacing verticalItemAlignment: Grid.AlignTop + Repeater { - model: selfAuthModel + id: dataRepeater + model: SelfAuthModel LabeledText { + width: (pane.width - 2 * Constants.pane_padding - (grid.columns - 1) * grid.spacing) / grid.columns + + activeFocusOnTab: true + label: name text: value === "" ? "---" : value - width: (pane.width - 2 * Constants.pane_padding - (grid.columns - 1) * grid.spacing) / grid.columns } } } GButton { id: okButton + anchors.right: parent.right - text: qsTr("OK") + settingsModel.translationTrigger - onClicked: AuthModel.continueWorkflow() + + activeFocusOnTab: true + Accessible.name: okButton.text + + //: LABEL DESKTOP_QML + text: qsTr("OK") + SettingsModel.translationTrigger + onClicked: baseItem.nextView(SectionPage.Views.Main) } } } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/+android/+phone/EditRights.qml b/resources/qml/Governikus/IdentifyView/+mobile/+android/+phone/EditRights.qml index 39a0479..da2ee63 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/+android/+phone/EditRights.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/+android/+phone/EditRights.qml @@ -1,19 +1,29 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtGraphicalEffects 1.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 import Governikus.Type.AuthModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.NumberModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: "cancel" onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID_PHONE + title: qsTr("Identify") + SettingsModel.translationTrigger content: Column { width: baseItem.width @@ -23,12 +33,10 @@ SectionPage { width: parent.width - 2 * Constants.pane_padding spacing: Constants.component_spacing - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE + text: qsTr("You are about to identify yourself towards the following service provider:") + SettingsModel.translationTrigger } Pane { @@ -46,24 +54,32 @@ SectionPage { ProviderInfoSection { imageSource: "qrc:///images/provider/information.svg" - title: qsTr("Service provider") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE + title: qsTr("Service provider") + SettingsModel.translationTrigger name: certificateDescriptionModel.subjectName } ProviderInfoSection { imageSource: "qrc:///images/provider/purpose.svg" - title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE + title: qsTr("Purpose for reading out requested data") + SettingsModel.translationTrigger name: certificateDescriptionModel.purpose } } - Text { + Image { id: forwardAction anchors.right: parent.right anchors.verticalCenter: providerEntries.verticalCenter - text: ">" - font.pixelSize: Utils.dp(22) - color: Constants.grey + sourceSize.height: Style.dimens.small_icon_size + fillMode: Image.PreserveAspectFit + source: "qrc:///images/arrowRight.svg" + + ColorOverlay { + anchors.fill: forwardAction + source: forwardAction + color: Style.color.secondary_text + } } MouseArea { @@ -82,19 +98,19 @@ SectionPage { GButton { iconSource: "qrc:///images/npa.svg" anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Identify now") + settingsModel.translationTrigger; + //: LABEL ANDROID_PHONE %1 can be CAN or PIN + text: qsTr("Proceed to %1 entry").arg(NumberModel.isCanAllowedMode ? "CAN" : "PIN") + SettingsModel.translationTrigger onClicked: { chatModel.transferAccessRights() AuthModel.continueWorkflow() } } - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger + + //: LABEL ANDROID_PHONE + text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + SettingsModel.translationTrigger } Pane { @@ -109,27 +125,29 @@ SectionPage { PaneTitle { height: implicitHeight * 1.5 verticalAlignment: Text.AlignTop - text: qsTr("Transactional information") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE + text: qsTr("Transactional information") + SettingsModel.translationTrigger } - Text { + GText { id: transactionInfoText - color: Constants.secondary_text width: parent.width - font.pixelSize: Constants.normal_font_size + text: AuthModel.transactionInfo - wrapMode: Text.WordWrap + textStyle: Style.text.normal } } DataGroup { - title: qsTr("Required Data") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE + title: qsTr("Required Data") + SettingsModel.translationTrigger chat: chatModel.required } DataGroup { - title: qsTr("Optional Data") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE + title: qsTr("Optional Data") + SettingsModel.translationTrigger chat: chatModel.optional } } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/+android/+tablet/EditRights.qml b/resources/qml/Governikus/IdentifyView/+mobile/+android/+tablet/EditRights.qml index c11317d..2aea769 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/+android/+tablet/EditRights.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/+android/+tablet/EditRights.qml @@ -1,19 +1,28 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 import Governikus.Type.AuthModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.NumberModel 1.0 + SectionPage { id: root - leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: "cancel" onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID_TABLET + title: qsTr("Identify") + SettingsModel.translationTrigger content: Column { width: baseItem.width @@ -23,12 +32,11 @@ SectionPage { width: parent.width - 2 * Constants.pane_padding spacing: Constants.pane_spacing - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger + + //: LABEL ANDROID_TABLET + text: qsTr("You are about to identify yourself towards the following service provider:") + SettingsModel.translationTrigger } Pane { @@ -51,12 +59,14 @@ SectionPage { ProviderInfoSection { imageSource: "qrc:///images/provider/information.svg" - title: qsTr("Service provider") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + title: qsTr("Service provider") + SettingsModel.translationTrigger name: certificateDescriptionModel.subjectName } ProviderInfoSection { imageSource: "qrc:///images/provider/purpose.svg" - title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + title: qsTr("Purpose for reading out requested data") + SettingsModel.translationTrigger name: certificateDescriptionModel.purpose } } @@ -83,7 +93,8 @@ SectionPage { iconSource: "qrc:///images/npa.svg" anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter - text: qsTr("Identify now") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET %1 can be CAN or PIN + text: qsTr("Proceed to %1 entry").arg(NumberModel.isCanAllowedMode ? "CAN" : "PIN") + SettingsModel.translationTrigger onClicked: { chatModel.transferAccessRights() AuthModel.continueWorkflow() @@ -93,19 +104,18 @@ SectionPage { } } - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger + + //: LABEL ANDROID_TABLET + text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + SettingsModel.translationTrigger } Pane { Column { height: childrenRect.height width: parent.width - spacing: Utils.dp(30) + spacing: 30 Column { id: transactionInfo @@ -116,17 +126,17 @@ SectionPage { PaneTitle { height: implicitHeight * 1.5 verticalAlignment: Text.AlignTop - text: qsTr("Transactional information") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + text: qsTr("Transactional information") + SettingsModel.translationTrigger } - Text { + GText { id: transactionInfoText - color: Constants.secondary_text width: parent.width - font.pixelSize: Constants.normal_font_size + text: AuthModel.transactionInfo - wrapMode: Text.WordWrap + textStyle: Style.text.normal_secondary } } @@ -138,7 +148,8 @@ SectionPage { id: requiredData width: optionalData.visible ? parent.width * 0.63 : parent.width - title: qsTr("Required Data") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + title: qsTr("Required Data") + SettingsModel.translationTrigger columns: optionalData.visible ? 2 : 3 chat: chatModel.required } @@ -147,7 +158,8 @@ SectionPage { id: optionalData width: parent.width * 0.37 - Constants.pane_spacing - title: qsTr("Optional Data") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + title: qsTr("Optional Data") + SettingsModel.translationTrigger chat: chatModel.optional } } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/+android/DataGroup.qml b/resources/qml/Governikus/IdentifyView/+mobile/+android/DataGroup.qml index 54f74b0..35e9649 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/+android/DataGroup.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/+android/DataGroup.qml @@ -1,7 +1,13 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 Rectangle { @@ -28,22 +34,22 @@ Rectangle { Rectangle { width: parent.width - height: Utils.dp(40) + height: 40 visible: repeater.count < 1 - Text { + GText { id: emptyText - color: Constants.secondary_text + anchors.verticalCenter: parent.verticalCenter width: parent.width - font.pixelSize: Constants.normal_font_size - text: qsTr("No data requested") + settingsModel.translationTrigger + + //: LABEL ANDROID + text: qsTr("No data requested") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } - Rectangle { + GSeparator { anchors.top: parent.bottom anchors.topMargin: -height - height: 1 width: parent.width - color: Constants.grey } } @@ -61,26 +67,25 @@ Rectangle { Rectangle { width: (grid.width - ((grid.columns - 1) * grid.columnSpacing)) / grid.columns - height: Utils.dp(40) - color: "white" + height: 40 + color: Constants.white - Text { + GText { id: text - color: Constants.secondary_text + anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.right: checkBox.left - font.pixelSize: Constants.normal_font_size + text: name - wrapMode: Text.WordWrap + textStyle: Style.text.normal_secondary } - Rectangle { + GSeparator { anchors.top: parent.bottom anchors.topMargin: -height - height: 1 width: parent.width - color: Constants.grey + visible: index < repeater.count - 1 } GCheckBox { @@ -99,7 +104,7 @@ Rectangle { anchors.centerIn: parent width: root.width height: parent.height - color: Constants.accent_color + color: Style.color.accent opacity: parent.pressed ? 0.5 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/DataGroup.qml b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/DataGroup.qml index 5005d4a..17d16f3 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/DataGroup.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/DataGroup.qml @@ -1,42 +1,62 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 Pane { + id: pane + + signal scrollPageUp() + signal scrollPageDown() + property alias chat: repeater.model - id: pane - spacing: 0 visible: repeater.count > 0 + contentSpacing: 0 + Repeater { id: repeater Rectangle { width: parent.width - height: Utils.dp(40) + height: 40 + + Accessible.role: Accessible.ListItem + Accessible.name: name + Accessible.checkable: true + Accessible.checked: checkBox.checked + Accessible.onPressAction: if (optional) selected = !selected + Accessible.onScrollDownAction: baseItem.scrollPageDown() + Accessible.onScrollUpAction: baseItem.scrollPageUp() + radius: 3 - color: "white" - Text { + color: Constants.white + + GText { id: dataGroup - color: Constants.secondary_text + anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter anchors.right: checkBox.left width: parent.width - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + + Accessible.ignored: true + text: name + textStyle: Style.text.normal_secondary } - Rectangle { + GSeparator { anchors.top: parent.bottom anchors.topMargin: -height - height: 1 anchors.left: dataGroup.left anchors.right: dataGroup.right - color: Constants.grey } GCheckBox { id: checkBox diff --git a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/EditRights.qml b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/EditRights.qml index e6870f5..632cc1a 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/EditRights.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+phone/EditRights.qml @@ -1,35 +1,45 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtGraphicalEffects 1.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 import Governikus.Type.AuthModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.NumberModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: "cancel" onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + //: LABEL IOS_PHONE + title: qsTr("Identify") + SettingsModel.translationTrigger content: Column { - width: baseItem.width - padding: Constants.pane_padding + width: baseItem.width + padding: Constants.pane_padding - Column { - width: parent.width - 2 * Constants.pane_padding + Column { + width: parent.width - 2 * Constants.pane_padding spacing: Constants.component_spacing - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger + + //: LABEL IOS_PHONE + text: qsTr("You are about to identify yourself towards the following service provider:") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } Pane { @@ -38,6 +48,9 @@ SectionPage { width: parent.width height: providerEntries.height + Accessible.description: qsTr("Click for more information about the service provider") + SettingsModel.translationTrigger + Accessible.onPressAction: mouseArea.clicked(null) + Column { id: providerEntries anchors.top: parent.top @@ -47,28 +60,39 @@ SectionPage { ProviderInfoSection { imageSource: "qrc:///images/provider/information.svg" - title: qsTr("Service provider") + settingsModel.translationTrigger + //: LABEL IOS_PHONE + title: qsTr("Service provider") + SettingsModel.translationTrigger name: certificateDescriptionModel.subjectName } ProviderInfoSection { imageSource: "qrc:///images/provider/purpose.svg" - title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger + //: LABEL IOS_PHONE + title: qsTr("Purpose for reading out requested data") + SettingsModel.translationTrigger name: certificateDescriptionModel.purpose } } - Text { + Image { id: forwardAction anchors.right: parent.right anchors.verticalCenter: providerEntries.verticalCenter - text: ">" - font.pixelSize: Utils.dp(22) - color: Constants.grey + sourceSize.height: Style.dimens.small_icon_size + fillMode: Image.PreserveAspectFit + source: "qrc:///images/arrowRight.svg" + + ColorOverlay { + anchors.fill: forwardAction + source: forwardAction + color: Style.color.secondary_text + } } MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: firePush(certificateDescriptionPage) } @@ -83,44 +107,53 @@ SectionPage { GButton { iconSource: "qrc:///images/npa.svg" anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Identify now") + settingsModel.translationTrigger; + //: LABEL IOS_PHONE %1 can be CAN or PIN + text: qsTr("Proceed to %1 entry").arg(NumberModel.isCanAllowedMode ? "CAN" : "PIN") + SettingsModel.translationTrigger onClicked: { chatModel.transferAccessRights() AuthModel.continueWorkflow() } } - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger + + //: LABEL IOS_PHONE + text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } Pane { id: transactionInfo - title: qsTr("Transactional information") + settingsModel.translationTrigger + //: LABEL IOS_PHONE + title: qsTr("Transactional information") + SettingsModel.translationTrigger visible: !!transactionInfoText.text - Text { + GText { id: transactionInfoText - color: Constants.secondary_text width: parent.width - font.pixelSize: Constants.normal_font_size + text: AuthModel.transactionInfo - wrapMode: Text.WordWrap + textStyle: Style.text.normal_secondary } } DataGroup { - title: qsTr("Required Data") + settingsModel.translationTrigger + onScrollPageDown: baseItem.scrollPageDown() + onScrollPageUp: baseItem.scrollPageUp() + + //: LABEL IOS_PHONE + title: qsTr("Required Data") + SettingsModel.translationTrigger chat: chatModel.required } DataGroup { - title: qsTr("Optional Data") + settingsModel.translationTrigger + onScrollPageDown: baseItem.scrollPageDown() + onScrollPageUp: baseItem.scrollPageUp() + + //: LABEL IOS_PHONE + title: qsTr("Optional Data") + SettingsModel.translationTrigger chat: chatModel.optional } } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/DataGroup.qml b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/DataGroup.qml index 98c7ac7..44d5211 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/DataGroup.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/DataGroup.qml @@ -1,11 +1,21 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 Rectangle { id: root + + signal scrollPageUp() + signal scrollPageDown() + property string title; property int columns: 1 property var chat @@ -28,22 +38,22 @@ Rectangle { Rectangle { width: parent.width - height: Utils.dp(40) + height: 40 visible: repeater.count < 1 - Text { - color: Constants.secondary_text + GText { id: emptyText + anchors.verticalCenter: parent.verticalCenter width: parent.width - font.pixelSize: Constants.normal_font_size - text: qsTr("No data requested") + settingsModel.translationTrigger + + //: LABEL IOS_TABLET + text: qsTr("No data requested") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } - Rectangle { + GSeparator { anchors.top: parent.bottom anchors.topMargin: -height - height: 1 width: parent.width - color: Constants.grey } } @@ -61,26 +71,27 @@ Rectangle { Rectangle { width: (grid.width - ((grid.columns - 1) * grid.columnSpacing)) / grid.columns - height: Utils.dp(40) - color: "white" + height: 40 + color: Constants.white - Text { + GText { id: text - color: Constants.secondary_text + + Accessible.onScrollDownAction: baseItem.scrollPageDown() + Accessible.onScrollUpAction: baseItem.scrollPageUp() + anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.right: checkBox.left - font.pixelSize: Constants.normal_font_size + text: name - wrapMode: Text.WordWrap + textStyle: Style.text.normal_secondary } - Rectangle { + GSeparator { anchors.top: parent.bottom anchors.topMargin: -height - height: 1 width: parent.width - color: Constants.grey } GCheckBox { @@ -99,7 +110,7 @@ Rectangle { anchors.centerIn: parent width: root.width height: parent.height - color: Constants.accent_color + color: Style.color.accent opacity: parent.pressed ? 0.5 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/EditRights.qml b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/EditRights.qml index d28d8ca..7eb8e69 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/EditRights.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/+ios/+tablet/EditRights.qml @@ -1,19 +1,29 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtGraphicalEffects 1.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 import Governikus.Type.AuthModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.NumberModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: "cancel" onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + //: LABEL IOS_TABLET + title: qsTr("Identify") + SettingsModel.translationTrigger content: Column { width: baseItem.width @@ -21,14 +31,13 @@ SectionPage { Column { width: parent.width - 2 * Constants.pane_padding - spacing: Constants.component_spacing + spacing: Constants.component_spacing - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger + + //: LABEL IOS_TABLET + text: qsTr("You are about to identify yourself towards the following service provider:") + SettingsModel.translationTrigger } Pane { @@ -37,6 +46,9 @@ SectionPage { width: parent.width height: providerEntries.height + Accessible.description: qsTr("Click for more information about the service provider") + SettingsModel.translationTrigger + Accessible.onPressAction: mouseArea.clicked(null) + Column { id: providerEntries anchors.top: parent.top @@ -46,28 +58,39 @@ SectionPage { ProviderInfoSection { imageSource: "qrc:///images/provider/information.svg" - title: qsTr("Service provider") + settingsModel.translationTrigger + //: LABEL IOS_TABLET + title: qsTr("Service provider") + SettingsModel.translationTrigger name: certificateDescriptionModel.subjectName } ProviderInfoSection { imageSource: "qrc:///images/provider/purpose.svg" - title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger + //: LABEL IOS_TABLET + title: qsTr("Purpose for reading out requested data") + SettingsModel.translationTrigger name: certificateDescriptionModel.purpose } } - Text { + Image { id: forwardAction anchors.right: parent.right anchors.verticalCenter: providerEntries.verticalCenter - text: ">" - font.pixelSize: Utils.dp(22) - color: Constants.grey + sourceSize.height: Style.dimens.small_icon_size + fillMode: Image.PreserveAspectFit + source: "qrc:///images/arrowRight.svg" + + ColorOverlay { + anchors.fill: forwardAction + source: forwardAction + color: Style.color.secondary_text + } } MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: firePush(certificateDescriptionPage) } @@ -82,26 +105,26 @@ SectionPage { GButton { iconSource: "qrc:///images/npa.svg" anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Identify now") + settingsModel.translationTrigger; + //: LABEL IOS_TABLET %1 can be CAN or PIN + text: qsTr("Proceed to %1 entry").arg(NumberModel.isCanAllowedMode ? "CAN" : "PIN") + SettingsModel.translationTrigger onClicked: { chatModel.transferAccessRights() AuthModel.continueWorkflow() } } - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { width: parent.width - wrapMode: Text.WordWrap - text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger + + //: LABEL IOS_TABLET + text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + SettingsModel.translationTrigger } Pane { Column { height: childrenRect.height width: parent.width - spacing: Utils.dp(30) + spacing: 30 Column { id: transactionInfo @@ -112,17 +135,17 @@ SectionPage { PaneTitle { height: implicitHeight * 1.5 verticalAlignment: Text.AlignTop - text: qsTr("Transactional information") + settingsModel.translationTrigger + //: LABEL IOS_TABLET + text: qsTr("Transactional information") + SettingsModel.translationTrigger } - Text { + GText { id: transactionInfoText - color: Constants.secondary_text width: parent.width - font.pixelSize: Constants.normal_font_size + text: AuthModel.transactionInfo - wrapMode: Text.WordWrap + textStyle: Style.text.normal_secondary } } @@ -132,9 +155,14 @@ SectionPage { DataGroup { id: requiredData + width: optionalData.visible ? parent.width * 0.63 : parent.width - title: qsTr("Required Data") + settingsModel.translationTrigger + onScrollPageDown: baseItem.scrollPageDown() + onScrollPageUp: baseItem.scrollPageUp() + + //: LABEL IOS_TABLET + title: qsTr("Required Data") + SettingsModel.translationTrigger columns: optionalData.visible ? 2 : 3 chat: chatModel.required } @@ -143,7 +171,11 @@ SectionPage { id: optionalData width: parent.width * 0.37 - Constants.pane_spacing - title: qsTr("Optional Data") + settingsModel.translationTrigger + onScrollPageDown: baseItem.scrollPageDown() + onScrollPageUp: baseItem.scrollPageUp() + + //: LABEL IOS_TABLET + title: qsTr("Optional Data") + SettingsModel.translationTrigger chat: chatModel.optional } } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/CertificateDescriptionPage.qml b/resources/qml/Governikus/IdentifyView/+mobile/CertificateDescriptionPage.qml index de7446d..8db3d80 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/CertificateDescriptionPage.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/CertificateDescriptionPage.qml @@ -1,14 +1,20 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: root - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: name; font.bold: true } + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + title: name property string name @@ -24,7 +30,8 @@ SectionPage Pane { id: pane - title: qsTr("Provider Information") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + title: qsTr("Provider Information") + SettingsModel.translationTrigger Repeater { id: listView diff --git a/resources/qml/Governikus/IdentifyView/+mobile/IdentifyController.qml b/resources/qml/Governikus/IdentifyView/+mobile/IdentifyController.qml index 15c875f..b75992d 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/IdentifyController.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/IdentifyController.qml @@ -1,10 +1,15 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.AuthModel 1.0 import Governikus.Type.NumberModel 1.0 import Governikus.Type.ReaderPlugIn 1.0 -import Governikus.Type.PacePasswordId 1.0 + Item { enum WorkflowStates { @@ -28,7 +33,6 @@ Item { property bool connectedToCard: false property int workflowState: 0 - property int workflowProgressValue: 0 property bool workflowProgressVisible: false function sufficientBluetoothRights() { @@ -80,13 +84,20 @@ Item { function showRemoveCardFeedback() { if (controller.connectedToCard) { controller.connectedToCard = false - qmlExtension.showFeedback(qsTr("You may now remove your ID card from the device.")) + + // The feedback notification will crash Apple's VoiceOver if it happens at the same time the app is redirecting back to the browser. This + // happens with both the iOS toasts and our own toast-like replacement. To work around this, we'll only show the notification during a + // self-authentication on iOS with VoiceOver running: + if (Qt.platform.os !== "ios" || !ApplicationModel.isScreenReaderRunning() || ApplicationModel.currentWorkflow === "selfauthentication") { + //: INFO ANDROID IOS The authentication process is completed, the id card may (and should) be removed from the card reader. + ApplicationModel.showFeedback(qsTr("You may now remove your ID card from the device.")) + } } } function processStateChange() { switch (AuthModel.currentState) { - case "": + case "Initial": break; case "StateGetTcToken": enterPinView.state = "INITIAL" @@ -118,54 +129,42 @@ Item { setIdentifyWorkflowStateAndContinue(IdentifyController.WorkflowStates.Update) break case "StateEnterPacePassword": - if (NumberModel.establishPaceChannelType == PacePasswordId.PACE_PIN) { + if (NumberModel.passwordType === NumberModel.PASSWORD_PIN) { setIdentifyWorkflowStateAndRequestInput(IdentifyController.WorkflowStates.Pin, "PIN") } - else if (NumberModel.establishPaceChannelType == PacePasswordId.PACE_CAN) { + else if (NumberModel.passwordType === NumberModel.PASSWORD_CAN) { setIdentifyWorkflowStateAndRequestInput(IdentifyController.WorkflowStates.Can, "CAN") } - else if (NumberModel.establishPaceChannelType == PacePasswordId.PACE_PUK) { + else if (NumberModel.passwordType === NumberModel.PASSWORD_PUK) { AuthModel.cancelWorkflowOnPinBlocked() } break case "StateUnfortunateCardPosition": + //: INFO IOS The NFC signal is weak or unstable. The scan is stopped with this information in the iOS dialog. + ApplicationModel.stopNfcScanWithError(qsTr("Weak NFC signal") + SettingsModel.translationTrigger) firePush(cardPositionView) break case "StateDidAuthenticateEac1": controller.workflowProgressVisible = true - controller.workflowProgressValue = 1 setIdentifyWorkflowStateAndContinue(IdentifyController.WorkflowStates.Processing) break case "StateSendDIDAuthenticateResponseEAC1": fireReplace(identifyProgressView) AuthModel.continueWorkflow() break - case "StateDidAuthenticateEac2": - controller.workflowProgressValue = 2 - AuthModel.continueWorkflow() - break - case "StateTransmit": - controller.workflowProgressValue = 3 - AuthModel.continueWorkflow() - break case "StateCleanUpReaderManager": controller.connectedToCard = AuthModel.selectedReaderHasCard() && !AuthModel.isError; AuthModel.continueWorkflow() break; - case "StateCheckRefreshAddress": - controller.workflowProgressValue = 4 - AuthModel.continueWorkflow() - break case "StateWriteHistory": showRemoveCardFeedback() - controller.workflowProgressValue = 5 AuthModel.continueWorkflow() break case "StateShowSelfInfo": firePush(selfAuthenticationData) break case "StateSendWhitelistSurvey": - if (settingsModel.askForDeviceSurvey() && !AuthModel.error && d.readerPlugInType === ReaderPlugIn.NFC) { + if (SettingsModel.askForDeviceSurvey() && !AuthModel.error && d.readerPlugInType === ReaderPlugIn.NFC) { firePush(whiteListSurveyView) } else { AuthModel.continueWorkflow() @@ -173,7 +172,7 @@ Item { break case "FinalState": navBar.lockedAndHidden = true - if (AuthModel.error && !AuthModel.hasNextWorkflowPending) { + if (AuthModel.error && !AuthModel.hasNextWorkflowPending && !AuthModel.shouldSkipResultView()) { showRemoveCardFeedback() firePush(identifyResult) } else { @@ -182,7 +181,6 @@ Item { navBar.lockedAndHidden = false } controller.workflowProgressVisible = false - controller.workflowProgressValue = 0 break default: AuthModel.continueWorkflow() @@ -199,6 +197,7 @@ Item { if (AuthModel.isBasicReader) { enterPinView.state = pInput firePush(enterPinView) + ApplicationModel.nfcRunning = false } else { AuthModel.continueWorkflow() } diff --git a/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml b/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml index 058934a..aaa4099 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/IdentifyView.qml @@ -1,15 +1,21 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import Governikus.MainView 1.0 -import Governikus.EnterPinView 1.0 +import Governikus.EnterPasswordView 1.0 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.ProgressView 1.0 import Governikus.ResultView 1.0 +import Governikus.SelfAuthenticationView 1.0 import Governikus.WhiteListClient 1.0 import Governikus.View 1.0 import Governikus.Workflow 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.AuthModel 1.0 import Governikus.Type.NumberModel 1.0 import Governikus.Type.ChangePinModel 1.0 @@ -18,11 +24,12 @@ import Governikus.Type.ChangePinModel 1.0 SectionPage { id: identifyEditChatView - leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: ApplicationModel.currentWorkflow === "authentication" ? "cancel" : "" onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("Identify") + SettingsModel.translationTrigger // Workaround for "cold start" case, IdentifyController onCompleted fires too early, TabBarView // for this View is not ready with loading the initial stack item. firePush of the ProgressView @@ -45,7 +52,7 @@ SectionPage } } - content: MainView { + content: SelfAuthenticationView { width: identifyEditChatView.width height: identifyEditChatView.height } @@ -74,7 +81,7 @@ SectionPage visible: false onDone: { - settingsModel.setDeviceSurveyPending(pUserAccepted) + SettingsModel.setDeviceSurveyPending(pUserAccepted) firePop() AuthModel.continueWorkflow() } @@ -86,7 +93,8 @@ SectionPage controller: identifyController workflowModel: AuthModel - workflowTitle: qsTr("Identify") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + workflowTitle: qsTr("Identify") + SettingsModel.translationTrigger waitingFor: switch (identifyController.workflowState) { case IdentifyController.WorkflowStates.Reader: @@ -101,13 +109,14 @@ SectionPage } } - EnterPinView { + EnterPasswordView { id: enterPinView - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: { firePop(); AuthModel.cancelWorkflow() } } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger } + navigationAction: NavigationAction { state: "cancel"; onClicked: { firePop(); AuthModel.cancelWorkflow() } } + //: LABEL ANDROID IOS + title: qsTr("Identify") + SettingsModel.translationTrigger visible: false - onPinEntered: { + onPasswordEntered: { firePop() AuthModel.continueWorkflow() } @@ -119,66 +128,75 @@ SectionPage ProgressView { id: identifyProgressView - leftTitleBarAction: TitleBarAction { state: AuthModel.isBasicReader || identifyController.workflowProgressVisible ? "cancel" : "hidden"; onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction { state: AuthModel.isBasicReader || identifyController.workflowProgressVisible ? "cancel" : "hidden"; onClicked: AuthModel.cancelWorkflow() } + //: LABEL ANDROID IOS + title: qsTr("Identify") + SettingsModel.translationTrigger visible: false + //: LABEL ANDROID IOS text: (AuthModel.error ? qsTr("Cancel authentication process") : + //: INFO ANDROID IOS Header of the progress status message during the authentication process. identifyController.workflowState === IdentifyController.WorkflowStates.Initial ? qsTr("Acquiring provider certificate") : - qsTr("Authentication in progress")) + settingsModel.translationTrigger + //: INFO ANDROID IOS Header of the progress status message during the authentication process. + qsTr("Authentication in progress")) + SettingsModel.translationTrigger subText: { - settingsModel.translationTrigger; + SettingsModel.translationTrigger; if (!visible) { return "" } if (AuthModel.isBasicReader) { + //: INFO ANDROID IOS Second line text if a basic card reader is used and background communication with the card/server is running. Is not actually visible since the basic reader password handling is done by EnterPasswordView. return qsTr("Please wait a moment...") } if (!!NumberModel.inputError) { return NumberModel.inputError } if (NumberModel.pinDeactivated) { + //: INFO ANDROID IOS The online authentication feature of the id card is disabled and needs to be actived the be authorities. return qsTr("The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function.") } if (identifyController.workflowState === IdentifyController.WorkflowStates.Update || identifyController.workflowState === IdentifyController.WorkflowStates.Pin) { + //: INFO ANDROID IOS The card reader requests the user's attention. return qsTr("Please observe the display of your card reader.") } if (identifyController.workflowState === IdentifyController.WorkflowStates.Can) { + //: INFO ANDROID IOS The PIN was entered wrongfully two times, the third attempts requires additional CAN verification, hint where the CAN is found. return qsTr("You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card.") } + //: INFO ANDROID IOS Generic status message during the authentication process. return qsTr("Please wait a moment...") } subTextColor: !AuthModel.isBasicReader && (NumberModel.inputError || NumberModel.pinDeactivated || identifyController.workflowState === IdentifyController.WorkflowStates.Can) - ? "red" : Constants.secondary_text - progressValue: identifyController.workflowProgressValue - progressText: (progressValue === 0 ? "" : - progressValue === 1 ? qsTr("Service provider is being verified") : - progressValue === 2 ? qsTr("Card is being verified") : - progressValue === 3 ? qsTr("Reading data") : - progressValue === 4 ? qsTr("Sending data to service provider") : - progressValue === 5 ? qsTr("Preparing results") : - "") + settingsModel.translationTrigger + ? Style.color.warning_text : Style.color.secondary_text + progressValue: AuthModel.progressValue + progressText: AuthModel.progressMessage progressBarVisible: identifyController.workflowProgressVisible } ProgressView { id: checkConnectivityView - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: AuthModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction { state: "cancel"; onClicked: AuthModel.cancelWorkflow() } + //: LABEL ANDROID IOS + title: qsTr("Identify") + SettingsModel.translationTrigger visible: false - text: qsTr("No network connectivity") + settingsModel.translationTrigger - subText: qsTr("Please enable the network interface or cancel the workflow.") + settingsModel.translationTrigger - subTextColor: Constants.red + //: LABEL ANDROID IOS + text: qsTr("No network connectivity") + SettingsModel.translationTrigger + //: INFO ANDROID IOS No network connection, the user needs to active the network interface or abort the procedure. + subText: qsTr("Please enable the network interface or cancel the workflow.") + SettingsModel.translationTrigger + subTextColor: Style.color.warning_text } ResultView { id: changeToTransportPinView - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: fireReplace(enterPinView) } - headerTitleBarAction: TitleBarAction { text: qsTr("Change transport PIN") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction { state: "back"; onClicked: fireReplace(enterPinView) } + //: LABEL ANDROID IOS + title: qsTr("Change transport PIN") + SettingsModel.translationTrigger resultType: ResultView.Type.IsInfo - buttonText: qsTr("Change PIN") + settingsModel.translationTrigger - text: qsTr("You have to change your transport PIN into a personal PIN to use the online ID function. You are currently leaving the started process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + buttonText: qsTr("Change PIN") + SettingsModel.translationTrigger + //: INFO ANDROID IOS The user clicked that the current PIN has 5 digits (transport PIN), it needs to be changed to an ordinary 6 digit PIN. The current process needs to be restarted *manually* by the user. + text: qsTr("You have to change your transport PIN into a personal PIN to use the online ID function. You are currently leaving the started process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed.") + SettingsModel.translationTrigger onClicked: { firePop() AuthModel.setSkipRedirect(true) @@ -190,10 +208,13 @@ SectionPage ResultView { id: cardPositionView - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("Identify") + SettingsModel.translationTrigger resultType: ResultView.Type.IsInfo - buttonText: qsTr("Retry") + settingsModel.translationTrigger - text: qsTr("Weak NFC signal. Please reposition your card.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + buttonText: qsTr("Retry") + SettingsModel.translationTrigger + //: INFO ANDROID IOS The NFC signal is weak, by repositioning the card the signal might improve. + text: qsTr("Weak NFC signal. Please reposition your card.") + SettingsModel.translationTrigger onClicked: { firePop() AuthModel.continueWorkflow() @@ -203,7 +224,8 @@ SectionPage ResultView { id: identifyResult - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("Identify") + SettingsModel.translationTrigger resultType: AuthModel.resultString ? ResultView.Type.IsError : ResultView.Type.IsSuccess showMailButton: AuthModel.errorIsMasked text: AuthModel.resultString diff --git a/resources/qml/Governikus/IdentifyView/+mobile/SelfAuthenticationData.qml b/resources/qml/Governikus/IdentifyView/+mobile/SelfAuthenticationData.qml index 5ff099a..ab786f7 100644 --- a/resources/qml/Governikus/IdentifyView/+mobile/SelfAuthenticationData.qml +++ b/resources/qml/Governikus/IdentifyView/+mobile/SelfAuthenticationData.qml @@ -1,14 +1,24 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 import Governikus.Type.AuthModel 1.0 +import Governikus.Type.SelfAuthModel 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: root - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: root.done() } - headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true } + + navigationAction: NavigationAction { state: "cancel"; onClicked: root.done() } + //: LABEL ANDROID IOS + title: qsTr("Identify") + SettingsModel.translationTrigger signal done() @@ -24,7 +34,7 @@ SectionPage { Item { id: message - height: Utils.dp(60) + height: 60 width: resultIcon.width + Constants.component_spacing + successText.width anchors.horizontalCenter: parent.horizontalCenter @@ -36,14 +46,14 @@ SectionPage { source: "qrc:///images/status_ok.svg" } - Text { + GText { id: successText anchors.left: resultIcon.right anchors.leftMargin: Constants.component_spacing anchors.verticalCenter: resultIcon.verticalCenter - text: qsTr("Successfull reading data") + settingsModel.translationTrigger - font.pixelSize: Constants.is_tablet ? Constants.header_font_size : Constants.normal_font_size - color: Constants.blue + //: INFO ANDROID IOS The self authentication was successfully completed. + text: qsTr("Read data successfully") + SettingsModel.translationTrigger + textStyle: Constants.is_tablet ? Style.text.header_accent : Style.text.normal_accent } } @@ -56,15 +66,19 @@ SectionPage { id: grid width: parent.width columns: Constants.is_tablet ? 3 : 1 - spacing: Utils.dp(15) + spacing: 15 verticalItemAlignment: Grid.AlignBottom Repeater { - model: selfAuthModel + model: SelfAuthModel LabeledText { + width: (pane.width - 2 * Constants.pane_padding - (grid.columns - 1) * grid.spacing) / grid.columns + + Accessible.onScrollDownAction: root.scrollPageDown() + Accessible.onScrollUpAction: root.scrollPageUp() + label: name text: value === "" ? "---" : value - width: (pane.width - 2 * Constants.pane_padding - (grid.columns - 1) * grid.spacing) / grid.columns } } } @@ -77,7 +91,8 @@ SectionPage { anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: Constants.component_spacing - text: qsTr("OK") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("OK") + SettingsModel.translationTrigger onClicked: root.done() } } diff --git a/resources/qml/Governikus/InformationView/+desktop/DiagnosisView.qml b/resources/qml/Governikus/InformationView/+desktop/DiagnosisView.qml new file mode 100644 index 0000000..53985ff --- /dev/null +++ b/resources/qml/Governikus/InformationView/+desktop/DiagnosisView.qml @@ -0,0 +1,107 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.View 1.0 +import Governikus.Global 1.0 +import Governikus.TitleBar 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SelfDiagnosisModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +SectionPage { + id: sectionPage + + anchors.centerIn: parent + + Accessible.name: qsTr("Diagnosis view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the diagnosis view of the AusweisApp2.") + SettingsModel.translationTrigger + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Diagnosis") + SettingsModel.translationTrigger + } + + TabbedPane { + id: sectionContent + + anchors.fill: parent + anchors.margins: Constants.pane_padding + + sectionsModel: SelfDiagnosisModel.sectionsModel + contentDelegate: sectionDelegate + + footerItem: footerDelegate + } + + Component { + id: sectionDelegate + + Column { + height: implicitHeight + + spacing: Constants.pane_spacing + + Repeater { + readonly property string currentSectionName: sectionContent.currentItemModel.display + + model: SelfDiagnosisModel.getSectionContentModel(currentSectionName) + delegate: LabeledText { + width: parent.width + + activeFocusOnTab: true + + label: title + text: content + underlineLabel: title !== "" && content === "" + + onActiveFocusChanged: { + if (activeFocus) { + if (focusFrameMargins < 0) + sectionContent.scrollYPositionIntoView(y + height - focusFrameMargins) + else + sectionContent.scrollYPositionIntoView(y + height) + } + } + } + } + } + } + + Component { + id: footerDelegate + + Item { + height: saveToFile.height + + GButton { + id: saveToFile + + Accessible.name: saveToFile.text + Accessible.description: qsTr("Save diagnosis to textfile") + SettingsModel.translationTrigger + + icon.source: "qrc:///images/icon_save.svg" + //: LABEL DESKTOP_QML + text: qsTr("Save to file") + SettingsModel.translationTrigger + onClicked: { + var filenameSuggestion = "%1.%2.%3.txt".arg(Qt.application.name).arg(qsTr("Diagnosis")).arg(SelfDiagnosisModel.getCreationTimeString()) + appWindow.openSaveFileDialog(SelfDiagnosisModel.saveToFile, filenameSuggestion, "txt") + } + } + } + } + + onVisibleChanged: { + if (visible) { + SelfDiagnosisModel.startController() + sectionContent.currentIndex = 0 + } + else { + SelfDiagnosisModel.stopController() + } + } +} diff --git a/resources/qml/Governikus/InformationView/+desktop/InformationView.qml b/resources/qml/Governikus/InformationView/+desktop/InformationView.qml new file mode 100644 index 0000000..08b1206 --- /dev/null +++ b/resources/qml/Governikus/InformationView/+desktop/InformationView.qml @@ -0,0 +1,370 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.FeedbackView 1.0 +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +SectionPage { + id: sectionPage + + enum SubViews { + None, + Diagnosis, + ApplicationLog, + VersionInformation + } + + readonly property int cellHeight: (height - 2 * gridLayout.anchors.margins) / 4 + readonly property int informationViewIconWidth: width / 6 + readonly property int separatorHeight: Math.max(1, ApplicationModel.scaleFactor * 4) + property int activeSubView + + Accessible.name: qsTr("Help section") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the help section of the AusweisApp2.") + SettingsModel.translationTrigger + Keys.onEscapePressed: { + if (activeSubView === InformationView.SubViews.None) { + event.accepted = false + return + } + + activeSubView = InformationView.SubViews.None + } + + isAbstract: activeSubView !== InformationView.SubViews.None + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Help") + SettingsModel.translationTrigger + onClicked: activeSubView = InformationView.SubViews.None + } + onVisibleChanged: activeSubView = InformationView.SubViews.None + + GridLayout { + id: gridLayout + + readonly property int iconAlignment: Qt.AlignTop | Qt.AlignHCenter + readonly property int longestText: Math.max(textQuestionsFeedbackRating.width, + textSetupManual.width, + textDiagnosisApplicationLog.width, + textVersionAndLicense.width) + + visible: activeSubView === InformationView.SubViews.None + anchors.fill: sectionPage + anchors.margins: Constants.pane_padding + anchors.topMargin: anchors.margins + (sectionPage.cellHeight - iconDiagnosis.implicitHeight) / 2 + + rowSpacing: 0 + columnSpacing: 0 + columns: 4 + rows: 4 + onVisibleChanged: if (visible) sectionPage.setActive() + + Column { + Layout.fillWidth: true + Layout.fillHeight: true + + topPadding: (implicitHeight - textQuestionsFeedbackRating.height - separatorHeight) / 2 + spacing: Constants.component_spacing + + GText { + id: textQuestionsFeedbackRating + + Accessible.name: text + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Questions, feedback, and rating") + SettingsModel.translationTrigger + textStyle: Style.text.header + + FocusFrame {} + } + Rectangle { + height: sectionPage.separatorHeight + width: gridLayout.longestText * 1.2 + + color: Constants.white + opacity: 0.5 + } + } + InformationViewIcon{ + id: iconQuestions + + width: sectionPage.informationViewIconWidth + + Layout.alignment: gridLayout.iconAlignment + Layout.minimumHeight: sectionPage.cellHeight + + activeFocusOnTab: true + + source: "qrc:/images/desktop/info_questions.svg" + //: LABEL DESKTOP_QML + text: qsTr("Questions") + SettingsModel.translationTrigger + onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/")) + SettingsModel.translationTrigger + } + InformationViewIcon { + id: iconReportError + + width: sectionPage.informationViewIconWidth + + Layout.alignment: gridLayout.iconAlignment + Layout.minimumHeight: sectionPage.cellHeight + + activeFocusOnTab: true + + source: "qrc:/images/desktop/info_report_error.svg" + //: LABEL DESKTOP_QML + text: qsTr("Report error") + SettingsModel.translationTrigger + onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/report-an-error/")) + SettingsModel.translationTrigger + } + InformationViewIcon { + id: iconRateApplication + + width: sectionPage.informationViewIconWidth + + Layout.alignment: gridLayout.iconAlignment + Layout.minimumHeight: sectionPage.cellHeight + + activeFocusOnTab: true + + source: "qrc:/images/desktop/info_rate_application.svg" + //: LABEL DESKTOP_QML + text: qsTr("Rate application") + SettingsModel.translationTrigger + onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/evaluate-us/")) + SettingsModel.translationTrigger + } + + Column { + Layout.fillHeight: true + Layout.fillWidth: true + + topPadding: (implicitHeight - textSetupManual.height - separatorHeight) / 2 + spacing: Constants.component_spacing + + GText { + id: textSetupManual + + Accessible.name: text + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Setup and manual") + SettingsModel.translationTrigger + textStyle: Style.text.header + + FocusFrame {} + } + Rectangle { + height: sectionPage.separatorHeight + width: gridLayout.longestText * 1.2 + + color: Constants.white + opacity: 0.5 + } + } + Item { + id: placeHolder1 + + width: 1 + height: 1 + } + InformationViewIcon { + id: iconSetup + + width: sectionPage.informationViewIconWidth + + Layout.alignment: gridLayout.iconAlignment + Layout.minimumHeight: sectionPage.cellHeight + + activeFocusOnTab: true + + source: "qrc:/images/desktop/info_setup.svg" + //: LABEL DESKTOP_QML + text: qsTr("Setup") + SettingsModel.translationTrigger + onClicked: sectionPage.nextView(SectionPage.Views.SetupAssistant) + } + InformationViewIcon { + id: iconManual + + width: sectionPage.informationViewIconWidth + + Layout.minimumHeight: sectionPage.cellHeight + Layout.alignment: gridLayout.iconAlignment + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Online help") + SettingsModel.translationTrigger + source: "qrc:/images/desktop/info_manual.svg" + onClicked: ApplicationModel.openOnlineHelp("index") + } + + Column { + Layout.fillHeight: true + Layout.fillWidth: true + + topPadding: (implicitHeight - textDiagnosisApplicationLog.height - separatorHeight) / 2 + spacing: Constants.component_spacing + + GText { + id: textDiagnosisApplicationLog + + Accessible.name: text + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Diagnosis and application log") + SettingsModel.translationTrigger + textStyle: Style.text.header + + FocusFrame {} + } + Rectangle { + height: sectionPage.separatorHeight + width: gridLayout.longestText * 1.2 + + color: Constants.white + opacity: 0.5 + } + } + Item { + id: placeHolder2 + + width: 1 + height: 1 + } + InformationViewIcon { + id: iconDiagnosis + + width: sectionPage.informationViewIconWidth + + Layout.alignment: gridLayout.iconAlignment + Layout.minimumHeight: sectionPage.cellHeight + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Diagnosis") + SettingsModel.translationTrigger + source: "qrc:/images/desktop/info_diagnosis.svg" + onClicked: activeSubView = InformationView.SubViews.Diagnosis + } + InformationViewIcon { + id: iconApplicationLog + + width: sectionPage.informationViewIconWidth + + Layout.alignment: gridLayout.iconAlignment + Layout.minimumHeight: sectionPage.cellHeight + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Application log") + SettingsModel.translationTrigger + source: "qrc:/images/desktop/info_application_log.svg" + onClicked: activeSubView = InformationView.SubViews.ApplicationLog + } + + Column { + Layout.fillHeight: true + Layout.fillWidth: true + + topPadding: (implicitHeight - textVersionAndLicense.height - separatorHeight) / 2 + spacing: Constants.component_spacing + + GText { + id: textVersionAndLicense + + Accessible.name: text + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Version and license information") + SettingsModel.translationTrigger + textStyle: Style.text.header + + FocusFrame {} + } + Rectangle { + height: sectionPage.separatorHeight + width: gridLayout.longestText * 1.2 + + color: Constants.white + opacity: 0.5 + } + } + Item { + id: placeHolder3 + + width: 1 + height: 1 + } + InformationViewIcon { + id: iconVersionInformation + + width: sectionPage.informationViewIconWidth + + Layout.minimumHeight: sectionPage.cellHeight + Layout.alignment: gridLayout.iconAlignment + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Version information") + SettingsModel.translationTrigger + source: "qrc:/images/desktop/info_version.svg" + onClicked: activeSubView = InformationView.SubViews.VersionInformation + } + InformationViewIcon { + id: iconLicense + + width: sectionPage.informationViewIconWidth + + Layout.minimumHeight: sectionPage.cellHeight + Layout.alignment: gridLayout.iconAlignment + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Software licenses") + SettingsModel.translationTrigger + source: "qrc:/images/desktop/info_license.svg" + onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/windows-and-mac/")) + } + } + + Component { + id: diagnosisView + + DiagnosisView {} + } + + Component { + id: versionInformation + + VersionInformation {} + } + + Component { + id: logFileView + + LogView {} + } + + Loader { + readonly property bool sectionPageTypeMarker: true + property var titleBarAction: item ? item.titleBarAction : undefined + + visible: item // Otherwise onVisibleChildrenChanged and onVisibleChanged won't be triggered + anchors.fill: parent + + sourceComponent: switch(sectionPage.activeSubView) { + case InformationView.SubViews.Diagnosis: return diagnosisView + case InformationView.SubViews.VersionInformation: return versionInformation + case InformationView.SubViews.ApplicationLog: return logFileView + } + } +} diff --git a/resources/qml/Governikus/InformationView/+desktop/InformationViewIcon.qml b/resources/qml/Governikus/InformationView/+desktop/InformationViewIcon.qml new file mode 100644 index 0000000..efdbeb2 --- /dev/null +++ b/resources/qml/Governikus/InformationView/+desktop/InformationViewIcon.qml @@ -0,0 +1,60 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +FocusScope { + id: root + + property alias source: img.source + property alias text: label.text + property int iconSize: ApplicationModel.scaleFactor * 120 + + signal clicked() + + implicitHeight: label.height + label.anchors.topMargin + img.height + implicitWidth: Math.max(label.width, img.width) + + Accessible.role: Accessible.Button + Accessible.name: text + + Keys.onSpacePressed: root.clicked() + + MouseArea { + anchors.fill: focusFrame + cursorShape: Qt.PointingHandCursor + onPressed: parent.focus = true + onClicked: parent.clicked() + } + + FocusFrame { + id: focusFrame + framee: img + marginFactor: 2.0 + } + + FramedImage { + id: img + width: iconSize + height: iconSize + anchors.top: parent.top + border.color: Constants.white + anchors.horizontalCenter: parent.horizontalCenter + } + + GText { + id: label + width: parent.width + anchors.top: img.bottom + anchors.topMargin: Constants.component_spacing + horizontalAlignment: Text.AlignHCenter + font.bold: true + } +} diff --git a/resources/qml/Governikus/InformationView/+desktop/VersionInformation.qml b/resources/qml/Governikus/InformationView/+desktop/VersionInformation.qml new file mode 100644 index 0000000..0e026f3 --- /dev/null +++ b/resources/qml/Governikus/InformationView/+desktop/VersionInformation.qml @@ -0,0 +1,59 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + + +SectionPage { + id: root + + Accessible.name: qsTr("Version information") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the version information section of the AusweisApp2.") + SettingsModel.translationTrigger + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Version information") + SettingsModel.translationTrigger + } + + ScrollablePane { + id: pane + + anchors.fill: root + anchors.margins: Constants.pane_padding + + //: LABEL DESKTOP_QML + title: qsTr("Version information") + SettingsModel.translationTrigger + + activeFocusOnTab: true + + Column { + id: column + + spacing: Constants.component_spacing + + Repeater { + id: repeater + + model: versionInformationModel + delegate: LabeledText { + id: delegate + + width: root.width + + Accessible.name: model.label + ": " + model.text + activeFocusOnTab: true + + label: model.label + text: model.text + } + } + } + } +} diff --git a/resources/qml/Governikus/InformationView/Information.qml b/resources/qml/Governikus/InformationView/+mobile/InformationView.qml similarity index 67% rename from resources/qml/Governikus/InformationView/Information.qml rename to resources/qml/Governikus/InformationView/+mobile/InformationView.qml index 162e7a3..443ff1f 100644 --- a/resources/qml/Governikus/InformationView/Information.qml +++ b/resources/qml/Governikus/InformationView/+mobile/InformationView.qml @@ -1,44 +1,51 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.2 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: root - headerTitleBarAction: TitleBarAction { text: qsTr("Information") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("Information") + SettingsModel.translationTrigger - Component { - id: lineSeparator - Rectangle { - height: 1 - color: Constants.grey - } - } Component { id: subMenu Item { height: column.height + + Accessible.role: Accessible.Button + Accessible.name: titleText + " " + descriptionText + Column { id: column anchors.left: parent.left anchors.right: parent.right spacing: Constants.component_spacing - Text { + GText { width: parent.width - font.pixelSize: Utils.dp(18) - color: Constants.blue - wrapMode: Text.WordWrap + + Accessible.ignored: true + text: titleText + textStyle: Style.text.normal_accent } - Text { - color: Constants.secondary_text + GText { width: parent.width - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + + Accessible.ignored: true + text: descriptionText + textStyle: Style.text.normal } } MouseArea { @@ -65,24 +72,31 @@ SectionPage { Pane { Loader { - readonly property string titleText: qsTr("Version information") + settingsModel.translationTrigger - readonly property string descriptionText: qsTr("Here you can see detailed information about AusweisApp2.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string titleText: qsTr("Version information") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string descriptionText: qsTr("Here you can see detailed information about AusweisApp2.") + SettingsModel.translationTrigger function onClickFunction() { firePush(versionInformationPage) } width: parent.width sourceComponent: subMenu } - Loader { width: parent.width; sourceComponent: lineSeparator } + GSeparator { width: parent.width } Loader { - readonly property string titleText: qsTr("Software license") + settingsModel.translationTrigger - readonly property string descriptionText: qsTr("Read the software license text on the application homepage.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string titleText: qsTr("Software license") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + readonly property string descriptionText: qsTr("Read the software license text on the application homepage.") + SettingsModel.translationTrigger function onClickFunction() { if (Qt.platform.os === "android") { + //: LABEL ANDROID IOS Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/android/")) } else if (Qt.platform.os === "ios") { + //: LABEL ANDROID IOS Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/ios/")) } else { + //: LABEL ANDROID IOS Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/windows-and-mac/")) } } diff --git a/resources/qml/Governikus/InformationView/VersionInformation.qml b/resources/qml/Governikus/InformationView/+mobile/VersionInformation.qml similarity index 59% rename from resources/qml/Governikus/InformationView/VersionInformation.qml rename to resources/qml/Governikus/InformationView/+mobile/VersionInformation.qml index 97d3157..3384da4 100644 --- a/resources/qml/Governikus/InformationView/VersionInformation.qml +++ b/resources/qml/Governikus/InformationView/+mobile/VersionInformation.qml @@ -1,15 +1,21 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 SectionPage { id: root - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Version Information") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + //: LABEL ANDROID IOS + title: qsTr("Version Information") + SettingsModel.translationTrigger content: Item { @@ -29,9 +35,12 @@ SectionPage LabeledText { id: delegate + + anchors.left: parent.left + anchors.right: parent.right + label: model.label text: model.text - width: pane.width } } } diff --git a/resources/qml/Governikus/InformationView/qmldir b/resources/qml/Governikus/InformationView/qmldir index 0b05560..765a84e 100644 --- a/resources/qml/Governikus/InformationView/qmldir +++ b/resources/qml/Governikus/InformationView/qmldir @@ -1,4 +1,8 @@ module InformationView -Information 1.0 Information.qml +internal DiagnosisView DiagnosisView.qml +internal InformationViewIcon InformationViewIcon.qml + +InformationView 1.0 InformationView.qml VersionInformation 1.0 VersionInformation.qml + diff --git a/resources/qml/Governikus/MainView/+desktop/MainView.qml b/resources/qml/Governikus/MainView/+desktop/MainView.qml index 51fdf2d..81a7119 100644 --- a/resources/qml/Governikus/MainView/+desktop/MainView.qml +++ b/resources/qml/Governikus/MainView/+desktop/MainView.qml @@ -1,14 +1,21 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.SelfAuthModel 1.0 +import Governikus.Type.ChangePinModel 1.0 SectionPage { id: sectionPage - KeyNavigation.tab: tileIdentify - Accessible.role: Accessible.Grouping Accessible.name: qsTr("Main view") Accessible.description: qsTr("This is the main view of the AusweisApp2.") @@ -31,19 +38,20 @@ SectionPage { height: parent.height width: view.horizontalItemSpace - title: qsTr("Identify") + //: LABEL DESKTOP_QML + title: qsTr("Self-authentication") + SettingsModel.translationTrigger image: "qrc:/images/desktop/main_identify.svg" - onClicked: selfAuthModel.startWorkflow() + onClicked: sectionPage.nextView(SectionPage.Views.SelfAuthentication) - KeyNavigation.tab: tileProvider + activeFocusOnTab: true } Rectangle { height: view.verticalItemSpace * 2/3 width: view.separatorLineWidth anchors.verticalCenter: parent.verticalCenter - color: Constants.grey_light + color: Style.color.border } Tile { @@ -52,19 +60,20 @@ SectionPage { height: view.verticalItemSpace width: view.horizontalItemSpace - title: qsTr("Provider") + //: LABEL DESKTOP_QML + title: qsTr("Provider") + SettingsModel.translationTrigger image: "qrc:/images/desktop/main_provider.svg" onClicked: sectionPage.nextView(SectionPage.Views.Provider) - KeyNavigation.tab: tileHistory + activeFocusOnTab: true } Rectangle { height: view.verticalItemSpace * 2/3 width: view.separatorLineWidth anchors.verticalCenter: parent.verticalCenter - color: Constants.grey_light + color: Style.color.border } Tile { @@ -73,10 +82,13 @@ SectionPage { height: view.verticalItemSpace width: view.horizontalItemSpace - title: qsTr("History") + //: LABEL DESKTOP_QML + title: qsTr("History") + SettingsModel.translationTrigger image: "qrc:/images/desktop/main_history.svg" - KeyNavigation.tab: tileSettings + onClicked: sectionPage.nextView(SectionPage.Views.History) + + activeFocusOnTab: true } } @@ -85,7 +97,7 @@ SectionPage { width: parent.width - view.horizontalItemSpace / 3 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter - color: Constants.grey_light + color: Style.color.border } Row { @@ -99,17 +111,20 @@ SectionPage { height: view.verticalItemSpace width: view.horizontalItemSpace - title: qsTr("Settings") + //: LABEL DESKTOP_QML + title: qsTr("Settings") + SettingsModel.translationTrigger image: "qrc:/images/desktop/settings_icon.svg" - KeyNavigation.tab: tilePin + onClicked: sectionPage.nextView(SectionPage.Views.Settings) + + activeFocusOnTab: true } Rectangle { height: view.verticalItemSpace * 2/3 width: view.separatorLineWidth anchors.verticalCenter: parent.verticalCenter - color: Constants.grey_light + color: Style.color.border } Tile { @@ -118,17 +133,20 @@ SectionPage { height: view.verticalItemSpace width: view.horizontalItemSpace - title: qsTr("PIN management") + //: LABEL DESKTOP_QML + title: qsTr("PIN management") + SettingsModel.translationTrigger image: "qrc:/images/desktop/main_pin.svg" - KeyNavigation.tab: tileHelp + onClicked: ChangePinModel.startWorkflow() + + activeFocusOnTab: true } Rectangle { height: view.verticalItemSpace * 2/3 width: view.separatorLineWidth anchors.verticalCenter: parent.verticalCenter - color: Constants.grey_light + color: Style.color.border } Tile { @@ -137,10 +155,13 @@ SectionPage { height: view.verticalItemSpace width: view.horizontalItemSpace - title: qsTr("Help") + //: LABEL DESKTOP_QML + title: qsTr("Help") + SettingsModel.translationTrigger image: "qrc:/images/desktop/help_icon.svg" - KeyNavigation.tab: sectionPage.navSuccessor + activeFocusOnTab: true + + onClicked: sectionPage.nextView(SectionPage.Views.Information) } } } diff --git a/resources/qml/Governikus/MainView/+desktop/Tile.qml b/resources/qml/Governikus/MainView/+desktop/Tile.qml index e02bd4e..0a6f44d 100644 --- a/resources/qml/Governikus/MainView/+desktop/Tile.qml +++ b/resources/qml/Governikus/MainView/+desktop/Tile.qml @@ -1,7 +1,13 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 FocusScope { id: tile @@ -20,6 +26,7 @@ FocusScope { anchors.fill: parent onPressed: tile.focus = true onClicked: tile.clicked() + cursorShape: Qt.PointingHandCursor } FocusFrame { @@ -28,20 +35,23 @@ FocusScope { Column { anchors.centerIn: parent - spacing: text.height / 2 + + spacing: Constants.component_spacing Image { id: image - sourceSize.height: text.height * 4 + + sourceSize.height: ApplicationModel.scaleFactor * 200 anchors.horizontalCenter: parent.horizontalCenter } GText { id: text + anchors.horizontalCenter: parent.horizontalCenter - color: Constants.white - font.pixelSize: Constants.header_font_size - font.weight: Font.Bold + + textStyle: Style.text.title + font.bold: true } } } diff --git a/resources/qml/Governikus/MoreView/+mobile/MoreView.qml b/resources/qml/Governikus/MoreView/+mobile/MoreView.qml new file mode 100644 index 0000000..3754a1b --- /dev/null +++ b/resources/qml/Governikus/MoreView/+mobile/MoreView.qml @@ -0,0 +1,204 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.2 + +import Governikus.Global 1.0 +import Governikus.TitleBar 1.0 +import Governikus.FeedbackView 1.0 +import Governikus.InformationView 1.0 +import Governikus.HistoryView 1.0 +import Governikus.DeveloperView 1.0 +import Governikus.TutorialView 1.0 +import Governikus.View 1.0 +import Governikus.Type.RemoteServiceModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.LogModel 1.0 + + +SectionPage { + id: moreView + + //: LABEL ANDROID IOS DESKTOP_QML + title: qsTr("More") + SettingsModel.translationTrigger + + content: ColumnLayout { + id: menu + + width: moreView.width + + spacing: 0 + + GSeparator { + Layout.topMargin: Constants.component_spacing + Layout.fillWidth: true + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Version information") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_npa.svg" + showRightArrow: true + onClicked: firePush(versionInformationPage) + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Tutorial") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_tutorial.svg" + showRightArrow: true + onClicked: firePush(tutorialView) + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("FAQ") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_info.svg" + //: LABEL ANDROID IOS DESKTOP_QML + onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/")) + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Support") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_fragen.svg" + //: LABEL ANDROID IOS DESKTOP_QML + onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/support/")) + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Rate app") + SettingsModel.translationTrigger; + icon: "qrc:///images/iOS/more/icon_mehr_favorit.svg"; + onClicked: { + let ratingUrl = Qt.platform.os === "android" ? "market://details?id=com.governikus.ausweisapp2" + : "itms-apps:itunes.apple.com/%1/app/ausweisapp2/id948660805?mt=8&action=write-review".arg(SettingsModel.language) + Qt.openUrlExternally(ratingUrl) + } + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Report error") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_report.svg" + onClicked: LogModel.mailLog() + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Software license") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_license.svg" + onClicked: { + if (Qt.platform.os === "android") { + //: LABEL ANDROID IOS DESKTOP_QML + Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/android/")) + } + else if (Qt.platform.os === "ios") { + //: LABEL ANDROID IOS DESKTOP_QML + Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/ios/")) + } + else { + //: LABEL ANDROID IOS DESKTOP_QML + Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/windows-and-mac/")) + } + } + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("History") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_verlauf.svg" + showRightArrow: true + onClicked: { + firePush(historyView) + } + } + + MoreViewMenuItem { + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Show log") + SettingsModel.translationTrigger + icon: "qrc:///images/iOS/more/icon_mehr_log.svg" + showRightArrow: true + showSeparator: plugin.developerBuild + onClicked: firePush(logView) + } + + MoreViewMenuItem { + visible: plugin.developerBuild + //: LABEL ANDROID IOS DESKTOP_QML + text: qsTr("Developer options") + SettingsModel.translationTrigger + icon: "qrc:///images/zahnraeder.svg" + showRightArrow: true + showSeparator: false + onClicked: firePush(developerView) + } + + GSeparator { + Layout.bottomMargin: 2 * Constants.component_spacing + languageButtons.childrenRect.height + Layout.fillWidth: true + } + } + + Item { + id: languageButtons + + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + + LocationButton { + id: lang_de + + anchors.margins: Constants.component_spacing + anchors.bottom: parent.bottom + anchors.right: lang_en.left + + Accessible.name: qsTr("Set language to german") + SettingsModel.translationTrigger + + language: "de" + name: "DE" + image: "qrc:///images/location_flag_de.svg" + } + + LocationButton { + id: lang_en + + anchors.margins: Constants.component_spacing + anchors.bottom: parent.bottom + anchors.right: parent.right + + Accessible.name: qsTr("Set language to english") + SettingsModel.translationTrigger + + language: "en" + name: "EN" + image: "qrc:///images/location_flag_en.svg" + } + } + + Component { + id: versionInformationPage + VersionInformation {} + } + + Component { + id: historyView + HistoryView {} + } + + Component { + id: developerView + DeveloperView {} + } + + Component { + id: logView + LogView {} + } + + Component { + id: tutorialView + TutorialView {} + } +} diff --git a/resources/qml/Governikus/MoreView/+mobile/MoreViewMenuItem.qml b/resources/qml/Governikus/MoreView/+mobile/MoreViewMenuItem.qml new file mode 100644 index 0000000..ede3576 --- /dev/null +++ b/resources/qml/Governikus/MoreView/+mobile/MoreViewMenuItem.qml @@ -0,0 +1,16 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtGraphicalEffects 1.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + +ListItem { + implicitHeight: 44 + implicitWidth: parent.width + + showRightArrow: false +} diff --git a/resources/qml/Governikus/MoreView/MoreView.qml b/resources/qml/Governikus/MoreView/MoreView.qml deleted file mode 100644 index aebacbb..0000000 --- a/resources/qml/Governikus/MoreView/MoreView.qml +++ /dev/null @@ -1,174 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Layouts 1.2 - -import Governikus.Global 1.0 -import Governikus.TitleBar 1.0 -import Governikus.FeedbackView 1.0 -import Governikus.InformationView 1.0 -import Governikus.RemoteServiceView 1.0 -import Governikus.DeveloperView 1.0 -import Governikus.TutorialView 1.0 -import Governikus.View 1.0 -import Governikus.Type.RemoteServiceModel 1.0 - -SectionPage { - headerTitleBarAction: TitleBarAction { text: qsTr("More") + settingsModel.translationTrigger; font.bold: true } - - Rectangle { - anchors.fill: menu - color: "white" - } - - Column { - id: menu - width: parent.width - anchors.top: parent.top - anchors.topMargin: Constants.component_spacing - - MoreViewMenuItem { - text: qsTr("Version information") + settingsModel.translationTrigger - imageSource: "qrc:///images/npa.svg" - showRightArrow: true - onClicked: firePush(versionInformationPage) - } - - MoreViewMenuItem { - text: qsTr("Tutorial") + settingsModel.translationTrigger - imageSource: "qrc:///images/iOS/more/icon_mehr_tutorial.svg" - showRightArrow: true - onClicked: firePush(tutorialView) - } - - MoreViewMenuItem { - text: qsTr("FAQ") + settingsModel.translationTrigger - imageSource: "qrc:///images/iOS/more/icon_mehr_info.svg" - onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/")) - } - - MoreViewMenuItem { - text: qsTr("Support") + settingsModel.translationTrigger - imageSource: "qrc:///images/iOS/more/icon_mehr_fragen.svg" - onClicked: Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/support/")) - } - - MoreViewMenuItem { - text: qsTr("Rate app") + settingsModel.translationTrigger; - imageSource: "qrc:///images/iOS/more/icon_mehr_favorit.svg"; - // Use Qt.platform.os here instead of platformstyle because rating market URLs on iOS doesn't work and vice versa - onClicked: { - if (Qt.platform.os === "android") { - Qt.openUrlExternally("market://details?id=com.governikus.ausweisapp2") - } - else if (Qt.platform.os === "ios") { - Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/qa/evaluate-us/")) - } - } - } - - MoreViewMenuItem { - text: qsTr("Software license") + settingsModel.translationTrigger - imageSource: "qrc:///images/iOS/more/icon_mehr_license.svg" - onClicked: { - if (Qt.platform.os === "android") { - Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/android/")) - } - else if (Qt.platform.os === "ios") { - Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/ios/")) - } - else { - Qt.openUrlExternally(qsTr("https://www.ausweisapp.bund.de/en/download/windows-and-mac/")) - } - } - } - - MoreViewMenuItem { - imageSource: "qrc:///images/iOS/more/icon_mehr_remotereader" - text: qsTr("Configure remote service") + settingsModel.translationTrigger - showRightArrow: true - onClicked: { - firePush(remoteServiceView) - } - } - - MoreViewMenuItem { - text: qsTr("Show log") + settingsModel.translationTrigger - imageSource: "qrc:///images/iOS/more/icon_mehr_log.svg" - showRightArrow: true - onClicked: firePush(logView) - } - - MoreViewMenuItem { - visible: plugin.developerBuild - text: qsTr("Developer options") + settingsModel.translationTrigger - imageSource: "qrc:///images/zahnraeder.svg" - showRightArrow: true - onClicked: firePush(developerView) - } - } - - Item { - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - - LocationButton { - id: lang_de - - language: "de" - name: "DE" - image: "qrc:///images/location_flag_de.svg" - - anchors.margins: Constants.component_spacing - anchors.bottom: parent.bottom - anchors.right: lang_en.left - } - - LocationButton { - id: lang_en - - language: "en" - name: "EN" - image: "qrc:///images/location_flag_en.svg" - - anchors.margins: Constants.component_spacing - anchors.bottom: parent.bottom - anchors.right: parent.right - } - } - - Rectangle { - anchors.top: menu.top - height: 1; width: parent.width - color: Constants.grey - } - Rectangle { - anchors.bottom: menu.bottom - height: 1; width: parent.width - color: Constants.grey - } - - VersionInformation { - id: versionInformationPage - visible: false - } - - RemoteServiceView { - id: remoteServiceView - visible: false - } - - DeveloperView { - id: developerView - visible: false - } - - Log { - id: logView - visible: false - } - - TutorialView { - id: tutorialView - visible: false - } -} diff --git a/resources/qml/Governikus/MoreView/MoreViewMenuItem.qml b/resources/qml/Governikus/MoreView/MoreViewMenuItem.qml deleted file mode 100644 index 6238d51..0000000 --- a/resources/qml/Governikus/MoreView/MoreViewMenuItem.qml +++ /dev/null @@ -1,59 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - - -Item { - property alias imageSource: imageItem.source - property alias text: textItem.text - property bool showRightArrow: false - signal clicked - height: Utils.dp(40) - width: parent.width - - Image { - id: imageItem - fillMode: Image.PreserveAspectFit - height: parent.height * 0.6 - width: height - anchors.left: parent.left - anchors.leftMargin: Utils.dp(15) - anchors.verticalCenter: parent.verticalCenter - } - - Text { - id: textItem - color: Constants.secondary_text - height: parent.height - verticalAlignment: Text.AlignVCenter - anchors.left: imageItem.right - anchors.leftMargin: Utils.dp(10) - anchors.verticalCenter: parent.verticalCenter - font.pixelSize: Utils.dp(16) - } - - Text { - anchors.right: parent.right - anchors.rightMargin: Utils.dp(5) - anchors.verticalCenter: parent.verticalCenter - - text: ">" - color: Constants.grey - font.pixelSize: Constants.normal_font_size - visible: parent.showRightArrow - } - - MouseArea { - anchors.fill: parent - onClicked: parent.clicked() - } - - Rectangle { - anchors.bottom: parent.bottom - anchors.left: textItem.left - anchors.right: parent.right - height: 1 - color: Constants.grey - } -} - diff --git a/resources/qml/Governikus/Navigation/+android/Navigation.qml b/resources/qml/Governikus/Navigation/+android/Navigation.qml index 6e0ebcb..79861ed 100644 --- a/resources/qml/Governikus/Navigation/+android/Navigation.qml +++ b/resources/qml/Governikus/Navigation/+android/Navigation.qml @@ -1,21 +1,30 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + Item { property int leftOverlayMargin: 0 id: navigation - width: !Constants.is_tablet || lockedAndHidden ? 0 : Constants.menubar_width + width: !Constants.is_tablet || lockedAndHidden ? 0 : Style.dimens.menubar_width enabled: !lockedAndHidden property bool lockedAndHidden: true property bool isOpen: drawer.position > 0 property int currentIndex + signal reselectedState + Component.onCompleted: { - state = settingsModel.showTutorialOnStart ? "tutorial" : "identify" - currentIndex = settingsModel.showTutorialOnStart ? 5 : 0 + state = SettingsModel.showSetupAssistantOnStart ? "tutorial" : "identify" + currentIndex = SettingsModel.showSetupAssistantOnStart ? 5 : 0 } onLockedAndHiddenChanged: { @@ -44,35 +53,36 @@ Item { anchors.left: parent.left anchors.bottom: parent.bottom width: Math.max(parent.width, navigation.leftOverlayMargin); - color: Constants.background_color + color: Style.color.background clip: true NavigationView { navigationController: navigation } - Rectangle { + GSeparator { id: iconBarBorder anchors.right: parent.right anchors.top: parent.top anchors.bottom: parent.bottom - width: Utils.dp(2) - color: Constants.grey_border + orientation: Qt.Vertical + color: Style.color.border_dark } } Drawer { id: drawer - x: Constants.is_tablet ? Constants.menubar_width : 0 - y: Constants.titlebar_height + x: Constants.is_tablet ? Style.dimens.menubar_width : 0 + y: Style.dimens.titlebar_height + plugin.safeAreaMargins.top + height: navigation.height - width: Utils.dp(250) + width: 250 opacity: Constants.is_tablet ? 0 : 1 - dragMargin: lockedAndHidden ? 0 : Utils.dp(Qt.styleHints.startDragDistance) + dragMargin: lockedAndHidden ? 0 : Qt.styleHints.startDragDistance onPositionChanged: { if (Constants.is_tablet && position > 0) { - navigation.leftOverlayMargin = Constants.menubar_width + (width - Constants.menubar_width) * position + navigation.leftOverlayMargin = Style.dimens.menubar_width + (width - Style.dimens.menubar_width) * position } else { navigation.leftOverlayMargin = 0 } diff --git a/resources/qml/Governikus/Navigation/+android/NavigationItem.qml b/resources/qml/Governikus/Navigation/+android/NavigationItem.qml index 69400bb..ec9ea47 100644 --- a/resources/qml/Governikus/Navigation/+android/NavigationItem.qml +++ b/resources/qml/Governikus/Navigation/+android/NavigationItem.qml @@ -1,35 +1,45 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { property alias source: tabImage.source property alias text: tabText.text signal clicked + Accessible.role: Accessible.Button + Accessible.name: text + Item { id: tabImageItem height: parent.height - width: Constants.menubar_width + width: Style.dimens.menubar_width anchors.left: parent.left Image { id: tabImage - height: Utils.dp(35) + height: 35 + sourceSize.width: height fillMode: Image.PreserveAspectFit anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter } } - Text { + GText { id: tabText + anchors.left: tabImageItem.right - anchors.leftMargin: Utils.dp(10) anchors.verticalCenter: parent.verticalCenter - font.pixelSize: Constants.small_font_size - renderType: Text.NativeRendering - color: Constants.secondary_text + + Accessible.ignored: true + + textStyle: Style.text.hint_secondary } MouseArea { diff --git a/resources/qml/Governikus/Navigation/+android/NavigationView.qml b/resources/qml/Governikus/Navigation/+android/NavigationView.qml index 94f16c5..f0003f7 100644 --- a/resources/qml/Governikus/Navigation/+android/NavigationView.qml +++ b/resources/qml/Governikus/Navigation/+android/NavigationView.qml @@ -1,13 +1,20 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + Rectangle { id: content - height: appWindow.height - Constants.titlebar_height - width: Utils.dp(250) - color: Constants.background_color + height: appWindow.height - Style.dimens.titlebar_height + width: 250 + color: Style.color.background property var navigationController: null @@ -70,7 +77,7 @@ Rectangle { } - ListView { + GListView { id: listView anchors.fill: parent boundsBehavior: Flickable.StopAtBounds @@ -80,20 +87,24 @@ Rectangle { highlight: Rectangle { color: "black" opacity: 0.1 - height: Utils.dp(45) + height: 45 width: content.width y: listView.currentItem.y } highlightFollowsCurrentItem: false delegate: NavigationItem { - height: Utils.dp(45) + height: 45 width: content.width source: image - text: qsTr(desc) + settingsModel.translationTrigger + text: qsTr(desc) + SettingsModel.translationTrigger onClicked: { - navigationController.currentIndex = index - navigationController.state = condition + if (navigationController.state === condition) { + navigationController.reselectedState() + } else { + navigationController.currentIndex = index + navigationController.state = condition + } navigationController.close() } // Hide developer options if we are not using developer build (debug build) @@ -104,24 +115,30 @@ Rectangle { LocationButton { id: lang_de + anchors.margins: Constants.component_spacing + anchors.bottomMargin: plugin.safeAreaMargins.bottom + Constants.component_spacing + anchors.bottom: parent.bottom + anchors.right: lang_en.left + + Accessible.name: qsTr("Set language to german") + SettingsModel.translationTrigger + language: "de" name: "DE" image: "qrc:///images/location_flag_de.svg" - - anchors.margins: Constants.component_spacing - anchors.bottom: parent.bottom - anchors.right: lang_en.left } LocationButton { id: lang_en - language: "en" - name: "EN" - image: "qrc:///images/location_flag_en.svg" - anchors.margins: Constants.component_spacing anchors.bottom: parent.bottom anchors.right: parent.right + anchors.bottomMargin: plugin.safeAreaMargins.bottom + Constants.component_spacing + + Accessible.name: qsTr("Set language to english") + SettingsModel.translationTrigger + + language: "en" + name: "EN" + image: "qrc:///images/location_flag_en.svg" } } diff --git a/resources/qml/Governikus/Navigation/+ios/Navigation.qml b/resources/qml/Governikus/Navigation/+ios/Navigation.qml index 27b22bb..0975875 100644 --- a/resources/qml/Governikus/Navigation/+ios/Navigation.qml +++ b/resources/qml/Governikus/Navigation/+ios/Navigation.qml @@ -1,31 +1,46 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 -Item { - property bool lockedAndHidden: false +Rectangle { + id: baseItem + + property bool lockedAndHidden: true // Start in hidden state so that it doesn't slide out when the tutorial is active property bool isOpen: true property int currentIndex: 0 + property var bottomSafeAreaMargin: plugin.safeAreaMargins.bottom + + signal reselectedState + + function open() {} + + function close() {} + enabled: !lockedAndHidden + visible: !lockedAndHidden + height: lockedAndHidden ? 0 : (Style.dimens.tabbar_height + bottomSafeAreaMargin) - id: baseItem - state: "identify" + color: Constants.white + + Component.onCompleted: { + state = SettingsModel.showSetupAssistantOnStart ? "tutorial" : "identify" + } - height: childrenRect.height Behavior on height { - NumberAnimation {duration: 200} - } - - - function open() { - } - - function close() { + NumberAnimation {duration: Constants.animation_duration} } NavigationView { - visible: !baseItem.lockedAndHidden - height: visible ? Constants.tabbar_height : 0 + anchors.top: parent.top + height: Style.dimens.tabbar_height + + Accessible.ignored: lockedAndHidden } } diff --git a/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml b/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml index d196a6a..571874a 100644 --- a/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml +++ b/resources/qml/Governikus/Navigation/+ios/NavigationItem.qml @@ -1,34 +1,53 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtGraphicalEffects 1.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { property alias source: tabImage.source property alias text: tabText.text - property alias textColor: tabText.color + property var selected: false + property var iconPadding: 4 signal clicked + Accessible.role: Accessible.Button + Accessible.name: text + Accessible.onPressAction: clicked() + Image { id: tabImage - anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: 5 anchors.top: parent.top anchors.bottom: tabText.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: iconPadding + fillMode: Image.PreserveAspectFit } - Text { + GText { id: tabText - color: Constants.secondary_text + anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom - anchors.bottomMargin: font.pixelSize / 10 - font.pixelSize: Constants.small_font_size - renderType: Text.NativeRendering + + Accessible.ignored: true + + textStyle: Style.text.hint } MouseArea { anchors.fill: parent onClicked: parent.clicked() } + + layer.enabled: true + layer.effect: ColorOverlay { + color: selected ? Style.color.accent : Constants.grey + } } diff --git a/resources/qml/Governikus/Navigation/+ios/NavigationView.qml b/resources/qml/Governikus/Navigation/+ios/NavigationView.qml index 7c0c84e..34cef19 100644 --- a/resources/qml/Governikus/Navigation/+ios/NavigationView.qml +++ b/resources/qml/Governikus/Navigation/+ios/NavigationView.qml @@ -1,61 +1,61 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtQuick.Layouts 1.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 -Rectangle { +Item { id: content + height: parent.height width: parent.width - color: Constants.background_color ListModel { id: navModel ListElement { - imageOn: "qrc:///images/iOS/tabBar/Ausweisen-on.png" - imageOff: "qrc:///images/iOS/tabBar/Ausweisen-off.png" + image: "qrc:///images/iOS/tabBar/ausweisen.svg" desc: QT_TR_NOOP("Identify") condition: "identify" } ListElement { - imageOn: "qrc:///images/iOS/tabBar/Anbieter-on.png" - imageOff: "qrc:///images/iOS/tabBar/Anbieter-off.png" + image: "qrc:///images/iOS/tabBar/anbieter.svg" desc: QT_TR_NOOP("Provider") condition: "provider" } ListElement { - imageOn: "qrc:///images/iOS/tabBar/Verlauf-on.png" - imageOff: "qrc:///images/iOS/tabBar/Verlauf-off.png" - desc: QT_TR_NOOP("History") - condition: "history" + image: "qrc:///images/iOS/tabBar/remoteleser.svg" + desc: QT_TR_NOOP("Remote") + condition: "remoteservice" } ListElement { - imageOn: "qrc:///images/iOS/tabBar/Pin-on.png" - imageOff: "qrc:///images/iOS/tabBar/Pin-off.png" - desc: QT_TR_NOOP("PIN Management") + image: "qrc:///images/iOS/tabBar/pin.svg" + desc: QT_TR_NOOP("PIN") condition: "pin" } ListElement { - imageOn: "qrc:///images/iOS/tabBar/More-on.svg" - imageOff: "qrc:///images/iOS/tabBar/More-off.svg" + image: "qrc:///images/iOS/tabBar/more.svg" desc: QT_TR_NOOP("More") condition: "more" } } - Rectangle { + GSeparator { id: topBorderLine width: parent.width - height: Utils.dp(0.5) - color: Constants.grey } - Row { + RowLayout { anchors.left: parent.left anchors.right: parent.right anchors.bottom: parent.bottom @@ -66,12 +66,21 @@ Rectangle { model: navModel delegate: NavigationItem { - height: parent.height - width: parent.width / navModel.count - source: baseItem.state === condition ? imageOn : imageOff - textColor: baseItem.state === condition ? Constants.blue : Constants.grey - text: qsTr(desc) + settingsModel.translationTrigger - onClicked: baseItem.state = condition + Layout.fillWidth: true + Layout.fillHeight: true + + Accessible.ignored: content.Accessible.ignored + + source: image + text: qsTr(desc) + SettingsModel.translationTrigger + selected: baseItem.state === condition + onClicked: { + if (baseItem.state === condition) { + baseItem.reselectedState() + } else { + baseItem.state = condition + } + } } } } diff --git a/resources/qml/Governikus/ProgressView/+desktop/ProgressView.qml b/resources/qml/Governikus/ProgressView/+desktop/ProgressView.qml index 4540fdd..33d764c 100644 --- a/resources/qml/Governikus/ProgressView/+desktop/ProgressView.qml +++ b/resources/qml/Governikus/ProgressView/+desktop/ProgressView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 @@ -6,11 +10,13 @@ import Governikus.Global 1.0 import Governikus.Style 1.0 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 SectionPage { id: baseItem + property alias text: text.text property alias subText: subText.text property alias subTextColor: subText.color @@ -18,64 +24,97 @@ SectionPage property int progressValue property alias progressBarVisible: progressBar.visible + Accessible.name: qsTr("Progress view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the progress view of the AusweisApp2.") + SettingsModel.translationTrigger + StatusIcon { id: circle - height: ApplicationModel.scaleFactor * 400 + + height: Style.dimens.status_icon_large anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.top anchors.verticalCenterOffset: baseItem.height / 4 + busy: true source: "qrc:///images/desktop/sandglass.svg" } - Text { + GText { id: text + + visible: text.text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.verticalCenter - width: parent.width - (2 * Constants.pane_padding) - font.pixelSize: Constants.header_font_size + Accessible.role: Accessible.Paragraph + activeFocusOnTab: true + Accessible.name: text.text + horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap - color: Constants.white + textStyle: Style.text.header + onLinkActivated: Qt.openUrlExternally(link) + + FocusFrame {} } - Text { + GText { id: subText + + visible: subText.text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) anchors.horizontalCenter: parent.horizontalCenter anchors.top: text.bottom - width: parent.width - (2 * Constants.pane_padding) + anchors.topMargin: Constants.text_spacing + + Accessible.role: Accessible.Paragraph + activeFocusOnTab: true + Accessible.name: subText.text - font.pixelSize: Constants.header_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap - color: Constants.secondary_text + textStyle: Style.text.header_secondary + onLinkActivated: Qt.openUrlExternally(link) + + FocusFrame {} } - Text { + GText { id: progressText - horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.normal_font_size + + visible: progressText.text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) anchors.bottom: progressBar.top anchors.bottomMargin: ApplicationModel.scaleFactor * 20 anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - (2 * Constants.pane_padding) - wrapMode: Text.WordWrap - color: Constants.white + + Accessible.role: Accessible.Paragraph + activeFocusOnTab: true + Accessible.name: progressText.text + + horizontalAlignment: Text.AlignHCenter + textStyle: Style.text.normal + + FocusFrame {} } ProgressBar { id: progressBar + + visible: false + height: ApplicationModel.scaleFactor * 40 anchors.bottom: parent.bottom anchors.left: parent.left anchors.right: parent.right anchors.margins: ApplicationModel.scaleFactor * 80 - height: ApplicationModel.scaleFactor * 40 + + Accessible.role: Accessible.ProgressBar + activeFocusOnTab: true + Accessible.name: qsTr("Step %1 of %2").arg(value).arg(to) + SettingsModel.translationTrigger + from: 0 - to: 5 - visible: false + to: 100 value: progressValue background: Rectangle { @@ -91,5 +130,7 @@ SectionPage color: Constants.green } } + + FocusFrame {} } } diff --git a/resources/qml/Governikus/ProgressView/+mobile/ProgressView.qml b/resources/qml/Governikus/ProgressView/+mobile/ProgressView.qml index 7a35846..6d51981 100644 --- a/resources/qml/Governikus/ProgressView/+mobile/ProgressView.qml +++ b/resources/qml/Governikus/ProgressView/+mobile/ProgressView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 @@ -32,54 +36,47 @@ SectionPage radius: width / 2 color: Constants.blue } - Text { + GText { id: text anchors.top: circle.bottom - anchors.topMargin: Utils.dp(50) + anchors.topMargin: 50 anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Constants.header_font_size - font.weight: Font.Bold - color: Constants.blue horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap width: baseItem.width * 0.8 + textStyle: Style.text.header_accent } - Text { + GText { id: subText - color: Constants.secondary_text horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.normal_font_size anchors.top: text.bottom - anchors.topMargin: Utils.dp(10) + anchors.topMargin: 10 anchors.horizontalCenter: parent.horizontalCenter width: baseItem.width * 0.8 - wrapMode: Text.WordWrap + textStyle: Style.text.normal_secondary } - Text { + GText { id: progressText horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.normal_font_size anchors.top: subText.bottom - anchors.topMargin: Utils.dp(20) + anchors.topMargin: 20 anchors.horizontalCenter: parent.horizontalCenter width: baseItem.width * 0.8 - wrapMode: Text.WordWrap - color: Constants.grey + textStyle: Style.text.normal_secondary } ProgressBar { id: progressBar anchors.top: progressText.bottom anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: Utils.dp(10) + anchors.topMargin: 10 width: baseItem.width * 0.6 - height: Utils.dp(24) + height: 24 from: 0 - to: 5 + to: 100 visible: false value: progressValue background: Rectangle { - radius: Utils.dp(2) + radius: 2 color: Constants.lightgrey } @@ -87,7 +84,7 @@ SectionPage Rectangle { width: progressBar.visualPosition * parent.width height: parent.height - radius: Utils.dp(2) + radius: 2 color: Constants.green } } diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderContactInfo.qml b/resources/qml/Governikus/Provider/+desktop/ProviderContactInfo.qml new file mode 100644 index 0000000..7a63a9f --- /dev/null +++ b/resources/qml/Governikus/Provider/+desktop/ProviderContactInfo.qml @@ -0,0 +1,72 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.View 1.0 + + +Item { + id: baseItem + + property alias contactModel: repeater.model + + height: columnLayout.height + + Accessible.name: qsTr("Provider contact information") + SettingsModel.translationTrigger + Accessible.description: qsTr("Contact information of the selected service provider.") + SettingsModel.translationTrigger + Accessible.role: Accessible.Heading + + ColumnLayout { + id: columnLayout + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + + spacing: Constants.text_spacing + + GText { + bottomPadding: Constants.groupbox_spacing + + //: LABEL DESKTOP_QML + text: qsTr("Contact") + SettingsModel.translationTrigger + textStyle: Style.text.title + } + + Repeater { + id: repeater + + ColumnLayout { + Layout.fillWidth: true + + spacing: columnLayout.spacing + + GSeparator { + visible: index !== 0 + Layout.fillWidth: true + } + + ProviderContactInfoItem { + id: contactItem + + Layout.fillWidth: true + + imageSource: Qt.resolvedUrl(model.iconSource) + //: LABEL DESKTOP_QML + itemText: (!!model.text ? model.text : qsTr("Unknown")) + SettingsModel.translationTrigger + //: LABEL DESKTOP_QML + accessibleText: (!!model.accessibleText ? model.accessibleText : qsTr("Unknown")) + SettingsModel.translationTrigger + label: model.label + link: model.link + } + } + } + } +} diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderContactInfoItem.qml b/resources/qml/Governikus/Provider/+desktop/ProviderContactInfoItem.qml new file mode 100644 index 0000000..9cce98a --- /dev/null +++ b/resources/qml/Governikus/Provider/+desktop/ProviderContactInfoItem.qml @@ -0,0 +1,62 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.View 1.0 + + +Item { + id: baseItem + + property alias imageSource: image.source + property alias itemText: text.text + property string accessibleText + property url link + property string label + + implicitHeight: layout.height + + Accessible.name: label + Accessible.description: accessibleText + Accessible.role: Accessible.ListItem + + activeFocusOnTab: true + + RowLayout { + id: layout + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + + spacing: Constants.groupbox_spacing + + Image { + id: image + + sourceSize.height: ApplicationModel.scaleFactor * 40 + sourceSize.width: ApplicationModel.scaleFactor * 40 + fillMode: Image.PreserveAspectFit + } + + GText { + id: text + + Layout.fillWidth: true + + linkColor: color + + onLinkActivated: Qt.openUrlExternally(link) + } + } + + FocusFrame { + dynamic: false + framee: layout + } +} diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderDetailButtonBar.qml b/resources/qml/Governikus/Provider/+desktop/ProviderDetailButtonBar.qml new file mode 100644 index 0000000..baefda3 --- /dev/null +++ b/resources/qml/Governikus/Provider/+desktop/ProviderDetailButtonBar.qml @@ -0,0 +1,91 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.View 1.0 + + +Rectangle { + id: baseItem + + height: button.height + 2 * Constants.pane_padding + width: parent.width + + property string selectedCategory: "" + property string providerIcon: "" + property string address: "" + property string shortName: "" + property string shortDescription: "" + property alias buttonColor: button.buttonColor + + function clickButton() { + if (baseItem.address !== "") { + Qt.openUrlExternally(baseItem.address) + } + } + + Accessible.name: qsTr("Link to service provider") + SettingsModel.translationTrigger + Accessible.description: qsTr("Clicking this link will open the website of the service provider in your web browser. The URL of the provider is") + " " + address + SettingsModel.translationTrigger + Accessible.role: Accessible.Button + activeFocusOnTab: true + + Keys.onSpacePressed: clickButton() + + color: Constants.white + + Image { + id: icon + + anchors.left: parent.left + anchors.leftMargin: Constants.component_spacing + anchors.verticalCenter: baseItem.top + + height: ApplicationModel.scaleFactor * 135 + width: height + + source: baseItem.providerIcon + asynchronous: true + fillMode: Image.PreserveAspectFit + } + + GText { + width: parent.width / 2 + anchors.left: icon.right + anchors.right: button.left + anchors.leftMargin: Constants.component_spacing + anchors.rightMargin: Constants.component_spacing + anchors.verticalCenter: parent.verticalCenter + + textStyle: Style.text.header_inverse + text: shortDescription !== "" ? shortDescription : shortName + elide: Text.ElideRight + maximumLineCount: 2 + } + + GButton { + id: button + + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.rightMargin: Constants.pane_padding + + //: LABEL DESKTOP_QML + text: qsTr("To online application") + SettingsModel.translationTrigger + icon.source: providerIcon + buttonColor: categoryColor + enabled: baseItem.address !== "" + onClicked: baseItem.clickButton() + + ToolTip.delay: 500 + ToolTip.visible: hovered + ToolTip.text: baseItem.address + } + +} diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderDetailHistory.qml b/resources/qml/Governikus/Provider/+desktop/ProviderDetailHistory.qml new file mode 100644 index 0000000..0f2e93d --- /dev/null +++ b/resources/qml/Governikus/Provider/+desktop/ProviderDetailHistory.qml @@ -0,0 +1,78 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.Provider 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.View 1.0 + +Item { + id: baseItem + + height: columnLayout.height + + Accessible.name: qsTr("List of your past interactions with this provider") + SettingsModel.translationTrigger + Accessible.description: HistoryModel.nameFilter.count === 0 ? qsTr("The list is empty, no recorded interaction with this service provider.") + SettingsModel.translationTrigger : "" + Accessible.role: Accessible.List + + ColumnLayout { + id: columnLayout + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + + spacing: Constants.text_spacing + + Repeater { + id: repeater + + model: HistoryModel.nameFilter + + ColumnLayout { + Layout.fillWidth: true + + spacing: columnLayout.spacing + + GSeparator { + visible: index !== 0 + Layout.fillWidth: true + } + + ProviderDetailHistoryItem { + id: historyItem + + Layout.fillWidth: true + + activeFocusOnTab: true + + providerName: subject + purposeText: purpose + } + + } + } + + GText { + id: textNoHistoryEntries + + visible: repeater.count === 0 + width: parent.width + + Accessible.name: text + activeFocusOnTab: true + + textStyle: Style.text.normal_secondary_inverse + //: INFO DESKTOP_QML No authentication history, placeholder text. + text: qsTr("Currently there are no history entries.") + SettingsModel.translationTrigger + } + } +} diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderDetailHistoryItem.qml b/resources/qml/Governikus/Provider/+desktop/ProviderDetailHistoryItem.qml new file mode 100644 index 0000000..2a5c6dc --- /dev/null +++ b/resources/qml/Governikus/Provider/+desktop/ProviderDetailHistoryItem.qml @@ -0,0 +1,82 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + + +Item { + id: baseItem + + property string providerName: "" + property string purposeText: "" + + height: columnLayout.height + + ColumnLayout { + id: columnLayout + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + + spacing: Constants.text_spacing + + GText { + id: date + + textStyle: Style.text.normal_inverse + font.capitalization: Font.AllUppercase + text: ( Utils.isToday(dateTime) ? qsTr("today") : + Utils.isYesterday(dateTime) ? qsTr("yesterday") : + Utils.isThisWeek(dateTime) ? dateTime.toLocaleString(Qt.locale(), qsTr("dddd")) : + dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) + ) + SettingsModel.translationTrigger + } + + Row { + Layout.fillWidth: true + + GText { + width: parent.width * 0.25 + + textStyle: Style.text.normal_inverse + //: LABEL DESKTOP_QML + text: qsTr("Service:") + SettingsModel.translationTrigger + font.weight: Font.Bold + } + + GText { + width: parent.width * 0.75 + + textStyle: Style.text.normal_inverse + text: purposeText + } + } + + Row { + Layout.fillWidth: true + + GText { + width: parent.width * 0.25 + + textStyle: Style.text.normal_inverse + //: LABEL DESKTOP_QML + text: qsTr("Provider:") + SettingsModel.translationTrigger + font.weight: Font.Bold + } + + GText { + width: parent.width * 0.75 + + textStyle: Style.text.normal_inverse + text: providerName + } + } + } +} diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderDetailView.qml b/resources/qml/Governikus/Provider/+desktop/ProviderDetailView.qml index 08d62f0..b98426d 100644 --- a/resources/qml/Governikus/Provider/+desktop/ProviderDetailView.qml +++ b/resources/qml/Governikus/Provider/+desktop/ProviderDetailView.qml @@ -1,22 +1,182 @@ -import QtQuick 2.10 +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ -import Governikus.View 1.0 +import QtQuick 2.0 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 -import Governikus.Provider 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 SectionPage { + id: baseItem + + readonly property color titleBarColor: Category.displayColor(provider.category) + readonly property real titleBarOpacity: 1 + signal showDetailView(var pModel) + property alias historyModelItem: provider.modelItem + property alias providerModelItem: provider.modelItem + + Accessible.name: qsTr("Provider detail view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This view shows a detailed description of a service provider.") + SettingsModel.translationTrigger + titleBarAction: TitleBarAction { - text: qsTr("Provider details") - showSettings: false + text: provider.shortName helpTopic: "providerPage" } - Rectangle { - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - height: parent.height / 2 - width: parent.width / 2 + ProviderModelItem { + id: provider + } - color: "mediumaquamarine" + Item { + id: mainContent + + anchors.fill: parent + + Row { + id: imageHeader + + height: Math.floor(baseItem.height * 0.5) + width: parent.width + + anchors.top: parent.top + + Image { + id: image + + height: parent.height + width: Math.floor(baseItem.width * 0.6) + anchors.top: parent.top + + source: provider.image + sourceSize.height: height + asynchronous: true + fillMode: Image.PreserveAspectCrop + } + + Rectangle { + height: parent.height + width: Math.ceil(baseItem.width * 0.4) + + color: baseItem.titleBarColor + + ProviderContactInfo { + id: providerContactInfo + + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: Constants.pane_spacing + anchors.leftMargin: Constants.pane_spacing * 2 + anchors.rightMargin: Constants.pane_spacing * 2 + + activeFocusOnTab: true + + contactModel: provider.contactModel + } + + FocusFrame { + framee: providerContactInfo + scope: providerContactInfo + } + } + } + + ProviderDetailButtonBar { + id: buttonBar + + anchors.top: imageHeader.bottom + + selectedCategory: provider.category + providerIcon: provider.icon + address: provider.address + shortName: provider.shortName + shortDescription: provider.shortDescription + buttonColor: baseItem.titleBarColor + } + + RowLayout { + id: lowerRow + + anchors.top: buttonBar.bottom + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: Constants.component_spacing + + spacing: Constants.component_spacing + + Item { + + Layout.fillHeight: true + Layout.fillWidth: true + + ScrollablePane { + id: leftPane + + anchors.fill: parent + + //: LABEL DESKTOP_QML + title: qsTr("Description") + SettingsModel.translationTrigger + + GText { + id: leftColumn + + width: parent.width + + Accessible.name: qsTr("Description of the service provider.") + SettingsModel.translationTrigger + Accessible.description: text + Accessible.role: Accessible.StaticText + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: !!provider.longDescription ? provider.longDescription : qsTr("The service provider did not provide a description.") + SettingsModel.translationTrigger + textStyle: Style.text.normal_inverse + } + } + + FocusFrame { + framee: leftPane + scope: leftColumn + } + } + + Item { + + Layout.fillHeight: true + Layout.fillWidth: true + + ScrollablePane { + id: rightPane + + anchors.fill: parent + + //: LABEL DESKTOP_QML + title: qsTr("History") + SettingsModel.translationTrigger + + ProviderDetailHistory { + id: rightColumn + + width: parent.width + + activeFocusOnTab: true + } + } + + FocusFrame { + framee: rightPane + scope: rightColumn + } + } + } + } + + FocusPoint { + color: Constants.black } } diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderInfoSection.qml b/resources/qml/Governikus/Provider/+desktop/ProviderInfoSection.qml index d90b346..6e1d220 100644 --- a/resources/qml/Governikus/Provider/+desktop/ProviderInfoSection.qml +++ b/resources/qml/Governikus/Provider/+desktop/ProviderInfoSection.qml @@ -1,25 +1,46 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 -Row { +Item { property alias image: icon.source property alias title: text.label property string name: "" - height: text.height - spacing: Constants.groupbox_spacing + Accessible.role: Accessible.Section + Accessible.name: text.Accessible.name - Image { - id: icon - sourceSize.height: ApplicationModel.scaleFactor * 40 - anchors.verticalCenter: text.verticalCenter + height: contentRow.height + width: contentRow.width + + Row { + id: contentRow + height: text.height + spacing: Constants.groupbox_spacing + + Image { + id: icon + sourceSize.height: ApplicationModel.scaleFactor * 40 + anchors.verticalCenter: text.verticalCenter + } + + LabeledText { + id: text + //: LABEL DESKTOP_QML + text: name.length > 0 ? name : qsTr("See details under \"more...\"") + SettingsModel.translationTrigger + } } - LabeledText { - id: text - text: name.length > 0 ? name : qsTr("See details under \"more...\"") + settingsModel.translationTrigger + FocusFrame { + border.color: Constants.black + dynamic: false } } diff --git a/resources/qml/Governikus/Provider/+desktop/ProviderModelItem.qml b/resources/qml/Governikus/Provider/+desktop/ProviderModelItem.qml new file mode 100644 index 0000000..2c3628f --- /dev/null +++ b/resources/qml/Governikus/Provider/+desktop/ProviderModelItem.qml @@ -0,0 +1,111 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + + +/* + * Convenience utility to access properties of a ProviderModel item + * This ensures having always a defined string, i.e. a non-null string object. + */ +Item { + id: baseItem + property var modelItem + + readonly property string category: !!modelItem && !!modelItem.providerCategory ? modelItem.providerCategory : "" + readonly property string shortName: !!modelItem && !!modelItem.providerShortName ? modelItem.providerShortName : "" + readonly property string longName: !!modelItem && !!modelItem.providerLongName ? modelItem.providerLongName : "" + readonly property string shortDescription: !!modelItem && !!modelItem.providerShortDescription ? modelItem.providerShortDescription : "" + readonly property string longDescription: !!modelItem && !!modelItem.providerLongDescription ? modelItem.providerLongDescription : "" + readonly property string address: !!modelItem && !!modelItem.providerAddress ? modelItem.providerAddress : "" + readonly property string addressDomain: !!modelItem && !!modelItem.providerAddressDomain ? modelItem.providerAddressDomain : "" + readonly property string homepage: !!modelItem && !!modelItem.providerHomepage ? modelItem.providerHomepage : "" + readonly property string homepageBase: !!modelItem && !!modelItem.providerHomepageBase ? modelItem.providerHomepageBase : "" + readonly property string phone: !!modelItem && !!modelItem.providerPhone ? modelItem.providerPhone : "" + readonly property string phoneCost: !!modelItem && !!modelItem.providerPhoneCost ? modelItem.providerPhoneCost : "" + readonly property string email: !!modelItem && !!modelItem.providerEmail ? modelItem.providerEmail : "" + readonly property string postalAddress: !!modelItem && !!modelItem.providerPostalAddress ? modelItem.providerPostalAddress : "" + readonly property string icon: !!modelItem && !!modelItem.providerIcon ? modelItem.providerIcon : "" + readonly property string image: !!modelItem && !!modelItem.providerImage ? modelItem.providerImage : "" + + readonly property ListModel contactModel: ListModel { + readonly property alias homepage: baseItem.homepage + readonly property alias email: baseItem.email + readonly property alias phone: baseItem.phone + readonly property alias phoneCost: baseItem.phoneCost + readonly property alias postalAddress: baseItem.postalAddress + + readonly property string phoneDisplayString: { + var s = "" + if (!!phone) { + s = '' + phone + "" + if (!!phoneCost) { + s += "
    " + phoneCost + } + } + return s + } + + function removeHtml(htmlString) { + return htmlString.replace(/<\/?[a-z][a-z0-9]*[^>]*>/ig, " "); + } + + onHomepageChanged: { + setProperty(0, "text", !!homepage ? '' + homepage + "" : "") + setProperty(0, "accessibleText", !!homepage ? homepage : "") + setProperty(0, "link", homepage) + } + onEmailChanged: { + setProperty(1, "text", !!email ? '' + email + "" : "") + setProperty(1, "accessibleText", email ? email : "") + setProperty(1, "link", !!email ? "mailto:" + email : "") + } + onPhoneDisplayStringChanged: { + setProperty(2, "text", phoneDisplayString) + //: LABEL DESKTOP_QML + var coststring = !!phoneCost ? ", " + qsTr("Costs") + ": " + phoneCost : "" + setProperty(2, "accessibleText", !!phone ? phone + coststring : "") + setProperty(2, "link", !!phone? "tel:" + phone : "") + } + onPostalAddressChanged: { + var dest = 'https://www.google.com/maps?q=' + dest = !!postalAddress ? dest + encodeURIComponent(postalAddress.replace(//gi,' ')) : "" + setProperty(3, "text", !!postalAddress ? '' + postalAddress + "" : "") + setProperty(3, "accessibleText", !!postalAddress ? postalAddress : "") + setProperty(3, "link", dest) + } + + ListElement { + iconSource: "qrc:///images/provider/url.svg" + label: QT_TR_NOOP("Homepage") + text: "" + accessibleText: "" + link: "" + } + + ListElement { + iconSource: "qrc:///images/provider/mail.svg" + label: QT_TR_NOOP("E-Mail") + text: "" + accessibleTest: "" + link: "" + } + + ListElement { + iconSource: "qrc:///images/provider/telefon.svg" + label: QT_TR_NOOP("Phone") + text: "" + accessibleText: "" + link: "" + } + + ListElement { + iconSource: "qrc:///images/provider/adresse.svg" + label: QT_TR_NOOP("Contact") + text: "" + accessibleText: "" + link: "" + } + } +} diff --git a/resources/qml/Governikus/Provider/+mobile/+android/ProviderDetailTab.qml b/resources/qml/Governikus/Provider/+mobile/+android/ProviderDetailTab.qml index 66237b2..643b4e2 100644 --- a/resources/qml/Governikus/Provider/+mobile/+android/ProviderDetailTab.qml +++ b/resources/qml/Governikus/Provider/+mobile/+android/ProviderDetailTab.qml @@ -1,33 +1,41 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 TabButton { id: button - padding: Utils.dp(10) + padding: 10 + + Accessible.name: text + + contentItem: GText { + Accessible.ignored: true - contentItem: Text { text: button.text - font.pixelSize: Constants.small_font_size + textStyle: button.checked || button.pressed ? Style.text.hint_accent : Style.text.hint elide: Text.ElideRight - color: button.checked || button.pressed ? Constants.blue : Constants.black horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } background: Rectangle { - color: Constants.background_color + color: Style.color.background clip: true Rectangle { height: parent.height + radius width: parent.width - radius: Utils.dp(3) - color: button.checked ? Constants.white : Constants.grey - border.color: Constants.grey - border.width: Utils.dp(1) + radius: 3 + color: button.checked ? Constants.white : Style.color.border + border.color: Style.color.border + border.width: Style.dimens.separator_size } } } diff --git a/resources/qml/Governikus/Provider/+mobile/+android/ProviderViewDelegate.qml b/resources/qml/Governikus/Provider/+mobile/+android/ProviderViewDelegate.qml deleted file mode 100644 index c06b088..0000000 --- a/resources/qml/Governikus/Provider/+mobile/+android/ProviderViewDelegate.qml +++ /dev/null @@ -1,126 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 -import Governikus.Style 1.0 - -Rectangle { - id: baseItem - width: parent.width - height: Constants.provider_section_height - color: Constants.background_color - clip: true - - Rectangle { - id: background - color: "white" - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: ProviderStyle.providerListItemRightMargin - anchors.top: parent.top - anchors.topMargin: ProviderStyle.providerListItemTopMargin - anchors.bottom: parent.bottom - anchors.bottomMargin: ProviderStyle.providerListItemBottomMargin - - Item { - property int childrenHeight: subjectText.height + addressText.height - - id: contentItem - height: Constants.provider_section_height - anchors.verticalCenter: parent.verticalCenter - - anchors.left: parent.left - anchors.right: parent.right - anchors.leftMargin: ProviderStyle.itemLeftMargin - anchors.rightMargin: Utils.dp(15) - - property int detailsLinkWidth: height / ProviderStyle.infoItemWidthFactor - - Text { - id: subjectText - - anchors.top: parent.top - anchors.left: parent.left - anchors.right: detailsLink.left - - anchors.topMargin: (Constants.provider_section_height - contentItem.childrenHeight) / 3 - anchors.rightMargin: Utils.dp(5) - - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.normal_font_size - color: ProviderStyle.subjectTextColor - font.bold: ProviderStyle.subjectTextFontBold - elide: Text.ElideRight - text: display - } - - Text { - id: addressText - - anchors.top: subjectText.bottom - anchors.left: parent.left - anchors.right: detailsLink.left - - anchors.topMargin: (Constants.provider_section_height - contentItem.childrenHeight) / 3 - anchors.bottomMargin: (Constants.provider_section_height - contentItem.childrenHeight) / 3 - - verticalAlignment: Text.AlignVCenter - font.pixelSize: ProviderStyle.addressTextFontSize - color: ProviderStyle.addressTextColor - elide: Text.ElideRight - text: providerAddressDomain - } - - Item { - id: detailsLink - anchors.right: parent.right - anchors.verticalCenter: ProviderStyle.providerListDetailsLinkPosition === "top" ? - subjectText.verticalCenter : - parent.verticalCenter - - anchors.margins: Utils.dp(5) - height: parent.height - width: contentItem.detailsLinkWidth - - Rectangle { - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - height: width - - border.color: ProviderStyle.providerListDetailsLinkBorder - border.width: 1 - radius: width - - color: ProviderStyle.providerListDetailsLinkBackground - - Text { - anchors.centerIn: parent - text: "i" - font.bold: ProviderStyle.providerListDetailsLinkBold - color: ProviderStyle.providerListDetailsLinkColor - } - } - } - } - } - - MouseArea { - anchors.fill: parent - onClicked: { - providerDetailView.providerModelItem = model - firePush(providerDetailView) - } - } - - Rectangle { - width: parent.width - anchors.top: parent.bottom - anchors.topMargin: -height - anchors.leftMargin: ProviderStyle.itemLeftMargin - anchors.left: parent.left - anchors.right: parent.right - visible: ProviderStyle.providerListItemsHaveBorder - height: visible ? 1 : 0 - color: Constants.grey - } -} diff --git a/resources/qml/Governikus/Provider/+mobile/+ios/ProviderDetailTab.qml b/resources/qml/Governikus/Provider/+mobile/+ios/ProviderDetailTab.qml index 379f205..5fb671b 100644 --- a/resources/qml/Governikus/Provider/+mobile/+ios/ProviderDetailTab.qml +++ b/resources/qml/Governikus/Provider/+mobile/+ios/ProviderDetailTab.qml @@ -1,22 +1,28 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 TabButton { id: button - contentItem: Text { + Accessible.role: Accessible.PageTab + Accessible.name: text + + contentItem: GText { text: button.text - font.pixelSize: Constants.small_font_size - elide: Text.ElideRight - color: button.checked ? Constants.white : Constants.blue + textStyle: button.checked ? Style.text.hint_inverse : Style.text.hint_accent horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } background: Rectangle { - color: Constants.background_color + color: Style.color.background clip: true Rectangle { @@ -25,10 +31,10 @@ TabButton { anchors.left: parent.left anchors.leftMargin: button.TabBar.index === 0 ? 0 : -radius - radius: Utils.dp(3) - color: button.checked ? Constants.blue : button.pressed ? Constants.blue_light : Constants.white + radius: 3 + color: button.checked ? Style.color.accent : (button.pressed ? Constants.lightgrey : Constants.white) border.color: Constants.blue - border.width: Utils.dp(1) + border.width: 1 } } } diff --git a/resources/qml/Governikus/Provider/+mobile/+ios/ProviderViewDelegate.qml b/resources/qml/Governikus/Provider/+mobile/+ios/ProviderViewDelegate.qml deleted file mode 100644 index 436e4b1..0000000 --- a/resources/qml/Governikus/Provider/+mobile/+ios/ProviderViewDelegate.qml +++ /dev/null @@ -1,86 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Rectangle { - id: baseItem - width: parent.width - height: Constants.provider_section_height - color: Constants.background_color - clip: true - - Rectangle { - id: background - color: "white" - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: Utils.dp(5) - anchors.top: parent.top - anchors.topMargin: Utils.dp(2) - anchors.bottom: parent.bottom - anchors.bottomMargin: Utils.dp(5) - - Item { - height: subjectText.height + addressText.height - anchors.verticalCenter: parent.verticalCenter - - anchors.left: parent.left - anchors.leftMargin: Utils.dp(5) - anchors.right: detailsLink.left - anchors.rightMargin: Utils.dp(15) - - Text { - id: subjectText - color: Constants.secondary_text - width: parent.width - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.normal_font_size - elide: Text.ElideRight - text: display - } - Text { - id: addressText - anchors.top: subjectText.bottom - width: parent.width - - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.small_font_size - color: Constants.blue_dark - elide: Text.ElideRight - text: providerAddressDomain - } - } - Item { - id: detailsLink - anchors.right: parent.right - anchors.margins: Utils.dp(5) - height: parent.height - width: parent.height / 2 - - Rectangle { - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - height: width - - border.color: Constants.blue_dark - border.width: 1 - radius: width - - Text { - anchors.centerIn: parent - text: qsTr("i") + settingsModel.translationTrigger - color: parent.border.color - } - } - } - } - - MouseArea { - anchors.fill: parent - onClicked: { - providerDetailView.providerModelItem = model - firePush(providerDetailView) - } - } -} diff --git a/resources/qml/Governikus/Provider/+mobile/+phone/ProviderDetailView.qml b/resources/qml/Governikus/Provider/+mobile/+phone/ProviderDetailView.qml index 3852621..9488d32 100644 --- a/resources/qml/Governikus/Provider/+mobile/+phone/ProviderDetailView.qml +++ b/resources/qml/Governikus/Provider/+mobile/+phone/ProviderDetailView.qml @@ -1,19 +1,28 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: provider.shortName } + readonly property real tabBarSpacing: Constants.is_layout_ios ? Constants.component_spacing : 0 + property alias providerModelItem: provider.modelItem + + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + title: provider.shortName titleBarColor: Category.displayColor(provider.category) - property alias providerModelItem: provider.modelItem ProviderModelItem { id: provider } @@ -25,13 +34,13 @@ SectionPage { } content: Item { - height: swipeBar.height + swipeViewBackground.height + Constants.component_spacing + height: swipeBar.height + swipeViewBackground.height + 2 * Constants.component_spacing + tabBarSpacing width: baseItem.width TabBar { id: swipeBar spacing: 0 - width: Constants.is_layout_android ? parent.width : Utils.dp(220) + width: Constants.is_layout_android ? parent.width : parent.width * 0.666 // Each tab of the 2 tabs gets 1/3 of the parent width, the rest ist padding height: descriptionButton.implicitHeight anchors.top: parent.top anchors.topMargin: Constants.component_spacing @@ -41,26 +50,30 @@ SectionPage { ProviderDetailTab { id: descriptionButton - text: qsTr("DESCRIPTION") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE IOS_PHONE + text: qsTr("DESCRIPTION") + SettingsModel.translationTrigger } ProviderDetailTab { id: contactButton - text: qsTr("CONTACT") + settingsModel.translationTrigger + //: LABEL ANDROID_PHONE IOS_PHONE + text: qsTr("CONTACT") + SettingsModel.translationTrigger } } Rectangle { id: swipeViewBackground - anchors.top: swipeBar.bottom - anchors.horizontalCenter: swipeBar.horizontalCenter - height: swipeView.height + 2 * Constants.component_spacing + + height: swipeView.height width: parent.width + anchors.top: swipeBar.bottom + anchors.topMargin: tabBarSpacing + anchors.horizontalCenter: swipeBar.horizontalCenter SwipeView { id: swipeView - height: Math.max(providerText.contentHeight, providerInfo.contentHeight) - anchors.margins: Constants.component_spacing + + height: Math.max(providerText.implicitHeight, providerInfo.implicitHeight) anchors.left: parent.left anchors.top: parent.top anchors.right: parent.right @@ -68,16 +81,22 @@ SectionPage { currentIndex: swipeBar.currentIndex clip: true - Text { + GText { id: providerText - text: (!!provider.longDescription ? provider.longDescription : qsTr("Description not available")) + settingsModel.translationTrigger + + Accessible.onScrollDownAction: baseItem.scrollPageDown() + Accessible.onScrollUpAction: baseItem.scrollPageUp() + + padding: Constants.component_spacing + //: LABEL ANDROID_PHONE IOS_PHONE + text: (!!provider.longDescription ? provider.longDescription : qsTr("Description not available")) + SettingsModel.translationTrigger + textStyle: Style.text.normal horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size } ProviderContactTab { id: providerInfo + contactModel: provider.contactModel } } diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfo.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfo.qml index 3e14007..9058aea 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfo.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfo.qml @@ -1,7 +1,14 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.2 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + Rectangle { id: baseItem @@ -31,11 +38,11 @@ Rectangle { onVisibleChanged: { info.resetSize(); info.approximateSize() } onChildrenRectChanged: info.approximateSize() - Text { - text: qsTr("Contact") + settingsModel.translationTrigger + GText { + //: LABEL ANDROID_TABLET IOS_TABLET + text: qsTr("Contact") + SettingsModel.translationTrigger + textStyle: Style.text.header_inverse padding: Constants.component_spacing - font.pixelSize: Constants.header_font_size - color: "white" } Rectangle { // The delegates have space in between which is @@ -43,7 +50,7 @@ Rectangle { anchors.left: parent.left anchors.right: parent.right height: contactListView.height - color: "white" + color: Constants.white ListView { id: contactListView @@ -56,7 +63,8 @@ Rectangle { width: contactListView.width color: baseItem.color imageSource: Qt.resolvedUrl(model.iconSource) - itemText: (!!model.text ? model.text : qsTr("Unknown")) + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET IOS_TABLET + itemText: (!!model.text ? model.text : qsTr("Unknown")) + SettingsModel.translationTrigger link: model.link sizeRecudctor: info.sizeRecudctor } diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfoItem.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfoItem.qml index 5a40b98..2faa670 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfoItem.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderContactInfoItem.qml @@ -1,6 +1,12 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 Rectangle { @@ -9,30 +15,33 @@ Rectangle { property alias itemText: text.text property url link property int sizeRecudctor: 0 - height: text.height + Utils.dp(20) + height: text.height + 20 + + Accessible.role: Accessible.Link + Accessible.name: ApplicationModel.stripHtmlTags(itemText) Image { id: image - width: Utils.dp(25) - baseItem.sizeRecudctor + width: 25 - baseItem.sizeRecudctor height: width anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter fillMode: Image.PreserveAspectFit } - Text { + GText { id: text + anchors.left: image.right - anchors.leftMargin: Utils.dp(10) + anchors.leftMargin: 10 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - font.pixelSize: Constants.normal_font_size - baseItem.sizeRecudctor - color: "white" + linkColor: color - elide: Text.ElideRight - wrapMode: Text.WordWrap - } + textStyle: Style.text.normal_inverse + font.pixelSize: Style.text.normal_inverse.textSize - baseItem.sizeRecudctor + } MouseArea { anchors.fill: parent diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailButtonBar.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailButtonBar.qml index ff2d20d..f97acb5 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailButtonBar.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailButtonBar.qml @@ -1,6 +1,12 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Type.SettingsModel 1.0 + Item { id: baseItem @@ -27,7 +33,8 @@ Item { GButton { id: button - text: qsTr("ONLINE APPLICATION") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET IOS_TABLET + text: qsTr("ONLINE APPLICATION") + SettingsModel.translationTrigger buttonColor: baseItem.titleBarColor maxWidth: parent.width - icon.width - 3 * Constants.component_spacing anchors.left: icon.right diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailDescription.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailDescription.qml index f73c135..bf38a83 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailDescription.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailDescription.qml @@ -1,26 +1,42 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 Column { id: baseItem spacing: Constants.pane_spacing + signal scrollDescriptionUp() + signal scrollDescriptionDown() + property string description: "" - Text { - font.pixelSize: Constants.header_font_size - color: Constants.blue - text: qsTr("Description") + settingsModel.translationTrigger + GText { + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID_TABLET IOS_TABLET + text: qsTr("Description") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent } - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { + width: parent.width + + Accessible.role: Accessible.StaticText + Accessible.name: text + Accessible.onScrollDownAction: baseItem.scrollDescriptionDown() + Accessible.onScrollUpAction: baseItem.scrollDescriptionUp() + horizontalAlignment: Text.AlignLeft text: baseItem.description - width: parent.width - wrapMode: Text.Wrap + textStyle: Style.text.normal_secondary } } diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistory.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistory.qml index 071989b..640b1de 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistory.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistory.qml @@ -1,39 +1,51 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 + Column { id: baseItem spacing: Constants.pane_spacing + signal scrollHistoryUp() + signal scrollHistoryDown() + property var openHistoryInfoFunc: function() { } - readonly property int historyItemHeight: Utils.dp(66) - readonly property int historyItemMargin: Utils.dp(8) - - Text { + GText { id: headerText - font.pixelSize: Constants.header_font_size - color: Constants.blue - text: qsTr("History") + settingsModel.translationTrigger + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID_TABLET IOS_TABLET + text: qsTr("History") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent } Repeater { - model: historyModel.nameFilter + model: HistoryModel.nameFilter ProviderDetailHistoryItem { - itemHeight: baseItem.historyItemHeight - itemMargin: baseItem.historyItemMargin - width: parent.width + Accessible.onScrollDownAction: baseItem.scrollHistoryDown() + Accessible.onScrollUpAction: baseItem.scrollHistoryUp() + providerName: subject providerPostalAddress: providerPostalAddress dateTime: model.dateTime - infoText: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET IOS_TABLET + infoText: qsTr("Purpose for reading out requested data") + SettingsModel.translationTrigger purposeText: purpose requestedDataText: requestedData termsOfUsageText: termsOfUsage diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryInfo.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryInfo.qml index 910f959..34ceaa0 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryInfo.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryInfo.qml @@ -1,7 +1,14 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 +import Governikus.Type.SettingsModel 1.0 + Item { id: baseItem @@ -20,7 +27,7 @@ Item { opacity: 0.4 } - Flickable { + GFlickable { anchors.fill: baseItem anchors.margins: Constants.component_spacing contentHeight: infoRow.height @@ -53,22 +60,24 @@ Item { ProviderInfoSection { imageSource: "qrc:///images/provider/information.svg" - title: qsTr("Service provider") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET IOS_TABLET + title: qsTr("Service provider") + SettingsModel.translationTrigger name: baseItem.providerName } ProviderInfoSection { imageSource: "qrc:///images/provider/purpose.svg" - title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET IOS_TABLET + title: qsTr("Purpose for reading out requested data") + SettingsModel.translationTrigger name: baseItem.purposeText } - Text { + GText { id: readDataTitle width: parent.width - font.pixelSize: Constants.header_font_size - color: Constants.blue - text: qsTr("Read data") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET IOS_TABLET + text: qsTr("Read data") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent } Column { @@ -83,20 +92,19 @@ Item { Item { id: textItem - height: Utils.dp(32) + height: 32 width: infoTable.width Rectangle { anchors.fill: textItem - color: "white" + color: Constants.white } - Text { - color: Constants.secondary_text - text: modelData.trim() - + GText { anchors.verticalCenter: parent.verticalCenter - font.pixelSize: Constants.normal_font_size + + text: modelData.trim() + textStyle: Style.text.normal_secondary } } } @@ -121,22 +129,20 @@ Item { anchors.right: parent.right spacing: Constants.pane_spacing - Text { + GText { id: termsOfUsageTitle - text: qsTr("Terms of usage") + settingsModel.translationTrigger - font.pixelSize: Constants.header_font_size - color: Constants.blue + //: LABEL ANDROID_TABLET IOS_TABLET + text: qsTr("Terms of usage") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent } - Text { + GText { id: termsOfUsageTextItem - color: Constants.secondary_text + + width: parent.width text: baseItem.termsOfUsageText - width: parent.width - elide: Text.ElideRight - wrapMode: Text.Wrap - font.pixelSize: Constants.normal_font_size + textStyle: Style.text.normal_secondary } } } diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryItem.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryItem.qml index b443c93..0d39239 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryItem.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailHistoryItem.qml @@ -1,14 +1,16 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 -Item { +ListItem { id: baseItem - readonly property color backgroundColor: Constants.blue - readonly property int iconWidth: Utils.dp(18) - property string providerName: "" property string providerPostalAddress: "" property var dateTime: "" @@ -16,89 +18,30 @@ Item { property string purposeText: "" property string requestedDataText: "" property string termsOfUsageText: "" - property int itemHeight: 0 - property int itemMargin: 0 - property int lineHeight: itemHeight / 3 property var openInfoFunction: function () {} - height: itemHeight + 2 * itemMargin + height: 72 - Rectangle { - anchors.fill: baseItem - color: "white" - } + Accessible.description: qsTr("Click to view details of history entry.") + SettingsModel.translationTrigger - Column { - id: textColumn + //: LABEL ANDROID IOS + headerText: (Utils.isToday(dateTime) ? qsTr("today") : + Utils.isYesterday(dateTime) ? qsTr("yesterday") : + Utils.isThisWeek(dateTime) ? dateTime.toLocaleString(Qt.locale(), qsTr("dddd")) : + dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) + ) + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + text: (!!providerName ? providerName : qsTr("Touch for more details")) + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + footerText: purposeText !== "" ? purposeText : qsTr("Touch for more details") + SettingsModel.translationTrigger + contentMarginLeft: 0 + contentMarginRight: 0 - height: baseItem.itemHeight - width: baseItem.width - baseItem.iconWidth - - anchors.left: baseItem.left - anchors.top: baseItem.top - anchors.topMargin: baseItem.itemMargin - - Text { - height: baseItem.lineHeight - verticalAlignment: Text.AlignVCenter - font.pixelSize: Constants.label_font_size - font.capitalization: Font.AllUppercase - color: Constants.blue - text: (!new Date(dateTime) ? "" : - Utils.isToday(dateTime) ? qsTr("today") : - Utils.isYesterday(dateTime) ? qsTr("yesterday") : - Utils.isThisWeek(dateTime) ? dateTime.toLocaleString(Qt.locale(), qsTr("dddd")) : - dateTime.toLocaleString(Qt.locale(), qsTr("dd.MM.yyyy")) - ) + settingsModel.translationTrigger - } - - LabeledText { - label: !!purposeText ? purposeText : "" - text: (!!providerName ? providerName : qsTr("Touch for more details")) + settingsModel.translationTrigger - width: parent.width - height: baseItem.lineHeight - } - } - - Item { - id: detailsLink - - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - - height: width - width: iconWidth - - Rectangle { - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - - height: width - - border.color: ProviderStyle.providerListDetailsLinkBorder - border.width: 1 - radius: width - - color: ProviderStyle.providerListDetailsLinkBackground - Text { - anchors.centerIn: parent - - text: "i" - font.bold: ProviderStyle.providerListDetailsLinkBold - color: ProviderStyle.providerListDetailsLinkColor - } - } - } - - MouseArea { - anchors.fill: baseItem - onClicked: baseItem.openInfoFunction({ - providerName: baseItem.providerName, - providerPostalAddress: baseItem.providerPostalAddress, - purposeText: baseItem.purposeText, - requestedDataText: baseItem.requestedDataText, - termsOfUsageText: baseItem.termsOfUsageText - }) - } + onClicked: baseItem.openInfoFunction({ + providerName: baseItem.providerName, + providerPostalAddress: baseItem.providerPostalAddress, + purposeText: baseItem.purposeText, + requestedDataText: baseItem.requestedDataText, + termsOfUsageText: baseItem.termsOfUsageText + }) } diff --git a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailView.qml b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailView.qml index 9218779..a4eaf92 100644 --- a/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailView.qml +++ b/resources/qml/Governikus/Provider/+mobile/+tablet/ProviderDetailView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 @@ -7,7 +11,7 @@ import Governikus.View 1.0 SectionPage { id: baseItem - readonly property TitleBarAction leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: "back" onClicked: { if (providerDetailsHistoryInfo.visible) { @@ -18,12 +22,9 @@ SectionPage { } } } - readonly property TitleBarAction headerTitleBarAction: TitleBarAction { - text: historyModelItem && historyModelItem.subject ? historyModelItem.subject : provider.shortName - font.bold: true - } - readonly property Item rightTitleBarAction: Item {} - readonly property color titleBarColor: Category.displayColor(provider.category) + title: historyModelItem && historyModelItem.subject ? historyModelItem.subject : provider.shortName + rightTitleBarAction: Item {} + titleBarColor: Category.displayColor(provider.category) readonly property real titleBarOpacity: 1 property alias historyModelItem: provider.modelItem @@ -116,11 +117,15 @@ SectionPage { ProviderDetailDescription { id: leftColumn + anchors.margins: 2 * Constants.pane_padding anchors.top: buttonBar.bottom anchors.left: parent.left anchors.right: parent.right + onScrollDescriptionDown: baseItem.scrollPageDown() + onScrollDescriptionUp: baseItem.scrollPageUp() + description: provider.longDescription } } @@ -138,6 +143,7 @@ SectionPage { ProviderDetailHistory { id: rightColumn + anchors.topMargin: 2 * Constants.pane_padding anchors.leftMargin: Constants.pane_padding anchors.rightMargin: Constants.pane_padding @@ -145,6 +151,9 @@ SectionPage { anchors.left: parent.left anchors.right: parent.right + onScrollHistoryDown: baseItem.scrollPageDown() + onScrollHistoryUp: baseItem.scrollPageUp() + openHistoryInfoFunc: baseItem.openHistoryInfoFunc } } diff --git a/resources/qml/Governikus/Provider/+mobile/ProviderContactTab.qml b/resources/qml/Governikus/Provider/+mobile/ProviderContactTab.qml index e2b7745..5433b13 100644 --- a/resources/qml/Governikus/Provider/+mobile/ProviderContactTab.qml +++ b/resources/qml/Governikus/Provider/+mobile/ProviderContactTab.qml @@ -1,62 +1,89 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.2 +import QtGraphicalEffects 1.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + Item { id: baseItem - property alias contactModel: infoList.model - readonly property int contentHeight: infoList.contentHeight + property alias contactModel: infoList.model + + implicitHeight: infoList.contentHeight + 2 * Constants.component_spacing ListView { id: infoList + anchors.fill: parent + anchors.margins: Constants.component_spacing + interactive: false delegate: Item { id: delegateItem + width: parent.width - height: Math.max(textItem.height, Utils.dp(50)) + height: Math.max(textItem.height, 50) + + Accessible.role: Accessible.ListItem + Accessible.name: ApplicationModel.stripHtmlTags(textItem.text) Image { id: imageItem - fillMode: Image.PreserveAspectFit - height: Utils.dp(24) - width: Utils.dp(24) + + anchors.left: parent.left - anchors.leftMargin: Utils.dp(15) anchors.verticalCenter: parent.verticalCenter + sourceSize.height: Style.dimens.small_icon_size + sourceSize.width: Style.dimens.small_icon_size + source: Qt.resolvedUrl(model.iconSource) + fillMode: Image.PreserveAspectFit + + ColorOverlay { + anchors.fill: imageItem + source: imageItem + color: Style.color.accent + } } - Text { + GText { id: textItem - color: Constants.secondary_text - text: !!model.text ? model.text : qsTr("Unknown") + settingsModel.translationTrigger - verticalAlignment: Text.AlignVCenter + anchors.left: imageItem.right - anchors.leftMargin: Utils.dp(20) + anchors.leftMargin: Constants.component_spacing anchors.right: parent.right - anchors.rightMargin: Utils.dp(10) anchors.verticalCenter: parent.verticalCenter - font.pixelSize: Utils.dp(16) - wrapMode: Text.WordWrap + + Accessible.ignored: true + textFormat: Text.RichText + text: !!model.text ? model.text : qsTr("Unknown") + SettingsModel.translationTrigger + verticalAlignment: Text.AlignVCenter + textStyle: Style.text.normal } MouseArea { anchors.fill: delegateItem + enabled: !!model.link + onClicked: Qt.openUrlExternally(model.link) } - Rectangle { + GSeparator { + visible: index !== infoList.count - 1 anchors.bottom: parent.bottom anchors.left: parent.left anchors.right: parent.right - height: 1 - color: Constants.grey } } } diff --git a/resources/qml/Governikus/Provider/+mobile/ProviderHeader.qml b/resources/qml/Governikus/Provider/+mobile/ProviderHeader.qml index f10ce5a..63bb464 100644 --- a/resources/qml/Governikus/Provider/+mobile/ProviderHeader.qml +++ b/resources/qml/Governikus/Provider/+mobile/ProviderHeader.qml @@ -1,8 +1,15 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 + Rectangle { id: baseItem @@ -12,6 +19,7 @@ Rectangle { // This is interpreted by the SectionPage component readonly property real titleBarOpacity: shadow.opacity === 1 ? 1 : (customProviderImage ? Math.max(0, 0.5 - shadow.opacity) : 0) + readonly property real titleBarTopBounce: sectionPageFlickable.verticalOvershoot < 0.0 ? -sectionPageFlickable.verticalOvershoot : 0.0 // Internal vars readonly property color shadowColor: Category.displayColor(selectedCategory) @@ -19,49 +27,35 @@ Rectangle { readonly property string backgroundImage: customProviderImage ? selectedProvider.image : Category.backgroundImageSource(selectedCategory) readonly property string categoryIcon: selectedProvider || selectedCategory !== "all" ? "" : Category.imageSource(selectedCategory) readonly property bool withButtons: selectedCategory === "" && !selectedProvider + readonly property real shadowOpacity: Math.min(1, headerOffsetY / (backgroundImage.height - Style.dimens.titlebar_height)) readonly property double iconHeightRatio: 0.3 readonly property double iconVerticalMarginRatio: 0.2 + // For some reason contentY is sometimes set to undefined. + readonly property real headerOffsetY: typeof(sectionPageFlickable.contentY) === "undefined" ? 0 : sectionPageFlickable.contentY + property int maxContentY: if (withButtons && parent != null) { return parent.height * (iconHeightRatio + iconVerticalMarginRatio) } else { return height / 2 } - height: backgroundImage.height + providerInfo.height + height: backgroundImage.height + providerInfo.height - titleBarTopBounce - function definedContentY() { - // For some reason contentY is sometimes set to undefined. - return typeof(contentY) === "undefined" ? 0 : contentY - } - - function currentMargin() { - // Height of button icons. - var H = height * iconHeightRatio - - // Initial inferior margin for button icons. - var M = height * iconVerticalMarginRatio - - var y = definedContentY() - - return -2 * y * (M + H) / (3 * M + 2 * H) + M - } + color: providerInfo.color // Some provider images have transparent backgrounds, so we need to fill the background Image { id: backgroundImage source: baseItem.backgroundImage - height: width / 1.80 + height: width / 1.80 + titleBarTopBounce width: parent.width anchors.left: parent.left anchors.top: parent.top + anchors.topMargin: -titleBarTopBounce // When flicking over the top, scale the image (similar to native iOS apps) fillMode: Image.PreserveAspectCrop - function transition() { - return Math.min(1, contentY / (height - Constants.titlebar_height)) - } - Image { id: categoryIcon source: baseItem.categoryIcon @@ -75,7 +69,7 @@ Rectangle { visible: baseItem.categoryIcon !== "" - opacity: baseItem.definedContentY() <= maxContentY ? 1 : 0 + opacity: baseItem.headerOffsetY <= maxContentY ? 1 : 0 Behavior on opacity { NumberAnimation {} } @@ -84,7 +78,7 @@ Rectangle { Image { source: selectedProvider ? selectedProvider.icon : "" asynchronous: true - height: Utils.dp(70) + height: 70 width: height fillMode: Image.PreserveAspectFit anchors.margins: Constants.component_spacing @@ -92,13 +86,6 @@ Rectangle { anchors.bottom: parent.bottom visible: !!selectedProvider } - - Rectangle { - id: shadow - anchors.fill: parent - color: baseItem.shadowColor - opacity: parent.transition() - } } Row { @@ -111,15 +98,14 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: backgroundImage.bottom - anchors.bottomMargin: baseItem.currentMargin() + anchors.bottomMargin: backgroundImage.height / 2 - iconsRow.height - titleBarTopBounce - headerOffsetY / (headerOffsetY < 0.0 ? 1.0 : 2.0) Repeater { model: ["citizen", "finance", "insurance", "other"] - Rectangle { + Item { height: parent.height width: parent.width * 0.25 - color: "transparent" Image { source: Category.buttonImageSource(modelData) @@ -136,6 +122,15 @@ Rectangle { } } + Rectangle { + id: shadow + + anchors.fill: backgroundImage + + color: baseItem.shadowColor + opacity: shadowOpacity + } + Rectangle { id: providerInfo height: visible ? column.height + 2 * Constants.pane_padding : 0 @@ -153,13 +148,11 @@ Rectangle { anchors.right: parent.right spacing: Constants.pane_spacing - Text { + GText { id: providerText - color: Constants.secondary_text width: parent.width text: selectedProvider ? selectedProvider.shortDescription : "" - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + textStyle: Style.text.normal visible: text.length > 0 } @@ -167,7 +160,8 @@ Rectangle { id: providerButton anchors.right: parent.right buttonColor: shadowColor - text: qsTr("To service provider") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("To service provider") + SettingsModel.translationTrigger onClicked: { Qt.openUrlExternally(selectedProvider ? selectedProvider.address : "") } diff --git a/resources/qml/Governikus/Provider/+mobile/ProviderInfoSection.qml b/resources/qml/Governikus/Provider/+mobile/ProviderInfoSection.qml index c25f45f..dc112d4 100644 --- a/resources/qml/Governikus/Provider/+mobile/ProviderInfoSection.qml +++ b/resources/qml/Governikus/Provider/+mobile/ProviderInfoSection.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Type.SettingsModel 1.0 Rectangle { @@ -12,7 +17,7 @@ Rectangle { width: parent.width height: Math.max(image.height, providerTitle.height) - color: "white" + color: Constants.white clip: true Image { @@ -20,8 +25,8 @@ Rectangle { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter - height: Utils.dp(40) - width: Utils.dp(40) + height: 40 + width: 40 source: imageSource fillMode: Image.PreserveAspectFit @@ -31,10 +36,11 @@ Rectangle { id: providerTitle anchors.verticalCenter: image.verticalCenter anchors.left: image.right - anchors.leftMargin: Utils.dp(10) + anchors.leftMargin: 10 anchors.right: parent.right label: title - text: name.length > 0 ? name : qsTr("Touch for more details") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: name.length > 0 ? name : qsTr("Touch for more details") + SettingsModel.translationTrigger } } diff --git a/resources/qml/Governikus/Provider/+mobile/ProviderModelItem.qml b/resources/qml/Governikus/Provider/+mobile/ProviderModelItem.qml index 9d7f2cf..2aabdae 100644 --- a/resources/qml/Governikus/Provider/+mobile/ProviderModelItem.qml +++ b/resources/qml/Governikus/Provider/+mobile/ProviderModelItem.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 @@ -76,28 +80,28 @@ Item { } ListElement { - iconSource: "qrc:///images/provider/url.png" + iconSource: "qrc:///images/provider/url.svg" label: QT_TR_NOOP("Homepage") text: "" link: "" } ListElement { - iconSource: "qrc:///images/provider/mail.png" + iconSource: "qrc:///images/provider/mail.svg" label: QT_TR_NOOP("E-Mail") text: "" link: "" } ListElement { - iconSource: "qrc:///images/provider/telefon.png" + iconSource: "qrc:///images/provider/telefon.svg" label: QT_TR_NOOP("Phone") text: "" link: "" } ListElement { - iconSource: "qrc:///images/provider/adresse.png" + iconSource: "qrc:///images/provider/adresse.svg" label: QT_TR_NOOP("Contact") text: "" link: "" diff --git a/resources/qml/Governikus/ProviderView/+desktop/AdditionalResultsItem.qml b/resources/qml/Governikus/ProviderView/+desktop/AdditionalResultsItem.qml new file mode 100644 index 0000000..5f1c922 --- /dev/null +++ b/resources/qml/Governikus/ProviderView/+desktop/AdditionalResultsItem.qml @@ -0,0 +1,101 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 +import QtGraphicalEffects 1.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ProviderCategoryFilterModel 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 + +Item { + id: baseItem + + property int totalHits: ProviderCategoryFilterModel.additionalResultCount + signal clicked() + + implicitHeight: row.implicitHeight + 2 * Constants.groupbox_spacing + + Keys.onSpacePressed: mouseArea.clicked(undefined) + Accessible.role: Accessible.Button + Accessible.name: qsTr("Additional results in other categories: %1. Click here to remove filter.").arg(totalHits) + SettingsModel.translationTrigger + + Item { + id: shadowLayer + + anchors.fill: parent + + layer.enabled: true + layer.effect: DropShadow { + radius: 4 + samples: 8 + source: background + color: Qt.darker(Constants.grey, 1.2) + } + } + + Rectangle { + id: background + + anchors.fill: parent + + color: Category.displayColor("all") + radius: Style.dimens.corner_radius + } + + RowLayout { + id: row + + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: Constants.groupbox_spacing + + spacing: Constants.groupbox_spacing + + Image { + id: icon + + sourceSize.height: ApplicationModel.scaleFactor * 60 + sourceSize.width: ApplicationModel.scaleFactor * 60 + + source: Category.imageSource("all") + asynchronous: true + fillMode: Image.PreserveAspectFit + } + + GText { + id: nameText + + verticalAlignment: Text.AlignVCenter + Layout.fillWidth: true + + //: LABEL DESKTOP_QML + text: qsTr("Additional results in other categories:") + " " + baseItem.totalHits + SettingsModel.translationTrigger + + textStyle: Style.text.normal + } + + GButton { + id: showButton + + text: qsTr("Show") + SettingsModel.translationTrigger + onClicked: baseItem.clicked() + } + } + + MouseArea { + id: mouseArea + + anchors.fill: parent + + onClicked: baseItem.clicked() + } + + FocusFrame {} +} diff --git a/resources/qml/Governikus/ProviderView/+desktop/ProviderCard.qml b/resources/qml/Governikus/ProviderView/+desktop/ProviderCard.qml new file mode 100644 index 0000000..ef201fb --- /dev/null +++ b/resources/qml/Governikus/ProviderView/+desktop/ProviderCard.qml @@ -0,0 +1,135 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Window 2.10 +import QtQuick.Layouts 1.3 +import QtGraphicalEffects 1.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Provider 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.View 1.0 + +Item { + id: baseItem + + property alias providerModelItem: provider.modelItem + signal showDetailView(var pModelItem) + + height: Math.floor(width * 0.84) // Set a fixed aspect ratio which best fits the view + + Keys.onSpacePressed: mouseArea.clicked(undefined) + Accessible.role: Accessible.Button + Accessible.name: qsTr("Provider:") + " " + (!!providerModelItem ? provider.shortName : qsTr("Unknown error")) + SettingsModel.translationTrigger + Accessible.description: qsTr("Provider description:") + " " + (!!providerModelItem ? provider.shortDescription : qsTr("Unknown error")) + SettingsModel.translationTrigger + + ProviderModelItem { + id: provider + } + + Column { + id: column + + width: baseItem.width + + Image { + id: image + + height: Math.floor(baseItem.width * 0.56) // Image aspect ratio 16:9 + width: baseItem.width + + source: provider.image + // Set a fixed size for width and height, so it doesn't have to resize the source when the window size changes -> way faster + sourceSize.width: Screen.devicePixelRatio * 512 + mipmap: true + asynchronous: true + fillMode: Image.PreserveAspectCrop + + layer.enabled: true + layer.effect: OpacityMask { + maskSource: Item { + width: image.width + height: image.height + RoundedRectangle { + anchors.centerIn: parent + width: image.width + height: image.height + radius: Style.dimens.corner_radius + bottomLeftCorner: false + bottomRightCorner: false + } + } + } + } + + Rectangle { + width: baseItem.width + height: Math.floor(baseItem.width * 0.2) + + color: Constants.white + + GText { + id: nameText + + anchors.fill: parent + anchors.leftMargin: Constants.text_spacing + anchors.rightMargin: Constants.text_spacing + + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + text: provider.longName !== "" ? provider.longName : provider.shortName + + elide: Text.ElideRight + maximumLineCount: 2 + textStyle: Style.text.normal_inverse + } + } + + RoundedRectangle { + width: baseItem.width + height: Math.floor(baseItem.width * 0.08) + + radius: Style.dimens.corner_radius + color: Category.displayColor(provider.category) + topLeftCorner: false + topRightCorner: false + + GText { + id: providerText + + anchors.fill: parent + anchors.leftMargin: Constants.text_spacing + anchors.rightMargin: Constants.text_spacing + + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + text: provider.homepageBase + + elide: Text.ElideRight + maximumLineCount: 1 + textStyle: Style.text.hint + } + } + } + + MouseArea { + id: mouseArea + + anchors.fill: parent + + onClicked: baseItem.showDetailView(providerModelItem) + cursorShape: Qt.PointingHandCursor + } + + FocusFrame { + dynamic: false + marginFactor: 2 + radius: Style.dimens.corner_radius + border.color: Constants.black + } +} diff --git a/resources/qml/Governikus/ProviderView/+desktop/ProviderOverview.qml b/resources/qml/Governikus/ProviderView/+desktop/ProviderOverview.qml new file mode 100644 index 0000000..cae3bf0 --- /dev/null +++ b/resources/qml/Governikus/ProviderView/+desktop/ProviderOverview.qml @@ -0,0 +1,174 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Provider 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ProviderCategoryFilterModel 1.0 +import Governikus.Type.ApplicationModel 1.0 + +SectionPage { + id: baseItem + + signal showDetailView(var pModelItem) + + Accessible.name: qsTr("Provider view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the provider view of the AusweisApp2.") + SettingsModel.translationTrigger + + Component.onCompleted: { + ProviderCategoryFilterModel.setCategorySelection("all") + ProviderCategoryFilterModel.searchString = "" + tabbedPane.currentIndex = 0 + } + + TabbedPane { + id: tabbedPane + + anchors.fill: parent + anchors.margins: Constants.pane_padding + + sectionsModel: [ + { + //: LABEL DESKTOP_QML + categoryName: qsTr("All provider") + SettingsModel.translationTrigger, + category: "all" + }, + { + //: LABEL DESKTOP_QML + categoryName: qsTr("Citizen services") + SettingsModel.translationTrigger, + category: "citizen" + }, + { + //: LABEL DESKTOP_QML + categoryName: qsTr("Financials") + SettingsModel.translationTrigger, + category: "finance" + }, + { + //: LABEL DESKTOP_QML + categoryName: qsTr("Insurances") + SettingsModel.translationTrigger, + category: "insurance" + }, + { + //: LABEL DESKTOP_QML + categoryName: qsTr("Other services") + SettingsModel.translationTrigger, + category: "other" + } + ] + + sectionDelegate: TabbedPaneDelegateIconAndText { + sectionName: model.modelData.categoryName + iconPath: Category.imageSource(model.modelData.category) + } + contentDelegate: content + contentPadding: 0 + onCurrentItemModelChanged: { + if (currentItemModel === null) { + return + } + + ProviderCategoryFilterModel.setCategorySelection(currentItemModel.modelData.category) + } + + Component { + id: content + + Item { + height: tabbedPane.availableHeight + width: parent.width + + GridView { + id: gridView + + property int columns: Math.floor(width / (ApplicationModel.scaleFactor * 400)) + property bool hasResults: gridView.count > 0 || ProviderCategoryFilterModel.additionalResultCount > 0 + property real spacing: Constants.component_spacing + + anchors { + top: parent.top + left: parent.left + right: parent.right + bottom: additionalResults.top + topMargin: Math.floor(spacing / 2) + leftMargin: Math.floor(spacing / 2) + bottomMargin: Math.floor(spacing / 2) + } + + cellWidth: Math.floor((width - spacing / 2) / columns) + cellHeight: Math.floor(cellWidth * 0.84) // Set aspect ratio from ProviderCard + displayMarginBeginning: spacing + displayMarginEnd: additionalResults.height + spacing + highlightFollowsCurrentItem: true + highlight: null + activeFocusOnTab: true + + model: ProviderCategoryFilterModel + + boundsBehavior: Flickable.StopAtBounds + ScrollBar.vertical: ScrollBar { + policy: size === 1.0 ? ScrollBar.AlwaysOff : ScrollBar.AlwaysOn + } + + delegate: Item { + width: gridView.cellWidth + height: gridView.cellHeight + + ProviderCard { + anchors.fill: parent + anchors.margins: Math.floor(gridView.spacing / 2) + + focus: gridView.currentIndex === index + providerModelItem: model + + onShowDetailView: baseItem.showDetailView(pModelItem) + } + } + + Connections { + target: ProviderCategoryFilterModel + onFireCriteriaChanged: gridView.contentY = gridView.originY + } + } + + AdditionalResultsItem { + id: additionalResults + + visible: ProviderCategoryFilterModel.additionalResultCount > 0 && ProviderCategoryFilterModel.categories.length > 0 && ProviderCategoryFilterModel.categories.indexOf("all") === -1 + height: visible ? implicitHeight : 0 + width: gridView.columns * gridView.cellWidth + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + leftMargin: Math.floor(gridView.spacing * 2) + rightMargin: Math.floor(gridView.spacing * 2) + topMargin: visible ? gridView.spacing : 0 + bottomMargin: visible ? gridView.spacing : 0 + } + + activeFocusOnTab: true + + onActiveFocusChanged: { + if (activeFocus) { + gridView.positionViewAtIndex(index, GridView.Center) + } + } + + onClicked: { + ProviderCategoryFilterModel.setCategorySelection("all") + tabbedPane.currentIndex = 0 + } + } + } + } + } + + FocusPoint {} +} diff --git a/resources/qml/Governikus/ProviderView/+desktop/ProviderView.qml b/resources/qml/Governikus/ProviderView/+desktop/ProviderView.qml index 909cdd6..b8ca54a 100644 --- a/resources/qml/Governikus/ProviderView/+desktop/ProviderView.qml +++ b/resources/qml/Governikus/ProviderView/+desktop/ProviderView.qml @@ -1,51 +1,83 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtQuick.Controls 2.3 -import Governikus.View 1.0 -import Governikus.TitleBar 1.0 +import Governikus.Global 1.0 import Governikus.Provider 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ProviderCategoryFilterModel 1.0 import Governikus.Type.ApplicationModel 1.0 - +import Governikus.Type.HistoryModel 1.0 SectionPage { - id: sectionPage + id: baseItem - KeyNavigation.tab: navSuccessor - Accessible.role: Accessible.Grouping - Accessible.name: qsTr("Provider view") - Accessible.description: qsTr("This is the provider view of the AusweisApp2.") - - titleBarAction: TitleBarAction { - text: qsTr("Provider") - onClicked: { - rect.visible = true - detailView.visible = false - } - customSubAction: SearchBar { - availableWidth: ApplicationModel.scaleFactor * 768 - } - showHelp: false + enum SubViews { + None = 0, + Detail } - Rectangle { - id: rect - - anchors.fill: parent - color: "red" - opacity: 0.5 - visible: true - - MouseArea { - anchors.fill: parent - onClicked: { - rect.visible = false - detailView.visible = true - } + Keys.onEscapePressed: { + if (d.activeView === ProviderView.SubViews.None) { + event.accepted = false + return } + + d.activeView = ProviderView.SubViews.None + } + + isAbstract: true + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Provider") + SettingsModel.translationTrigger + helpTopic: "providerPage" + + onClicked: { + d.activeView = ProviderView.SubViews.None + } + + customSubAction: SearchBar { + onDisplayTextChanged: ProviderCategoryFilterModel.searchString = displayText + } + } + + QtObject { + id: d + + property int activeView: ProviderView.SubViews.None } ProviderDetailView { id: detailView - visible: false - onNextView: sectionPage.nextView(pName) + + visible: d.activeView === ProviderView.SubViews.Detail + + activeFocusOnTab: true + + onNextView: { + d.activeView = ProviderView.SubViews.None + baseItem.nextView(pName) + } + } + + ProviderOverview { + id: overviewView + + visible: d.activeView === ProviderView.SubViews.None + + activeFocusOnTab: true + + onNextView: baseItem.nextView(pName) + onShowDetailView: { + HistoryModel.nameFilter.setProviderAddress(pModelItem.providerAddress) + detailView.providerModelItem = pModelItem + d.activeView = ProviderView.SubViews.Detail + } } } diff --git a/resources/qml/Governikus/ProviderView/+desktop/SearchBar.qml b/resources/qml/Governikus/ProviderView/+desktop/SearchBar.qml deleted file mode 100644 index 17f272f..0000000 --- a/resources/qml/Governikus/ProviderView/+desktop/SearchBar.qml +++ /dev/null @@ -1,63 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 - - -Row { - id: root - - property int availableWidth: 0 - readonly property int contentWidth: root.implicitWidth - readonly property alias searchText: searchField.displayText - - spacing: Constants.titlebar_padding - height: searchField.height - - GTextField { - id: searchField - width: root.availableWidth - parent.spacing - iconItem.width - 2 * Constants.titlebar_padding - font.pixelSize: Constants.small_font_size - - visible: false - - onAccepted: { - iconItem.forceActiveFocus(Qt.MouseFocusReason) - } - - Behavior on visible { - PropertyAnimation { - duration: 150 - } - } - } - - Image { - id: iconItem - - sourceSize.height: parent.height - source: "qrc:///images/search.svg" - - MouseArea { - anchors.fill: parent - onClicked: { - // Storage of the new value is needed because the query - // of searchField.visible still delivers the old value. - var searchFieldVisible = !searchField.visible - - if (searchFieldVisible) { - iconItem.source = "qrc:///images/cancel.svg" - searchField.forceActiveFocus(Qt.MouseFocusReason) - Qt.inputMethod.show() - } else { - iconItem.source = "qrc:///images/search.svg" - iconItem.forceActiveFocus(Qt.MouseFocusReason) - searchField.text = "" - Qt.inputMethod.hide() - } - - searchField.visible = searchFieldVisible - } - } - } -} diff --git a/resources/qml/Governikus/ProviderView/+mobile/+android/+phone/ProviderView.qml b/resources/qml/Governikus/ProviderView/+mobile/+android/+phone/ProviderView.qml index 84f1b6f..8cb9583 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+android/+phone/ProviderView.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+android/+phone/ProviderView.qml @@ -1,114 +1,23 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 -import Governikus.Provider 1.0 -import Governikus.TitleBar 1.0 -import Governikus.Provider 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 +import Governikus.Provider 1.0 -SectionPage { - id: baseItem - - readonly property var category: ProviderCategoryFilterModel.categories.length === 0 ? "" : ProviderCategoryFilterModel.categories[0] - - Component.onCompleted: ProviderCategoryFilterModel.sortByCategoryFirst(true) - - onCategoryChanged: { - ProviderCategoryFilterModel.sortByCategoryFirst(category === "") - } - - leftTitleBarAction: TitleBarAction { - state: category !== "" ? "back" : "" - onClicked: { - if (state === "back") { - ProviderCategoryFilterModel.setCategorySelection("") - } - } - } - - headerTitleBarAction: TitleBarAction { - text: Category.displayString(category) + settingsModel.translationTrigger - font.bold: true - } - +BaseProviderView { rightTitleBarAction: SearchBar { - availableWidth: baseItem.width - Constants.menubar_width + availableWidth: baseItem.width - Style.dimens.menubar_width onSearchTextChanged: ProviderCategoryFilterModel.searchString = searchText } - titleBarColor: Category.displayColor(category) - - ProviderDetailView { - id: providerDetailView - visible: false - } - header: ProviderHeader { width: baseItem.width selectedCategory: category } - - content: Column { - width: baseItem.width - - Rectangle { - height: Utils.dp(200) - width: parent.width - color: Constants.background_color - visible: ProviderCategoryFilterModel.rowCount === 0 && !additionalResults.visible - - Text { - color: Constants.secondary_text - anchors.centerIn: parent - text: qsTr("No match found") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - } - } - - ProviderSectionDelegate { - id: allSection - sectionName: "all" - visible: ProviderCategoryFilterModel.searchString === "" && ProviderCategoryFilterModel.categories.length === 0 - height: visible ? Constants.provider_section_height : 0 - } - - ListView { - id: providerListMain - height: childrenRect.height - width: baseItem.width - interactive: false - visible: category === "" - - model: ProviderCategoryFilterModel - - delegate: ProviderViewDelegate { - height: visible ? Constants.provider_section_height : 0 - visible: ProviderCategoryFilterModel.searchString !== "" - } - - section.property: "providerCategory" - section.labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart - section.delegate: ProviderSectionDelegate { - sectionName: section - } - } - - ListView { - id: providerListSection - height: childrenRect.height - width: baseItem.width - interactive: false - visible: !providerListMain.visible - - model: ProviderCategoryFilterModel - - delegate: ProviderViewDelegate {} - } - - AdditionalResultsItem { - id: additionalResults - width: parent.width - } - } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+android/+tablet/ProviderView.qml b/resources/qml/Governikus/ProviderView/+mobile/+android/+tablet/ProviderView.qml index badf8af..0e855e3 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+android/+tablet/ProviderView.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+android/+tablet/ProviderView.qml @@ -1,16 +1,24 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction {} - headerTitleBarAction: TitleBarAction { text: qsTr("Provider") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction {} + title: qsTr("Provider") + SettingsModel.translationTrigger rightTitleBarAction: SearchBar { availableWidth: baseItem.width onSearchTextChanged: ProviderCategoryFilterModel.searchString = searchText @@ -22,8 +30,8 @@ SectionPage { property bool wasVisible: false onVisibleChanged: wasVisible = true - readonly property int headerHeight: Utils.dp(54) - readonly property int separatorHeight: Utils.dp(2) + readonly property int headerHeight: 54 + readonly property int separatorHeight: 2 ProviderDetailView { id: providerDetailView @@ -31,7 +39,7 @@ SectionPage { } function pushProviderDetails(pModel) { - historyModel.nameFilter.setProviderAddress(pModel.providerAddress) + HistoryModel.nameFilter.setProviderAddress(pModel.providerAddress) providerDetailView.providerModelItem = pModel firePush(providerDetailView) } @@ -46,7 +54,7 @@ SectionPage { height: baseItem.headerHeight width: parent.width - color: "white" + color: Constants.white Row { id: checkBoxesItem @@ -55,8 +63,8 @@ SectionPage { anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter - padding: Utils.dp(30) - spacing: Utils.dp(30) + padding: 30 + spacing: 30 transformOrigin: Item.Center scale: Math.min(parent.width / width, 1) @@ -66,7 +74,8 @@ SectionPage { category: "citizen" imageSource: Category.imageSource("citizen") - text: qsTr("Citizen services") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + text: qsTr("Citizen services") + SettingsModel.translationTrigger } CategoryCheckbox { @@ -74,7 +83,8 @@ SectionPage { category: "finance" imageSource: Category.imageSource("finance") - text: qsTr("Financials") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + text: qsTr("Financials") + SettingsModel.translationTrigger } CategoryCheckbox { @@ -82,7 +92,8 @@ SectionPage { category: "insurance" imageSource: Category.imageSource("insurance") - text: qsTr("Insurances") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + text: qsTr("Insurances") + SettingsModel.translationTrigger } CategoryCheckbox { @@ -90,7 +101,8 @@ SectionPage { category: "other" imageSource: Category.imageSource("other") - text: qsTr("Other services") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + text: qsTr("Other services") + SettingsModel.translationTrigger } } } @@ -99,7 +111,7 @@ SectionPage { height: baseItem.separatorHeight width: parent.width - color: Constants.grey_border + color: Style.color.border } Rectangle { @@ -108,25 +120,23 @@ SectionPage { height: baseItem.height - (baseItem.headerHeight + baseItem.separatorHeight) width: parent.width anchors.horizontalCenter: parent.horizontalCenter - color: Constants.background_color + color: Style.color.background - Text { + GText { id: noResultsText - color: Constants.secondary_text anchors.centerIn: mainPane - text: qsTr("No match found") + settingsModel.translationTrigger + //: LABEL ANDROID_TABLET + text: qsTr("No match found") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size visible: !flickable.visible } - Flickable { + GFlickable { id: flickable anchors.fill: mainPane clip: true - flickableDirection: Flickable.VerticalFlick visible: grid.hasResults contentHeight: grid.height @@ -138,7 +148,7 @@ SectionPage { Grid { id: grid - columns: Math.floor((parent.width - Constants.component_spacing) / (Utils.dp(196) + Constants.component_spacing)) + columns: Math.floor((parent.width - Constants.component_spacing) / (196 + Constants.component_spacing)) padding: Constants.component_spacing spacing: Constants.component_spacing width: parent.width @@ -155,8 +165,8 @@ SectionPage { ProviderCard { width: grid.cardWidth headerHeight: width / 1.80 - textHeight: Utils.dp(64) - footerHeight: Utils.dp(30) + textHeight: 64 + footerHeight: 30 pushFunction: baseItem.pushProviderDetails providerModelItem: baseItem.wasVisible ? model : undefined } @@ -166,8 +176,8 @@ SectionPage { id: additionalResults width: grid.cardWidth headerHeight: width / 1.80 - textHeight: Utils.dp(64) - footerHeight: Utils.dp(30) + textHeight: 64 + footerHeight: 30 } } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+ios/+phone/ProviderView.qml b/resources/qml/Governikus/ProviderView/+mobile/+ios/+phone/ProviderView.qml index d234be9..5ae5423 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+ios/+phone/ProviderView.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+ios/+phone/ProviderView.qml @@ -1,108 +1,16 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 -import Governikus.Provider 1.0 -import Governikus.TitleBar 1.0 import Governikus.View 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 -SectionPage { - id: baseItem - - readonly property var category: ProviderCategoryFilterModel.categories.length === 0 ? "" : ProviderCategoryFilterModel.categories[0] - - Component.onCompleted: ProviderCategoryFilterModel.sortByCategoryFirst(true) - - onCategoryChanged: { - ProviderCategoryFilterModel.sortByCategoryFirst(category === "") - } - - leftTitleBarAction: TitleBarAction { - state: category !== "" ? "back" : "" - onClicked: { - if (state === "back") { - ProviderCategoryFilterModel.setCategorySelection("") - } - } - } - - headerTitleBarAction: TitleBarAction { - text: Category.displayString(category) + settingsModel.translationTrigger - font.bold: true - } - +BaseProviderView { subTitleBarAction: SearchBar { width: baseItem.width onSearchTextChanged: ProviderCategoryFilterModel.searchString = searchText } - - titleBarColor: Category.displayColor(category) - - ProviderDetailView { - id: providerDetailView - visible: false - } - - content: Column { - width: baseItem.width - - Rectangle { - height: Utils.dp(200) - width: parent.width - color: Constants.background_color - visible: ProviderCategoryFilterModel.rowCount === 0 && !additionalResults.visible - - Text { - color: Constants.secondary_text - anchors.centerIn: parent - text: qsTr("No match found") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - } - } - - ProviderSectionDelegate { - id: allSection - sectionName: "all" - visible: ProviderCategoryFilterModel.searchString === "" && ProviderCategoryFilterModel.categories.length === 0 - height: visible ? Constants.provider_section_height : 0 - } - - ListView { - id: providerListMain - height: childrenRect.height - width: baseItem.width - interactive: false - visible: category === "" - - model: ProviderCategoryFilterModel - - delegate: ProviderViewDelegate { - height: visible ? Constants.provider_section_height : 0 - visible: ProviderCategoryFilterModel.searchString !== "" - } - - section.property: "providerCategory" - section.labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart - section.delegate: ProviderSectionDelegate { - sectionName: section - } - } - - ListView { - id: providerListSection - height: childrenRect.height - width: baseItem.width - interactive: false - visible: !providerListMain.visible - - model: ProviderCategoryFilterModel - - delegate: ProviderViewDelegate {} - } - - AdditionalResultsItem { - id: additionalResults - width: parent.width - } - } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+ios/+tablet/ProviderView.qml b/resources/qml/Governikus/ProviderView/+mobile/+ios/+tablet/ProviderView.qml index 4c36a1f..7993d9d 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+ios/+tablet/ProviderView.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+ios/+tablet/ProviderView.qml @@ -1,15 +1,24 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.HistoryModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 SectionPage { id: baseItem - headerTitleBarAction: TitleBarAction { text: qsTr("Provider") + settingsModel.translationTrigger; font.bold: true } + //: LABEL IOS_TABLET + title: qsTr("Provider") + SettingsModel.translationTrigger + subTitleBarAction: SearchBar { width: baseItem.width onSearchTextChanged: ProviderCategoryFilterModel.searchString = searchText @@ -23,8 +32,8 @@ SectionPage { readonly property var category: ProviderCategoryFilterModel.categories.length === 0 ? "" : ProviderCategoryFilterModel.categories[0] - readonly property int headerHeight: Utils.dp(54) - readonly property int separatorHeight: Utils.dp(2) + readonly property int headerHeight: 54 + readonly property int separatorHeight: 2 ProviderDetailView { id: providerDetailView @@ -32,7 +41,7 @@ SectionPage { } function pushProviderDetails(pModel) { - historyModel.nameFilter.setProviderAddress(pModel.providerAddress) + HistoryModel.nameFilter.setProviderAddress(pModel.providerAddress) providerDetailView.providerModelItem = pModel firePush(providerDetailView) } @@ -47,7 +56,7 @@ SectionPage { height: baseItem.headerHeight width: parent.width - color: "white" + color: Constants.white Row { id: checkBoxesItem @@ -56,8 +65,8 @@ SectionPage { anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter - padding: Utils.dp(30) - spacing: Utils.dp(30) + padding: 30 + spacing: 30 transformOrigin: Item.Center scale: Math.min(parent.width / width, 1) @@ -67,7 +76,8 @@ SectionPage { category: "citizen" imageSource: Category.imageSource("citizen") - text: qsTr("Citizen services") + settingsModel.translationTrigger + //: LABEL IOS_TABLET + text: qsTr("Citizen services") + SettingsModel.translationTrigger } CategoryCheckbox { @@ -75,7 +85,8 @@ SectionPage { category: "finance" imageSource: Category.imageSource("finance") - text: qsTr("Financials") + settingsModel.translationTrigger + //: LABEL IOS_TABLET + text: qsTr("Financials") + SettingsModel.translationTrigger } CategoryCheckbox { @@ -83,7 +94,8 @@ SectionPage { category: "insurance" imageSource: Category.imageSource("insurance") - text: qsTr("Insurances") + settingsModel.translationTrigger + //: LABEL IOS_TABLET + text: qsTr("Insurances") + SettingsModel.translationTrigger } CategoryCheckbox { @@ -91,7 +103,8 @@ SectionPage { category: "other" imageSource: Category.imageSource("other") - text: qsTr("Other services") + settingsModel.translationTrigger + //: LABEL IOS_TABLET + text: qsTr("Other services") + SettingsModel.translationTrigger } } } @@ -100,7 +113,7 @@ SectionPage { height: baseItem.separatorHeight width: parent.width - color: Constants.grey_border + color: Style.color.border } Rectangle { @@ -109,25 +122,23 @@ SectionPage { height: baseItem.height - (baseItem.headerHeight + baseItem.separatorHeight) width: parent.width anchors.horizontalCenter: parent.horizontalCenter - color: Constants.background_color + color: Style.color.background - Text { + GText { id: noResultsText - color: Constants.secondary_text anchors.centerIn: mainPane - text: qsTr("No match found") + settingsModel.translationTrigger + //: LABEL IOS_TABLET Der in das Suchfeld eingegebene String erzielte kein Ergebnis + text: qsTr("No match found") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size visible: !flickable.visible } - Flickable { + GFlickable { id: flickable anchors.fill: mainPane clip: true - flickableDirection: Flickable.VerticalFlick visible: grid.hasResults contentHeight: grid.height @@ -139,7 +150,7 @@ SectionPage { Grid { id: grid - columns: Math.floor((parent.width - Constants.component_spacing) / (Utils.dp(196) + Constants.component_spacing)) + columns: Math.floor((parent.width - Constants.component_spacing) / (196 + Constants.component_spacing)) padding: Constants.component_spacing spacing: Constants.component_spacing width: parent.width @@ -155,9 +166,13 @@ SectionPage { ProviderCard { width: grid.cardWidth + + Accessible.onScrollDownAction: Utils.scrollPageDown(flickable) + Accessible.onScrollUpAction: Utils.scrollPageUp(flickable) + headerHeight: width / 1.80 - textHeight: Utils.dp(64) - footerHeight: Utils.dp(30) + textHeight: 64 + footerHeight: 30 pushFunction: baseItem.pushProviderDetails providerModelItem: baseItem.wasVisible ? model : undefined } @@ -167,8 +182,8 @@ SectionPage { id: additionalResults width: grid.cardWidth headerHeight: width / 1.80 - textHeight: Utils.dp(64) - footerHeight: Utils.dp(30) + textHeight: 64 + footerHeight: 30 } } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+phone/AdditionalResultsItem.qml b/resources/qml/Governikus/ProviderView/+mobile/+phone/AdditionalResultsItem.qml index 9472f3a..62c851c 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+phone/AdditionalResultsItem.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+phone/AdditionalResultsItem.qml @@ -1,60 +1,27 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.2 import Governikus.Global 1.0 import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 -Rectangle { - id: baseItem - height: Constants.provider_section_height - +ListItem { property int totalHits: ProviderCategoryFilterModel.additionalResultCount visible: totalHits > 0 && ProviderCategoryFilterModel.categories.length > 0 && ProviderCategoryFilterModel.categories.indexOf("all") === -1 - Item { - anchors.fill: parent - anchors.topMargin: Utils.dp(5) - anchors.bottomMargin: Utils.dp(5) + Accessible.name: qsTr("%1 additional results in other categories").arg(totalHits) + SettingsModel.translationTrigger + Accessible.description: qsTr("Click to remove category filter and show additional results.") + SettingsModel.translationTrigger - Image { - id: allImage - source: Category.imageSource("all") - asynchronous: true - height: parent.height - width: parent.width * 0.15 - fillMode: Image.PreserveAspectFit - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: ProviderStyle.leftIconMargin - } + icon: Category.imageSource("all") + text: qsTr("Additional results:") + ' ' + totalHits + SettingsModel.translationTrigger + showRightArrow: false + showSeparator: false - Text { - anchors.verticalCenter: parent.verticalCenter - anchors.left: allImage.right - anchors.leftMargin: ProviderStyle.leftProviderListMargin - color: ProviderStyle.categoryColor - font.pixelSize: ProviderStyle.categoryFontPixelSize - font.bold: ProviderStyle.categoryFontBold - elide: Text.ElideRight - text: '' + qsTr("Additional results:") + " " + baseItem.totalHits + '' + settingsModel.translationTrigger - } - - Text { - anchors.right: parent.right - anchors.rightMargin: Utils.dp(5) - anchors.verticalCenter: parent.verticalCenter - - text: ">" - color: Constants.grey - font.pixelSize: Constants.normal_font_size - visible: ProviderStyle.showCategoryRightArrow - } - - MouseArea { - anchors.fill: parent - onClicked: ProviderCategoryFilterModel.setCategorySelection("") - } - } + onClicked: ProviderCategoryFilterModel.setCategorySelection("") } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml b/resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml new file mode 100644 index 0000000..ba9482b --- /dev/null +++ b/resources/qml/Governikus/ProviderView/+mobile/+phone/BaseProviderView.qml @@ -0,0 +1,122 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Provider 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ProviderCategoryFilterModel 1.0 + + +SectionPage { + id: baseItem + + readonly property var category: ProviderCategoryFilterModel.categories.length === 0 ? "" : ProviderCategoryFilterModel.categories[0] + + title: Category.displayString(category) + SettingsModel.translationTrigger + titleBarColor: Category.displayColor(category) + + navigationAction: NavigationAction { + state: category !== "" ? "back" : "" + onClicked: { + if (state === "back") { + ProviderCategoryFilterModel.setCategorySelection("") + } + } + } + + Component.onCompleted: ProviderCategoryFilterModel.sortByCategoryFirst(true) + + onCategoryChanged: { + ProviderCategoryFilterModel.sortByCategoryFirst(category === "") + highlightScrollbar() + } + + Component { + id: providerDetailView + + ProviderDetailView {} + } + + content: Column { + width: baseItem.width + + Rectangle { + visible: ProviderCategoryFilterModel.rowCount === 0 && !additionalResults.visible + height: 200 + width: parent.width + + color: Style.color.background + + GText { + anchors.centerIn: parent + //: LABEL IOS_PHONE ANDROID_PHONE Der in das Suchfeld eingegebene String erzielte kein Ergebnis + text: qsTr("No match found") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary + } + } + + ProviderSectionDelegate { + id: allSection + + visible: ProviderCategoryFilterModel.searchString === "" && ProviderCategoryFilterModel.categories.length === 0 + height: visible ? Style.dimens.list_item_height : 0 + + sectionName: "all" + } + + GListView { + id: providerListMain + + visible: category === "" + height: childrenRect.height + width: baseItem.width + + Accessible.role: Accessible.List + + scrollBarEnabled: false + interactive: false + model: ProviderCategoryFilterModel + delegate: ProviderListItemDelegate { + height: visible ? Style.dimens.list_item_height : 0 + visible: ProviderCategoryFilterModel.searchString !== "" + } + + section.property: "providerCategory" + section.labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart + section.delegate: ProviderSectionDelegate { + sectionName: section + } + } + + GListView { + id: providerListSection + + visible: !providerListMain.visible + height: childrenRect.height + width: baseItem.width + + Accessible.role: Accessible.List + + scrollBarEnabled: false + interactive: false + + model: ProviderCategoryFilterModel + + delegate: ProviderListItemDelegate { + Accessible.onScrollDownAction: baseItem.scrollPageDown() + Accessible.onScrollUpAction: baseItem.scrollPageUp() + } + } + + AdditionalResultsItem { + id: additionalResults + width: parent.width + } + } +} diff --git a/resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderListItemDelegate.qml b/resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderListItemDelegate.qml new file mode 100644 index 0000000..0c81c0f --- /dev/null +++ b/resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderListItemDelegate.qml @@ -0,0 +1,22 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtGraphicalEffects 1.10 + +import Governikus.Global 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ProviderCategoryFilterModel 1.0 + + +ListItem { + property string sectionName + + Accessible.description: qsTr("Open provider details for") + ' ' + display + SettingsModel.translationTrigger + + text: display + footerText: providerAddressDomain + + onClicked: firePushWithProperties(providerDetailView, {providerModelItem: model}) +} diff --git a/resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderSectionDelegate.qml b/resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderSectionDelegate.qml new file mode 100644 index 0000000..e99ead5 --- /dev/null +++ b/resources/qml/Governikus/ProviderView/+mobile/+phone/ProviderSectionDelegate.qml @@ -0,0 +1,22 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtGraphicalEffects 1.10 + +import Governikus.Global 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ProviderCategoryFilterModel 1.0 + + +ListItem { + property string sectionName + + Accessible.description: qsTr("Click to set category filter to %1").arg(text) + SettingsModel.translationTrigger + + icon: Category.imageSource(sectionName) + text: Category.displayString(sectionName) + SettingsModel.translationTrigger + + onClicked: ProviderCategoryFilterModel.setCategorySelection(sectionName) +} diff --git a/resources/qml/Governikus/ProviderView/+mobile/+tablet/AdditionalResultsItem.qml b/resources/qml/Governikus/ProviderView/+mobile/+tablet/AdditionalResultsItem.qml index ee45079..1319c77 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+tablet/AdditionalResultsItem.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+tablet/AdditionalResultsItem.qml @@ -1,9 +1,16 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.2 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 + Rectangle { id: baseItem height: column.height @@ -15,6 +22,11 @@ Rectangle { visible: totalHits > 0 + Accessible.role: Accessible.Button + Accessible.name: qsTr("%1 additional results in other categories").arg(totalHits) + SettingsModel.translationTrigger + Accessible.description: qsTr("Click to remove category filter and show additional results.") + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform.os === "ios") mouseArea.clicked(null) + Column { id: column width: baseItem.width @@ -37,7 +49,7 @@ Rectangle { fillMode: Image.PreserveAspectFit anchors.horizontalCenter: backgroundImage.horizontalCenter anchors.bottom: backgroundImage.bottom - anchors.bottomMargin: Utils.dp(20) + anchors.bottomMargin: 20 } } @@ -46,14 +58,14 @@ Rectangle { height: baseItem.textHeight width: parent.width - Text { - text: '' + qsTr("Additional results:") + " " + baseItem.totalHits + '' + settingsModel.translationTrigger - + GText { anchors.centerIn: parent - font.bold: true - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text + Accessible.ignored: true + + //: LABEL ANDROID_TABLET IOS_TABLET + text: '' + qsTr("Additional results:") + " " + baseItem.totalHits + '' + SettingsModel.translationTrigger + textStyle: Style.text.normal } } @@ -65,7 +77,10 @@ Rectangle { } MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: ProviderCategoryFilterModel.addAdditionalResultCategories() } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/CategoryCheckbox.qml b/resources/qml/Governikus/ProviderView/+mobile/+tablet/CategoryCheckbox.qml similarity index 69% rename from resources/qml/Governikus/ProviderView/+mobile/CategoryCheckbox.qml rename to resources/qml/Governikus/ProviderView/+mobile/+tablet/CategoryCheckbox.qml index 3a0bf23..e5fbf3c 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/CategoryCheckbox.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+tablet/CategoryCheckbox.qml @@ -1,24 +1,36 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Type.ProviderCategoryFilterModel 1.0 Item { id: baseItem - height: parent.height - width: mainContent.width - anchors.verticalCenter: parent.verticalCenter property string category: "" property alias imageSource: icon.source property alias text: label.text + height: parent.height + width: mainContent.width + anchors.verticalCenter: parent.verticalCenter + + Accessible.role: Accessible.CheckBox + Accessible.name: text + Accessible.checkable: true + Accessible.checked: checkBox.checked + Accessible.onPressAction: if (Qt.platform.os === "ios") mouseArea.clicked(null) + Row { id: mainContent height: parent.height - spacing: Utils.dp(5) + spacing: 5 anchors.verticalCenter: parent.verticalCenter Image { @@ -29,23 +41,32 @@ Item { anchors.verticalCenter: parent.verticalCenter } - Text { + GText { id: label - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size anchors.verticalCenter: parent.verticalCenter + + Accessible.ignored: true + + textStyle: Style.text.normal } GCheckBox { id: checkBox - anchors.verticalCenter: parent.verticalCenter + visible: true + anchors.verticalCenter: parent.verticalCenter + + Accessible.ignored: true + checked: ProviderCategoryFilterModel.categories.indexOf(baseItem.category) !== -1 } } MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: ProviderCategoryFilterModel.updateCategorySelection(category, !checkBox.checked) } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCard.qml b/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCard.qml index f57644a..a01dbb4 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCard.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCard.qml @@ -1,7 +1,12 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.2 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Provider 1.0 Rectangle { @@ -16,6 +21,10 @@ Rectangle { property alias providerModelItem: provider.modelItem property var pushFunction: function(model) {} + Accessible.role: Accessible.ListItem + Accessible.name: nameRow.providerName + Accessible.onPressAction: if (Qt.platform.os === "ios") mouseArea.clicked(null) + ProviderModelItem { id: provider } @@ -34,7 +43,10 @@ Rectangle { } ProviderCardNameRow { + id: nameRow + height: baseItem.textHeight + providerName: provider.longName !== "" ? provider.longName : provider.shortName headerIcon: provider.icon providerCategory: provider.category @@ -45,26 +57,28 @@ Rectangle { height: baseItem.footerHeight width: parent.width - Text { + GText { text: provider.homepageBase anchors.centerIn: parent + Accessible.ignored: true + leftPadding: Constants.pane_padding rightPadding: Constants.pane_padding elide: Text.ElideRight maximumLineCount: 1 - font.pixelSize: Constants.normal_font_size - color: "white" - - scale: Math.min(1, parent.width / (contentWidth + leftPadding + rightPadding)) + textStyle: Style.text.normal_inverse } } } MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: baseItem.pushFunction(providerModelItem) } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCardNameRow.qml b/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCardNameRow.qml index f5ddb1d..2f93dc5 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCardNameRow.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/+tablet/ProviderCardNameRow.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 Rectangle { @@ -28,21 +33,19 @@ Rectangle { anchors.leftMargin: parent.padding } - Text { - text: '' + providerName + '' + GText { anchors.left: image.right anchors.leftMargin: parent.padding anchors.top: parent.top anchors.topMargin: parent.height * 0.05 anchors.right: parent.right anchors.rightMargin: parent.padding + + Accessible.ignored: true + + text: '' + providerName + '' elide: Text.ElideRight maximumLineCount: 4 - wrapMode: Text.Wrap - lineHeightMode: Text.FixedHeight - lineHeight: parent.height * 0.90 / 4 - font.bold: true - font.pixelSize: Constants.small_font_size - color: Constants.secondary_text + textStyle: Style.text.hint_secondary } } diff --git a/resources/qml/Governikus/ProviderView/+mobile/DimmableTextButton.qml b/resources/qml/Governikus/ProviderView/+mobile/DimmableTextButton.qml deleted file mode 100644 index 7430099..0000000 --- a/resources/qml/Governikus/ProviderView/+mobile/DimmableTextButton.qml +++ /dev/null @@ -1,33 +0,0 @@ -import QtQuick 2.10 -import QtQuick.Controls 2.3 - -import Governikus.Global 1.0 - -Label { - id: label - signal clicked - - color: white - - MouseArea { - id: buttonArea - anchors.fill: parent - onClicked: { - parent.clicked() - } - } - - states: [ - State { - name: "pressed" - when: buttonArea.pressed - - PropertyChanges { - target: label - color: Constants.grey - } - } - ] - transitions: [ - ] -} diff --git a/resources/qml/Governikus/ProviderView/+mobile/ProviderDelegateModel.qml b/resources/qml/Governikus/ProviderView/+mobile/ProviderDelegateModel.qml index 2e44518..49c0330 100644 --- a/resources/qml/Governikus/ProviderView/+mobile/ProviderDelegateModel.qml +++ b/resources/qml/Governikus/ProviderView/+mobile/ProviderDelegateModel.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQml.Models 2.2 import QtQuick 2.10 diff --git a/resources/qml/Governikus/ProviderView/+mobile/ProviderSectionDelegate.qml b/resources/qml/Governikus/ProviderView/+mobile/ProviderSectionDelegate.qml deleted file mode 100644 index d1b769f..0000000 --- a/resources/qml/Governikus/ProviderView/+mobile/ProviderSectionDelegate.qml +++ /dev/null @@ -1,69 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 -import Governikus.Style 1.0 -import Governikus.Type.ProviderCategoryFilterModel 1.0 - -Rectangle { - property string sectionName: "" - - width: parent.width - height: Constants.provider_section_height - clip: true - - Item { - anchors.fill: parent - anchors.topMargin: Utils.dp(5) - anchors.bottomMargin: Utils.dp(5) - - Image { - id: sectionImage - source: Category.imageSource(sectionName) - asynchronous: true - height: parent.height - width: parent.width * 0.15 - fillMode: Image.PreserveAspectFit - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: ProviderStyle.leftIconMargin - } - - Text { - anchors.verticalCenter: parent.verticalCenter - anchors.left: sectionImage.right - anchors.leftMargin: ProviderStyle.leftProviderListMargin - color: ProviderStyle.categoryColor - font.pixelSize: ProviderStyle.categoryFontPixelSize - font.bold: ProviderStyle.categoryFontBold - elide: Text.ElideRight - text: Category.displayString(sectionName) + settingsModel.translationTrigger - } - - Text { - anchors.right: parent.right - anchors.rightMargin: Utils.dp(5) - anchors.verticalCenter: parent.verticalCenter - - text: ">" - color: Constants.grey - font.pixelSize: Constants.normal_font_size - visible: ProviderStyle.showCategoryRightArrow - } - - MouseArea { - anchors.fill: parent - onClicked: { - ProviderCategoryFilterModel.setCategorySelection(sectionName) - } - } - } - - Rectangle { - width: parent.width * 0.85 - anchors.top: parent.bottom - anchors.topMargin: -height - anchors.right: parent.right - height: 1 - color: Constants.grey - } -} diff --git a/resources/qml/Governikus/ProviderView/qmldir b/resources/qml/Governikus/ProviderView/qmldir index a0c3c96..98fb274 100644 --- a/resources/qml/Governikus/ProviderView/qmldir +++ b/resources/qml/Governikus/ProviderView/qmldir @@ -2,12 +2,13 @@ module ProviderView internal AdditionalResultsItem AdditionalResultsItem.qml internal CategoryCheckbox CategoryCheckbox.qml -internal DimmableTextButton DimmableTextButton.qml internal ProviderCardNameRow ProviderCardNameRow.qml internal ProviderCard ProviderCard.qml internal ProviderContactInfoItem ProviderContactInfoItem.qml internal ProviderDelegateModel ProviderDelegateModel.qml internal ProviderSectionDelegate ProviderSectionDelegate.qml -internal SearchBar SearchBar.qml +internal ProviderListItemDelegate ProviderListItemDelegate.qml +internal ProviderOverview ProviderOverview.qml +internal BaseProviderView BaseProviderView.qml ProviderView 1.0 ProviderView.qml diff --git a/resources/qml/Governikus/RemoteServiceView/AvailableDevicesListDelegate.qml b/resources/qml/Governikus/RemoteServiceView/AvailableDevicesListDelegate.qml index 9222cf6..d04bab7 100644 --- a/resources/qml/Governikus/RemoteServiceView/AvailableDevicesListDelegate.qml +++ b/resources/qml/Governikus/RemoteServiceView/AvailableDevicesListDelegate.qml @@ -1,40 +1,80 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.1 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + MouseArea { - height: Utils.dp(40) - signal requestPairing(string pDeviceId) - onClicked: { - if (isSupported) requestPairing(deviceId) + height: textColumn.height + separator.height + (Constants.groupbox_spacing / 2) + + Accessible.role: Accessible.ListItem + Accessible.name: qsTr("Device %1 is available for pairing").arg(nameText.text) + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform.os === "ios" && isSupported) clicked(null) + + onClicked: if (isSupported) requestPairing(deviceId) + + LinkQuality { + id: linkQual + + height: nameText.height + width: height + anchors.verticalCenter: parent.verticalCenter + + percent: linkQualityInPercent } - Text { - id: nameText - color: Constants.secondary_text - width: parent.width - font.pixelSize: Utils.dp(16) - anchors.verticalCenter: parent.verticalCenter - opacity: 0.87 - text: { - settingsModel.translationTrigger + Column { + id: textColumn - if (isSupported) { - return remoteDeviceName; + width: parent.width - linkQual.width - anchors.leftMargin + anchors.left: linkQual.right + anchors.leftMargin: Constants.component_spacing + + spacing: 2 + topPadding: spacing + bottomPadding: spacing + + GText { + id: nameText + + width: parent.width + + text: { + SettingsModel.translationTrigger + + if (isSupported) { + return remoteDeviceName; + } + return remoteDeviceName + " (" + remoteDeviceStatus + ")" } - return remoteDeviceName + " (" + qsTr("Unsupported") + ")" + textStyle: Style.text.normal_secondary + } + + GText { + id: dateText + + width: parent.width + + //: LABEL ANDROID IOS + text: (linkQualityInPercent >= 50 ? qsTr("Great quality") : qsTr("Bad quality")) + SettingsModel.translationTrigger + textStyle: Style.text.hint_secondary } } - Rectangle { + GSeparator { + id: separator + width: parent.width - height: Utils.dp(1) - color: "black" - opacity: 0.1 anchors.bottom: parent.bottom + color: Style.color.border_dark } } diff --git a/resources/qml/Governikus/RemoteServiceView/KnownDevicesListDelegate.qml b/resources/qml/Governikus/RemoteServiceView/KnownDevicesListDelegate.qml index 4f47b70..a31592e 100644 --- a/resources/qml/Governikus/RemoteServiceView/KnownDevicesListDelegate.qml +++ b/resources/qml/Governikus/RemoteServiceView/KnownDevicesListDelegate.qml @@ -1,74 +1,105 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.1 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 + Item { id: root - height: Utils.dp(60) - Item { - id: textItem - height: childrenRect.height - width: parent.width * 0.8 - anchors.verticalCenter: root.verticalCenter + height: textColumn.height + separator.height + (Constants.groupbox_spacing / 2) - Text { + Accessible.role: Accessible.ListItem + Accessible.name: qsTr("Device %1 has status %2").arg(nameText.text).arg(statusText.text) + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform === "ios") iconClick.clicked(null) + + LinkQuality { + id: linkQual + + height: nameText.height + anchors.verticalCenter: textColumn.verticalCenter + + percent: linkQualityInPercent + inactive: !isNetworkVisible + } + + Column { + id: textColumn + + width: parent.width - linkQual.width - iconClick.width - 2 * anchors.leftMargin + anchors.left: linkQual.right + anchors.right: deleteIcon.left + anchors.margins: Constants.component_spacing + + spacing: 2 + topPadding: spacing + bottomPadding: spacing + + GText { id: nameText - color: Constants.secondary_text - font.pixelSize: Utils.dp(16) - opacity: 0.87 + + width: parent.width + + text: remoteDeviceName + textStyle: Style.text.normal_secondary + } + + GText { + id: statusText + + width: parent.width + text: { - settingsModel.translationTrigger + SettingsModel.translationTrigger if (!isNetworkVisible) { - return remoteDeviceName; + //: LABEL ANDROID IOS + return qsTr("Not available"); } - if (isSupported) { - return remoteDeviceName + " (" + qsTr("Available") + ")" - } - return remoteDeviceName + " (" + qsTr("Available, but unsupported") + ")" + //: LABEL ANDROID IOS + return remoteDeviceStatus + ", " + (linkQualityInPercent >= 50 ? qsTr("Great quality") : qsTr("Bad quality")) + SettingsModel.translationTrigger } + textStyle: Style.text.hint_secondary } - Text { - id: dateText - color: Constants.secondary_text - anchors.top: nameText.bottom - anchors.topMargin: Utils.dp(2) - font.pixelSize: Utils.dp(14) - opacity: 0.38 - text: qsTr("Last connection:") + " " + lastConnected + settingsModel.translationTrigger + GText { + width: parent.width + + //: LABEL ANDROID IOS + text: qsTr("Last connection:") + " " + lastConnected + SettingsModel.translationTrigger + textStyle: Style.text.hint_secondary } } - MouseArea { - id: iconClick - width: Utils.dp(44) - height: width + Image { + id: deleteIcon + sourceSize.width: Style.dimens.small_icon_size anchors.right: root.right anchors.verticalCenter: root.verticalCenter + source: "qrc:///images/iOS/search_cancel.svg" - Image { - id: icon - width: Utils.dp(22) - height: width - anchors.centerIn: parent - source: "qrc:///images/iOS/search_cancel.svg" - } + MouseArea { + id: iconClick - onClicked: { - RemoteServiceModel.forgetDevice(deviceId) + anchors.fill: parent + + onClicked: RemoteServiceModel.forgetDevice(deviceId) } } - Rectangle { + GSeparator { + id: separator + width: parent.width - height: Utils.dp(1) - color: "black" - opacity: 0.1 anchors.bottom: root.bottom + color: Style.color.border_dark } } diff --git a/resources/qml/Governikus/RemoteServiceView/LinkQuality.qml b/resources/qml/Governikus/RemoteServiceView/LinkQuality.qml new file mode 100644 index 0000000..5911714 --- /dev/null +++ b/resources/qml/Governikus/RemoteServiceView/LinkQuality.qml @@ -0,0 +1,35 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Style 1.0 + +Image { + id: img + + property var percent + property bool inactive: false + + fillMode: Image.PreserveAspectFit + sourceSize.width: Style.dimens.small_icon_size + source: { + if (inactive) { + return "qrc:///images/icon_remote_inactive.svg" + } + if (percent >= 80) { + return "qrc:///images/icon_remote_100.svg" + } + if (percent >= 60) { + return "qrc:///images/icon_remote_75.svg" + } + if (percent >= 40) { + return "qrc:///images/icon_remote_50.svg" + } + if (percent >= 20) { + return "qrc:///images/icon_remote_25.svg" + } + return "qrc:///images/icon_remote_0.svg" + } +} diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml index 52ac682..5a41b3c 100644 --- a/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml +++ b/resources/qml/Governikus/RemoteServiceView/RemoteServiceController.qml @@ -1,10 +1,15 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Type.RemoteServiceModel 1.0 -import Governikus.EnterPinView 1.0 +import Governikus.EnterPasswordView 1.0 import Governikus.TitleBar 1.0 import Governikus.Type.ReaderPlugIn 1.0 import Governikus.Type.NumberModel 1.0 +import Governikus.Type.ApplicationModel 1.0 Item { id: controller @@ -13,36 +18,20 @@ Item { target: RemoteServiceModel onFireCurrentStateChanged: { switch (RemoteServiceModel.currentState) { - case "": + case "Initial": break case "StateStartRemoteService": navBar.lockedAndHidden = true - if (Qt.platform.os === "android") { - RemoteServiceModel.readerPlugInType = ReaderPlugIn.NFC; - } else { - RemoteServiceModel.readerPlugInType = ReaderPlugIn.PCSC; - } setWorkflowStateAndContinue("startRemoteService") break case "StateProcessRemoteMessages": - firePopAll() RemoteServiceModel.continueWorkflow() break case "StateEnterPacePasswordRemote": - if (RemoteServiceModel.isBasicReader) { - enterPinView.state = "INITIAL" - setWorkflowStateAndRequestInput("establishPaceChannelRemote", RemoteServiceModel.getPacePasswordId()) - } else { - RemoteServiceModel.continueWorkflow() - } + setWorkflowStateAndRequestInput("establishPaceChannelRemote", RemoteServiceModel.getPasswordType()) break case "StateEnterNewPacePinRemote": - if (RemoteServiceModel.isBasicReader) { - enterPinView.state = "INITIAL" - setWorkflowStateAndRequestInput("changePinRemote", "PIN_NEW") - } else { - RemoteServiceModel.continueWorkflow() - } + setWorkflowStateAndRequestInput("changePinRemote", "PIN_NEW") break case "FinalState": RemoteServiceModel.continueWorkflow() @@ -65,18 +54,21 @@ Item { function setWorkflowStateAndRequestInput(pState, pEnterPinState) { setWorkflowState(pState) - if (RemoteServiceModel.pinPadModeOn()) { + if (RemoteServiceModel.isBasicReader && RemoteServiceModel.pinPadModeOn()) { enterPinView.state = pEnterPinState firePush(enterPinView) + ApplicationModel.nfcRunning = false + } else { + RemoteServiceModel.continueWorkflow() } } - EnterPinView { + EnterPasswordView { id: enterPinView visible: false enableTransportPinLink: RemoteServiceModel.isSaCPinChangeWorkflow - leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: "cancel" onClicked: { firePop() @@ -84,9 +76,10 @@ Item { } } - onPinEntered: { + onPasswordEntered: { firePop() RemoteServiceModel.continueWorkflow() + ApplicationModel.nfcRunning = true } onChangePinLength: NumberModel.requestTransportPin = !NumberModel.requestTransportPin diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServicePairingPopup.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServicePairingPopup.qml index 00bf600..cb4fe71 100644 --- a/resources/qml/Governikus/RemoteServiceView/RemoteServicePairingPopup.qml +++ b/resources/qml/Governikus/RemoteServiceView/RemoteServicePairingPopup.qml @@ -1,79 +1,43 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 -Popup { - property bool requestInput: false +ConfirmationPopup { + id: popup + property alias pin: name.text property var deviceId - id: popup - modal: true - focus: true - closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape - width: Utils.dp(250) - height: contentColumn.height + 2 * Constants.pane_padding - padding: Constants.pane_padding + style: ConfirmationPopup.PopupStyle.NoButtons + //: INFO ANDROID IOS Header of the pairing dialog when using the smartphone as card reader + title: qsTr("Pairing code") + SettingsModel.translationTrigger + //: INFO ANDROID IOS Main text of the pairing dialog when using the smartphone as card reader. + text: qsTr("Enter this code on your other device to use this device as a card reader") + SettingsModel.translationTrigger - Connections { - target: RemoteServiceModel - onFireEnvironmentChanged: close() - } + TextField { + id: name - Column { - id: contentColumn width: parent.width - spacing: Constants.pane_spacing - Text { - id: header - color: Constants.secondary_text - text: qsTr("Pairing code") + settingsModel.translationTrigger - font.pixelSize: Constants.header_font_size - font.bold: true - } + Accessible.role: Accessible.StaticText + Accessible.name: displayText + Accessible.description: qsTr("Click to close dialog") + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform.os === "ios") popup.close() - Text { - id: info - color: Constants.secondary_text - width: parent.width - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - text: ( requestInput - ? qsTr("Enter the pairing code shown on your other device to use it as a card reader") - : qsTr("Enter this code on your other device to use this device as a card reader") - ) + settingsModel.translationTrigger - } - - TextField { - id: name - focus: true - width: parent.width - horizontalAlignment: Text.AlignHCenter - font.letterSpacing: Utils.dp(5) - font.pixelSize: Utils.dp(50) - font.bold: true - readOnly: !requestInput - inputMethodHints: Qt.ImhDigitsOnly - validator: RegExpValidator { regExp: /\d\d\d\d/ } - onAccepted: { - RemoteServiceModel.connectToRememberedServer(name.getText(0,4)) - close() - } - } - - GButton { - text: qsTr("Start pairing") + settingsModel.translationTrigger - width: parent.width - visible: requestInput - - onClicked: { - RemoteServiceModel.connectToRememberedServer(name.getText(0,4)) - close() - } - } + focus: true + horizontalAlignment: Text.AlignHCenter + font.letterSpacing: 5 + font.pixelSize: 50 + font.bold: true + readOnly: true } } diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServiceSettings.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServiceSettings.qml index 062000e..0071961 100644 --- a/resources/qml/Governikus/RemoteServiceView/RemoteServiceSettings.qml +++ b/resources/qml/Governikus/RemoteServiceView/RemoteServiceSettings.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.1 @@ -5,11 +9,14 @@ import QtQuick.Layouts 1.1 import Governikus.Global 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: rootPage - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Configure remote service") + settingsModel.translationTrigger; font.bold: true } + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + //: LABEL ANDROID IOS + title: qsTr("Configure remote service") + SettingsModel.translationTrigger content: RemoteServiceViewRemote { width: rootPage.width diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServiceView.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServiceView.qml index 089da46..f0cfaf9 100644 --- a/resources/qml/Governikus/RemoteServiceView/RemoteServiceView.qml +++ b/resources/qml/Governikus/RemoteServiceView/RemoteServiceView.qml @@ -1,28 +1,38 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 import Governikus.Global 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: Constants.is_layout_ios ? iosTitleBarAction : androidTitleBarAction - headerTitleBarAction: TitleBarAction { - text: sectionSwitch.selectedSection === "LOCAL" ? qsTr("Configure local settings") + settingsModel.translationTrigger - : sectionSwitch.selectedSection === "REMOTE" ? qsTr("Pair remote devices")+ settingsModel.translationTrigger - : qsTr("Remote service") + settingsModel.translationTrigger - font.bold: true } - property var iosTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - property var androidTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { state: RemoteServiceModel.running ? "cancel" : "" - onClicked: RemoteServiceModel.running = !RemoteServiceModel.running + onClicked: RemoteServiceModel.running = false } + //: LABEL ANDROID IOS + title: sectionSwitch.selectedSection === "LOCAL" ? qsTr("Configure local settings") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS + : sectionSwitch.selectedSection === "REMOTE" ? qsTr("Pair remote devices")+ SettingsModel.translationTrigger + //: LABEL ANDROID IOS + : qsTr("Remote service") + SettingsModel.translationTrigger + Connections { target: RemoteServiceModel - onFirePairingFailed: qmlExtension.showFeedback(qsTr("Pairing failed. Please try again to activate pairing on your other device and enter the shown pairing code.")) + //: ERROR ANDROID IOS An error occurred while pairing the device. + onFirePairingFailed: ApplicationModel.showFeedback(qsTr("Pairing failed. Please try again to activate pairing on your other device and enter the shown pairing code.")) } onVisibleChanged: { @@ -34,44 +44,47 @@ SectionPage { } } - content: Column { - width: baseItem.width + content: ColumnLayout { + height: baseItem.height - RemoteServiceViewLocal - { - width: parent.width - visible: sectionSwitch.selectedSection === "LOCAL" + RemoteServiceViewStartStop { + visible: sectionSwitch.selectedSection == SectionSwitch.Section.STARTSTOP + width: baseItem.width + Layout.fillHeight: true + } + GFlickable { + id: flickable + + visible: sectionSwitch.selectedSection == SectionSwitch.Section.REMOTE + width: baseItem.width + Layout.fillHeight: true + + contentHeight: remoteSettingsView.height + RemoteServiceViewRemote { + id: remoteSettingsView + width: baseItem.width + parentSectionPage: baseItem + } + } + RemoteServiceViewLocal { + visible: sectionSwitch.selectedSection == SectionSwitch.Section.LOCAL + width: baseItem.width + Layout.fillHeight: true } - RemoteServiceViewRemote - { - id: remoteSettingsView - width: parent.width - visible: sectionSwitch.selectedSection === "REMOTE" - parentSectionPage: baseItem - } + SectionSwitch { + id: sectionSwitch - RemoteServiceViewStartStop - { - width: parent.width - height: baseItem.height - visible: Constants.is_layout_android && sectionSwitch.selectedSection === "STARTSTOP" - } - } + visible: !RemoteServiceModel.running + Layout.fillWidth: true - SectionSwitch { - id: sectionSwitch - visible: !RemoteServiceModel.running - showStartStopButton: Constants.is_layout_android - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - - onSelectedSectionChanged: { - if (selectedSection === "REMOTE" && !RemoteServiceModel.detectRemoteDevices){ - RemoteServiceModel.detectRemoteDevices = true - } else { - RemoteServiceModel.detectRemoteDevices = false + onSelectedSectionChanged: { + if (selectedSection == SectionSwitch.Section.REMOTE) { + RemoteServiceModel.detectRemoteDevices = true + flickable.highlightScrollbar() + } else { + RemoteServiceModel.detectRemoteDevices = false + } } } } diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewLocal.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewLocal.qml index 0ea5962..dc56f1d 100644 --- a/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewLocal.qml +++ b/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewLocal.qml @@ -1,8 +1,15 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 + Item { id: baseItem height: mainColumn.height @@ -15,39 +22,47 @@ Item { readonly property int usableWidth: width - 2 * padding - Text { + GText { id: errorMsg - width: parent.usableWidth - text: "" - color: Constants.red - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap - verticalAlignment: Text.AlignVCenter + visible: text !== "" + width: parent.usableWidth + + Accessible.role: Accessible.StaticText + Accessible.name: text + + verticalAlignment: Text.AlignVCenter + text: "" + textStyle: Style.text.normal_warning } Column { id: nameContainer width: parent.usableWidth - Text { - text: qsTr("Device name") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - font.bold: true - color: Constants.blue + GText { + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID IOS + text: qsTr("Device name") + SettingsModel.translationTrigger + textStyle: Style.text.normal_accent } - Text { - color: Constants.secondary_text - text: qsTr("Set device name:") + settingsModel.translationTrigger + GText { width: parent.width - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID IOS + text: qsTr("Set device name:") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } Item { id: spacing - height: Utils.dp(5) + height: 5 width: height } @@ -55,47 +70,56 @@ Item { id: serverName width: parent.width onAccepted: { - settingsModel.serverName = text - text = settingsModel.serverName + SettingsModel.serverName = text + text = SettingsModel.serverName nameContainer.forceActiveFocus(Qt.MouseFocusReason) } onVisibleChanged: { nameContainer.forceActiveFocus(Qt.MouseFocusReason) - if (visible) text = settingsModel.serverName + if (visible) text = SettingsModel.serverName } } } Item { id: pinPadModeContainer - visible: Qt.platform.os !== "ios" + width: parent.usableWidth height: Math.max(pinPadModeText.height, pinPadModeSwitch.height) Item { id: pinPadModeText + height: nameText.height + dateText.height anchors.left: pinPadModeContainer.left anchors.right: pinPadModeSwitch.left anchors.rightMargin: Constants.component_spacing anchors.verticalCenter: pinPadModeContainer.verticalCenter - Text { + GText { id: nameText - anchors.bottomMargin: Utils.dp(2) - font.pixelSize: Constants.normal_font_size - color: Constants.blue - font.bold: true - text: qsTr("PIN pad mode") + settingsModel.translationTrigger + + anchors.bottomMargin: 2 + + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID IOS + text: qsTr("PIN pad mode") + SettingsModel.translationTrigger + textStyle: Style.text.normal_accent } - Text { + GText { id: dateText + width: parent.width anchors.top: nameText.bottom - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - text: qsTr("Enter PIN on this device") + settingsModel.translationTrigger - wrapMode: Text.WordWrap + + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID IOS + text: qsTr("Enter PIN on this device") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } } @@ -103,8 +127,8 @@ Item { id: pinPadModeSwitch anchors.right: pinPadModeContainer.right anchors.verticalCenter: pinPadModeContainer.verticalCenter - initialState: settingsModel.pinPadMode - onSwitched: settingsModel.pinPadMode = pinPadModeSwitch.isOn + initialState: SettingsModel.pinPadMode + onSwitched: SettingsModel.pinPadMode = pinPadModeSwitch.isOn } } } diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewRemote.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewRemote.qml index 451ffce..05310b8 100644 --- a/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewRemote.qml +++ b/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewRemote.qml @@ -1,11 +1,18 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 -import Governikus.EnterPinView 1.0 +import Governikus.EnterPasswordView 1.0 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 + Item { id: baseItem height: mainColumn.height @@ -24,26 +31,33 @@ Item { Column { width: parent.usableWidth - Text { - text: qsTr("Paired devices") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - font.bold: true - color: Constants.blue + GText { + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID IOS + text: qsTr("Paired devices") + SettingsModel.translationTrigger + textStyle: Style.text.normal_accent + bottomPadding: Constants.groupbox_spacing } - Text { - color: Constants.secondary_text - text: qsTr("No device is paired.") + settingsModel.translationTrigger + GText { width: parent.width visible: !knownDeviceList.visible - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID IOS + text: qsTr("No device is paired.") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } ListView { id: knownDeviceList width: parent.width height: childrenRect.height + spacing: Constants.groupbox_spacing / 2 model: RemoteServiceModel.knownDevices delegate: KnownDevicesListDelegate { width: knownDeviceList.width @@ -56,20 +70,26 @@ Item { Column { width: parent.usableWidth - Text { - text: qsTr("Available devices") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - font.bold: true - color: Constants.blue + GText { + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: LABEL ANDROID IOS + text: qsTr("Available devices") + SettingsModel.translationTrigger + textStyle: Style.text.normal_accent + bottomPadding: Constants.groupbox_spacing } - Text { - color: Constants.secondary_text - text: qsTr("No new remote reader was found on your network. Make sure that the remote reader functionality in AusweisApp2 on your other device is activated and that your devices are connected to the same network.") + settingsModel.translationTrigger + GText { width: parent.width visible: !searchDeviceList.visible - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + + Accessible.role: Accessible.StaticText + Accessible.name: text + + //: INFO ANDROID IOS No remote reader was found on the network, both devices need to be connected to the same wifi network. + text: qsTr("No new remote reader was found on your network. Make sure that the remote reader functionality in AusweisApp2 on your other device is activated and that your devices are connected to the same network.") + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } ListView { @@ -77,6 +97,7 @@ Item { width: parent.width height: childrenRect.height model: RemoteServiceModel.availableRemoteDevices + spacing: Constants.groupbox_spacing / 2 delegate: AvailableDevicesListDelegate { width: searchDeviceList.width onRequestPairing: { @@ -92,52 +113,30 @@ Item { } } - Popup { + ConfirmationPopup { id: informationPairingPopup - x: (parentSectionPage.width - width) / 2 - y: (parentSectionPage.height - height) / 2 - width: Utils.dp(250) - height: contentColumn.height + 2 * Constants.pane_padding - modal: true - focus: true - padding: Constants.pane_padding - closePolicy: Popup.CloseOnPressOutside | Popup.CloseOnEscape - Column { - id: contentColumn - width: parent.width - spacing: Constants.pane_spacing + style: ConfirmationPopup.PopupStyle.OkButton + //: INFO ANDROID IOS + title: qsTr("Pairing mode") + SettingsModel.translationTrigger + //: INFO ANDROID IOS Information dialog that requests the user to start the pairing mode on the smarthpone. + text: qsTr("Please start pairing mode first.") + SettingsModel.translationTrigger - Text { - id: info - color: Constants.secondary_text - width: parent.width - wrapMode: Text.WordWrap - font.pixelSize: Constants.normal_font_size - text: qsTr("Please start pairing mode first.") + settingsModel.translationTrigger - } - - GButton { - text: qsTr("OK") + settingsModel.translationTrigger - width: parent.width - - onClicked: { - informationPairingPopup.close() - pinEntryInProgress = true - firePush(enterPinView) - } - } + onConfirmed: { + pinEntryInProgress = true + firePush(enterPinView) } } - EnterPinView { + EnterPasswordView { id: enterPinView state: "REMOTE_PIN" - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: { firePop(); pinEntryInProgress = false } } - headerTitleBarAction: TitleBarAction { text: qsTr("Pairing code") + settingsModel.translationTrigger } + navigationAction: NavigationAction { state: "cancel"; onClicked: { firePop(); pinEntryInProgress = false } } + //: LABEL ANDROID IOS + title: qsTr("Pairing code") + SettingsModel.translationTrigger visible: false - onPinEntered: { + onPasswordEntered: { firePop() pinEntryInProgress = false } diff --git a/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewStartStop.qml b/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewStartStop.qml index 2bf8de6..bb90b64 100644 --- a/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewStartStop.qml +++ b/resources/qml/Governikus/RemoteServiceView/RemoteServiceViewStartStop.qml @@ -1,14 +1,21 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import Governikus.EnterPinView 1.0 import Governikus.Global 1.0 -import Governikus.Type.RemoteServiceModel 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.RemoteServiceModel 1.0 + Item { id: baseItem - readonly property int maxWidth: Math.min(width - 2 * Constants.component_spacing, Utils.dp(500)) + readonly property int maxWidth: Math.min(width - 2 * Constants.component_spacing, Style.dimens.max_text_width) RemoteServicePairingPopup { id: popup @@ -30,57 +37,65 @@ Item { anchors.top: parent.top anchors.margins: Constants.component_spacing anchors.horizontalCenter: parent.horizontalCenter - height: parent.height * 0.2 width: parent.maxWidth fillMode: Image.PreserveAspectFit } - Text { + GText { id: text - color: Constants.secondary_text + + Accessible.role: Accessible.StaticText + Accessible.name: text.text width: parent.maxWidth anchors.top: image.bottom anchors.margins: Constants.component_spacing anchors.horizontalCenter: parent.horizontalCenter + //: INFO ANDROID IOS The remote service is active. Hint that both devices need to be connected to the same network. text: qsTr("Please start the remote service in order to use your smartphone as a card reader with AusweisApp2." + " Please note: Both your devices have to be connected to the same WiFi.") - + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + + SettingsModel.translationTrigger + textStyle: Style.text.normal_secondary } GButton { readonly property bool running: RemoteServiceModel.running readonly property bool canEnableNfc: RemoteServiceModel.canEnableNfc + property bool serviceIsStarting: false id: startButton - buttonColor: running ? "red" : "green" + buttonColor: running ? Constants.red : Constants.green anchors.top: text.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.margins: Constants.component_spacing - enabled: canEnableNfc || RemoteServiceModel.runnable || running + enabled: (canEnableNfc || RemoteServiceModel.runnable || running) && !serviceIsStarting onClicked: { if (canEnableNfc) { - qmlExtension.showSettings("android.settings.NFC_SETTINGS") + ApplicationModel.showSettings(ApplicationModel.SETTING_NFC) } else { - var newRunning = !running; - RemoteServiceModel.running = newRunning + if (!running) { + serviceIsStarting = true + } + RemoteServiceModel.running = !running } } text: { - settingsModel.translationTrigger; // Bind this evaluation to the trigger. + SettingsModel.translationTrigger; // Bind this evaluation to the trigger. if (canEnableNfc) { + //: LABEL ANDROID IOS return qsTr("Enable NFC"); } else if (running) { + //: LABEL ANDROID IOS return qsTr("Stop remote service"); } else { + //: LABEL ANDROID IOS return qsTr("Start remote service"); } } onRunningChanged: { + serviceIsStarting = false navBar.lockedAndHidden = running } } @@ -90,7 +105,8 @@ Item { anchors.top: startButton.bottom anchors.horizontalCenter: parent.horizontalCenter anchors.margins: Constants.component_spacing - text: qsTr("Start pairing") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Start pairing") + SettingsModel.translationTrigger opacity: 0 enabled: opacity === 1 onClicked: popup.open() @@ -106,20 +122,21 @@ Item { anchors.margins: Constants.component_spacing anchors.topMargin: Constants.component_spacing * 2 - Text { + GText { id: error - width: text.width + width: text.width anchors.top: parent.top anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter + + Accessible.role: Accessible.StaticText + Accessible.name: error.text + horizontalAlignment: Text.AlignHCenter - font.pixelSize: Utils.dp(16) - font.bold: true - color: "red" - wrapMode: Text.WordWrap visible: !RemoteServiceModel.runnable - text: RemoteServiceModel.errorMessage; + text: RemoteServiceModel.errorMessage + textStyle: Style.text.normal_warning } Item { @@ -127,39 +144,46 @@ Item { anchors.fill: parent opacity: 0 - Text { + GText { id: headText + anchors.top: connectedText.top anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Constants.header_font_size - font.weight: Font.Bold - color: Constants.blue - text: qsTr("Card access in progress") + settingsModel.translationTrigger; + Accessible.role: Accessible.StaticText + Accessible.name: headText.text + + //: LABEL ANDROID IOS + text: qsTr("Card access in progress") + SettingsModel.translationTrigger; + textStyle: Style.text.header_accent } - Text { + GText { id: subText - color: Constants.secondary_text - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.normal_font_size + anchors.top: headText.bottom - anchors.topMargin: Utils.dp(10) + anchors.topMargin: 10 anchors.horizontalCenter: parent.horizontalCenter width: connectedText.width * 0.8 - wrapMode: Text.WordWrap - text: qsTr("Please pay attention to the display on your other device %1.").arg("\"" + RemoteServiceModel.connectedClientDeviceName + "\"") + settingsModel.translationTrigger; + Accessible.role: Accessible.StaticText + Accessible.name: subText.text + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + text: RemoteServiceModel.connectionInfo + textStyle: Style.text.normal_secondary } states: [ State { name: "UNCONNECTED"; when: RemoteServiceModel.running && !RemoteServiceModel.connected PropertyChanges { target: connectedText; opacity: 0 } PropertyChanges { target: pairingButton; opacity: 1 } + PropertyChanges { target: ApplicationModel; nfcRunning: false; restoreEntryValues: false } }, State { name: "CONNECTED"; when: RemoteServiceModel.running && RemoteServiceModel.connected PropertyChanges { target: connectedText; opacity: 1 } PropertyChanges { target: pairingButton; opacity: 0 } + PropertyChanges { target: ApplicationModel; nfcRunning: true; restoreEntryValues: false } } ] transitions: [ diff --git a/resources/qml/Governikus/RemoteServiceView/SectionSwitch.qml b/resources/qml/Governikus/RemoteServiceView/SectionSwitch.qml index f74babc..024c7ff 100644 --- a/resources/qml/Governikus/RemoteServiceView/SectionSwitch.qml +++ b/resources/qml/Governikus/RemoteServiceView/SectionSwitch.qml @@ -1,43 +1,56 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TechnologyInfo 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 + Rectangle { id: baseItem height: sectionRow.height - color: Constants.background_color + color: Style.color.background - property bool showStartStopButton: true - property string selectedSection: showStartStopButton ? "STARTSTOP" : "REMOTE" + enum Section { + STARTSTOP = 0, + REMOTE = 1, + LOCAL = 2 + } + property int selectedSection: SectionSwitch.Section.STARTSTOP Row { id: sectionRow - spacing: Utils.dp(30) + spacing: 30 anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter TechnologySwitchButton { - visible: showStartStopButton - buttonActive: selectedSection !== "STARTSTOP" - onClicked: selectedSection = "STARTSTOP" + buttonActive: selectedSection !== SectionSwitch.Section.STARTSTOP + onClicked: selectedSection = SectionSwitch.Section.STARTSTOP imageSource: "qrc:///images/icon_remote.svg" - text: qsTr("Service") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Service") + SettingsModel.translationTrigger } TechnologySwitchButton { - buttonActive: selectedSection !== "REMOTE" - onClicked: selectedSection = "REMOTE" + buttonActive: selectedSection !== SectionSwitch.Section.REMOTE + onClicked: selectedSection = SectionSwitch.Section.REMOTE imageSource: "qrc:///images/icon_pair.svg" - text: qsTr("Pairing") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Pairing") + SettingsModel.translationTrigger } TechnologySwitchButton { - buttonActive: selectedSection !== "LOCAL" - onClicked: selectedSection = "LOCAL" + buttonActive: selectedSection !== SectionSwitch.Section.LOCAL + onClicked: selectedSection = SectionSwitch.Section.LOCAL imageSource: "qrc:///images/icon_settings.svg" - text: qsTr("Settings") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Settings") + SettingsModel.translationTrigger } } } diff --git a/resources/qml/Governikus/ResultView/+desktop/ResultView.qml b/resources/qml/Governikus/ResultView/+desktop/ResultView.qml index 2b32f84..b647eee 100644 --- a/resources/qml/Governikus/ResultView/+desktop/ResultView.qml +++ b/resources/qml/Governikus/ResultView/+desktop/ResultView.qml @@ -1,52 +1,107 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 import Governikus.TitleBar 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: baseItem - property alias text: resultText.text - property bool isError: false + enum Type { + IsSuccess, + IsError, + IsInfo + } - KeyNavigation.tab: button - Accessible.role: Accessible.Grouping - Accessible.name: qsTr("Result view") + settingsModel.translationTrigger - Accessible.description: qsTr("This is the result of an authentication.") + settingsModel.translationTrigger + signal emailButtonPressed() + property alias emailButtonVisible: emailButton.visible + property alias text: resultText.text + property int resultType: Type.IsSuccess + + Accessible.name: qsTr("Result view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the result of an authentication.") + SettingsModel.translationTrigger + Keys.onReturnPressed: button.onClicked() + Keys.onEnterPressed: button.onClicked() + Keys.onEscapePressed: button.onClicked() StatusIcon { - height: ApplicationModel.scaleFactor * 400 + height: Style.dimens.status_icon_large anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.top anchors.verticalCenterOffset: baseItem.height / 4 - source: isError ? "qrc:///images/status_error.svg" : "qrc:///images/status_ok.svg" + + source: { + switch (resultType) { + case ResultView.Type.IsSuccess: + return "qrc:///images/status_ok.svg" + case ResultView.Type.IsInfo: + return "qrc:///images/status_info.svg" + case ResultView.Type.IsError: + return "qrc:///images/status_error.svg" + } + } } - Text { + GText { id: resultText + + visible: text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.verticalCenter - width: parent.width - (2 * Constants.pane_padding) - font.pixelSize: Constants.header_font_size + activeFocusOnTab: true + Accessible.role: Accessible.Heading + Accessible.name: resultText.text + horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter - wrapMode: Text.WordWrap - color: Constants.white + textStyle: Style.text.title + onLinkActivated: Qt.openUrlExternally(link) + + FocusFrame { + dynamic: false + } } - ContinueButton { - id: button - height: ApplicationModel.scaleFactor * 160 - anchors.verticalCenter: parent.bottom - anchors.verticalCenterOffset: -baseItem.height / 6 - anchors.horizontalCenter: parent.horizontalCenter - onClicked: baseItem.nextView(SectionPage.Views.Main) + GButton { + id: emailButton - KeyNavigation.tab: baseItem.navSuccessor + visible: false + + icon.source: "qrc:///images/provider/mail.svg" + //: LABEL DESKTOP_QML + text: qsTr("Send email") + SettingsModel.translationTrigger + anchors { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.top + verticalCenterOffset: baseItem.height * 3 / 4 + } + onClicked: baseItem.emailButtonPressed() + } + + NavigationButton { + id: button + + anchors { + margins: Constants.component_spacing + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + } + + activeFocusOnTab: true + + buttonType: Qt.ForwardButton + onClicked: baseItem.nextView(SectionPage.Views.Main) } } diff --git a/resources/qml/Governikus/ResultView/+mobile/ResultView.qml b/resources/qml/Governikus/ResultView/+mobile/ResultView.qml index bd65f53..4f221b4 100644 --- a/resources/qml/Governikus/ResultView/+mobile/ResultView.qml +++ b/resources/qml/Governikus/ResultView/+mobile/ResultView.qml @@ -1,13 +1,20 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.LogModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: baseItem.clicked() } + navigationAction: NavigationAction { state: "cancel"; onClicked: baseItem.clicked() } enum Type { IsSuccess, @@ -23,15 +30,15 @@ SectionPage { Rectangle { anchors.fill: parent - color: Constants.background_color + color: Style.color.background } StatusIcon { id: resultIcon - height: Utils.dp(100) + height: 100 anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top - anchors.topMargin: Utils.dp(60) + anchors.topMargin: 60 source: { switch (resultType) { case ResultView.Type.IsSuccess: @@ -44,26 +51,17 @@ SectionPage { } } - Text { + GText { id: resultText anchors.horizontalCenter: parent.horizontalCenter anchors.top: resultIcon.bottom anchors.bottom: buttonRow.top width: parent.width - (2 * Constants.pane_padding) - font.pixelSize: Constants.header_font_size horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter - wrapMode: Text.WordWrap - color: { - switch (resultType) { - case ResultView.Type.IsSuccess: - case ResultView.Type.IsInfo: - return Constants.blue - case ResultView.Type.IsError: - return Constants.red - } - } + textStyle: resultType !== ResultView.Type.IsError ? Style.text.header_accent : Style.text.header_warning + onLinkActivated: Qt.openUrlExternally(link) } @@ -72,13 +70,14 @@ SectionPage { anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter - anchors.bottomMargin: Utils.dp(30) + anchors.bottomMargin: 30 spacing: Constants.component_spacing GButton { id: buttonLeft - text: qsTr("OK") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("OK") + SettingsModel.translationTrigger onClicked: baseItem.clicked() } @@ -86,7 +85,8 @@ SectionPage { id: buttonRight visible: false - text: qsTr("Send log file") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Send log file") + SettingsModel.translationTrigger onClicked: LogModel.mailLog() } } diff --git a/resources/qml/Governikus/SelfAuthenticationView/+desktop/SelfAuthenticationView.qml b/resources/qml/Governikus/SelfAuthenticationView/+desktop/SelfAuthenticationView.qml new file mode 100644 index 0000000..f08ffe8 --- /dev/null +++ b/resources/qml/Governikus/SelfAuthenticationView/+desktop/SelfAuthenticationView.qml @@ -0,0 +1,92 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.TitleBar 1.0 +import Governikus.Type.SelfAuthModel 1.0 +import Governikus.View 1.0 +import QtQuick 2.10 + +SectionPage { + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Identify") + SettingsModel.translationTrigger + } + + Column { + width: Style.dimens.max_text_width + anchors.centerIn: parent + + spacing: Constants.pane_spacing + Item { + height: childrenRect.height + width: parent.width + + Image { + id: useNpa + + width: ApplicationModel.scaleFactor * 400 + anchors.left: parent.left + + fillMode: Image.PreserveAspectFit + source: "qrc:///images/siteWithLogo.png" + mipmap: true + } + + GText { + anchors.verticalCenter: useNpa.verticalCenter + anchors.leftMargin: Constants.component_spacing + anchors.rightMargin: Constants.component_spacing + anchors.left: useNpa.right + anchors.right: parent.right + + textStyle: Style.text.header + + //: LABEL DESKTOP_QML + text: qsTr("You can use your ID card anywhere you see this logo.") + SettingsModel.translationTrigger + } + } + Pane { + id: textPane + + anchors { + left: parent.left + right: parent.right + } + + GText { + id: info + + width: parent.width + + textStyle: Style.text.normal_inverse + //: LABEL DESKTOP_QML + text: qsTr("Use the button 'See my personal data' to display the data stored on your ID card." + + " An Internet connection is required to display the data.") + + "

    " + + qsTr("Your personal data is neither saved nor processed in any way. Please see our %1 for details on how your personal data is processed.") + .arg('' + qsTr("data privacy statement") + '') + + "" + + SettingsModel.translationTrigger + + onLinkActivated: Qt.openUrlExternally(link) + } + + GButton { + anchors.right: parent.right + + icon.source: "qrc:///images/npa.svg" + buttonColor: SettingsModel.useSelfauthenticationTestUri ? Constants.red : Style.color.accent + //: LABEL DESKTOP_QML + text: qsTr("See my personal data") + SettingsModel.translationTrigger + onClicked: SelfAuthModel.startWorkflow() + } + } + } + +} diff --git a/resources/qml/Governikus/MainView/+mobile/MainView.qml b/resources/qml/Governikus/SelfAuthenticationView/+mobile/SelfAuthenticationView.qml similarity index 59% rename from resources/qml/Governikus/MainView/+mobile/MainView.qml rename to resources/qml/Governikus/SelfAuthenticationView/+mobile/SelfAuthenticationView.qml index 88c64e4..82db62e 100644 --- a/resources/qml/Governikus/MainView/+mobile/MainView.qml +++ b/resources/qml/Governikus/SelfAuthenticationView/+mobile/SelfAuthenticationView.qml @@ -1,8 +1,15 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.SelfAuthModel 1.0 Item { id: baseItem @@ -18,14 +25,14 @@ Item { case 7: case 8: case 9: - qmlExtension.showFeedback(10-d.testPkiCounter + qsTr(" more presses to toggle test PKI.") + settingsModel.translationTrigger) + ApplicationModel.showFeedback(qsTr("%1 more presses to toggle test PKI.").arg(10 - d.testPkiCounter) + SettingsModel.translationTrigger, true) break; case 10: - settingsModel.useSelfauthenticationTestUri = !settingsModel.useSelfauthenticationTestUri - if(settingsModel.useSelfauthenticationTestUri) { - qmlExtension.showFeedback(qsTr("Test PKI activated.") + settingsModel.translationTrigger) + SettingsModel.useSelfauthenticationTestUri = !SettingsModel.useSelfauthenticationTestUri + if(SettingsModel.useSelfauthenticationTestUri) { + ApplicationModel.showFeedback(qsTr("Test PKI activated.") + SettingsModel.translationTrigger, true) } else { - qmlExtension.showFeedback(qsTr("Test PKI deactivated.") + settingsModel.translationTrigger) + ApplicationModel.showFeedback(qsTr("Test PKI deactivated.") + SettingsModel.translationTrigger, true) } d.testPkiCounter = 0; break; @@ -63,15 +70,13 @@ Item { } } - Text { - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size + GText { anchors.verticalCenter: useNpa.verticalCenter anchors.leftMargin: Constants.component_spacing - wrapMode: Text.WordWrap anchors.left: useNpa.right anchors.right: parent.right - text: qsTr("You can use your ID card anywhere you see this logo.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("You can use your ID card anywhere you see this logo.") + SettingsModel.translationTrigger } } @@ -80,20 +85,28 @@ Item { anchors.leftMargin: Constants.pane_padding anchors.rightMargin: Constants.pane_padding - Text { + GText { id: info - color: Constants.secondary_text - font.pixelSize: Constants.normal_font_size - wrapMode: Text.WordWrap + + property string htmlLink: qsTr("https://www.ausweisapp.bund.de/datenschutz/") + SettingsModel.translationTrigger anchors.left: parent.left anchors.right: parent.right + + Accessible.role: Accessible.Link + Accessible.name: ApplicationModel.stripHtmlTags(text) + Accessible.description: qsTr("Click to open link to data privacy statement in browser: %1").arg(htmlLink) + SettingsModel.translationTrigger + Accessible.onPressAction: if (Qt.platform.os === "ios") Qt.openUrlExternally(htmlLink) + + wrapMode: Text.WordWrap + //: LABEL ANDROID IOS text: qsTr("Use the button 'See my personal data' to display the data stored on your ID card." + " An Internet connection is required to display the data.") + "

    " + //: LABEL ANDROID IOS + qsTr("Your personal data is neither saved nor processed in any way. Please see our %1 for details on how your personal data is processed.") - .arg('' + qsTr("data privacy statement") + '') + .arg('' + qsTr("data privacy statement") + '') + "" - + settingsModel.translationTrigger + + SettingsModel.translationTrigger onLinkActivated: Qt.openUrlExternally(link) } } @@ -105,12 +118,13 @@ Item { anchors.bottom: baseItem.bottom anchors.bottomMargin: Constants.pane_padding anchors.horizontalCenter: parent.horizontalCenter - buttonColor: settingsModel.useSelfauthenticationTestUri ? Constants.red : Constants.blue - text: qsTr("See my personal data") + settingsModel.translationTrigger + buttonColor: SettingsModel.useSelfauthenticationTestUri ? Style.color.warning_text : Style.color.accent + //: LABEL ANDROID IOS + text: qsTr("See my personal data") + SettingsModel.translationTrigger enabled: ApplicationModel.currentWorkflow !== "authentication" onClicked: { - selfAuthModel.startWorkflow() + SelfAuthModel.startWorkflow() } } } diff --git a/resources/qml/Governikus/SelfAuthenticationView/qmldir b/resources/qml/Governikus/SelfAuthenticationView/qmldir new file mode 100644 index 0000000..2734387 --- /dev/null +++ b/resources/qml/Governikus/SelfAuthenticationView/qmldir @@ -0,0 +1,3 @@ +module SelfAuthenticationView + +SelfAuthenticationView 1.0 SelfAuthenticationView.qml diff --git a/resources/qml/Governikus/SettingsView/+desktop/CardReaderDelegate.qml b/resources/qml/Governikus/SettingsView/+desktop/CardReaderDelegate.qml new file mode 100644 index 0000000..e6efeba --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/CardReaderDelegate.qml @@ -0,0 +1,83 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.12 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.View 1.0 + + +Item { + property int iconHeight: ApplicationModel.scaleFactor * 175 + + implicitHeight: rowLayout.implicitHeight + activeFocusOnTab: true + + FocusFrame { + dynamic: false + border.color: Constants.black + } + + RowLayout { + id: rowLayout + + width: parent.width + + spacing: 0 + + Image { + id: readerIcon + + sourceSize.height: iconHeight + + asynchronous: true + source: readerImagePath + fillMode: Image.PreserveAspectFit + } + + ColumnLayout { + id: textColumn + + Layout.fillHeight: true + Layout.alignment: Qt.AlignLeft + spacing: Constants.text_spacing + + GText { + Layout.fillWidth: true + + textStyle: Style.text.header_inverse + text: readerName + } + + GText { + Layout.fillWidth: true + + textStyle: Style.text.normal_inverse + text: readerStatus + } + + GText { + visible: !readerInstalledAndSupported + + Layout.fillWidth: true + + textStyle: Style.text.normal_inverse + text: readerHTMLDescription + } + } + + Image { + id: statusIcon + + sourceSize.height: iconHeight * 0.33 + + fillMode: Image.PreserveAspectFit + asynchronous: true + source: readerInstalledAndSupported ? "qrc:/images/status_ok.svg" : "qrc:/images/status_error.svg" + } + } +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/CardReaderView.qml b/resources/qml/Governikus/SettingsView/+desktop/CardReaderView.qml new file mode 100644 index 0000000..dac5610 --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/CardReaderView.qml @@ -0,0 +1,104 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.12 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ReaderDriverModel 1.0 +import Governikus.Type.ReaderScanEnabler 1.0 +import Governikus.View 1.0 + + +Column { + id: root + + spacing: Constants.component_spacing + + ReaderScanEnabler { + } + + Column { + visible: readerRepeater.count > 0 + + width: parent.width + + Repeater { + id: readerRepeater + + model: ReaderDriverModel + delegate: CardReaderDelegate { + width: parent.width + + GSeparator { + visible: index < readerRepeater.count - 1 + width: parent.width + anchors.bottom: parent.bottom + } + } + } + } + + GText { + id: placeHolderText + + visible: readerRepeater.count === 0 + + width: parent.width + + activeFocusOnTab: true + + text: ReaderDriverModel.emptyListDescriptionString + verticalAlignment: Text.AlignVCenter + textStyle: Style.text.normal_inverse + + Keys.onSpacePressed: ApplicationModel.openOnlineHelp("readerDeviceTab") + onLinkActivated: Qt.openUrlExternally(link) + + FocusFrame { + dynamic: false + border.color: Constants.black + } + } + + GSeparator { + width: parent.width + } + + RowLayout { + id: hintAndDateText + + width: parent.width + + spacing: Constants.component_spacing + + Image { + Layout.preferredHeight: hintText.height * 1.5 + + fillMode: Image.PreserveAspectFit + source: "qrc:/images/desktop/info_version.svg" + } + + GText { + id: hintText + + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + + activeFocusOnTab: true + + verticalAlignment: Text.AlignBottom + textStyle: Style.text.hint_inverse + text: qsTr("After connecting a new card reader it may take a few seconds to recognize the driver. It may be necessary to restart your system after installing the driver. Only supported and connected card reader are shown here. %1").arg(ReaderDriverModel.lastUpdatedInformation) + SettingsModel.translationTrigger + + FocusFrame { + dynamic: false + border.color: Constants.black + } + } + } +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/DeveloperSettings.qml b/resources/qml/Governikus/SettingsView/+desktop/DeveloperSettings.qml new file mode 100644 index 0000000..e71a88b --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/DeveloperSettings.qml @@ -0,0 +1,54 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.View 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + +ColumnLayout { + + spacing: Constants.component_spacing + + GText { + //: LABEL DESKTOP_QML + text: qsTr("Developer options") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Test PKI") + SettingsModel.translationTrigger + checked: SettingsModel.useSelfauthenticationTestUri + onCheckedChanged: SettingsModel.useSelfauthenticationTestUri = checked + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Developer mode") + SettingsModel.translationTrigger + checked: SettingsModel.developerMode + onCheckedChanged: SettingsModel.developerMode = checked + } + + GText { + Layout.fillWidth: true + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML Only visible when the user activates the developer mode in the settings. + text: qsTr("The developer mode is aimed at integrators / developers for new service applications. For this reason, the developer mode works only in the test PKI. By activating the developer mode, some safety tests are deactivated. This means that the authentication process continues although the AusweisApp2 would usually abort the process with an error message when used in normal operation mode. Information on the disregarded error in the developer mode is displayed in the attached window below the AusweisApp2.") + SettingsModel.translationTrigger + textStyle: Style.text.hint_warning + + FocusFrame { + dynamic: false + border.color: Constants.black + } + } +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/GeneralSettings.qml b/resources/qml/Governikus/SettingsView/+desktop/GeneralSettings.qml new file mode 100644 index 0000000..0648501 --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/GeneralSettings.qml @@ -0,0 +1,94 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + +ColumnLayout { + + spacing: Constants.component_spacing + + GText { + //: LABEL DESKTOP_QML + text: qsTr("Language selection") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + RowLayout { + spacing: Constants.component_spacing + + LocationButton { + activeFocusOnTab: true + Accessible.name: qsTr("German") + SettingsModel.translationTrigger + Accessible.description: qsTr("Set language to german") + SettingsModel.translationTrigger + + language: "de" + text: "DE" + image: "qrc:///images/location_flag_de.svg" + } + + LocationButton { + activeFocusOnTab: true + Accessible.name: qsTr("English") + SettingsModel.translationTrigger + Accessible.description: qsTr("Set language to english") + SettingsModel.translationTrigger + + language: "en" + text: "EN" + image: "qrc:///images/location_flag_en.svg" + } + + } + + GSeparator { + Layout.fillWidth: true + } + + GText { + //: LABEL DESKTOP_QML + text: qsTr("UI settings") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + GButton { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Switch back to old UI") + SettingsModel.translationTrigger + onClicked: plugin.switchUi() + } + + GSeparator { + Layout.fillWidth: true + } + + GText { + //: LABEL DESKTOP_QML + text: qsTr("Behavior") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Auto start AusweisApp2 after boot") + SettingsModel.translationTrigger + checked: SettingsModel.autoStartApp + enabled: !SettingsModel.autoStartSetByAdmin + onCheckedChanged: SettingsModel.autoStartApp = checked + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Close after authentication") + SettingsModel.translationTrigger + checked: SettingsModel.autoCloseWindowAfterAuthentication + onCheckedChanged: SettingsModel.autoCloseWindowAfterAuthentication = checked + } + +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/RemoteReaderDelegate.qml b/resources/qml/Governikus/SettingsView/+desktop/RemoteReaderDelegate.qml new file mode 100644 index 0000000..61ea10d --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/RemoteReaderDelegate.qml @@ -0,0 +1,125 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.12 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.View 1.0 + +Item { + id: root + + signal unpairDevice(string pDeviceId) + signal pairDevice(string pDeviceId) + + property int iconHeight: ApplicationModel.scaleFactor * 80 + + implicitHeight: rowLayout.implicitHeight + activeFocusOnTab: true + + FocusFrame { + dynamic: false + border.color: Constants.black + } + + RowLayout { + id: rowLayout + + width: parent.width + + spacing: 0 + + ColumnLayout { + Layout.fillHeight: true + + GText { + Layout.preferredWidth: implicitWidth + textStyle: Style.text.header_inverse + text: remoteDeviceName + } + + GText { + Layout.preferredWidth: implicitWidth + textStyle: Style.text.normal_inverse + text: { + if (!isPaired) { + return qsTr("Click to pair") + SettingsModel.translationTrigger + } + + return remoteDeviceStatus + } + } + } + + Row { + Layout.preferredHeight: iconHeight + Layout.alignment: Qt.AlignRight + + spacing: Constants.component_spacing + + Image { + source: { + if (!isNetworkVisible && isPaired) { + return "qrc:///images/icon_remote_inactive.svg" + } + + if (linkQualityInPercent < 25) { + return "qrc:///images/icon_remote_0.svg" + } + if (linkQualityInPercent < 50) { + return "qrc:///images/icon_remote_25.svg" + } + if (linkQualityInPercent < 75) { + return "qrc:///images/icon_remote_50.svg" + } + if (linkQualityInPercent < 100) { + return "qrc:///images/icon_remote_75.svg" + } + + return "qrc:///images/icon_remote_100.svg" + } + + sourceSize.height: iconHeight + fillMode: Image.PreserveAspectFit + } + + Image { + id: removeIcon + + visible: isPaired + + source: "qrc:///images/trash_icon.svg" + sourceSize.height: iconHeight + fillMode: Image.PreserveAspectFit + + MouseArea { + anchors.fill: parent + onClicked: unpairDevice(deviceId) + cursorShape: Qt.PointingHandCursor + } + } + + Item { + id: spacer + + visible: !removeIcon.visible + + height: removeIcon.height + width: removeIcon.width + } + } + } + + MouseArea { + anchors.fill: parent + + visible: !isPaired + onClicked: pairDevice(deviceId) + cursorShape: Qt.PointingHandCursor + } +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/RemoteReaderView.qml b/resources/qml/Governikus/SettingsView/+desktop/RemoteReaderView.qml new file mode 100644 index 0000000..291e61c --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/RemoteReaderView.qml @@ -0,0 +1,138 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Layouts 1.12 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.TitleBar 1.0 +import Governikus.Type.NumberModel 1.0 +import Governikus.Type.ReaderScanEnabler 1.0 +import Governikus.Type.RemoteServiceModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.View 1.0 + +Item { + id: root + + signal pairDevice(string pDeviceId) + signal unpairDevice(string pDeviceId) + + Component.onCompleted: { + RemoteServiceModel.detectRemoteDevices = visible + } + + Component.onDestruction: { + RemoteServiceModel.detectRemoteDevices = false + } + + onVisibleChanged: RemoteServiceModel.detectRemoteDevices = visible + + Column { + anchors.fill: parent + spacing: Constants.component_spacing + + + GText { + visible: knownDevices.count > 0 + + width: parent.width + + textStyle: Style.text.header_accent + text: qsTr("Paired remote devices") + SettingsModel.translationTrigger + } + + Column { + width: parent.width + + Repeater { + id: knownDevices + + model: RemoteServiceModel.knownDevices + delegate: RemoteReaderDelegate { + width: parent.width + height: implicitHeight + Constants.pane_padding + onUnpairDevice: root.unpairDevice(pDeviceId) + } + } + } + + GSeparator { + visible: knownDevices.count > 0 + + width: parent.width + } + + GText { + width: parent.width + textStyle: Style.text.header_accent + text: qsTr("Available remote devices") + SettingsModel.translationTrigger + } + + Column { + width: parent.width + + Repeater { + id: availableDevices + + model: RemoteServiceModel.availableRemoteDevices + delegate: RemoteReaderDelegate { + width: parent.width + height: implicitHeight + Constants.pane_padding + onPairDevice: root.pairDevice(pDeviceId) + } + } + } + + GText { + visible: availableDevices.count === 0 + + width: parent.width + + activeFocusOnTab: true + textStyle: Style.text.normal_inverse + text: qsTr("No devices with enabled remote service were found on the current WiFi network") + SettingsModel.translationTrigger + + FocusFrame { + dynamic: false + border.color: Constants.black + } + } + + RowLayout { + id: hint + + width: parent.width + + spacing: Constants.component_spacing + + Image { + Layout.preferredHeight: hintText.height * 1.5 + + fillMode: Image.PreserveAspectFit + source: "qrc:/images/desktop/info_version.svg" + } + + GText { + id: hintText + + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + + activeFocusOnTab: true + + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignBottom + textStyle: Style.text.hint_inverse + text: qsTr("Only devices that are already paired or are connected to the same WiFi network and have the remote service enabled are shown here.") + SettingsModel.translationTrigger + + FocusFrame { + dynamic: false + border.color: Constants.black + } + } + } + } +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/SecurityAndPrivacySettings.qml b/resources/qml/Governikus/SettingsView/+desktop/SecurityAndPrivacySettings.qml new file mode 100644 index 0000000..c9eaa8c --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/SecurityAndPrivacySettings.qml @@ -0,0 +1,95 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick.Layouts 1.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + +ColumnLayout { + + spacing: Constants.component_spacing + + GText { + //: LABEL DESKTOP_QML + text: qsTr("History") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Save authentification history") + SettingsModel.translationTrigger + checked: SettingsModel.historyEnabled + onCheckedChanged: SettingsModel.historyEnabled = checked + } + + GButton { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Clear entire history") + SettingsModel.translationTrigger + onClicked: SettingsModel.removeEntireHistory() + } + + GSeparator { + Layout.fillWidth: true + } + + GText { + //: LABEL DESKTOP_QML + text: qsTr("Onscreen keypad") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Use on screen keypad for PIN entry") + SettingsModel.translationTrigger + checked: SettingsModel.useScreenKeyboard + onCheckedChanged: SettingsModel.useScreenKeyboard = checked + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Shuffle keypad buttons") + SettingsModel.translationTrigger + checked: SettingsModel.shuffleScreenKeyboard + enabled: SettingsModel.useScreenKeyboard + onCheckedChanged: SettingsModel.shuffleScreenKeyboard = checked + } + + GSeparator { + Layout.fillWidth: true + } + + GText { + //: LABEL DESKTOP_QML + text: qsTr("Software updates") + SettingsModel.translationTrigger + textStyle: Style.text.header_accent + } + + ToggleableOption { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Check at program start") + SettingsModel.translationTrigger + checked: SettingsModel.autoUpdateCheck + enabled: !SettingsModel.autoUpdateCeckSetByAdmin + onCheckedChanged: SettingsModel.autoUpdateCheck = checked + } + + GButton { + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + text: qsTr("Check now") + SettingsModel.translationTrigger + onClicked: SettingsModel.updateApp() + } + +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/SettingsView.qml b/resources/qml/Governikus/SettingsView/+desktop/SettingsView.qml new file mode 100644 index 0000000..2132acc --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/SettingsView.qml @@ -0,0 +1,144 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 +import QtQml.Models 2.3 + +import Governikus.Global 1.0 +import Governikus.View 1.0 +import Governikus.TitleBar 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.UiModule 1.0 +import Governikus.Type.RemoteServiceModel 1.0 +import Governikus.EnterPasswordView 1.0 +import Governikus.Type.NumberModel 1.0 + + +SectionPage { + id: sectionPage + + enum SubView { + None, + EnterPassword, + PairingInfo + } + + Accessible.name: qsTr("Settings view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the settings panel of the AusweisApp2.") + SettingsModel.translationTrigger + Keys.onEscapePressed: { + if (d.view === SettingsView.SubView.None) { + event.accepted = false + return + } + + d.view = SettingsView.SubView.None + } + + isAbstract: d.view !== SettingsView.SubView.None + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Settings") + SettingsModel.translationTrigger + + onClicked: { + d.view = SettingsView.SubView.None + } + } + + QtObject { + id: d + + property int view: SettingsView.SubView.None + } + + TabbedPane { + id: tabbedPane + + visible: d.view === SettingsView.SubView.None + anchors.fill: parent + anchors.margins: Constants.pane_spacing + + sectionsModel: { + var model = [ + //: LABEL DESKTOP_QML + qsTr("General") + SettingsModel.translationTrigger, + //: LABEL DESKTOP_QML + qsTr("Smartphone as card reader") + SettingsModel.translationTrigger, + //: LABEL DESKTOP_QML + qsTr("USB card reader") + SettingsModel.translationTrigger, + //: LABEL DESKTOP_QML + qsTr("Security and privacy") + SettingsModel.translationTrigger + ] + + if (plugin.developerBuild) { + model.push( + //: LABEL DESKTOP_QML + qsTr("Developer options") + SettingsModel.translationTrigger + ) + } + + return model + } + + sectionDelegate: TabbedPaneDelegateOneLineText { + sectionName: model ? model.modelData : "" + } + + contentObjectModel: ObjectModel { + Component { GeneralSettings {} } + Component { + RemoteReaderView { + width: parent.width + height: Math.max(implicitHeight, tabbedPane.availableHeight) + onPairDevice: { + if (RemoteServiceModel.rememberServer(pDeviceId)) { + d.view = TabbedReaderView.SubView.EnterPassword + appWindow.menuBar.updateActions() + } + } + onUnpairDevice: RemoteServiceModel.forgetDevice(pDeviceId) + } + } + Component { + CardReaderView { + width: parent.width + height: Math.max(implicitHeight, tabbedPane.availableHeight) + } + } + Component { SecurityAndPrivacySettings {} } + Component { DeveloperSettings {} } + } + } + + EnterPasswordView { + id: enterPassword + + visible: d.view === SettingsView.SubView.EnterPassword + + statusIcon: "qrc:///images/phone_to_pc.svg" + passwordType: NumberModel.PASSWORD_REMOTE_PIN + + onPasswordEntered: d.view = SettingsView.SubView.None + + onRequestPasswordInfo: { + d.view = SettingsView.SubView.PairingInfo + appWindow.menuBar.updateActions() + } + } + + PasswordInfoView { + id: passwordInfoView + + visible: d.view === SettingsView.SubView.PairingInfo + + passwordType: NumberModel.PASSWORD_REMOTE_PIN + + onClose: { + d.view = SettingsView.SubView.EnterPassword + appWindow.menuBar.updateActions() + } + } +} diff --git a/resources/qml/Governikus/SettingsView/+desktop/TabbedReaderView.qml b/resources/qml/Governikus/SettingsView/+desktop/TabbedReaderView.qml new file mode 100644 index 0000000..47ece8d --- /dev/null +++ b/resources/qml/Governikus/SettingsView/+desktop/TabbedReaderView.qml @@ -0,0 +1,140 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQml.Models 2.10 + +import Governikus.EnterPasswordView 1.0 +import Governikus.Global 1.0 +import Governikus.TitleBar 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.NumberModel 1.0 +import Governikus.Type.RemoteServiceModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.View 1.0 + +SectionPage { + id: root + + property alias rootEnabled: titleBarAction.rootEnabled + property bool showPairingInfoPopup: false + signal closeView() + + enum SubView { + None, + EnterPassword, + PairingInfo + } + + QtObject { + id: d + + property int view + } + + onVisibleChanged: d.view = TabbedReaderView.SubView.None + + titleBarAction: TitleBarAction { + id:titleBarAction + + //: LABEL DESKTOP_QML + text: qsTr("Card Readers") + SettingsModel.translationTrigger + helpTopic: "readerDeviceTab" + rootEnabled: false + customSubAction: CancelAction { + visible: d.view === TabbedReaderView.SubView.EnterPassword + + onClicked: d.view = TabbedReaderView.SubView.None + } + } + + TabbedPane { + id: tabbedPane + + visible: d.view === TabbedReaderView.SubView.None + + anchors.fill: parent + anchors.margins: Constants.pane_padding + + sectionsModel: [ + qsTr("Smartphone as card reader") + SettingsModel.translationTrigger, + qsTr("USB card reader") + SettingsModel.translationTrigger + ] + contentObjectModel: ObjectModel { + Component { + RemoteReaderView { + width: parent.width + height: Math.max(implicitHeight, tabbedPane.availableHeight) + onPairDevice: { + if (RemoteServiceModel.rememberServer(pDeviceId)) { + if (showPairingInfoPopup) { + pairingInfo.open() + } + else { + d.view = TabbedReaderView.SubView.EnterPassword + appWindow.menuBar.updateActions() + } + } + } + onUnpairDevice: RemoteServiceModel.forgetDevice(pDeviceId) + } + } + + Component { + CardReaderView { + width: parent.width + height: Math.max(implicitHeight, tabbedPane.availableHeight) + } + } + } + footerItem: Item { + height: childrenRect.height + + NavigationButton { + buttonType: Qt.BackButton + onClicked: root.closeView() + } + } + } + + ConfirmationPopup { + id: pairingInfo + + //: LABEL DESKTOP_QML + text: qsTr("Please start pairing mode first.") + SettingsModel.translationTrigger + onConfirmed: { + d.view = TabbedReaderView.SubView.EnterPassword + appWindow.menuBar.updateActions() + } + } + + EnterPasswordView { + id: enterPassword + + visible: d.view === TabbedReaderView.SubView.EnterPassword + + statusIcon: "qrc:///images/phone_to_pc.svg" + passwordType: NumberModel.PASSWORD_REMOTE_PIN + + onPasswordEntered: d.view = TabbedReaderView.SubView.None + + onRequestPasswordInfo: { + d.view = TabbedReaderView.SubView.PairingInfo + appWindow.menuBar.updateActions() + } + } + + PasswordInfoView { + id: passwordInfoView + + visible: d.view === TabbedReaderView.SubView.PairingInfo + + passwordType: NumberModel.PASSWORD_REMOTE_PIN + + onClose: { + d.view = TabbedReaderView.SubView.EnterPassword + appWindow.menuBar.updateActions() + } + } +} diff --git a/resources/qml/Governikus/SettingsView/qmldir b/resources/qml/Governikus/SettingsView/qmldir new file mode 100644 index 0000000..cfab5a3 --- /dev/null +++ b/resources/qml/Governikus/SettingsView/qmldir @@ -0,0 +1,12 @@ +module SettingsView + +internal CardReaderDelegate CardReaderDelegate.qml +internal RemoteReaderDelegate RemoteReaderDelegate.qml +internal GeneralSettings GeneralSettings.qml +internal DeveloperSettings DeveloperSettings.qml +internal SecurityAndPrivacySettings SecurityAndPrivacySettings.qml + +CardReaderView 1.0 CardReaderView.qml +RemoteReaderView 1.0 RemoteReaderView.qml +SettingsView 1.0 SettingsView.qml +TabbedReaderView 1.0 TabbedReaderView.qml diff --git a/resources/qml/Governikus/SplashScreen/SplashScreen.qml b/resources/qml/Governikus/SplashScreen/SplashScreen.qml index 2772b5b..70c1830 100644 --- a/resources/qml/Governikus/SplashScreen/SplashScreen.qml +++ b/resources/qml/Governikus/SplashScreen/SplashScreen.qml @@ -1,5 +1,11 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import Governikus.Style 1.0 + Rectangle { id: splashScreen visible: true @@ -18,6 +24,19 @@ Rectangle { visible: parent.visible } + Rectangle { + id: titleBar + + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: plugin.safeAreaMargins.top + + color: Style.color.accent + } + function hide() { if (!splashScreen.visible) { return diff --git a/resources/qml/Governikus/Style/+desktop/PlatformColors.qml b/resources/qml/Governikus/Style/+desktop/PlatformColors.qml new file mode 100644 index 0000000..f2dfffd --- /dev/null +++ b/resources/qml/Governikus/Style/+desktop/PlatformColors.qml @@ -0,0 +1,24 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQml 2.10 + +QtObject { + readonly property color border: "#bbbbbb" + + readonly property color background: "#659bcd" + readonly property color background_popup: background + readonly property color background_pane: "#ffffff" + readonly property color background_pane_active: "#d0e1f0" + + readonly property color accent: "#5481ab" + readonly property color accent_disabled: "#d0d0d0" + + readonly property color primary_text: "#ffffff" + readonly property color primary_text_inverse: "#333333" + readonly property color secondary_text: "#dadada" + readonly property color secondary_text_inverse: "#666666" + readonly property color warning_text: "#cc0000" + readonly property color button_text: "#ffffff" +} diff --git a/resources/qml/Governikus/Style/+desktop/PlatformDimensions.qml b/resources/qml/Governikus/Style/+desktop/PlatformDimensions.qml new file mode 100644 index 0000000..3b2d3f6 --- /dev/null +++ b/resources/qml/Governikus/Style/+desktop/PlatformDimensions.qml @@ -0,0 +1,25 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQml 2.10 +import Governikus.Type.ApplicationModel 1.0 + +QtObject { + readonly property int title_font_size: ApplicationModel.scaleFactor * 42 + readonly property int header_font_size: ApplicationModel.scaleFactor * 32 + readonly property int normal_font_size: ApplicationModel.scaleFactor * 26 + readonly property int hint_font_size: ApplicationModel.scaleFactor * 20 + + readonly property int corner_radius: ApplicationModel.scaleFactor * 20 + readonly property int corner_radius_popup: corner_radius + readonly property int button_radius: ApplicationModel.scaleFactor * 15 + readonly property int separator_size: Math.max(ApplicationModel.scaleFactor * 2, 1) + readonly property real max_text_width: ApplicationModel.scaleFactor * 1000 + + readonly property int titlebar_padding: ApplicationModel.scaleFactor * 20 + + readonly property int status_icon_large: ApplicationModel.scaleFactor * 350 + readonly property int status_icon_medium: ApplicationModel.scaleFactor * 200 + readonly property int status_icon_small: ApplicationModel.scaleFactor * 100 +} diff --git a/resources/qml/Governikus/Style/+desktop/PlatformTextStyles.qml b/resources/qml/Governikus/Style/+desktop/PlatformTextStyles.qml new file mode 100644 index 0000000..1ffb076 --- /dev/null +++ b/resources/qml/Governikus/Style/+desktop/PlatformTextStyles.qml @@ -0,0 +1,8 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +QtObject { +} diff --git a/resources/qml/Governikus/Style/+desktop/ProviderStyle.qml b/resources/qml/Governikus/Style/+desktop/ProviderStyle.qml deleted file mode 100644 index fa889c8..0000000 --- a/resources/qml/Governikus/Style/+desktop/ProviderStyle.qml +++ /dev/null @@ -1,7 +0,0 @@ -pragma Singleton - -import QtQuick 2.10 - - -Item { -} diff --git a/resources/qml/Governikus/Style/+mobile/+android/BrandColors.qml b/resources/qml/Governikus/Style/+mobile/+android/BrandColors.qml new file mode 100644 index 0000000..1988191 --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/+android/BrandColors.qml @@ -0,0 +1,8 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQml 2.10 + +QtObject { +} diff --git a/resources/qml/Governikus/Style/+mobile/+android/BrandDimensions.qml b/resources/qml/Governikus/Style/+mobile/+android/BrandDimensions.qml new file mode 100644 index 0000000..2414bbb --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/+android/BrandDimensions.qml @@ -0,0 +1,19 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import Governikus.Global 1.0 + +QtObject { + readonly property int corner_radius: 20 + readonly property int corner_radius_popup: 2 + + readonly property int button_height: 36 + readonly property int menubar_width: 64 + + readonly property int title_font_size: 22 + readonly property int header_font_size: 20 + readonly property int normal_font_size: 16 + readonly property int hint_font_size: 14 +} diff --git a/resources/qml/Governikus/Style/+mobile/+android/PlatformTextStyles.qml b/resources/qml/Governikus/Style/+mobile/+android/PlatformTextStyles.qml new file mode 100644 index 0000000..60874d2 --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/+android/PlatformTextStyles.qml @@ -0,0 +1,23 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +QtObject { + readonly property var tutorial_title: TextStyle { + textSize: Style.dimens.tutorial_title_font_size + } + readonly property var tutorial_header: TextStyle { + textSize: Style.dimens.tutorial_header_font_size + textFamily: "Noto Serif" + } + readonly property var tutorial_header_secondary: TextStyle { + textSize: Style.dimens.header_font_size + textFamily: "Noto Serif" + } + readonly property var tutorial_content: TextStyle { + textSize: Style.dimens.normal_font_size + textFamily: "Noto Serif" + } +} diff --git a/resources/qml/Governikus/Style/+mobile/+android/ProviderStyle.qml b/resources/qml/Governikus/Style/+mobile/+android/ProviderStyle.qml deleted file mode 100644 index 5876377..0000000 --- a/resources/qml/Governikus/Style/+mobile/+android/ProviderStyle.qml +++ /dev/null @@ -1,35 +0,0 @@ -pragma Singleton - -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Item { - // Provider category list properties - readonly property int categoryFontPixelSize: Constants.titlebar_font_size - readonly property bool categoryFontBold: true - readonly property color categoryColor: Constants.accent_color - readonly property int leftIconMargin: Utils.dp(10) - readonly property int leftProviderListMargin: Utils.dp(20) - readonly property bool showCategoryRightArrow: false - - // Provider list item properties - readonly property int itemLeftMargin: Utils.dp(15) - readonly property color subjectTextColor: Constants.secondary_text - readonly property bool subjectTextFontBold: true - readonly property int addressTextFontSize: Utils.dp(12) - readonly property color addressTextColor: Constants.accent_color - readonly property double infoItemWidthFactor: 4.0 - - readonly property int providerListItemTopMargin: Utils.dp(0) - readonly property int providerListItemRightMargin: Utils.dp(0) - readonly property int providerListItemBottomMargin: Utils.dp(0) - - readonly property bool providerListItemsHaveBorder: true - - readonly property bool providerListDetailsLinkBold: true - readonly property color providerListDetailsLinkBorder: Constants.grey_light - readonly property color providerListDetailsLinkColor: Constants.primary_text - readonly property color providerListDetailsLinkBackground: Constants.grey_light - readonly property string providerListDetailsLinkPosition: "top" -} diff --git a/resources/qml/Governikus/Style/+mobile/+ios/BrandColors.qml b/resources/qml/Governikus/Style/+mobile/+ios/BrandColors.qml new file mode 100644 index 0000000..1988191 --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/+ios/BrandColors.qml @@ -0,0 +1,8 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQml 2.10 + +QtObject { +} diff --git a/resources/qml/Governikus/Style/+mobile/+ios/BrandDimensions.qml b/resources/qml/Governikus/Style/+mobile/+ios/BrandDimensions.qml new file mode 100644 index 0000000..db2bfcb --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/+ios/BrandDimensions.qml @@ -0,0 +1,30 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Window 2.2 +import Governikus.Global 1.0 + +QtObject { + readonly property int corner_radius: 10 + readonly property int corner_radius_popup: corner_radius + + readonly property int button_height: 40 + readonly property int tabbar_height: 49 + readonly property int searchbar_height: 48 + + readonly property int title_font_size: scaleText(22) + readonly property int header_font_size: scaleText(20) + readonly property int normal_font_size: scaleText(16) + readonly property int hint_font_size: scaleText(14) + + // Scale the text on small devices like the iPhone SE + function scaleText(value) { + var w = Screen.width + if (w > 415) { + return value + } + return value * w / 415 + } +} diff --git a/resources/qml/Governikus/Style/+mobile/+ios/PlatformTextStyles.qml b/resources/qml/Governikus/Style/+mobile/+ios/PlatformTextStyles.qml new file mode 100644 index 0000000..77378f3 --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/+ios/PlatformTextStyles.qml @@ -0,0 +1,23 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +QtObject { + readonly property var tutorial_title: TextStyle { + textSize: Style.dimens.tutorial_title_font_size + } + readonly property var tutorial_header: TextStyle { + textSize: Style.dimens.tutorial_header_font_size + textFamily: "Charter" + } + readonly property var tutorial_header_secondary: TextStyle { + textSize: Style.dimens.header_font_size + textFamily: "Charter" + } + readonly property var tutorial_content: TextStyle { + textSize: Style.dimens.normal_font_size + textFamily: "Charter" + } +} diff --git a/resources/qml/Governikus/Style/+mobile/+ios/ProviderStyle.qml b/resources/qml/Governikus/Style/+mobile/+ios/ProviderStyle.qml deleted file mode 100644 index 1e256ef..0000000 --- a/resources/qml/Governikus/Style/+mobile/+ios/ProviderStyle.qml +++ /dev/null @@ -1,35 +0,0 @@ -pragma Singleton - -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Item { - // Provider category list properties - readonly property int categoryFontPixelSize: Constants.normal_font_size - readonly property bool categoryFontBold: false - readonly property color categoryColor: Constants.accent_color - readonly property int leftIconMargin: Utils.dp(0) - readonly property int leftProviderListMargin: Utils.dp(0) - readonly property bool showCategoryRightArrow: true - - // Provider list item properties - readonly property int itemLeftMargin: Utils.dp(5) - readonly property color subjectTextColor: "#000000" // default color, which is? - readonly property bool subjectTextFontBold: false - readonly property int addressTextFontSize: Utils.dp(11) - readonly property color addressTextColor: Constants.blue_dark - readonly property double infoItemWidthFactor: 2.0 - - readonly property int providerListItemTopMargin: Utils.dp(2) - readonly property int providerListItemRightMargin: Utils.dp(5) - readonly property int providerListItemBottomMargin: Utils.dp(5) - - readonly property bool providerListItemsHaveBorder: true - - readonly property bool providerListDetailsLinkBold: false - readonly property color providerListDetailsLinkBorder: Constants.blue_dark - readonly property color providerListDetailsLinkColor: Constants.blue_dark - readonly property color providerListDetailsLinkBackground: "#ffffff" - readonly property string providerListDetailsLinkPosition: "middle" -} diff --git a/resources/qml/Governikus/Style/+mobile/PlatformColors.qml b/resources/qml/Governikus/Style/+mobile/PlatformColors.qml new file mode 100644 index 0000000..b1ddf3f --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/PlatformColors.qml @@ -0,0 +1,31 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +BrandColors { + readonly property color border: "#ebebeb" + readonly property color border_dark: "#dadada" + + readonly property color background: "#dcebf6" + readonly property color background_popup: "#ffffff" + readonly property color background_pane: "#ffffff" + + readonly property color accent: "#659bcd" + readonly property color accent_disabled: "#d0d0d0" + + readonly property color primary_text: "#333333" + readonly property color primary_text_inverse: "#ffffff" + readonly property color secondary_text: "#666666" + readonly property color secondary_text_inverse: "#dadada" + readonly property color warning_text: "#cc0000" + readonly property color button_text: "#ffffff" + + readonly property color tutorial_what: "#f9a501" + readonly property color tutorial_where: "#73d7b3" + readonly property color tutorial_how: "#659bcd" + readonly property color tutorial_important: "#fb7a59" + readonly property color tutorial_box_background: "#f2f2f2" + + readonly property color card_reader: "#444445" + readonly property color id_card: "#77add7" +} diff --git a/resources/qml/Governikus/Style/+mobile/PlatformDimensions.qml b/resources/qml/Governikus/Style/+mobile/PlatformDimensions.qml new file mode 100644 index 0000000..b2cd21e --- /dev/null +++ b/resources/qml/Governikus/Style/+mobile/PlatformDimensions.qml @@ -0,0 +1,25 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQml 2.10 +import Governikus.Global 1.0 + +BrandDimensions { + readonly property int button_radius: 3 + readonly property int separator_size: 1 + readonly property int list_item_height: 64 + readonly property int scrollbar_padding: 5 + readonly property int tutorial_component_spacing: 40 + + readonly property int titlebar_height: 48 + readonly property int titlebar_padding: 8 + + readonly property real max_text_width: 500 + + readonly property int small_icon_size: 24 + readonly property int icon_size: 48 + + readonly property int tutorial_title_font_size: 60 + readonly property int tutorial_header_font_size: 26 +} diff --git a/resources/qml/Governikus/Style/Colors.qml b/resources/qml/Governikus/Style/Colors.qml new file mode 100644 index 0000000..1637926 --- /dev/null +++ b/resources/qml/Governikus/Style/Colors.qml @@ -0,0 +1,8 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + + +PlatformColors { + readonly property color transparent: "transparent" +} diff --git a/resources/qml/Governikus/Style/Dimensions.qml b/resources/qml/Governikus/Style/Dimensions.qml new file mode 100644 index 0000000..0b0e2fd --- /dev/null +++ b/resources/qml/Governikus/Style/Dimensions.qml @@ -0,0 +1,7 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +PlatformDimensions { + readonly property real minimumScrollBarSize: 0.05 +} diff --git a/resources/qml/Governikus/Style/NpaBusyIndicatorStyle.qml b/resources/qml/Governikus/Style/NpaBusyIndicatorStyle.qml index 69a6ded..3e1281a 100644 --- a/resources/qml/Governikus/Style/NpaBusyIndicatorStyle.qml +++ b/resources/qml/Governikus/Style/NpaBusyIndicatorStyle.qml @@ -1,8 +1,13 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQml 2.2 import QtGraphicalEffects 1.0 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { property real factor: 1.1 @@ -44,7 +49,7 @@ import Governikus.Global 1.0 height: parent.height * factor width: height radius: width / 2 - color: Constants.background_color + color: Style.color.background opacity: 0 Behavior on opacity { @@ -73,8 +78,8 @@ import Governikus.Global 1.0 { GradientStop {color: Constants.green; position: 0.0} GradientStop {color: Constants.green; position: 0.50} - GradientStop {color: "transparent"; position: 0.5000000000000001} - GradientStop {color: "transparent"; position: 1.0} + GradientStop {color: Style.color.transparent; position: 0.5000000000000001} + GradientStop {color: Style.color.transparent; position: 1.0} } Behavior on rotation { NumberAnimation { duration: timer.interval; easing.type: Easing.InOutQuad } @@ -89,8 +94,8 @@ import Governikus.Global 1.0 opacity: rect.opacity gradient: Gradient { - GradientStop {color: "transparent"; position: 0.0} - GradientStop {color: "transparent"; position: 0.50} + GradientStop {color: Style.color.transparent; position: 0.0} + GradientStop {color: Style.color.transparent; position: 0.50} GradientStop {color: rect.color; position: 0.5000000000000001} GradientStop {color: Constants.blue; position: 1.0} } diff --git a/resources/qml/Governikus/Style/Style.qml b/resources/qml/Governikus/Style/Style.qml new file mode 100644 index 0000000..19970c0 --- /dev/null +++ b/resources/qml/Governikus/Style/Style.qml @@ -0,0 +1,13 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +pragma Singleton + +import QtQml 2.10 + +QtObject { + property var text: TextStyles {} + property var color: Colors {} + property var dimens: Dimensions {} +} diff --git a/resources/qml/Governikus/Style/TextStyle.qml b/resources/qml/Governikus/Style/TextStyle.qml new file mode 100644 index 0000000..4002b28 --- /dev/null +++ b/resources/qml/Governikus/Style/TextStyle.qml @@ -0,0 +1,13 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +QtObject { + property color textColor: Style.color.primary_text + property int textSize: Style.dimens.normal_font_size + + /// An empty string means "unspecified" + property string textFamily +} diff --git a/resources/qml/Governikus/Style/TextStyles.qml b/resources/qml/Governikus/Style/TextStyles.qml new file mode 100644 index 0000000..35cea28 --- /dev/null +++ b/resources/qml/Governikus/Style/TextStyles.qml @@ -0,0 +1,115 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +PlatformTextStyles { + + readonly property var title: TextStyle { + textSize: Style.dimens.title_font_size + } + + readonly property var title_secondary: TextStyle { + textSize: Style.dimens.title_font_size + textColor: Style.color.secondary_text + } + + readonly property var title_accent: TextStyle { + textSize: Style.dimens.title_font_size + textColor: Style.color.accent + } + + readonly property var title_warning: TextStyle { + textSize: Style.dimens.title_font_size + textColor: Style.color.warning_text + } + + readonly property var header: TextStyle { + textSize: Style.dimens.header_font_size + } + + readonly property var header_inverse: TextStyle { + textSize: Style.dimens.header_font_size + textColor: Style.color.primary_text_inverse + } + + readonly property var header_secondary: TextStyle { + textSize: Style.dimens.header_font_size + textColor: Style.color.secondary_text + } + + readonly property var header_secondary_inverse: TextStyle { + textSize: Style.dimens.header_font_size + textColor: Style.color.secondary_text_inverse + } + + readonly property var header_accent: TextStyle { + textSize: Style.dimens.header_font_size + textColor: Style.color.accent + } + + readonly property var header_warning: TextStyle { + textSize: Style.dimens.header_font_size + textColor: Style.color.warning_text + } + + readonly property var normal: TextStyle {} + + readonly property var normal_inverse: TextStyle { + textColor: Style.color.primary_text_inverse + } + + readonly property var normal_secondary: TextStyle { + textColor: Style.color.secondary_text + } + + readonly property var normal_secondary_inverse: TextStyle { + textColor: Style.color.secondary_text_inverse + } + + readonly property var normal_accent: TextStyle { + textColor: Style.color.accent + } + + readonly property var normal_warning: TextStyle { + textColor: Style.color.warning_text + } + + readonly property var hint: TextStyle { + textSize: Style.dimens.hint_font_size + } + + readonly property var hint_inverse: TextStyle { + textSize: Style.dimens.hint_font_size + textColor: Style.color.primary_text_inverse + } + + readonly property var hint_secondary: TextStyle { + textSize: Style.dimens.hint_font_size + textColor: Style.color.secondary_text + } + + readonly property var hint_secondary_inverse: TextStyle { + textSize: Style.dimens.hint_font_size + textColor: Style.color.secondary_text_inverse + } + + readonly property var hint_accent: TextStyle { + textSize: Style.dimens.hint_font_size + textColor: Style.color.accent + } + + readonly property var hint_warning: TextStyle { + textSize: Style.dimens.hint_font_size + textColor: Style.color.warning_text + } + + readonly property var button: TextStyle { + textColor: Style.color.button_text + } + + readonly property var button_disabled: TextStyle { + textColor: Style.color.secondary_text_inverse + } +} diff --git a/resources/qml/Governikus/Style/qmldir b/resources/qml/Governikus/Style/qmldir index 4deea53..9950fbd 100644 --- a/resources/qml/Governikus/Style/qmldir +++ b/resources/qml/Governikus/Style/qmldir @@ -1,5 +1,15 @@ module Style -singleton ProviderStyle 1.0 ProviderStyle.qml +internal BrandColors BrandColors.qml +internal BrandDimensions BrandDimensions.qml +internal Colors Colors.qml +internal PlatformColors PlatformColors.qml +internal TextStyles TextStyles.qml +internal PlatformTextStyles PlatformTextStyles.qml +internal Dimensions Dimensions.qml +internal PlatformDimensions PlatformDimensions.qml + +singleton Style 1.0 Style.qml NpaBusyIndicatorStyle 1.0 NpaBusyIndicatorStyle.qml +TextStyle 1.0 TextStyle.qml diff --git a/resources/qml/Governikus/TechnologyInfo/+ios/TechnologySwitch.qml b/resources/qml/Governikus/TechnologyInfo/+ios/TechnologySwitch.qml deleted file mode 100644 index 98aaddd..0000000 --- a/resources/qml/Governikus/TechnologyInfo/+ios/TechnologySwitch.qml +++ /dev/null @@ -1,35 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 -import Governikus.Type.ReaderPlugIn 1.0 - -Rectangle { - id: baseItem - height: technologyRow.height - color: Constants.background_color - - signal requestPluginType(int pReaderPlugInType) - - property int selectedTechnology - - Row { - id: technologyRow - spacing: Utils.dp(20) - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter - - TechnologySwitchButton { - buttonActive: selectedTechnology !== ReaderPlugIn.REMOTE - onClicked: baseItem.requestPluginType(ReaderPlugIn.REMOTE) - imageSource: "qrc:///images/icon_remote.svg" - text: qsTr("Use WiFi card reader instead
    of Bluetooth card reader") + settingsModel.translationTrigger - } - - TechnologySwitchButton { - buttonActive: selectedTechnology !== ReaderPlugIn.BLUETOOTH - onClicked: baseItem.requestPluginType(ReaderPlugIn.BLUETOOTH) - imageSource: "qrc:///images/icon_bluetooth.svg" - text: qsTr("Use Bluetooth card reader instead
    of remote card reader") + settingsModel.translationTrigger - } - } -} diff --git a/resources/qml/Governikus/TechnologyInfo/TechnologyInfo.qml b/resources/qml/Governikus/TechnologyInfo/+mobile/TechnologyInfo.qml similarity index 79% rename from resources/qml/Governikus/TechnologyInfo/TechnologyInfo.qml rename to resources/qml/Governikus/TechnologyInfo/+mobile/TechnologyInfo.qml index 98597f0..e62fe21 100644 --- a/resources/qml/Governikus/TechnologyInfo/TechnologyInfo.qml +++ b/resources/qml/Governikus/TechnologyInfo/+mobile/TechnologyInfo.qml @@ -1,6 +1,12 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 import Governikus.Type.NumberModel 1.0 @@ -14,18 +20,20 @@ Item { signal enableClicked() - Text { + GText { id: enableInfo + + visible: !!text anchors.bottom: enableButton.top - anchors.bottomMargin: Constants.component_spacing + anchors.margins: Constants.component_spacing anchors.left: parent.left anchors.right: parent.right + + Accessible.name: ApplicationModel.stripHtmlTags(text) + verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.normal_font_size - color: Constants.red - wrapMode: Text.WordWrap - visible: !!text + textStyle: Style.text.normal_warning Behavior on text { SequentialAnimation { @@ -44,15 +52,17 @@ Item { onClicked: parent.enableClicked() } - Text { + GText { id: title + + visible: !enableInfo.visible && !enableButton.visible anchors.bottom: parent.verticalCenter anchors.bottomMargin: Constants.component_spacing anchors.horizontalCenter: parent.horizontalCenter - font.pixelSize: Constants.header_font_size - font.weight: Font.Bold - color: Constants.blue - visible: !enableInfo.visible && !enableButton.visible + + Accessible.name: ApplicationModel.stripHtmlTags(text) + + textStyle: Style.text.header_accent Behavior on text { SequentialAnimation { @@ -71,26 +81,27 @@ Item { } } - Text { + GText { id: subTitle + + visible: !enableInfo.visible && !enableButton.visible anchors.left: parent.left anchors.top: title.bottom anchors.right: parent.right anchors.bottom: enableButton.top + + Accessible.name: ApplicationModel.stripHtmlTags(text) + horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignTop - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - wrapMode: Text.WordWrap - visible: !enableInfo.visible && !enableButton.visible - + textStyle: Style.text.normal_secondary Behavior on text { SequentialAnimation { PropertyAnimation { target: subTitle; property: "opacity"; to: 0; duration: 500} PropertyAction { target: subTitle; property: "text" } PropertyAnimation { target: subTitle; property: "opacity"; to: 1.0; duration: 500 } - PropertyAction { target: subTitle; property: "color"; value: NumberModel.hasError ? Constants.red : Constants.secondary_text } + PropertyAction { target: subTitle; property: "color"; value: NumberModel.hasError ? Style.color.warning_text : Style.color.secondary_text } } } } diff --git a/resources/qml/Governikus/TechnologyInfo/+android/TechnologySwitch.qml b/resources/qml/Governikus/TechnologyInfo/+mobile/TechnologySwitch.qml similarity index 69% rename from resources/qml/Governikus/TechnologyInfo/+android/TechnologySwitch.qml rename to resources/qml/Governikus/TechnologyInfo/+mobile/TechnologySwitch.qml index a62f492..f8ec4f1 100644 --- a/resources/qml/Governikus/TechnologyInfo/+android/TechnologySwitch.qml +++ b/resources/qml/Governikus/TechnologyInfo/+mobile/TechnologySwitch.qml @@ -1,12 +1,18 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ReaderPlugIn 1.0 -Rectangle { + +Item { id: baseItem height: technologyRow.height - color: Constants.background_color signal requestPluginType(int pReaderPlugInType) @@ -14,7 +20,7 @@ Rectangle { Row { id: technologyRow - spacing: Utils.dp(20) + spacing: 20 anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter @@ -22,21 +28,24 @@ Rectangle { buttonActive: selectedTechnology !== ReaderPlugIn.NFC onClicked: baseItem.requestPluginType(ReaderPlugIn.NFC) imageSource: "qrc:///images/icon_nfc.svg" - text: qsTr("NFC") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("NFC") + SettingsModel.translationTrigger } TechnologySwitchButton { buttonActive: selectedTechnology !== ReaderPlugIn.REMOTE onClicked: baseItem.requestPluginType(ReaderPlugIn.REMOTE) imageSource: "qrc:///images/icon_remote.svg" - text: qsTr("WiFi") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("WiFi") + SettingsModel.translationTrigger } TechnologySwitchButton { buttonActive: selectedTechnology !== ReaderPlugIn.BLUETOOTH onClicked: baseItem.requestPluginType(ReaderPlugIn.BLUETOOTH) imageSource: "qrc:///images/icon_bluetooth.svg" - text: qsTr("Bluetooth") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Bluetooth") + SettingsModel.translationTrigger } } } diff --git a/resources/qml/Governikus/TechnologyInfo/TechnologySwitchButton.qml b/resources/qml/Governikus/TechnologyInfo/+mobile/TechnologySwitchButton.qml similarity index 67% rename from resources/qml/Governikus/TechnologyInfo/TechnologySwitchButton.qml rename to resources/qml/Governikus/TechnologyInfo/+mobile/TechnologySwitchButton.qml index fa33b93..ba5b888 100644 --- a/resources/qml/Governikus/TechnologyInfo/TechnologySwitchButton.qml +++ b/resources/qml/Governikus/TechnologyInfo/+mobile/TechnologySwitchButton.qml @@ -1,38 +1,51 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 import Governikus.Global 1.0 +import Governikus.Style 1.0 MouseArea { + id: root + property alias imageSource: img.source property alias text: infoText.text property bool buttonActive height: img.height + infoText.height + 2 * img.anchors.topMargin + infoText.anchors.topMargin - width: img.width + 2 * Utils.dp(10) + width: img.width + 2 * 10 - Rectangle { - height: 1 + Accessible.role: Accessible.Button + Accessible.name: text + Accessible.onPressAction: if (Qt.platform.os === "ios") clicked(null) + + GSeparator { width: parent.width * 1.5 anchors.horizontalCenter: parent.horizontalCenter - color: Constants.grey + color: Style.color.border_dark } Image { id: img anchors.top: parent.top - anchors.topMargin: Utils.dp(20) + anchors.topMargin: 20 anchors.horizontalCenter: parent.horizontalCenter - height: Utils.dp(50) + sourceSize.height: 50 fillMode: Image.PreserveAspectFit smooth: true } - Text { + GText { id: infoText + anchors.top: img.bottom - anchors.topMargin: Utils.dp(10) + anchors.topMargin: 10 anchors.horizontalCenter: img.horizontalCenter - font.pixelSize: Constants.normal_font_size - color: Constants.blue + + Accessible.ignored: true + + textStyle: Style.text.normal_accent } Colorize { id: grayLevel diff --git a/resources/qml/Governikus/TitleBar/+desktop/CancelAction.qml b/resources/qml/Governikus/TitleBar/+desktop/CancelAction.qml index 4e29099..d8e281c 100644 --- a/resources/qml/Governikus/TitleBar/+desktop/CancelAction.qml +++ b/resources/qml/Governikus/TitleBar/+desktop/CancelAction.qml @@ -1,9 +1,15 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 Button { @@ -11,7 +17,7 @@ Button { visible: ApplicationModel.currentWorkflow !== "" Accessible.role: Accessible.Button - Accessible.name: qsTr("Cancel") + Accessible.name: qsTr("Cancel") + SettingsModel.translationTrigger background: Row { id: row @@ -31,23 +37,30 @@ Button { id: text height: sizeBase.height width: sizeBase.width - readonly property Text sizeBase: Text { - font.weight: Font.Bold - font.pixelSize: Constants.titlebar_font_size - text: qsTr("Cancel") + settingsModel.translationTrigger + readonly property GText sizeBase: GText { + text: qsTr("Cancel") + SettingsModel.translationTrigger + textStyle: Style.text.header + font.bold: true } FocusFrame { scope: button } - Text { + GText { anchors.centerIn: parent - color: Constants.white - font.weight: Font.Bold - font.pixelSize: Constants.titlebar_font_size * (button.down ? 0.9 : 1) + text: text.sizeBase.text + textStyle: Style.text.header + font.bold: true + font.pixelSize: Style.text.header.textSize * (button.down ? 0.9 : 1) } } } + + MouseArea { + cursorShape: Qt.PointingHandCursor + anchors.fill: parent + onPressed: mouse.accepted = false + } } diff --git a/resources/qml/Governikus/TitleBar/+desktop/Notifications.qml b/resources/qml/Governikus/TitleBar/+desktop/Notifications.qml new file mode 100644 index 0000000..b67976a --- /dev/null +++ b/resources/qml/Governikus/TitleBar/+desktop/Notifications.qml @@ -0,0 +1,113 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.NotificationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + + +Item { + id: baseItem + + visible: SettingsModel.showInAppNotifications + + readonly property string icon: { + if (d.unreadMsg) { + if (NotificationModel.lastType === "developermode") return "qrc:///images/desktop/bell_red.svg" + if (NotificationModel.lastType === "feedback") return "qrc:///images/desktop/bell_green.svg" + } + return "qrc:///images/desktop/bell_white.svg" + } + signal newNotification() + function toggle() { + if (!fadingAnimation.running) d.fadeIn = !d.fadeIn + if (d.fadeIn) { + logEntryList.positionViewAtEnd() + d.unreadMsg = false + } + } + + QtObject { + id: d + + property bool fadeIn: false + property bool unreadMsg: false + } + + Connections { + target: NotificationModel + onRowsInserted: { + if (!d.fadeIn) d.unreadMsg = true + baseItem.newNotification() + } + } + + Rectangle { + id: logList + + height: ApplicationModel.scaleFactor * 200 + width: ApplicationModel.scaleFactor * 800 + + anchors.right: parent.right + anchors.rightMargin: -radius + anchors.bottom: parent.bottom + anchors.bottomMargin: d.fadeIn ? radius - height : 0 + + radius: logEntryList.spacing + border.color: Constants.blue + border.width: Math.max(1, ApplicationModel.scaleFactor * 3) + color: Qt.lighter(Constants.blue, 1.15) + + Behavior on anchors.bottomMargin { + PropertyAnimation { + id: fadingAnimation + duration: Constants.animation_duration + easing.type: Easing.InOutQuad + } + } + + MouseArea { + anchors.fill: parent + } + + ListView { + id: logEntryList + + anchors.fill: parent + anchors.margins: spacing + anchors.rightMargin: 2 * spacing + + clip: true + spacing: ApplicationModel.scaleFactor * 10 + model: NotificationModel + delegate: Row { + spacing: logEntryList.spacing + + GText { + id: notificationTime + + text: model.time + } + + GText { + width: logEntryList.width - notificationTime.width - spacing + + text: model.text + textStyle: model.type === "developermode" ? Style.text.normal_warning : Style.text.normal + + onLinkActivated: Qt.openUrlExternally(link) + } + } + + ScrollBar.vertical: ScrollBar { + policy: ScrollBar.AlwaysOn + } + } + } +} diff --git a/resources/qml/Governikus/TitleBar/+desktop/TitleBar.qml b/resources/qml/Governikus/TitleBar/+desktop/TitleBar.qml index 31332a0..7751d39 100644 --- a/resources/qml/Governikus/TitleBar/+desktop/TitleBar.qml +++ b/resources/qml/Governikus/TitleBar/+desktop/TitleBar.qml @@ -1,21 +1,24 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 Item { id: titleBar - height: actionRow.height + 2 * Constants.titlebar_padding - - focus: true - KeyNavigation.tab: rootAction + height: actionRow.height + 2 * Style.dimens.titlebar_padding Accessible.role: Accessible.Grouping - Accessible.name: qsTr("Titlebar") - Accessible.description: qsTr("This bar represents the navigation tree of the AusweisApp2.") - - property Item navSuccessor: null + Accessible.name: qsTr("Titlebar") + SettingsModel.translationTrigger + Accessible.description: qsTr("This bar represents the navigation tree of the AusweisApp2.") + SettingsModel.translationTrigger + activeFocusOnTab: true property var contentRoot signal rootClicked(); @@ -24,7 +27,6 @@ Item { function updateActions() { actionRow.children = [rootAction] - rootAction.KeyNavigation.tab = rightTitleBarActions.children[0] addRecursive(contentRoot) } @@ -33,19 +35,20 @@ Item { var child = root.children[i] if (child.sectionPageTypeMarker && child.visible) { if (child.titleBarAction) { - addAction(child.titleBarAction) + actionRow.children.push(child.titleBarAction) } addRecursive(child) } } } - function addAction(newAction) { - rightMostAction.KeyNavigation.tab = newAction + Notifications { + id: notifications - actionRow.children.push(newAction) - newAction.customSubAction.KeyNavigation.tab = settingsButton - newAction.KeyNavigation.tab = rightTitleBarActions.children[0] + anchors.right: parent.right + anchors.top: parent.bottom + + onNewNotification: notifyButton.notify() } Rectangle @@ -53,28 +56,33 @@ Item { anchors.fill: parent color: Constants.blue + FocusPoint { + scope: titleBar + } + Row { id: actionRow height: rootAction.height anchors.left: parent.left - anchors.leftMargin: Constants.titlebar_padding + anchors.leftMargin: Style.dimens.titlebar_padding anchors.verticalCenter: parent.verticalCenter - spacing: Constants.titlebar_spacing + spacing: Style.dimens.titlebar_padding readonly property Item lastAction: children && children.length > 0 ? children[children.length - 1] : rootAction TitleBarAction { id: rootAction - showArrow: false - text: qsTr("Start") - onClicked: titleBar.rootClicked() - Component.onCompleted: { - rootAction.customSubAction.KeyNavigation.tab = settingsButton - rootAction.KeyNavigation.tab = rightTitleBarActions.children[0] - } + activeFocusOnTab: true + + showArrow: false + //: LABEL DESKTOP_QML + text: qsTr("Start") + SettingsModel.translationTrigger + enabled: rightMostAction.rootEnabled + + onClicked: titleBar.rootClicked() } } @@ -84,13 +92,14 @@ Item { anchors.right: parent.right anchors.top: parent.top anchors.bottom: parent.bottom - anchors.margins: Constants.titlebar_padding - spacing: Constants.titlebar_spacing + anchors.margins: Style.dimens.titlebar_padding + spacing: Style.dimens.titlebar_padding children: [ rightMostAction.customSubAction, settingsButton, - helpButton + helpButton, + notifyButton ] TitleBarButton { @@ -100,8 +109,8 @@ Item { source: "qrc:///images/desktop/settings_icon.svg" visible: rightMostAction.showSettings - KeyNavigation.tab: helpButton - Accessible.name: qsTr("Settings") + activeFocusOnTab: true + Accessible.name: qsTr("Settings") + SettingsModel.translationTrigger onClicked: rightMostAction.settingsHandler() } @@ -110,13 +119,26 @@ Item { id: helpButton height: rightTitleBarActions.height - source: "qrc:///images/desktop/help_icon.svg" + source: "qrc:///images/desktop/info_manual.svg" visible: rightMostAction.showHelp - KeyNavigation.tab: titleBar.navSuccessor - Accessible.name: qsTr("Help") + activeFocusOnTab: true + Accessible.name: qsTr("Help") + SettingsModel.translationTrigger - onClicked: qmlExtension.openOnlineHelp(rightMostAction.helpTopic) + onClicked: ApplicationModel.openOnlineHelp(rightMostAction.helpTopic) + } + + TitleBarButton { + id: notifyButton + + height: rightTitleBarActions.height + source: notifications.icon + visible: SettingsModel.showInAppNotifications + + activeFocusOnTab: true + Accessible.name: qsTr("Notifications") + SettingsModel.translationTrigger + + onClicked: notifications.toggle() } } } diff --git a/resources/qml/Governikus/TitleBar/+desktop/TitleBarAction.qml b/resources/qml/Governikus/TitleBar/+desktop/TitleBarAction.qml index 930b168..26a5cfb 100644 --- a/resources/qml/Governikus/TitleBar/+desktop/TitleBarAction.qml +++ b/resources/qml/Governikus/TitleBar/+desktop/TitleBarAction.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.View 1.0 FocusScope { @@ -16,17 +21,18 @@ FocusScope { property Item customSubAction: Item { visible: false } - property bool showSettings: true + property bool rootEnabled: true + + property bool showSettings: false property var customSettingsHandler - readonly property var settingsHandler: customSettingsHandler ? customSettingsHandler : function() { - // TODO open settings - } + readonly property var settingsHandler: customSettingsHandler ? customSettingsHandler : function() {} property bool showHelp: true property string helpTopic: "applicationPage" Accessible.role: Accessible.Button Accessible.name: text.text + activeFocusOnTab: true Keys.onSpacePressed: scope.clicked() @@ -34,7 +40,7 @@ FocusScope { id: row height: text.height - spacing: Constants.titlebar_spacing + spacing: Style.dimens.titlebar_padding Image { id: arrow @@ -50,6 +56,8 @@ FocusScope { Accessible.role: Accessible.Button Accessible.name: text.text + color: scope.enabled ? Constants.white : Constants.lightgrey + FocusFrame { scope: scope } diff --git a/resources/qml/Governikus/TitleBar/+desktop/TitleBarButton.qml b/resources/qml/Governikus/TitleBar/+desktop/TitleBarButton.qml index 6b15c1a..55b679f 100644 --- a/resources/qml/Governikus/TitleBar/+desktop/TitleBarButton.qml +++ b/resources/qml/Governikus/TitleBar/+desktop/TitleBarButton.qml @@ -1,22 +1,75 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 +import Governikus.Global 1.0 import Governikus.View 1.0 +import Governikus.Type.NotificationModel 1.0 Button { id: button - width: height - enabled: visible + property alias source: image.source + function notify() { + blinkerAnimation.start() + } + + width: height Accessible.role: Accessible.Button - FocusFrame {} - + enabled: visible background: Image { id: image + + height: button.height * (button.down ? 0.9 : 1) + width: height + anchors.centerIn: parent - sourceSize.height: button.height * (button.down ? 0.9 : 1) + + sourceSize.height: height + sourceSize.width: width + + Rectangle { + id: blinker + + anchors.fill: parent + anchors.margins: image.height / -4 + + opacity: 0 + radius: height / 4 + color: NotificationModel.lastType === "developermode" ? Constants.red : Constants.green + + SequentialAnimation { + id: blinkerAnimation + + loops: 3 + + PropertyAnimation { target: blinker; property: "opacity"; from: 0; to: 0.5; duration: 300 } + PropertyAnimation { target: blinker; property: "opacity"; from: 0.5; to: 0; duration: 300 } + } + } + } + + FocusFrame {} + + MouseArea { + id: mouseArea + + anchors.fill: parent + cursorShape: Qt.PointingHandCursor + onPressed: mouse.accepted = false + hoverEnabled: true + } + + ToolTip { + visible: mouseArea.containsMouse + + text: parent.Accessible.name + delay: 500 } } diff --git a/resources/qml/Governikus/TitleBar/+desktop/TitleBarText.qml b/resources/qml/Governikus/TitleBar/+desktop/TitleBarText.qml index c062662..9816371 100644 --- a/resources/qml/Governikus/TitleBar/+desktop/TitleBarText.qml +++ b/resources/qml/Governikus/TitleBar/+desktop/TitleBarText.qml @@ -1,9 +1,13 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 GText { - color: Constants.white - font.weight: Font.Bold - font.pixelSize: Constants.titlebar_font_size + textStyle: Style.text.header + font.bold: true } diff --git a/resources/qml/Governikus/TitleBar/+mobile/+android/Hamburger.qml b/resources/qml/Governikus/TitleBar/+mobile/+android/Hamburger.qml index 0009768..f4e0c33 100644 --- a/resources/qml/Governikus/TitleBar/+mobile/+android/Hamburger.qml +++ b/resources/qml/Governikus/TitleBar/+mobile/+android/Hamburger.qml @@ -1,13 +1,22 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import Governikus.Global 1.0 +import Governikus.Type.SettingsModel 1.0 import QtQuick 2.10 Item { id: baseItem - width: height + + implicitWidth: height visible: state !== "hidden" + Accessible.role: Accessible.Button + Accessible.name: qsTr("Show navigation") + SettingsModel.translationTrigger + Item { id: content anchors.centerIn: parent @@ -51,6 +60,13 @@ Item { } states: [ + State { + // While creating this state seems unnecessary because it's also implicitly defined, it's needed to avoid a + // bug where the Animation hangs and overrides the "" state properties with those of the "back" state. This + // can be seen when selecting "Quit Tutorial" from "TutorialReaderMethodNfc" (or any other subview of the + // tutorial) on Android. + name: "" + }, State { id: backState name: "back" @@ -82,6 +98,11 @@ Item { y: content.height / 2 + backState.delta0 - backState.delta1 width: backState.itemArrowWidth } + + PropertyChanges { + target: baseItem + Accessible.name: qsTr("Back") + SettingsModel.translationTrigger + } }, State { @@ -114,6 +135,11 @@ Item { y: content.height - cancelState.delta0 width: cancelState.delta1 } + + PropertyChanges { + target: baseItem + Accessible.name: qsTr("Cancel") + SettingsModel.translationTrigger + } } ] diff --git a/resources/qml/Governikus/TitleBar/+mobile/+android/TitleBar.qml b/resources/qml/Governikus/TitleBar/+mobile/+android/TitleBar.qml index 42ebdfa..73e87ec 100644 --- a/resources/qml/Governikus/TitleBar/+mobile/+android/TitleBar.qml +++ b/resources/qml/Governikus/TitleBar/+mobile/+android/TitleBar.qml @@ -1,131 +1,62 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 -import Governikus.Type.StatusBarUtil 1.0 +import Governikus.Style 1.0 +Item { + id: baseItem -Item -{ - property int duration: 300 - property alias titleBarOpacity: background.opacity - id: titleBar - height: Constants.titlebar_height + property alias titleBarOpacity: titleBar.titleBarOpacity + property NavigationAction navigationAction + property alias title: titleBar.title + property alias rightAction: titleBar.rightAction + property alias subTitleBarAction: titleBar.subTitleBarAction + property alias color: titleBar.color - readonly property TitleBarAction defaultLeftAction: TitleBarAction {} - readonly property TitleBarAction defaultTitle: TitleBarAction {} - readonly property Item defaultRightAction: Item {} + height: titleBar.height - readonly property TitleBarAction activeleftAction: leftAction ? leftAction : defaultLeftAction - readonly property TitleBarAction activeTitleItem: titleItem ? titleItem : defaultTitle - readonly property Item activeRightAction: rightAction ? rightAction : defaultRightAction + BaseTitleBar { + id: titleBar - property var leftAction - property var titleItem - property var rightAction - property var subTitleBarAction - property var color + anchors { + top: parent.top + left: parent.left + right: parent.right + } + titleAlignment: BaseTitleBar.TitleAlignment.Left - Rectangle { - id: background - color: titleBar.color ? titleBar.color : Constants.blue - anchors.top: parent.top - anchors.left: Constants.is_tablet ? hamburgerFrame.right : parent.left - anchors.bottom: parent.bottom - anchors.right: parent.right + leftAction: Hamburger { + id: burger + height: parent.height + state: navBar.isOpen ? "back" : (baseItem.navigationAction ? baseItem.navigationAction.state : "") + enabled: baseItem.navigationAction ? baseItem.navigationAction.enabled : true - onColorChanged: StatusBarUtil.setStatusBarColor(String(color)) - Behavior on color { ColorAnimation { duration: titleBar.duration } } - } - - Rectangle { - id: hamburgerFrame - height: parent.height - width: Constants.menubar_width - anchors.left: parent.left - color: background.color - opacity: Constants.is_tablet ? 1 : 0 - } - - Hamburger { - id: burger - anchors.horizontalCenter: hamburgerFrame.horizontalCenter - height: parent.height - state: navBar.isOpen ? "back" : activeleftAction.state - - MouseArea { - anchors.fill: parent - onClicked: { - switch (burger.state) { - case "": - navBar.open() - break - case "back": - if (navBar.isOpen) { - navBar.close() - } else { - activeleftAction.clicked(mouse) - } - break - case "hidden": - break - default: - activeleftAction.clicked(mouse) + MouseArea { + anchors.fill: parent + onClicked: { + switch (burger.state) { + case "": + navBar.open() + break + case "back": + if (navBar.isOpen) { + navBar.close() + } else { + baseItem.navigationAction.clicked() + } + break + case "hidden": + break + default: + baseItem.navigationAction.clicked() + } } } } } - - Item { - id: titleText - property string text: activeTitleItem.text - property bool bold: activeTitleItem.font.bold - - anchors.left: burger.right - anchors.leftMargin: Constants.titlebar_spacing - anchors.right: parent.right - anchors.rightMargin: Constants.titlebar_padding + (rightActionStack.width > 0 ? rightAction.width + Constants.titlebar_spacing : 0) - height: parent.height - clip: true - - TitleBarText { - id: oldTitle - width: parent.width - text: parent.text - Component.onCompleted: font.bold = parent.bold - opacity: 0 - - Behavior on text { - SequentialAnimation { - PropertyAnimation { target: oldTitle; property: "opacity"; from: 1; to: 0; duration: titleBar.duration } - PropertyAction { target: oldTitle; property: "font.bold"; value: titleText.bold } - PropertyAction { target: oldTitle; property: "text" } - } - } - } - - TitleBarText { - id: newTitle - width: parent.width - text: parent.text - font.bold: parent.bold - - Behavior on text { - ParallelAnimation { - PropertyAnimation { target: newTitle; property: "opacity"; from: 0; to: 1; duration: titleBar.duration } - PropertyAnimation { target: newTitle; property: "x"; from: width; to: 0; duration: titleBar.duration } - } - } - } - } - - Item { - id: rightActionStack - anchors.rightMargin: Constants.titlebar_padding - anchors.top: parent.top - anchors.right: parent.right - anchors.bottom: parent.bottom - width: rightAction ? activeRightAction.contentWidth : 0 - data: activeRightAction - } } diff --git a/resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBar.qml b/resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBar.qml index 691b08a..f3ffbb8 100644 --- a/resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBar.qml +++ b/resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBar.qml @@ -1,113 +1,39 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 -import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { - property int duration: 300 - property alias titleBarOpacity: background.opacity - id: titleBar - height: Constants.titlebar_height + activeSubTitleBarAction.height + id: baseItem - readonly property var defaultLeftAction: Text {} - readonly property var defaultTitle: Text {} - readonly property var defaultRightAction: Text {} - readonly property var defaultSubTitleBarAction: Item {} + property alias titleBarOpacity: titleBar.titleBarOpacity + property NavigationAction navigationAction + property alias title: titleBar.title + property alias rightAction: titleBar.rightAction + property alias subTitleBarAction: titleBar.subTitleBarAction + property alias color: titleBar.color - property var activeleftAction: leftAction ? leftAction : defaultLeftAction - property var activeTitleItem: titleItem ? titleItem : defaultTitle - property var activeRightAction: rightAction ? rightAction : defaultRightAction - property var activeSubTitleBarAction: subTitleBarAction ? subTitleBarAction : defaultSubTitleBarAction + height: titleBar.height - property var leftAction - property var titleItem - property var rightAction - property var subTitleBarAction - property var color + BaseTitleBar { + id: titleBar - - Rectangle { - id: background - anchors.fill: parent - color: titleBar.color ? titleBar.color : Constants.blue - - Behavior on color { ColorAnimation { duration: titleBar.duration } } - } - - Item { - id: firstLine - - height: Constants.titlebar_height - width: parent.width - - Item { - id: leftActionStack - data: activeleftAction - width: activeleftAction.width - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: Constants.titlebar_padding + anchors { + top: parent.top + left: parent.left + right: parent.right } - Item { - id: titleText - property string text: activeTitleItem.text - property bool bold: activeTitleItem.font.bold - - anchors.left: parent.left - anchors.leftMargin: leftActionStack.width > 0 ? leftAction.width + Constants.titlebar_spacing : 0 - anchors.right: parent.right - anchors.rightMargin: rightActionStack.width > 0 ? rightAction.width + Constants.titlebar_spacing : 0 - height: parent.height - clip: true - - TitleBarText { - id: oldTitle - text: parent.text - width: parent.width - horizontalAlignment: Text.AlignHCenter - Component.onCompleted: font.bold = parent.bold - opacity: 0 - - Behavior on text { - SequentialAnimation { - PropertyAnimation { target: oldTitle; property: "opacity"; from: 1; to: 0; duration: titleBar.duration } - PropertyAction { target: oldTitle; property: "font.bold"; value: titleText.bold } - PropertyAction { target: oldTitle; property: "text" } - } - } - } - - TitleBarText { - id: newTitle - text: parent.text - width: parent.width - font.bold: parent.bold - horizontalAlignment: Text.AlignHCenter - - Behavior on text { - ParallelAnimation { - PropertyAnimation { target: newTitle; property: "opacity"; from: 0; to: 1; duration: titleBar.duration } - PropertyAnimation { target: newTitle; property: "x"; from: width; to: 0; duration: titleBar.duration } - } - } - } + leftAction: TitleBarNavigation { + state: baseItem.navigationAction ? baseItem.navigationAction.state : "" + enabled: baseItem.navigationAction ? baseItem.navigationAction.enabled : true + onClicked: baseItem.navigationAction.clicked() + onTextUpdated: titleBar.updateLeftAction() } - Item { - id: rightActionStack - data: activeRightAction - width: activeRightAction.width - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: Constants.titlebar_padding - } - } - - Item { - data: activeSubTitleBarAction - width: parent.width - anchors.top: firstLine.bottom - anchors.horizontalCenter: parent.horizontalCenter } } diff --git a/resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBarNavigation.qml b/resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBarNavigation.qml new file mode 100644 index 0000000..0bf87f7 --- /dev/null +++ b/resources/qml/Governikus/TitleBar/+mobile/+ios/TitleBarNavigation.qml @@ -0,0 +1,27 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtGraphicalEffects 1.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + +TitleBarAction { + id: baseItem + + Accessible.role: Accessible.Button + Accessible.name: text + + icon: state === "back" ? "qrc:///images/arrowLeft.svg" : null + //: LABEL ANDROID IOS + text: (state === "cancel" ? qsTr("Cancel") : + //: LABEL ANDROID IOS + state === "edit" ? qsTr("Edit") : + //: LABEL ANDROID IOS + state === "back" ? (qsTr("Back")) : + state === "hidden" ? "" : + "") + SettingsModel.translationTrigger +} diff --git a/resources/qml/Governikus/TitleBar/+mobile/BaseTitleBar.qml b/resources/qml/Governikus/TitleBar/+mobile/BaseTitleBar.qml new file mode 100644 index 0000000..89afdf4 --- /dev/null +++ b/resources/qml/Governikus/TitleBar/+mobile/BaseTitleBar.qml @@ -0,0 +1,233 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + +Item { + id: titleBar + + enum TitleAlignment { + Center = 0, + Left + } + + property alias titleBarOpacity: background.opacity + + property alias title: titleText.text + property var leftAction + property var rightAction + property var subTitleBarAction + + property var color + property int titleAlignment: BaseTitleBar.TitleAlignment.Center + property var topSafeAreaMargin: plugin.safeAreaMargins.top + + height: contentLayout.height + topSafeAreaMargin + + function updateLeftAction() { + if (leftActionStack.activeActionItem && typeof leftActionStack.activeActionItem.iconOnly !== "undefined") { + leftActionStack.activeActionItem.iconOnly = titleText.implicitWidth > titleText.implicitAvailableWidth + } + } + + Rectangle { + id: safeAreaBackground + + height: topSafeAreaMargin + anchors { + top: parent.top + left: parent.left + right: parent.right + } + + property color baseColor: titleBar.color ? titleBar.color : Style.color.accent + color: Constants.is_layout_android ? Qt.darker(baseColor, 1.2) : baseColor + + Behavior on color { ColorAnimation { duration: Constants.animation_duration } } + } + + Rectangle { + id: background + + anchors { + top: safeAreaBackground.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } + + color: titleBar.color ? titleBar.color : Style.color.accent + + Behavior on color { ColorAnimation { duration: Constants.animation_duration } } + } + + Column { + id: contentLayout + + anchors { + bottom: parent.bottom + right: parent.right + left: parent.left + } + + Item { + id: firstLine + + height: Style.dimens.titlebar_height + width: parent.width + + Item { + id: leftActionStack + + property var actionItem: leftAction + property var activeActionItem + + width: activeActionItem ? activeActionItem.width : 0 + implicitWidth: activeActionItem ? activeActionItem.implicitWidth : 0 + anchors { + top: parent.top + left: parent.left + bottom: parent.bottom + leftMargin: Style.dimens.titlebar_padding + } + + children: activeActionItem ? [activeActionItem] : [] + + onActionItemChanged: leftActionStackAnimateOut.start() + onActiveActionItemChanged: updateLeftAction() + + PropertyAnimation { + id: leftActionStackAnimateOut + target: leftActionStack + property: "opacity" + to: 0 + duration: Constants.animation_duration + easing.type: Easing.InCubic + onStopped: { leftActionStack.activeActionItem = leftActionStack.actionItem; leftActionStackAnimateIn.start() } + } + PropertyAnimation { + id: leftActionStackAnimateIn + target: leftActionStack + property: "opacity" + to: 1 + duration: Constants.animation_duration + easing.type: Easing.OutCubic + } + } + + GText { + id: titleText + + readonly property var centerX: (parent.width / 2) - (width / 2) + readonly property var leftX: leftActionStack.width + leftActionPadding + (1 + (leftActionStack.activeActionItem ? 1 : 0)) * Style.dimens.titlebar_padding + + readonly property var leftActionPadding: leftAction.iconOnly ? Style.dimens.titlebar_padding : 0 + readonly property var completePadding: (2 + (leftActionStack.activeActionItem ? 1 : 0) + (rightActionStack.activeActionItem ? 1 : 0)) * Style.dimens.titlebar_padding + + readonly property var implicitAvailableWidth: parent.width - leftActionStack.implicitWidth - rightActionStack.implicitWidth - completePadding + readonly property var availableWidth: parent.width - leftActionStack.width - rightActionStack.width - completePadding - leftActionPadding + + height: Style.dimens.titlebar_height + width: Math.min(implicitWidth, availableWidth) + anchors { + top: parent.top + bottom: parent.bottom + } + x: titleAlignment === BaseTitleBar.TitleAlignment.Center ? Math.max(leftX, centerX) : leftX + + verticalAlignment: Text.AlignVCenter + maximumLineCount: 1 + elide: Text.ElideRight + wrapMode: Text.NoWrap + font.bold: true + textStyle: Style.text.header_inverse + + onTextChanged: updateLeftAction() + + Behavior on text { + SequentialAnimation { + PropertyAnimation { + target: titleText + property: "opacity" + to: 0 + duration: Constants.animation_duration + easing.type: Easing.InCubic + } + PropertyAction { + target: titleText + property: "text" + } + PropertyAnimation { + target: titleText + property: "opacity" + to: 1 + duration: Constants.animation_duration + easing.type: Easing.OutCubic + } + } + } + + Behavior on x { + NumberAnimation { + from: parent.width * 0.75 + duration: Constants.animation_duration + easing.type: Easing.OutQuart + } + } + } + + Item { + id: rightActionStack + + property var actionItem: rightAction + property var activeActionItem + + width: activeActionItem ? activeActionItem.width : 0 + implicitWidth: activeActionItem ? activeActionItem.implicitWidth : 0 + anchors { + top: parent.top + right: parent.right + bottom: parent.bottom + rightMargin: Style.dimens.titlebar_padding + } + + children: activeActionItem ? [activeActionItem] : [] + + onActionItemChanged: rightActionStackAnimateOut.start() + onActiveActionItemChanged: rightActionStackAnimateIn.start() + + PropertyAnimation { + id: rightActionStackAnimateOut + target: rightActionStack + property: "opacity" + to: 0 + duration: Constants.animation_duration + easing.type: Easing.InCubic + onStopped: rightActionStack.activeActionItem = rightActionStack.actionItem + } + PropertyAnimation { + id: rightActionStackAnimateIn + target: rightActionStack + property: "opacity" + to: 1 + duration: Constants.animation_duration + easing.type: Easing.OutCubic + } + } + } + + Item { + id: secondLine + + width: parent.width + height: subTitleBarAction ? subTitleBarAction.height : 0 + + data: subTitleBarAction ? subTitleBarAction : [] + } + } +} diff --git a/resources/qml/Governikus/TitleBar/+mobile/NavigationAction.qml b/resources/qml/Governikus/TitleBar/+mobile/NavigationAction.qml new file mode 100644 index 0000000..f863fc0 --- /dev/null +++ b/resources/qml/Governikus/TitleBar/+mobile/NavigationAction.qml @@ -0,0 +1,10 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +Item { + property string state + signal clicked +} diff --git a/resources/qml/Governikus/TitleBar/+mobile/TitleBarAction.qml b/resources/qml/Governikus/TitleBar/+mobile/TitleBarAction.qml index 8810bb2..db18925 100644 --- a/resources/qml/Governikus/TitleBar/+mobile/TitleBarAction.qml +++ b/resources/qml/Governikus/TitleBar/+mobile/TitleBarAction.qml @@ -1,24 +1,145 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtGraphicalEffects 1.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 -MouseArea { - property string text: "" - property alias font: titleBarText.font +Item { + id: baseItem - height: Constants.titlebar_height - width: titleBarText.width - anchors.centerIn: parent + property string icon + property string text + property bool iconOnly: false + signal clicked + signal textUpdated - TitleBarText { - id: titleBarText - anchors.centerIn: parent + height: Style.dimens.titlebar_height + implicitWidth: imageItem.implicitWidth + textItem.implicitWidth + width: imageItem.implicitWidth + (iconOnly ? 0 : textItem.implicitWidth) - text: ( parent.text !== "" ? parent.text : - parent.state === "cancel" ? qsTr("Cancel") : - parent.state === "edit" ? qsTr("Edit") : - parent.state === "back" ? qsTr("< back") : - parent.state === "hidden" ? "" : - "") + settingsModel.translationTrigger + Accessible.role: Accessible.Button + Accessible.name: text + Accessible.onPressAction: if (Qt.platform.os === "ios") clicked() + + Image { + id: imageItem + + sourceSize.width: source ? 18 : 0 + anchors { + left: parent.left + verticalCenter: parent.verticalCenter + } + + fillMode: Image.PreserveAspectFit + source: icon + + Behavior on source { + SequentialAnimation { + PropertyAnimation { + target: imageItem + property: "opacity" + to: 0 + duration: Constants.animation_duration + easing.type: Easing.InCubic + } + PropertyAction { + target: imageItem + property: "source" + } + PropertyAnimation { + target: imageItem + property: "opacity" + to: 1 + duration: Constants.animation_duration + easing.type: Easing.OutCubic + } + } + } + + ColorOverlay { + anchors.fill: imageItem + source: imageItem + color: Style.color.primary_text_inverse + } + } + + GText { + id: textItem + + visible: !iconOnly + anchors { + left: imageItem.right + verticalCenter: parent.verticalCenter + } + + Accessible.ignored: true + + verticalAlignment: Text.AlignVCenter + maximumLineCount: 1 + elide: Text.ElideRight + wrapMode: Text.NoWrap + textStyle: Style.text.normal_inverse + text: baseItem.text + + onTextChanged: baseItem.textUpdated() + + onVisibleChanged: { + if (visible) { + fadeIn.start() + } else { + fadeOut.start() + } + } + + PropertyAnimation { + id: fadeOut + target: textItem + property: "opacity" + to: 0 + duration: Constants.animation_duration + easing.type: Easing.InCubic + } + PropertyAnimation { + id: fadeIn + target: textItem + property: "opacity" + to: 1 + duration: Constants.animation_duration + easing.type: Easing.OutCubic + } + + Behavior on text { + SequentialAnimation { + PropertyAnimation { + target: textItem + property: "opacity" + to: 0 + duration: Constants.animation_duration + easing.type: Easing.InCubic + } + PropertyAction { + target: textItem + property: "text" + } + PropertyAnimation { + target: textItem + property: "opacity" + to: 1 + duration: Constants.animation_duration + easing.type: Easing.OutCubic + } + } + } + } + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: baseItem.clicked() } } diff --git a/resources/qml/Governikus/TitleBar/+mobile/TitleBarText.qml b/resources/qml/Governikus/TitleBar/+mobile/TitleBarText.qml deleted file mode 100644 index 51147f5..0000000 --- a/resources/qml/Governikus/TitleBar/+mobile/TitleBarText.qml +++ /dev/null @@ -1,12 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Text { - id: textItem - anchors.verticalCenter: parent.verticalCenter - color: "white" - font.pixelSize: Constants.titlebar_font_size - maximumLineCount: 1 - elide: Text.ElideRight -} diff --git a/resources/qml/Governikus/TitleBar/qmldir b/resources/qml/Governikus/TitleBar/qmldir index 6db473e..a42013a 100644 --- a/resources/qml/Governikus/TitleBar/qmldir +++ b/resources/qml/Governikus/TitleBar/qmldir @@ -1,9 +1,13 @@ module TitleBar +internal BaseTitleBar BaseTitleBar.qml +internal Hamburger Hamburger.qml internal TitleBarText TitleBarText.qml +internal TitleBarNavigation TitleBarNavigation.qml CancelAction 1.0 CancelAction.qml -Hamburger 1.0 Hamburger.qml +NavigationAction 1.0 NavigationAction.qml +Notifications 1.0 Notifications.qml TitleBar 1.0 TitleBar.qml TitleBarAction 1.0 TitleBarAction.qml TitleBarButton 1.0 TitleBarButton.qml diff --git a/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantBinaryDecisionView.qml b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantBinaryDecisionView.qml new file mode 100644 index 0000000..e6b2b32 --- /dev/null +++ b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantBinaryDecisionView.qml @@ -0,0 +1,123 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.View 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + +SectionPage { + id: baseItem + + property alias questionText: mainTextElement.text + property alias questionSubText: subTextElement.text + property string mainIconSource: "qrc:///images/status_info.svg" + property string agreeText: "" + property string disagreeText: "" + property bool addRingAroundIcon: false + + signal agree() + signal disagree() + + activeFocusOnTab: false + + Image { + visible: !baseItem.addRingAroundIcon + height: Style.dimens.status_icon_large + width: height + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.top + anchors.verticalCenterOffset: baseItem.height / 4 + + source: baseItem.mainIconSource + } + + StatusIcon { + visible: baseItem.addRingAroundIcon + height: Style.dimens.status_icon_large + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.top + anchors.verticalCenterOffset: baseItem.height / 4 + + source: baseItem.mainIconSource + } + + GText { + id: mainTextElement + + visible: mainTextElement.text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.verticalCenter + + Accessible.role: Accessible.Heading + Accessible.name: text + activeFocusOnTab: true + + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + textStyle: Style.text.header + + FocusFrame {} + } + + GText { + id: subTextElement + + visible: subTextElement.text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: mainTextElement.bottom + anchors.topMargin: Constants.text_spacing + + Accessible.role: Accessible.Heading + Accessible.name: text + activeFocusOnTab: true + + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + textStyle: Style.text.normal + + FocusFrame {} + } + + SetupAssistantButton { + id: disagreeButton + + width: ApplicationModel.scaleFactor * 120 + anchors.margins: Constants.component_spacing + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.horizontalCenterOffset: -baseItem.width / 5 + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + subText: qsTr("No") + SettingsModel.translationTrigger + buttonImage: "qrc:///images/cancel.svg" + onClicked: baseItem.disagree() + } + + SetupAssistantButton { + id: agreeButton + + width: ApplicationModel.scaleFactor * 120 + anchors.margins: Constants.component_spacing + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.horizontalCenterOffset: baseItem.width / 5 + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + subText: qsTr("Yes") + SettingsModel.translationTrigger + buttonImage: "qrc:///images/check.svg" + onClicked: baseItem.agree() + } +} diff --git a/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantButton.qml b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantButton.qml new file mode 100644 index 0000000..d917209 --- /dev/null +++ b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantButton.qml @@ -0,0 +1,72 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + +Button { + id: baseItem + + property string subText: "" + property alias buttonImage: image.source + + height: icon.height + Constants.component_spacing + buttonText.height + + Accessible.role: Accessible.Button + Accessible.name: subText + + background: Item { + id: content + + anchors.fill: parent + + Rectangle { + id: icon + + width: baseItem.width + height: baseItem.width + anchors.horizontalCenter: parent.horizontalCenter + anchors.margins: baseItem.down ? baseItem.width / 32 : 0 + anchors.top: parent.top + + radius: baseItem.width / 2 + border.width: baseItem.width / 40; + border.color: Constants.white + color: Style.color.transparent + + Rectangle { + anchors.fill: parent + anchors.margins: parent.height / 8; + + radius: height / 2 + color: Qt.lighter(Constants.blue, 1.1) + + Image { + id: image + anchors.centerIn: parent + + sourceSize.height: parent.height / 2; + } + } + } + + GText { + id: buttonText + + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + + text: baseItem.subText + textStyle: Style.text.header + } + } + + FocusFrame {} +} + diff --git a/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantCardReaderView.qml b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantCardReaderView.qml new file mode 100644 index 0000000..6a91931 --- /dev/null +++ b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantCardReaderView.qml @@ -0,0 +1,34 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 + +SectionPage { + id: baseItem + + signal advanceSetupAssistant() + + activeFocusOnTab: false + + SetupAssistantButton { + id: disagreeButton + + width: ApplicationModel.scaleFactor * 120 + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.margins: Constants.component_spacing + + activeFocusOnTab: true + + //: LABEL DESKTOP_QML + subText: qsTr("Advance") + SettingsModel.translationTrigger + buttonImage: "qrc:///images/desktop/continue_arrow.svg" + onClicked: baseItem.advanceSetupAssistant() + } +} diff --git a/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantView.qml b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantView.qml new file mode 100644 index 0000000..6043024 --- /dev/null +++ b/resources/qml/Governikus/TutorialView/+desktop/SetupAssistantView.qml @@ -0,0 +1,206 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.ResultView 1.0 +import Governikus.TitleBar 1.0 +import Governikus.View 1.0 +import Governikus.SettingsView 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.ChangePinModel 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.NumberModel 1.0 + +SectionPage { + id: baseItem + + enum SubViews { + Welcome = 0, + HistorySetting, + CardReader, + TransportPin, + Finished + } + + activeFocusOnTab: false + + isAbstract: true + onVisibleChanged: if (visible) d.reset() + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Setup Assistant") + SettingsModel.translationTrigger + rootEnabled: d.allowNavigation + showSettings: false + helpTopic: "setupAssistant" + onClicked: d.reset() + } + + QtObject { + id: d + + property int activeView: SetupAssistantView.SubViews.Welcome + readonly property bool allowNavigation: !SettingsModel.showSetupAssistantOnStart + + function reset() { + d.activeView = SetupAssistantView.SubViews.Welcome + } + } + + ResultView { + visible: d.activeView === SetupAssistantView.SubViews.Welcome + + resultType: ResultView.Type.IsInfo + //: INFO DESKTOP_QML Welcome message when starting the setup assistant. + text: qsTr("Welcome to the AusweisApp2. Please take a few moments to setup the environment to your needs. Every decision you make can later be changed in the settings menu.") + SettingsModel.translationTrigger + + onNextView: d.activeView = SetupAssistantView.SubViews.HistorySetting + } + + SetupAssistantBinaryDecisionView { + visible: d.activeView === SetupAssistantView.SubViews.HistorySetting + + mainIconSource: "qrc:///images/desktop/main_history.svg" + //: INFO DESKTOP_QML Question if the authentication history shall be stored. + questionText: qsTr("Do you want to save a history of performed authentications?") + SettingsModel.translationTrigger + //: INFO DESKTOP_QML Information text which data is stored in the history record. + questionSubText: qsTr("The following data is saved: authentication date, service provider contact data, read data.") + SettingsModel.translationTrigger + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("History Setting") + SettingsModel.translationTrigger + rootEnabled: d.allowNavigation + showSettings: false + helpTopic: "setupAssistant" + } + + onAgree: { + SettingsModel.historyEnabled = true + d.activeView = SetupAssistantView.SubViews.CardReader + } + + onDisagree: { + SettingsModel.historyEnabled = false + d.activeView = SetupAssistantView.SubViews.CardReader + } + } + + TabbedReaderView { + id: readerView + + visible: d.activeView === SetupAssistantView.SubViews.CardReader + + rootEnabled: d.allowNavigation + + onCloseView: d.activeView = SetupAssistantView.SubViews.HistorySetting + + Button { + id: button + + anchors.bottom: parent.bottom + anchors.right: parent.right + anchors.rightMargin: Constants.component_spacing + anchors.bottomMargin: Constants.component_spacing + width: icon.width + ApplicationModel.scaleFactor * 10 + buttonText.width + height: icon.height + + Accessible.role: Accessible.Button + Accessible.name: qsTr("Continue") + SettingsModel.translationTrigger + + activeFocusOnTab: true + onClicked: d.activeView = SetupAssistantView.SubViews.TransportPin + + background: Item { + id: content + + readonly property int imageWidth: ApplicationModel.scaleFactor * 60 + + anchors.fill: parent + + GText { + id: buttonText + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + + //: LABEL DESKTOP_QML + text: qsTr("Continue") + SettingsModel.translationTrigger + textStyle: Style.text.normal + } + + Rectangle { + id: icon + + width: content.imageWidth + height: content.imageWidth + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + + radius: button.width / 2 + border.width: content.imageWidth / 40 + border.color: Constants.white + color: Style.color.transparent + + Rectangle { + anchors.fill: parent + anchors.margins: parent.height / 8 + + radius: height / 2 + color: Qt.lighter(Constants.blue, 1.1) + + Image { + id: image + anchors.centerIn: parent + source: "qrc:///images/desktop/continue_arrow.svg" + + sourceSize.height: parent.height / 2 + } + } + } + } + + FocusFrame {} + } + } + + SetupAssistantBinaryDecisionView { + visible: d.activeView === SetupAssistantView.SubViews.TransportPin + + mainIconSource: "qrc:///images/reader/default_reader.png" + //: INFO DESKTOP_QML Inquiry message if the 5 digit transport PIN should be changed to an ordinary PIN (now). + questionText: qsTr("Do you want to change your transport PIN to a personal PIN now?") + SettingsModel.translationTrigger + //: INFO DESKTOP_QML Hint that this change may be carried out form the main menu as well and that it is required to use the online authentication feature of the id card. + questionSubText: qsTr("This process can always be started from the main menu. The online-ID function is only usable with a personal PIN.") + SettingsModel.translationTrigger + addRingAroundIcon: true + + titleBarAction: TitleBarAction { + //: LABEL DESKTOP_QML + text: qsTr("Transport PIN") + SettingsModel.translationTrigger + rootEnabled: d.allowNavigation + showSettings: false + helpTopic: "setupAssistant" + } + + onAgree: { + NumberModel.requestTransportPin = true + ChangePinModel.startWorkflow() + } + onDisagree: d.activeView = SetupAssistantView.SubViews.Finished + } + + ResultView { + visible: d.activeView === SetupAssistantView.SubViews.Finished + + resultType: ResultView.Type.IsSuccess + //: INFO DESKTOP_QML Success message after completing the setup assistant. + text: qsTr("You have completed the setup of the AusweisApp2 successfully.") + SettingsModel.translationTrigger + onNextView: { + SettingsModel.showSetupAssistantOnStart = false + baseItem.nextView(pName) + } + } + +} diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialCollapseAnimation.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialCollapseAnimation.qml index d56db49..1bd1520 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialCollapseAnimation.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialCollapseAnimation.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 SequentialAnimation { diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialContent.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialContent.qml index 2c2ccc1..d4c4d59 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialContent.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialContent.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 Rectangle { id: contentBackground @@ -19,6 +24,6 @@ Rectangle { anchors.top: parent.top topPadding: parent.width * 0.15 bottomPadding: Constants.component_spacing - spacing: Constants.tutorial_component_spacing + spacing: Style.dimens.tutorial_component_spacing } } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialExpandAnimation.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialExpandAnimation.qml index 5d85c53..2206176 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialExpandAnimation.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialExpandAnimation.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 SequentialAnimation { diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialFooter.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialFooter.qml index 164b7fd..af3ca23 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialFooter.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialFooter.qml @@ -1,10 +1,22 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 +import QtGraphicalEffects 1.0 -Rectangle { + +Item { id: baseItem - height: Math.max(backToMenu.height, quitTutorial.height) + + property alias color: colorOverlay.color + property alias shaderSource: effectSource.sourceItem + + height: plugin.safeAreaMargins.bottom + Math.max(backToMenu.height, quitTutorial.height) property alias backRotation: leftArrow.rotation property alias backText: menuText.text @@ -13,6 +25,7 @@ Rectangle { signal menuClicked() signal quitTutorialClicked() + state: "showOnlyQuit" states: [ State { name: "showBothOptions"; when: baseItem.backToMenuActive PropertyChanges { target: backToMenu; opacity: 1 } @@ -31,14 +44,46 @@ Rectangle { AnchorAnimation { duration: 500; easing.type: Easing.InOutQuad } } ] + onVisibleChanged: if (visible) { + // When the user quits the tutorial on iOS while we're in the "showBothOptions" state, the + // animation will finish when the MoreView is already active. This results in quitTutorial + // being wrongly positioned the next time the users enters the tutorial. The following lines + // work around this issue: + if (state === "showOnlyQuit") { + quitTutorial.anchors.horizontalCenter = baseItem.horizontalCenter + } + } + + ShaderEffectSource { + id: effectSource + + anchors.fill: parent + sourceRect: Qt.rect(baseItem.x, baseItem.y, baseItem.width, baseItem.height) + } + FastBlur { + anchors.fill: effectSource + source: effectSource + radius: 32 + } + ColorOverlay { + id: colorOverlay + + anchors.fill: parent + color: footer.color + Behavior on color { ColorAnimation { duration: Constants.animation_duration } } + opacity: 0.7 + } Item { id: backToMenu anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter + anchors.top: parent.top height: menuRow.height + 2 * Constants.component_spacing width: menuRow.width + Accessible.name: menuText.text + Accessible.onPressAction: if (Qt.platform.os === "ios") baseItem.menuClicked() + MouseArea { anchors.fill: parent preventStealing: true @@ -64,13 +109,16 @@ Rectangle { fillMode: Image.PreserveAspectFit } - Text { + GText { id: menuText + anchors.verticalCenter: parent.verticalCenter - text: qsTr("Fold in") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size - color: Constants.white + + Accessible.ignored: true + + //: LABEL ANDROID IOS + text: qsTr("Fold in") + SettingsModel.translationTrigger + textStyle: Style.text.normal_inverse } } } @@ -79,7 +127,10 @@ Rectangle { id: quitTutorial height: quitRow.height + 2 * Constants.component_spacing width: quitRow.width - anchors.verticalCenter: parent.verticalCenter + anchors.top: parent.top + + Accessible.name: quitText.text + Accessible.onPressAction: if (Qt.platform.os === "ios") baseItem.quitTutorialClicked() MouseArea { anchors.fill: parent @@ -97,13 +148,16 @@ Rectangle { padding: Constants.component_spacing spacing: Constants.component_spacing - Text { + GText { id: quitText + anchors.verticalCenter: parent.verticalCenter - text: qsTr("Quit tutorial") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size - color: Constants.white + + Accessible.ignored: true + + //: LABEL ANDROID IOS + text: qsTr("Quit tutorial") + SettingsModel.translationTrigger + textStyle: Style.text.normal_inverse } Image { diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialHeader.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialHeader.qml index 73f9ad1..6eb5bdb 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialHeader.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialHeader.qml @@ -1,7 +1,12 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { id: baseItem @@ -17,6 +22,9 @@ Item { property real initY signal clicked() + Accessible.name: title.text + Accessible.onPressAction: if (Qt.platform.os === "ios") clicked() + Image{ id: headerImage width: parent.width @@ -39,18 +47,22 @@ Item { } } - Text { + GText { id: title + anchors.horizontalCenter: parent.horizontalCenter y: ((categoryAbove ? 0.575 : 0.5) * parent.height) - (0.5 * height) + + Accessible.ignored: true + font.bold: true - font.pixelSize: Constants.tutorial_header_font_size + textStyle: Style.text.tutorial_title layer.enabled: true layer.effect: DropShadow { - verticalOffset: Utils.dp(3) - horizontalOffset: Utils.dp(3) + verticalOffset: 3 + horizontalOffset: 3 color: Constants.white - radius: Utils.dp(1) + radius: 1 samples: 3 } } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialHow.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialHow.qml index f03491a..449b8ae 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialHow.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialHow.qml @@ -1,6 +1,13 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + TutorialContent { id: baseItem @@ -8,39 +15,51 @@ TutorialContent { signal firePush(var pSectionPage) signal quitTutorialClicked() - TutorialReaderMethodNfc { - id: readerMethodNfc - visible: false - onQuitTutorialClicked: baseItem.quitTutorialClicked() + Item { + Component { + id: readerMethodNfc + + TutorialReaderMethodNfc { + onQuitTutorialClicked: baseItem.quitTutorialClicked() + } + } + + Component { + id: readerMethodSacMobile + + TutorialReaderMethodSacMobile { + onQuitTutorialClicked: baseItem.quitTutorialClicked() + } + } + + Component { + id: readerMethodSacDesktop + + TutorialReaderMethodSacDesktop { + onQuitTutorialClicked: baseItem.quitTutorialClicked() + } + } + + Component { + id: readerMethodBluetooth + + TutorialReaderMethodBluetooth { + onQuitTutorialClicked: baseItem.quitTutorialClicked() + } + } } - TutorialReaderMethodSacMobile { - id: readerMethodSacMobile - visible: false - onQuitTutorialClicked: baseItem.quitTutorialClicked() - } - TutorialReaderMethodSacDesktop { - id: readerMethodSacDesktop - visible: false - onQuitTutorialClicked: baseItem.quitTutorialClicked() - } - - TutorialReaderMethodBluetooth { - id: readerMethodBluetooth - visible: false - onQuitTutorialClicked: baseItem.quitTutorialClicked() - } - - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("How can I use the AusweisApp2 on my smartphone?") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: INFO ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("How can I use the AusweisApp2 on my iPhone?") + : qsTr("How can I use the AusweisApp2 on my smartphone?")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.italic: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } TutorialSeperator { @@ -76,38 +95,39 @@ TutorialContent { centerX: 0.2 } - Text { + GText { width: parent.width * 0.6 - text: qsTr("Many Android devices can access the id card via the NFC interface.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: INFO ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("Many iPhones (iPhone 7 and newer) can access the id card via the built-in NFC interface.") + : qsTr("Many Android devices can access the id card via the built-in NFC interface.")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) } } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("You can find a list of compatible NFC-capable smartphones here:") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + visible: Constants.is_layout_android + //: LABEL ANDROID IOS + text: qsTr("You can find a list of compatible NFC-capable smartphones here:") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: "%1".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + visible: Constants.is_layout_android + //: LABEL ANDROID IOS + text: "%1".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap onLinkActivated: Qt.openUrlExternally(link) } @@ -119,15 +139,14 @@ TutorialContent { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("The AusweisApp2 offers the following options to access your id card:") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("The AusweisApp2 offers the following options to access your id card:") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.italic: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -140,8 +159,8 @@ TutorialContent { width: parent.width * 0.95 height: methodNfcSection.height color: Constants.white - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how MouseArea { anchors.fill: parent @@ -152,17 +171,16 @@ TutorialContent { id: methodNfcSection width: parent.width spacing: Constants.component_spacing - padding: Utils.dp(10) + padding: 10 - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Direct connection via NFC chip") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Direct connection via NFC chip") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Rectangle { @@ -170,15 +188,14 @@ TutorialContent { height: radius * 2 width: radius * 2 radius: numberOne.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberOne anchors.centerIn: parent text: "1" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -192,14 +209,15 @@ TutorialContent { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.6 - text: qsTr("App on Android smartphone with NFC chip as card reader") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("App on iPhone with NFC chip as card reader") + : qsTr("App on Android smartphone with NFC chip as card reader")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { @@ -221,8 +239,8 @@ TutorialContent { width: parent.width * 0.95 height: methodSacDesktopSection.height color: Constants.white - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how MouseArea { anchors.fill: parent @@ -233,17 +251,16 @@ TutorialContent { id: methodSacDesktopSection width: parent.width spacing: Constants.component_spacing - padding: Utils.dp(10) + padding: 10 - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Smartphone as card reader") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Smartphone as card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Rectangle { @@ -251,15 +268,14 @@ TutorialContent { height: radius * 2 width: radius * 2 radius: numberTwo.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberTwo anchors.centerIn: parent text: "2" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -274,8 +290,8 @@ TutorialContent { height: radius * 2 width: radius * 2 radius: parent.width * 0.06 - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how y: (parent.height * 0.4) - (height / 2) x: (parent.width * 0.5) - (width / 2) @@ -298,21 +314,23 @@ TutorialContent { centerY: 0.5 } - Text { + GText { width: parent.width * 0.4 - text: qsTr("App on computer without NFC chip") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("App on computer without NFC chip") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.25) - (width / 2) y: (parent.height * 0.95) - (height / 2) } - Text { + GText { width: parent.width * 0.4 - text: qsTr("Android smartphone with NFC chip as card reader") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Smartphone with NFC chip as card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.95) - (height / 2) @@ -338,8 +356,8 @@ TutorialContent { width: parent.width * 0.95 height: methodSacMobileSection.height color: Constants.white - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how MouseArea { anchors.fill: parent @@ -350,22 +368,21 @@ TutorialContent { id: methodSacMobileSection width: parent.width spacing: Constants.component_spacing - padding: Utils.dp(10) + padding: 10 Rectangle { anchors.horizontalCenter: parent.horizontalCenter height: radius * 2 width: radius * 2 radius: numberTwo.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberThree anchors.centerIn: parent text: "3" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -380,8 +397,8 @@ TutorialContent { height: radius * 2 width: radius * 2 radius: parent.width * 0.06 - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how y: (parent.height * 0.4) - (height / 2) x: (parent.width * 0.5) - (width / 2) @@ -404,21 +421,23 @@ TutorialContent { centerY: 0.5 } - Text { + GText { width: parent.width * 0.4 - text: qsTr("App on tablet or smartphone without NFC chip") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("App on tablet or smartphone without NFC chip") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.25) - (width / 2) y: (parent.height * 0.95) - (height / 2) } - Text { + GText { width: parent.width * 0.4 - text: qsTr("Android smartphone with NFC chip as card reader") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Smartphone with NFC chip as card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.95) - (height / 2) @@ -444,8 +463,8 @@ TutorialContent { width: parent.width * 0.95 height: methodBluetoothSection.height color: Constants.white - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how MouseArea { anchors.fill: parent @@ -456,17 +475,16 @@ TutorialContent { id: methodBluetoothSection width: parent.width spacing: Constants.component_spacing - padding: Utils.dp(10) + padding: 10 - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Using a bluetooth card reader") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Using a bluetooth card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Rectangle { @@ -474,15 +492,14 @@ TutorialContent { height: radius * 2 width: radius * 2 radius: numberFour.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberFour anchors.centerIn: parent text: "4" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -497,8 +514,8 @@ TutorialContent { height: radius * 2 width: radius * 2 radius: parent.width * 0.06 - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how y: (parent.height * 0.4) - (height / 2) x: (parent.width * 0.5) - (width / 2) @@ -521,21 +538,23 @@ TutorialContent { centerY: 0.5 } - Text { + GText { width: parent.width * 0.4 - text: qsTr("App on smartphone or tablet") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("App on smartphone or tablet") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.25) - (width / 2) y: (parent.height * 0.95) - (height / 2) } - Text { + GText { width: parent.width * 0.4 - text: qsTr("Bluetooth card reader") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Bluetooth card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.95) - (height / 2) @@ -556,18 +575,17 @@ TutorialContent { property alias text: textContent.text height: textContent.height + 2 * Constants.component_spacing width: parent.width - color: Constants.tutorial_blue + color: Style.color.tutorial_how - Text { + GText { id: textContent anchors.centerIn: parent color: Constants.white width: parent.width * 0.8 - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap - text: qsTr("Another tip") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Another tip") + SettingsModel.translationTrigger } } @@ -576,14 +594,13 @@ TutorialContent { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("For lenghty forms, e.g. a BAf\u00F6G application, we recommend you to use the AusweisApp2 on a computer...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("For lenghty forms, e.g. a BAf\u00F6G application, we recommend you to use the AusweisApp2 on a computer...") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Item { @@ -599,26 +616,26 @@ TutorialContent { centerY: 0.5 } - Text { + GText { width: parent.width * 0.5 - text: qsTr("Filling long forms is no fun on a smartphone!") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Filling long forms is no fun on a smartphone!") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap - color: Constants.tutorial_blue + color: Style.color.accent x: parent.width * 0.5 y: (parent.height * 0.5) - (height / 2) } } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("... and to use a smartphone to communicate with your ID card. A USB reader is of course also an alternative.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("... and to use a smartphone to communicate with your ID card. A USB reader is of course also an alternative.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialImage.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialImage.qml index 72b9a38..e1067fc 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialImage.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialImage.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 @@ -11,4 +15,6 @@ Image { y: (parent.height * centerY) - (height / 2) x: (parent.width * centerX) - (width / 2) + + asynchronous: true } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialImportant.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialImportant.qml index 7a05388..3d65695 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialImportant.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialImportant.qml @@ -1,20 +1,28 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.NumberModel 1.0 import Governikus.Type.ChangePinModel 1.0 + TutorialContent { id: baseItem - Text { + signal letsGoClicked() + + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: (settingsModel.language === "en" ? qsTr("Please exchange your") : qsTr("Before you use the online ID function please change the")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("Please exchange your") : qsTr("Before you use the online ID function please change the")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } TutorialSeperator { @@ -25,25 +33,23 @@ TutorialContent { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("5 digits long") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("5 digits long") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("transport PIN") + settingsModel.translationTrigger - font.family: "Noto Serif" + //: LABEL ANDROID IOS + text: qsTr("transport PIN") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true - font.pixelSize: Constants.tutorial_content_header_h1_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } TutorialImage { @@ -60,25 +66,23 @@ TutorialContent { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("with a personal") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("with a personal") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("6 digits long PIN") + settingsModel.translationTrigger - font.family: "Noto Serif" + //: LABEL ANDROID IOS + text: qsTr("6 digits long PIN") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true - font.pixelSize: Constants.tutorial_content_header_h1_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } TutorialImage { @@ -86,24 +90,22 @@ TutorialContent { source: "qrc:///images/tutorial/generated/important_pin6.svg" } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: (settingsModel.language === "en" ? qsTr("before you use the online ID function!") : qsTr("change!")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("before you use the online ID function!") : qsTr("change!")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("The transport PIN is send to you by the Bundesdruckerei via mail.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("The transport PIN is sent to you by the Bundesdruckerei via mail.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -115,27 +117,25 @@ TutorialContent { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Choose for this purpose the menu entry PIN management") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Choose for this purpose the menu entry PIN management") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Item { height: parent.width * 0.6 width: parent.width - Text { + GText { width: parent.width * 0.35 - text: qsTr("Later you can also change your personal PIN here") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("Later you can also change your personal PIN here") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.2) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -143,7 +143,8 @@ TutorialContent { TutorialImage { id: screenshot - source: qsTr("qrc:///images/tutorial/screenshot_pin_management_menu_en.png") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/screenshot_pin_management_menu_%1_en.png").arg(Constants.layout) + SettingsModel.translationTrigger z: 3 readonly property real rightX: x + width @@ -176,20 +177,20 @@ TutorialContent { } } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("... or click this button to change your PIN right now:") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("... or click this button to change your PIN right now:") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } GButton { anchors.horizontalCenter: parent.horizontalCenter anchors.margins: Constants.component_spacing - text: qsTr("Change PIN") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Change PIN") + SettingsModel.translationTrigger onClicked: { NumberModel.requestTransportPin = true ChangePinModel.startWorkflow() @@ -219,20 +220,24 @@ TutorialContent { } } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Learn more about this in the YouTube video") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Learn more about this in the YouTube video") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Item { width: parent.width height: letsGoImage.height + MouseArea { + anchors.fill: parent + onClicked: baseItem.letsGoClicked() + } + TutorialImage { id: letsGoImage width: parent.width @@ -242,13 +247,12 @@ TutorialContent { centerY: 0.5 } - Text { + GText { width: parent.width - text: qsTr("Let's go") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Let's go") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + textStyle: Style.text.tutorial_header color: Constants.white x: (parent.width * 0.5) - (width / 2) @@ -257,14 +261,13 @@ TutorialContent { } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Do you still have questions?") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Do you still have questions?") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { @@ -276,24 +279,22 @@ TutorialContent { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("You can read our FAQs or write to us...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("You can read our FAQs or write to us...") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: "%1
    %2
    %3".arg(qsTr("www.ausweisapp.bund.de")).arg(qsTr("or")).arg(qsTr("www.personalausweisportal.de")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: "%1
    %2
    %3".arg(qsTr("www.ausweisapp.bund.de")).arg(qsTr("or")).arg(qsTr("www.personalausweisportal.de")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.Wrap onLinkActivated: Qt.openUrlExternally(link) } } @@ -302,13 +303,14 @@ TutorialContent { source: "qrc:///images/tutorial/section_seperator_important.svg" } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("You can always access this tutorial again from the side bar.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("You can always access this tutorial again from the \"More\" section in the menu bar.") + : qsTr("You can always access this tutorial again from the side bar.")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodBluetooth.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodBluetooth.qml index 39eac98..7b15578 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodBluetooth.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodBluetooth.qml @@ -1,13 +1,24 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Tutorial: Bluetooth") + settingsModel.translationTrigger; font.bold: true } + + titleBarVisible: false + automaticSafeAreaMarginHandling: false + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + //: LABEL ANDROID IOS + title: qsTr("Tutorial: Bluetooth") + SettingsModel.translationTrigger signal quitTutorialClicked() @@ -28,20 +39,24 @@ SectionPage { height: content.contentHeight anchors.horizontalCenter: parent.horizontalCenter + Item { + id: statusBarSpacer + width: parent.width + height: statusBar.height + } Column { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Using a bluetooth card reader") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Using a bluetooth card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Rectangle { @@ -49,15 +64,14 @@ SectionPage { height: radius * 2 width: radius * 2 radius: numberFour.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberFour anchors.centerIn: parent text: "4" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -72,8 +86,8 @@ SectionPage { height: radius * 2 width: radius * 2 radius: parent.width * 0.06 - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how y: (parent.height * 0.4) - (height / 2) x: (parent.width * 0.5) - (width / 2) @@ -96,21 +110,23 @@ SectionPage { centerY: 0.5 } - Text { + GText { width: parent.width * 0.4 - text: qsTr("App on smartphone or tablet") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("App on smartphone or tablet") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.25) - (width / 2) y: (parent.height * 0.95) - (height / 2) } - Text { + GText { width: parent.width * 0.4 - text: qsTr("Bluetooth card reader") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Bluetooth card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.95) - (height / 2) @@ -132,14 +148,13 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: qsTr("You need a suitable card reader if you want to use the bluetooth connection.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("You need a suitable card reader if you want to use the bluetooth connection.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h1_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header } Image { @@ -154,28 +169,26 @@ SectionPage { width: parent.width height: Math.max(leftText.height, rightText.height) - Text { + GText { id: leftText width: parent.width * 0.4 anchors.left: parent.left - leftPadding: Utils.dp(30) - text: qsTr("Set the card reader visible first...") + settingsModel.translationTrigger + leftPadding: 30 + //: LABEL ANDROID IOS + text: qsTr("Set the card reader visible first...") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } - Text { + GText { id: rightText width: parent.width * 0.4 anchors.right: parent.right - rightPadding: Utils.dp(30) - text: qsTr("... and then pair it with your device.") + settingsModel.translationTrigger + rightPadding: 30 + //: LABEL ANDROID IOS + text: qsTr("... and then pair it with your device.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } } } @@ -195,14 +208,13 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.6 - text: qsTr("Click the link on the website of the service provider.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Click the link on the website of the service provider.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } } @@ -224,34 +236,32 @@ SectionPage { TutorialImage { id: userdataExample - source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + settingsModel.translationTrigger + source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + SettingsModel.translationTrigger width: parent.width * 0.8 centerX: 0.5 centerY: 0.75 } - Text { + GText { id: textOpenAutomatic width: parent.width * 0.6 - text: qsTr("The App opens automatically.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The App opens automatically.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_content x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0) - (height / 2) } - Text { + GText { id: textAccessWhoWhat width: parent.width * 0.6 - text: qsTr("The AusweisApp2 will display who wants to access which data.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The AusweisApp2 will display who wants to access which data.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0.2) - (height / 2) @@ -266,12 +276,12 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { id: startProcessText anchors.horizontalCenter: parent.horizontalCenter - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size - text: qsTr("Start the process with a click on:") + settingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary + //: LABEL ANDROID IOS + text: qsTr("Start the process with a click on:") + SettingsModel.translationTrigger } Row { @@ -290,7 +300,8 @@ SectionPage { GButton { id: identifyButton iconSource: "qrc:///images/npa.svg" - text: qsTr("Identify now") + settingsModel.translationTrigger; + //: LABEL ANDROID IOS + text: qsTr("Proceed to PIN entry") + SettingsModel.translationTrigger; animationsDisabled: true } } @@ -310,7 +321,7 @@ SectionPage { TutorialImage { id: screenshotIdentify - source: qsTr("qrc:///images/tutorial/screenshot_choose_reader_en.png") + settingsModel.translationTrigger + source: qsTr("qrc:///images/tutorial/screenshot_choose_reader_%1_en.png").arg(Constants.layout) + SettingsModel.translationTrigger width: parent.width * 0.5 centerX: 0.5 @@ -326,14 +337,13 @@ SectionPage { } } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Tap on Bluetooth") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Tap on Bluetooth") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h1_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header } } @@ -346,14 +356,13 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Insert card into card reader") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Insert card into card reader") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h1_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header } Image { @@ -364,14 +373,13 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("... and confirm the displayed information.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("... and confirm the displayed information.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h1_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header } } @@ -387,13 +395,12 @@ SectionPage { width: parent.width height: pin6Image.height + Constants.component_spacing * 2 - Text { + GText { width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.05) - (height / 2) @@ -409,28 +416,26 @@ SectionPage { centerX: 0.5 } - Text { + GText { width: parent.width - text: qsTr("6 digits long PIN") + settingsModel.translationTrigger - font.family: "Noto Serif" + //: LABEL ANDROID IOS + text: qsTr("6 digits long PIN") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true - font.pixelSize: Constants.tutorial_content_header_h1_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.2) - (height / 2) } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("now on the card reader!") : qsTr("enter on the card reader!")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("now on the card reader!") : qsTr("enter on the card reader!")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.9) - (height / 2) @@ -450,15 +455,14 @@ SectionPage { centerX: 0.2 } - Text { + GText { id: noticeText width: parent.width * 0.6 - text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -494,10 +498,17 @@ SectionPage { } } + TutorialStatusBar { + id: statusBar + + shaderSource: sectionPageFlickable + } + TutorialReaderMethodFooter { id: footer width: baseItem.width + shaderSource: sectionPageFlickable onMenuClicked: firePop() onQuitTutorialClicked: { firePop() diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodFooter.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodFooter.qml index 8281218..02facab 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodFooter.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodFooter.qml @@ -1,14 +1,23 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + TutorialFooter { id: footer width: baseItem.width anchors.horizontalCenter: parent.horizontalCenter - color: Constants.tutorial_blue + color: Style.color.accent anchors.bottom: parent.bottom backRotation: 180 - backText: qsTr("Back") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + backText: qsTr("Back") + SettingsModel.translationTrigger + state: "showBothOptions" } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodNfc.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodNfc.qml index 20c9617..f6a46ee 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodNfc.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodNfc.qml @@ -1,13 +1,24 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Tutorial: NFC") + settingsModel.translationTrigger; font.bold: true } + + titleBarVisible: false + automaticSafeAreaMarginHandling: false + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + //: LABEL ANDROID IOS + title: qsTr("Tutorial: NFC") + SettingsModel.translationTrigger signal quitTutorialClicked() @@ -28,19 +39,24 @@ SectionPage { height: content.contentHeight anchors.horizontalCenter: parent.horizontalCenter + Item { + id: statusBarSpacer + width: parent.width + height: statusBar.height + } + Column { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Direct connection via NFC chip") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Direct connection via NFC chip") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Rectangle { @@ -48,15 +64,14 @@ SectionPage { height: radius * 2 width: radius * 2 radius: numberOne.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberOne anchors.centerIn: parent text: "1" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -70,14 +85,15 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.6 - text: qsTr("App on Android smartphone with NFC chip as card reader") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("App on iPhone with NFC chip as card reader") + : qsTr("App on Android smartphone with NFC chip as card reader")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -100,13 +116,12 @@ SectionPage { width: parent.width } - Text { + GText { width: parent.width * 0.6 - text: qsTr("Click link on the website of the service provider.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Click link on the website of the service provider.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.9) - (height / 2) @@ -131,34 +146,32 @@ SectionPage { TutorialImage { id: userdataExample - source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + settingsModel.translationTrigger + source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + SettingsModel.translationTrigger width: parent.width * 0.8 centerX: 0.5 centerY: 0.75 } - Text { + GText { id: textOpenAutomatic width: parent.width * 0.6 - text: qsTr("The App opens automatically.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The App opens automatically.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_content x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0) - (height / 2) } - Text { + GText { id: textAccessWhoWhat width: parent.width * 0.6 - text: qsTr("The AusweisApp2 will display who wants to access which data.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The AusweisApp2 will display who wants to access which data.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0.2) - (height / 2) @@ -173,12 +186,12 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { id: startProcessText anchors.horizontalCenter: parent.horizontalCenter - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size - text: qsTr("Start the process with a click on:") + settingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary + //: LABEL ANDROID IOS + text: qsTr("Start the process with a click on:") + SettingsModel.translationTrigger } Row { @@ -197,7 +210,8 @@ SectionPage { GButton { id: identifyButton iconSource: "qrc:///images/npa.svg" - text: qsTr("Identify now") + settingsModel.translationTrigger; + //: LABEL ANDROID IOS + text: qsTr("Proceed to PIN entry") + SettingsModel.translationTrigger; animationsDisabled: true } } @@ -220,14 +234,15 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("... and place the id card flat onto the NFC interface.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("... and place the top of the iPhone onto the id card.") + : qsTr("... and place the id card flat onto the NFC interface.")) + + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } Item { @@ -243,14 +258,13 @@ SectionPage { centerX: 0.2 } - Text { + GText { width: parent.width * 0.6 - text: qsTr("Do not move device or id card!") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("Do not move device or id card!") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -259,12 +273,14 @@ SectionPage { } TutorialSeperator { + visible: Constants.is_layout_android source: "qrc:///images/tutorial/section_seperator_how.svg" } Item { width: parent.width height: nfcPosition.height + 2 * Constants.component_spacing + visible: Constants.is_layout_android TutorialImage { id: nfcPosition @@ -275,28 +291,26 @@ SectionPage { centerX: 0.35 } - Text { + GText { width: parent.width * 0.5 - text: qsTr("The correct position is specific for your device...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("The correct position is specific for your device...") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.4) - (height / 2) } - Text { + GText { width: parent.width * 0.5 - text: "%2".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")).arg(qsTr("To mobile devices")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: "%2".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")).arg(qsTr("To mobile devices")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true font.underline: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap onLinkActivated: Qt.openUrlExternally(link) x: (parent.width * 0.75) - (width / 2) @@ -316,13 +330,12 @@ SectionPage { width: parent.width height: pin6Image.height + Constants.component_spacing * 2 - Text { + GText { width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.05) - (height / 2) @@ -338,28 +351,26 @@ SectionPage { centerX: 0.5 } - Text { + GText { width: parent.width - text: qsTr("6 digits long PIN") + settingsModel.translationTrigger - font.family: "Noto Serif" + //: LABEL ANDROID IOS + text: qsTr("6 digits long PIN") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true - font.pixelSize: Constants.tutorial_content_header_h1_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.2) - (height / 2) } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.9) - (height / 2) @@ -379,15 +390,14 @@ SectionPage { centerX: 0.2 } - Text { + GText { id: noticeText2 width: parent.width * 0.6 - text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -423,10 +433,17 @@ SectionPage { } } + TutorialStatusBar { + id: statusBar + + shaderSource: sectionPageFlickable + } + TutorialReaderMethodFooter { id: footer width: baseItem.width + shaderSource: sectionPageFlickable onMenuClicked: firePop() onQuitTutorialClicked: { firePop() diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacDesktop.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacDesktop.qml index b36905c..39ab98a 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacDesktop.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacDesktop.qml @@ -1,13 +1,24 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Tutorial: Smartphone as card reader") + settingsModel.translationTrigger; font.bold: true } + + titleBarVisible: false + automaticSafeAreaMarginHandling: false + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + //: LABEL ANDROID IOS + title: qsTr("Tutorial: Smartphone as card reader") + SettingsModel.translationTrigger signal quitTutorialClicked() @@ -28,19 +39,24 @@ SectionPage { height: content.contentHeight anchors.horizontalCenter: parent.horizontalCenter + Item { + id: statusBarSpacer + width: parent.width + height: statusBar.height + } + Column { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Smartphone as card reader") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("Smartphone as card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Rectangle { @@ -48,15 +64,14 @@ SectionPage { height: radius * 2 width: radius * 2 radius: numberTwo.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberTwo anchors.centerIn: parent text: "2" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -71,8 +86,8 @@ SectionPage { height: radius * 2 width: radius * 2 radius: parent.width * 0.06 - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how y: (parent.height * 0.4) - (height / 2) x: (parent.width * 0.5) - (width / 2) @@ -95,21 +110,23 @@ SectionPage { centerY: 0.5 } - Text { + GText { width: parent.width * 0.4 - text: qsTr("App on computer without NFC chip") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("App on computer without NFC chip") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.25) - (width / 2) y: (parent.height * 0.95) - (height / 2) } - Text { + GText { width: parent.width * 0.4 - text: qsTr("Android smartphone with NFC chip as card reader") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Smartphone with NFC chip as card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.95) - (height / 2) @@ -130,14 +147,13 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Install AusweisApp2 on both your computer and your android smartphone with NFC ability.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Install AusweisApp2 on both your computer and your smartphone with NFC capability.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { @@ -165,15 +181,14 @@ SectionPage { source: "qrc:///images/tutorial/hint.svg" } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Both devices have to be connected to the same wifi network") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Both devices have to be connected to the same wifi network") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { @@ -193,18 +208,20 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Now enter \"Smartphone as card reader\" in the app on your android smartphone...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("Now choose \"Remote\" in the AusweisApp2 on your smartphone...") + : qsTr("Now choose \"Smartphone as card reader\" in the AusweisApp2 on your smartphone...")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { - source: qsTr("qrc:///images/tutorial/generated/reader_sac_menu_en.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/generated/reader_sac_menu_%1_en.svg").arg(Constants.layout) + SettingsModel.translationTrigger anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 height: width * (sourceSize.height / sourceSize.width) @@ -220,20 +237,20 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Now") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Now") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignRight - wrapMode: Text.WordWrap } GButton { id: remoteButton - buttonColor: "green" + buttonColor: Constants.green anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Start remote service") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Start remote service") + SettingsModel.translationTrigger animationsDisabled: true } @@ -246,19 +263,19 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Next") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Next") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignRight - wrapMode: Text.WordWrap } GButton { id: pairingButton anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Start pairing") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Start pairing") + SettingsModel.translationTrigger animationsDisabled: true } @@ -279,34 +296,32 @@ SectionPage { Rectangle { id: greyBackgroundRect anchors.horizontalCenter: parent.horizontalCenter - width: pairingCodeText.width - Utils.dp(40) + width: pairingCodeText.width - 40 height: width - color: Constants.tutorial_very_light_grey + color: Style.color.tutorial_box_background } - Text { + GText { id: pairingCodeText anchors.horizontalCenter: parent.horizontalCenter anchors.top: greyBackgroundRect.top - topPadding: Utils.dp(30) - text: qsTr("Pairing code") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + topPadding: 30 + //: LABEL ANDROID IOS + text: qsTr("Pairing code") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { id: appearingText anchors.bottom: greyBackgroundRect.bottom - bottomPadding: Utils.dp(30) + bottomPadding: 30 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("appears!") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("appears!") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } } @@ -327,24 +342,22 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: qsTr("Start the App now on your computer and enter the settings.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Start the App now on your computer and enter the settings.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: qsTr("Select the Card Readers tab.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Select the Card Readers tab.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -362,20 +375,20 @@ SectionPage { TutorialImage { id: desktopPairing - source: qsTr("qrc:///images/tutorial/screenshot_pairing_en.png") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/screenshot_pairing_en.png") + SettingsModel.translationTrigger width: parent.width * 0.6 } } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: qsTr("Select smartphone from list and click \"pair\"") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Select smartphone from list and click \"pair\"") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Item { @@ -391,14 +404,13 @@ SectionPage { centerX: 0.2 } - Text { + GText { width: parent.width * 0.6 - text: qsTr("Enter pairing code next.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("Enter pairing code next.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -421,14 +433,13 @@ SectionPage { width: parent.width * 0.5 } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.6 - text: qsTr("Click link on the website of the service provider.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Click link on the website of the service provider.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } } @@ -450,34 +461,33 @@ SectionPage { TutorialImage { id: userdataExample - source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + SettingsModel.translationTrigger width: parent.width * 0.8 centerX: 0.5 centerY: 0.75 } - Text { + GText { id: textOpenAutomatic width: parent.width * 0.6 - text: qsTr("The App opens automatically.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The App opens automatically.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_content x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0) - (height / 2) } - Text { + GText { id: textAccessWhoWhat width: parent.width * 0.6 - text: qsTr("The AusweisApp2 will display who wants to access which data.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The AusweisApp2 will display who wants to access which data.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0.2) - (height / 2) @@ -492,12 +502,12 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { id: startProcessText anchors.horizontalCenter: parent.horizontalCenter - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size - text: qsTr("Start the process with a click on:") + settingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary + //: LABEL ANDROID IOS + text: qsTr("Start the process with a click on:") + SettingsModel.translationTrigger } Row { @@ -516,7 +526,8 @@ SectionPage { GButton { id: identifyButton iconSource: "qrc:///images/npa.svg" - text: qsTr("Identify now") + settingsModel.translationTrigger; + //: LABEL ANDROID IOS + text: qsTr("Proceed to PIN entry") + SettingsModel.translationTrigger; animationsDisabled: true } } @@ -532,20 +543,20 @@ SectionPage { Image { anchors.horizontalCenter: parent.horizontalCenter - source: qsTr( "qrc:///images/tutorial/generated/where_lay_down_id.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr( "qrc:///images/tutorial/generated/where_lay_down_id.svg") + SettingsModel.translationTrigger width: parent.width * 0.8 height: width * (sourceSize.height / sourceSize.width) fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("... and place the id card flat onto the NFC interface.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("... and place the id card onto the NFC interface.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } Item { @@ -561,14 +572,13 @@ SectionPage { centerX: 0.2 } - Text { + GText { width: parent.width * 0.6 - text: qsTr("Do not move device or id card!") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("Do not move device or id card!") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -593,28 +603,26 @@ SectionPage { centerX: 0.35 } - Text { + GText { width: parent.width * 0.5 - text: qsTr("The correct position is specific for your device...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("The correct position is specific for your device...") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.4) - (height / 2) } - Text { + GText { width: parent.width * 0.5 - text: "%2".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")).arg(qsTr("To mobile devices")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: "%2".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")).arg(qsTr("To mobile devices")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true font.underline: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap onLinkActivated: Qt.openUrlExternally(link) x: (parent.width * 0.75) - (width / 2) @@ -634,13 +642,12 @@ SectionPage { width: parent.width height: pin6Image.height + Constants.component_spacing * 2 - Text { + GText { width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.05) - (height / 2) @@ -656,28 +663,26 @@ SectionPage { centerX: 0.5 } - Text { + GText { width: parent.width - text: qsTr("6 digits long PIN") + settingsModel.translationTrigger - font.family: "Noto Serif" + //: LABEL ANDROID IOS + text: qsTr("6 digits long PIN") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true - font.pixelSize: Constants.tutorial_content_header_h1_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.2) - (height / 2) } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.9) - (height / 2) @@ -697,15 +702,14 @@ SectionPage { centerX: 0.2 } - Text { + GText { id: noticeText2 width: parent.width * 0.6 - text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -741,10 +745,17 @@ SectionPage { } } + TutorialStatusBar { + id: statusBar + + shaderSource: sectionPageFlickable + } + TutorialReaderMethodFooter { id: footer width: baseItem.width + shaderSource: sectionPageFlickable onMenuClicked: firePop() onQuitTutorialClicked: { firePop() diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacMobile.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacMobile.qml index 7183fbd..5c2f621 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacMobile.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialReaderMethodSacMobile.qml @@ -1,13 +1,24 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: baseItem - leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() } - headerTitleBarAction: TitleBarAction { text: qsTr("Tutorial: Smartphone as card reader") + settingsModel.translationTrigger; font.bold: true } + + titleBarVisible: false + automaticSafeAreaMarginHandling: false + navigationAction: NavigationAction { state: "back"; onClicked: firePop() } + //: LABEL ANDROID IOS + title: qsTr("Tutorial: Smartphone as card reader") + SettingsModel.translationTrigger signal quitTutorialClicked() @@ -28,6 +39,12 @@ SectionPage { height: content.contentHeight anchors.horizontalCenter: parent.horizontalCenter + Item { + id: statusBarSpacer + width: parent.width + height: statusBar.height + } + Column { width: parent.width spacing: Constants.component_spacing @@ -37,15 +54,14 @@ SectionPage { height: radius * 2 width: radius * 2 radius: numberTwo.height - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how - Text { + GText { id: numberThree anchors.centerIn: parent text: "3" - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + textStyle: Style.text.tutorial_header_secondary font.bold: true horizontalAlignment: Text.AlignHCenter } @@ -60,8 +76,8 @@ SectionPage { height: radius * 2 width: radius * 2 radius: parent.width * 0.06 - border.width: Utils.dp(3) - border.color: Constants.tutorial_blue + border.width: 3 + border.color: Style.color.tutorial_how y: (parent.height * 0.4) - (height / 2) x: (parent.width * 0.5) - (width / 2) @@ -84,21 +100,23 @@ SectionPage { centerY: 0.5 } - Text { + GText { width: parent.width * 0.4 - text: qsTr("App on tablet or smartphone without NFC chip") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("App on tablet or smartphone without NFC chip") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.25) - (width / 2) y: (parent.height * 0.95) - (height / 2) } - Text { + GText { width: parent.width * 0.4 - text: qsTr("Android smartphone with NFC chip as card reader") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Smartphone with NFC chip as card reader") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.95) - (height / 2) @@ -119,14 +137,13 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Install AusweisApp2 on both your device without NFC and your android smartphone with NFC ability.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Install AusweisApp2 on both your device without NFC and your smartphone with NFC capability.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { @@ -154,15 +171,14 @@ SectionPage { source: "qrc:///images/tutorial/hint.svg" } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Both devices have to be connected to the same wifi network") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Both devices have to be connected to the same wifi network") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { @@ -187,18 +203,20 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Now enter \"Smartphone as card reader\" in the app on your android smartphone with...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("Now choose \"Remote\" in the AusweisApp2 on your smartphone...") + : qsTr("Now choose \"Smartphone as card reader\" in the AusweisApp2 on your smartphone...")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { - source: qsTr("qrc:///images/tutorial/generated/reader_sac_menu_en.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/generated/reader_sac_menu_%1_en.svg").arg(Constants.layout) + SettingsModel.translationTrigger anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 height: width * (sourceSize.height / sourceSize.width) @@ -214,20 +232,20 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Now") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Now") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignRight - wrapMode: Text.WordWrap } GButton { id: remoteButton - buttonColor: "green" + buttonColor: Constants.green anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Start remote service") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Start remote service") + SettingsModel.translationTrigger animationsDisabled: true } @@ -240,19 +258,19 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Next") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Next") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignRight - wrapMode: Text.WordWrap } GButton { id: pairingButton anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Start pairing") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Start pairing") + SettingsModel.translationTrigger animationsDisabled: true } @@ -273,34 +291,32 @@ SectionPage { Rectangle { id: greyBackgroundRect anchors.horizontalCenter: parent.horizontalCenter - width: pairingCodeText.width - Utils.dp(40) + width: pairingCodeText.width - 40 height: width - color: Constants.tutorial_very_light_grey + color: Style.color.tutorial_box_background } - Text { + GText { id: pairingCodeText anchors.horizontalCenter: parent.horizontalCenter anchors.top: greyBackgroundRect.top - topPadding: Utils.dp(30) - text: qsTr("Pairing code") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + topPadding: 30 + //: LABEL ANDROID IOS + text: qsTr("Pairing code") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { id: appearingText anchors.bottom: greyBackgroundRect.bottom - bottomPadding: Utils.dp(30) + bottomPadding: 30 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("appears!") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("appears!") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } } @@ -326,24 +342,24 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Now open the app on your device without NFC and select Smartphone as card reader.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("Now open the AusweisApp2 on your device without NFC and select Configure remote service.") + : qsTr("Now open the AusweisApp2 on your device without NFC and select Smartphone as card reader.")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Now select Settings.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Now select Settings.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -363,14 +379,13 @@ SectionPage { fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.7 - text: qsTr("Choose smartphone from list") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Choose smartphone from list") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Item { @@ -386,14 +401,13 @@ SectionPage { centerX: 0.2 } - Text { + GText { width: parent.width * 0.6 - text: qsTr("Enter pairing code next.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("Enter pairing code next.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -421,14 +435,13 @@ SectionPage { width: parent.width * 0.5 } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.6 - text: qsTr("Click link on the website of the service provider on the device without NFC.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Click link on the website of the service provider on the device without NFC.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } } @@ -450,34 +463,33 @@ SectionPage { TutorialImage { id: userdataExample - source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg") + SettingsModel.translationTrigger width: parent.width * 0.8 centerX: 0.5 centerY: 0.75 } - Text { + GText { id: textOpenAutomatic width: parent.width * 0.6 - text: qsTr("The App opens automatically.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The App opens automatically.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_content x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0) - (height / 2) } - Text { + GText { id: textAccessWhoWhat width: parent.width * 0.6 - text: qsTr("The AusweisApp2 will display who wants to access which data.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("The AusweisApp2 will display who wants to access which data.") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary x: (parent.width * 0.7) - (width / 2) y: (parent.height * 0.2) - (height / 2) @@ -492,12 +504,12 @@ SectionPage { width: parent.width spacing: Constants.component_spacing - Text { + GText { id: startProcessText anchors.horizontalCenter: parent.horizontalCenter - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size - text: qsTr("Start the process with a click on:") + settingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary + //: LABEL ANDROID IOS + text: qsTr("Start the process with a click on:") + SettingsModel.translationTrigger } Row { @@ -516,7 +528,8 @@ SectionPage { GButton { id: identifyButton iconSource: "qrc:///images/npa.svg" - text: qsTr("Identify now") + settingsModel.translationTrigger; + //: LABEL ANDROID IOS + text: qsTr("Proceed to PIN entry") + SettingsModel.translationTrigger; animationsDisabled: true } } @@ -536,7 +549,8 @@ SectionPage { TutorialImage { id: screenshotIdentify - source: qsTr("qrc:///images/tutorial/screenshot_choose_reader_en.png") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/screenshot_choose_reader_%1_en.png").arg(Constants.layout) + SettingsModel.translationTrigger width: parent.width * 0.5 centerX: 0.5 @@ -552,14 +566,13 @@ SectionPage { } } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Tap on Wifi") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Tap on Wifi") + SettingsModel.translationTrigger horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h1_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header } } @@ -573,20 +586,21 @@ SectionPage { Image { anchors.horizontalCenter: parent.horizontalCenter - source: qsTr( "qrc:///images/tutorial/generated/where_lay_down_id.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr( "qrc:///images/tutorial/generated/where_lay_down_id.svg") + SettingsModel.translationTrigger width: parent.width * 0.8 height: width * (sourceSize.height / sourceSize.width) fillMode: Image.PreserveAspectFit } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("... and place the id card flat onto the NFC interface.") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("... and place the id card onto the NFC interface.") + SettingsModel.translationTrigger + horizontalAlignment: Text.AlignHCenter - font.pixelSize: Constants.tutorial_content_header_h2_font_size - font.family: "Noto Serif" - wrapMode: Text.WordWrap + textStyle: Style.text.tutorial_header_secondary } Item { @@ -602,14 +616,13 @@ SectionPage { centerX: 0.2 } - Text { + GText { width: parent.width * 0.6 - text: qsTr("Do not move device or id card!") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("Do not move device or id card!") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -634,28 +647,26 @@ SectionPage { centerX: 0.35 } - Text { + GText { width: parent.width * 0.5 - text: qsTr("The correct position is specific for your device...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("The correct position is specific for your device...") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.4) - (height / 2) } - Text { + GText { width: parent.width * 0.5 - text: "%2".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")).arg(qsTr("To mobile devices")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: "%2".arg(qsTr("https://www.ausweisapp.bund.de/mobile-geraete/")).arg(qsTr("To mobile devices")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary font.bold: true font.underline: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap onLinkActivated: Qt.openUrlExternally(link) x: (parent.width * 0.75) - (width / 2) @@ -675,13 +686,12 @@ SectionPage { width: parent.width height: pin6Image.height + Constants.component_spacing * 2 - Text { + GText { width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.05) - (height / 2) @@ -697,28 +707,26 @@ SectionPage { centerX: 0.5 } - Text { + GText { width: parent.width - text: qsTr("6 digits long PIN") + settingsModel.translationTrigger - font.family: "Noto Serif" + //: LABEL ANDROID IOS + text: qsTr("6 digits long PIN") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true - font.pixelSize: Constants.tutorial_content_header_h1_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.2) - (height / 2) } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.9) - (height / 2) @@ -738,15 +746,14 @@ SectionPage { centerX: 0.2 } - Text { + GText { id: noticeText2 width: parent.width * 0.6 - text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content font.bold: true horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.65) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -782,10 +789,17 @@ SectionPage { } } + TutorialStatusBar { + id: statusBar + + shaderSource: sectionPageFlickable + } + TutorialReaderMethodFooter { id: footer width: baseItem.width + shaderSource: sectionPageFlickable onMenuClicked: firePop() onQuitTutorialClicked: { firePop() diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialSeperator.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialSeperator.qml index 7a7c9ca..8cd4e1b 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialSeperator.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialSeperator.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialSpacer.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialSpacer.qml index bf5fb01..c07972c 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialSpacer.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialSpacer.qml @@ -1,19 +1,22 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 Rectangle { property alias text: textContent.text height: textContent.height + 2 * Constants.component_spacing - Text { + GText { id: textContent anchors.centerIn: parent color: Constants.white width: parent.width * 0.8 - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialStatusBar.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialStatusBar.qml new file mode 100644 index 0000000..cf491c1 --- /dev/null +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialStatusBar.qml @@ -0,0 +1,34 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtGraphicalEffects 1.0 + +import Governikus.Global 1.0 + + +Item { + property alias shaderSource: effectSource.sourceItem + + anchors.top: parent.top + height: plugin.safeAreaMargins.top + width: parent.width + + ShaderEffectSource { + id: effectSource + anchors.fill: parent + sourceRect: Qt.rect(parent.x, parent.y, parent.width, parent.height) + } + FastBlur { + anchors.fill: effectSource + source: effectSource + radius: 32 + } + ColorOverlay { + anchors.fill: parent + color: footer.color + Behavior on color { ColorAnimation { duration: Constants.animation_duration } } + opacity: 0.7 + } +} diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialView.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialView.qml index 3f321ac..a9d6f76 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialView.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 @@ -5,21 +9,28 @@ import QtQml.Models 2.10 import QtQml 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + SectionPage { id: root property int lastYPosition: 0 property var lastVisibleItem - property int contentWidth: Constants.is_tablet ? root.width * 0.5 : root.width + property int contentWidth: Math.min(Style.dimens.max_text_width, root.width) - leftTitleBarAction: TitleBarAction { - state: topLevelPage ? "" : "back"; + titleBarVisible: false + automaticSafeAreaMarginHandling: false + navigationAction: NavigationAction { + // On iOS we want to go back to the MoreView even when a section is expanded. + state: topLevelPage ? root.state : "back"; onClicked: state == "back" ? leaveView() : root.state = "" } - headerTitleBarAction: TitleBarAction { id: header; text: qsTr("Tutorial") + settingsModel.translationTrigger; font.bold: true } + //: LABEL ANDROID IOS + title: qsTr("Tutorial") + SettingsModel.translationTrigger onVisibleChanged: { if (visible) { @@ -113,7 +124,8 @@ SectionPage { state = "" collapseAllAnimation.start() navBar.lockedAndHidden = false - if (Constants.is_layout_ios){ + SettingsModel.showSetupAssistantOnStart = false + if (navBar.state === "more") { firePop() } else { navBar.state = "identify" @@ -162,14 +174,16 @@ SectionPage { color: Constants.white } - Flickable { + GFlickable { id: flickable - height: parent.height - footer.height + + height: parent.height width: root.width + topMargin: statusBar.height + scrollBarTopPadding: plugin.safeAreaMargins.top + scrollBarBottomPadding: footer.height contentWidth: flickableContent.width contentHeight: flickableContent.height - maximumFlickVelocity: Constants.scrolling_speed - flickableDirection: Flickable.VerticalFlick Item { width: root.width @@ -183,10 +197,11 @@ SectionPage { TutorialHeader { id: whatHeader width: root.width - height: (flickable.height / 13.0 ) * 3.0 + height: ((flickable.height - flickable.topMargin - footer.height) / 13.0 ) * 3.0 headerImageSource: "qrc:///images/tutorial/main_menu_what_caret.svg" categoryAbove: false - titleText: qsTr("What?") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + titleText: qsTr("What?") + SettingsModel.translationTrigger initY: 0 z: 40 @@ -220,9 +235,10 @@ SectionPage { TutorialHeader { id: whereHeader width: root.width - height: (flickable.height / 13.0 ) * 3.0 + height: ((flickable.height - flickable.topMargin - footer.height) / 13.0 ) * 3.0 headerImageSource: "qrc:///images/tutorial/main_menu_where_caret.svg" - titleText: qsTr("Where?") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + titleText: qsTr("Where?") + SettingsModel.translationTrigger initY: whatHeader.height z: 30 @@ -256,9 +272,10 @@ SectionPage { TutorialHeader { id: howHeader width: root.width - height: (flickable.height / 13.0 ) * 3.0 + height: ((flickable.height - flickable.topMargin - footer.height) / 13.0 ) * 3.0 headerImageSource: "qrc:///images/tutorial/main_menu_how_caret.svg" - titleText: qsTr("How?") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + titleText: qsTr("How?") + SettingsModel.translationTrigger initY: whatHeader.height + whereHeader.height z: 20 @@ -297,10 +314,11 @@ SectionPage { TutorialHeader { id: importantHeader width: root.width - height: (flickable.height / 13.0 ) * 4.0 + height: ((flickable.height - flickable.topMargin - footer.height) / 13.0 ) * 4.0 overlapping: false headerImageSource: "qrc:///images/tutorial/main_menu_important_caret.svg" - titleText: qsTr("Important!") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + titleText: qsTr("Important!") + SettingsModel.translationTrigger initY: whatHeader.height + whereHeader.height + howHeader.height z: 10 @@ -329,19 +347,37 @@ SectionPage { id: importantContent width: root.contentWidth anchors.horizontalCenter: parent.horizontalCenter + + onLetsGoClicked: leaveView() + } + + // We could use a bottom margin instead of this rectangle, but that would result in the content suddenly + // disappearing below the TutorialFooter at the end of the collapse animation (because the section's + // content is NOT clipped between its two surrounding TutorialHeaders). + Rectangle { + color: Constants.white + width: root.width + height: footer.height } } } } + TutorialStatusBar { + id: statusBar + + shaderSource: flickable + } + TutorialFooter { id: footer width: root.width anchors.horizontalCenter: parent.horizontalCenter - color: importantContent.visible && flickable.contentY > importantHeader.y - 1? Constants.tutorial_red - : howContent.visible && flickable.contentY > howHeader.y - 1? Constants.tutorial_blue - : whereContent.visible && flickable.contentY > whereHeader.y - 1? Constants.tutorial_green - : Constants.tutorial_orange + color: importantContent.visible && flickable.contentY > importantHeader.y - 1 ? Style.color.tutorial_important + : howContent.visible && flickable.contentY > howHeader.y - 1 ? Style.color.tutorial_how + : whereContent.visible && flickable.contentY > whereHeader.y - 1 ? Style.color.tutorial_where + : Style.color.tutorial_what + shaderSource: flickable anchors.bottom: parent.bottom backToMenuActive: root.state !== "" diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialWhat.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialWhat.qml index 5a14465..c1c6fcd 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialWhat.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialWhat.qml @@ -1,6 +1,13 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + TutorialContent { id: baseItem @@ -9,22 +16,20 @@ TutorialContent { width: parent.width * 0.9 anchors.horizontalCenter: parent.horizontalCenter - Text { + GText { width: parent.width - text: qsTr("What is the online ID function?") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("What is the online ID function?") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.italic: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { width: parent.width - text: qsTr("You can authenticate yourself in the internet") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("You can use it to authenticate yourself in the internet") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -45,7 +50,7 @@ TutorialContent { width: parent.width * 0.6 height: width radius: width * 0.5 - color: Constants.tutorial_very_light_grey + color: Style.color.tutorial_box_background x: (parent.width * 0.5) - (width / 2) } @@ -81,43 +86,41 @@ TutorialContent { } } - Text { + GText { width: parent.width * 0.9 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("and use it to deal with administrative paperwork and business matters electronically!") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("and also to deal with administrative paperwork and business matters electronically!") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } TutorialSpacer { width: parent.width - text: qsTr("Alright, but is it secure?") + settingsModel.translationTrigger - color: Constants.tutorial_orange + //: LABEL ANDROID IOS + text: qsTr("Alright, but is it secure?") + SettingsModel.translationTrigger + color: Style.color.tutorial_what } Column { width: parent.width * 0.9 anchors.horizontalCenter: parent.horizontalCenter - Text { + GText { width: parent.width - text: qsTr("Of course, because we use a so called") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("Of course, because we use a so called") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } - Text { + GText { width: parent.width - text: qsTr("Mutual authentication") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Mutual authentication") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -188,14 +191,13 @@ TutorialContent { } } - Text { + GText { width: parent.width * 0.9 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("... it establishes a secure connection between ID document and service provider.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("... it establishes a secure connection between ID document and service provider.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } } @@ -212,13 +214,12 @@ TutorialContent { height: parent.width * 0.6 width: parent.width - Text { + GText { width: parent.width * 0.35 - text: qsTr("On every authentication you get displayed who wants to access which data") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("On every authentication you get displayed who wants to access which data") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.2) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -226,7 +227,8 @@ TutorialContent { TutorialImage { id: screenshot - source: qsTr("qrc:///images/tutorial/screenshot_cert_en.png") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/screenshot_cert_%1_en.png").arg(Constants.layout) + SettingsModel.translationTrigger z: 3 readonly property real rightX: x + width @@ -259,14 +261,13 @@ TutorialContent { } } - Text { + GText { width: parent.width * 0.95 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("and you consent to the request with your personal PIN.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("and you consent to the request with your personal PIN.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Item { @@ -301,37 +302,35 @@ TutorialContent { width: parent.width * 0.6 height: width radius: width * 0.5 - color: Constants.tutorial_very_light_grey + color: Style.color.tutorial_box_background z: 1 x: (parent.width * 0.5) - (width / 2) } - Text { + GText { width: parent.width - text: qsTr("... is the provider authorized for this?") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("... is the provider authorized for this?") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.3) - (height / 2) } - Text { - width: parent.width - text: qsTr("The provider needs an authorization of the Federal Office of Administration.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + GText { + width: parent.width - 2 * Constants.component_spacing + //: LABEL ANDROID IOS + text: qsTr("The provider needs an authorization of the Federal Office of Administration.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 x: (parent.width * 0.5) - (width / 2) - y: (parent.height * 0.5) - (height / 2) + y: (parent.height * 0.5) } } @@ -339,14 +338,13 @@ TutorialContent { width: parent.width height: parent.width * 0.3 - Text { + GText { width: parent.width - text: qsTr("Certificate") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Certificate") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 1 x: (parent.width * 0.2) - (width / 2) @@ -422,37 +420,36 @@ TutorialContent { } } - Text { + GText { width: parent.width * 0.9 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Everytime both participants authenticate each other...") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Everytime both participants authenticate each other...") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 1 } } TutorialSpacer { width: parent.width - text: qsTr("... and therefore your data is protected and securely transfered.") + settingsModel.translationTrigger - color: Constants.tutorial_orange + //: LABEL ANDROID IOS + text: qsTr("... and therefore your data is protected and securely transfered.") + SettingsModel.translationTrigger + color: Style.color.tutorial_what } Column { width: parent.width spacing: Constants.component_spacing - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: qsTr("You can also watch a video on YouTube on this topic") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("You can also watch a video on YouTube on this topic") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 } @@ -466,6 +463,7 @@ TutorialContent { MouseArea { anchors.fill: parent + //: LABEL ANDROID IOS onClicked: Qt.openUrlExternally(qsTr("https://www.youtube.com/watch?v=fzbUZmHaZp4&index=5&list=PLLB5ERhVkn25qQXgMHQr-1KgyZsJKoSAm")) } } diff --git a/resources/qml/Governikus/TutorialView/+mobile/TutorialWhere.qml b/resources/qml/Governikus/TutorialView/+mobile/TutorialWhere.qml index 725da4e..8afc46c 100644 --- a/resources/qml/Governikus/TutorialView/+mobile/TutorialWhere.qml +++ b/resources/qml/Governikus/TutorialView/+mobile/TutorialWhere.qml @@ -1,19 +1,25 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.SettingsModel 1.0 + TutorialContent { id: baseItem - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("Where can I use the online ID function?") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("Where can I use the online ID function?") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.italic: true horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } TutorialSeperator { @@ -32,14 +38,13 @@ TutorialContent { source: "qrc:///images/tutorial/section_seperator_where.svg" } - Text { + GText { width: parent.width * 0.9 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("On every website of a service provider where you see this icon:") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("On every website of a service provider where you see this icon:") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { @@ -52,14 +57,13 @@ TutorialContent { } - Text { + GText { width: parent.width * 0.8 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("By the way, you can find many services directly in the AusweisApp2 provider list.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + //: LABEL ANDROID IOS + text: qsTr("By the way, you can find many services directly in the AusweisApp2 provider list.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } TutorialSeperator { @@ -67,9 +71,21 @@ TutorialContent { } Image { - source: qsTr("qrc:///images/tutorial/generated/where_providerlist_screenshot_en.svg") + settingsModel.translationTrigger + //: LABEL ANDROID + source: qsTr("qrc:///images/tutorial/generated/where_providerlist_screenshot_android_en.svg") + SettingsModel.translationTrigger width: parent.width height: width * (sourceSize.height / sourceSize.width) + visible: Constants.is_layout_android + fillMode: Image.PreserveAspectFit + } + + Image { + anchors.horizontalCenter: parent.horizontalCenter + //: LABEL IOS + source: qsTr("qrc:///images/tutorial/screenshot_providerlist_ios_en.png") + SettingsModel.translationTrigger + width: parent.width * 0.6 + height: width * (sourceSize.height / sourceSize.width) + visible: Constants.is_layout_ios fillMode: Image.PreserveAspectFit } @@ -77,33 +93,32 @@ TutorialContent { source: "qrc:///images/tutorial/section_seperator_where.svg" } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.9 - text: qsTr("The integrated self-disclosure is a special service to view the data saved on your ID card.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("The integrated self-disclosure is a special service to view the data saved on your ID card.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } TutorialSeperator { source: "qrc:///images/tutorial/section_seperator_where.svg" } - Text { + GText { width: parent.width * 0.8 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("You can access it by clicking \"See my personal data\" on the AusweisApp2 start page, followed by \"Identify now\"") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h2_font_size + //: LABEL ANDROID IOS + text: qsTr("You can access the self-disclosure by clicking \"See my personal data\" on the AusweisApp2 start page, followed by \"Proceed to PIN entry\"") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header_secondary horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { anchors.horizontalCenter: parent.horizontalCenter - source: qsTr("qrc:///images/tutorial/generated/where_identify_now_en.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/generated/where_identify_now_en.svg") + SettingsModel.translationTrigger width: parent.width height: width * (sourceSize.height / sourceSize.width) fillMode: Image.PreserveAspectFit @@ -111,23 +126,24 @@ TutorialContent { TutorialSpacer { width: parent.width - text: qsTr("And this is how it works") + settingsModel.translationTrigger - color: Constants.tutorial_green + //: LABEL ANDROID IOS + text: qsTr("And this is how it works") + SettingsModel.translationTrigger + color: Style.color.tutorial_where } - Text { + GText { width: parent.width * 0.9 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("The AusweisApp2 will always display who wants to access which of your data.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: qsTr("The AusweisApp2 will always display who wants to access which of your data.") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Image { anchors.horizontalCenter: parent.horizontalCenter - source: qsTr("qrc:///images/tutorial/generated/where_userdata_example_en.svg") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + source: qsTr("qrc:///images/tutorial/generated/where_userdata_example_en.svg") + SettingsModel.translationTrigger width: parent.width * 0.8 height: width * (sourceSize.height / sourceSize.width) fillMode: Image.PreserveAspectFit @@ -145,14 +161,15 @@ TutorialContent { fillMode: Image.PreserveAspectFit } - Text { + GText { width: parent.width * 0.8 anchors.horizontalCenter: parent.horizontalCenter - text: qsTr("Now lay down your ID card and place your device on the ID card.") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("Now lay down your ID card and hold the top of your iPhone to the ID card.") + : qsTr("Now lay down your ID card and place your device on the ID card.")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap } Item { @@ -168,13 +185,14 @@ TutorialContent { centerX: 0.2 } - Text { - width: parent.width * 0.6 - text: qsTr("Don't move your device during the procedure!") + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_font_size + GText { + width: parent.width * 0.5 + //: LABEL ANDROID IOS + text: (Constants.is_layout_ios ? qsTr("Don't move your iPhone during the procedure!") + : qsTr("Don't move your device during the procedure!")) + + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_content horizontalAlignment: Text.AlignLeft - wrapMode: Text.WordWrap x: (parent.width * 0.75) - (width / 2) y: (parent.height * 0.5) - (height / 2) @@ -189,13 +207,12 @@ TutorialContent { width: parent.width height: pin6Image.height + Constants.component_spacing * 2 - Text { + GText { width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("Enter") : qsTr("Now")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.05) - (height / 2) @@ -211,28 +228,26 @@ TutorialContent { centerX: 0.5 } - Text { + GText { width: parent.width - text: qsTr("6 digits long PIN") + settingsModel.translationTrigger - font.family: "Noto Serif" + //: LABEL ANDROID IOS + text: qsTr("6 digits long PIN") + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header font.bold: true - font.pixelSize: Constants.tutorial_content_header_h1_font_size horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap z: 2 x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.2) - (height / 2) } - Text { + GText { anchors.horizontalCenter: parent.horizontalCenter width: parent.width * 0.8 - text: (settingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + settingsModel.translationTrigger - font.family: "Noto Serif" - font.pixelSize: Constants.tutorial_content_header_h1_font_size + //: LABEL ANDROID IOS + text: (SettingsModel.language === "en" ? qsTr("now!") : qsTr("enter!")) + SettingsModel.translationTrigger + textStyle: Style.text.tutorial_header horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap x: (parent.width * 0.5) - (width / 2) y: (parent.height * 0.9) - (height / 2) diff --git a/resources/qml/Governikus/TutorialView/qmldir b/resources/qml/Governikus/TutorialView/qmldir index 9e53a1f..7976d7a 100644 --- a/resources/qml/Governikus/TutorialView/qmldir +++ b/resources/qml/Governikus/TutorialView/qmldir @@ -10,6 +10,7 @@ internal TutorialImage TutorialImage.qml internal TutorialFooter TutorialFooter.qml internal TutorialSeperator TutorialSeperator.qml internal TutorialSpacer TutorialSpacer.qml +internal TutorialStatusBar TutorialStatusBar.qml internal TutorialReaderMethodNfc TutorialReaderMethodNfc.qml internal TutorialReaderMethodSacMobile TutorialReaderMethodSacMobile.qml internal TutorialReaderMethodSacDesktop TutorialReaderMethodSacDesktop.qml @@ -17,4 +18,9 @@ internal TutorialReaderMethodBluetooth TutorialReaderMethodBluetooth.qml internal TutorialReaderMethodFooter TutorialReaderMethodFooter.qml internal TutorialExpandAnimation TutorialExpandAnimation.qml internal TutorialCollapseAnimation TutorialCollapseAnimation.qml +internal SetupAssistantBinaryDecisionView SetupAssistantBinaryDecisionView.qml +internal SetupAssistantCardReaderView SetupAssistantCardReaderView.qml +internal SetupAssistantButton SetupAssistantButton.qml + +SetupAssistantView 1.0 SetupAssistantView.qml TutorialView 1.0 TutorialView.qml diff --git a/resources/qml/Governikus/View/+desktop/Controller.qml b/resources/qml/Governikus/View/+desktop/Controller.qml new file mode 100644 index 0000000..03e77b7 --- /dev/null +++ b/resources/qml/Governikus/View/+desktop/Controller.qml @@ -0,0 +1,9 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +Item { + signal nextView(int pName) +} diff --git a/resources/qml/Governikus/View/+desktop/FocusFrame.qml b/resources/qml/Governikus/View/+desktop/FocusFrame.qml index f22e01d..6f17b3b 100644 --- a/resources/qml/Governikus/View/+desktop/FocusFrame.qml +++ b/resources/qml/Governikus/View/+desktop/FocusFrame.qml @@ -1,21 +1,31 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 Rectangle { + id: baseItem + property Item framee: parent property Item scope: parent property real marginFactor: 1 + property bool dynamic: true - readonly property real size: Math.max(Math.min(framee.width, framee.height) / 32, 1) + readonly property real staticSize: Math.max(ApplicationModel.scaleFactor * 4, 1) + readonly property real dynamicSize: Math.max(Math.min(framee.width, framee.height) / 32, 1) + readonly property real size: dynamic ? dynamicSize : staticSize - id: border anchors.fill: framee anchors.margins: marginFactor * -size * 2 radius: size * 2 - border.width: scope.focus ? size : 0; + border.width: scope.activeFocus ? size : 0; border.color: Constants.white opacity: 0.5 - color: "transparent" + color: Style.color.transparent } diff --git a/resources/qml/Governikus/View/+desktop/FocusPoint.qml b/resources/qml/Governikus/View/+desktop/FocusPoint.qml new file mode 100644 index 0000000..059440b --- /dev/null +++ b/resources/qml/Governikus/View/+desktop/FocusPoint.qml @@ -0,0 +1,29 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.Type.ApplicationModel 1.0 + + +Text { + id: border + + property Item scope: parent + + width: height + horizontalAlignment: Text.AlignHCenter + + anchors.top: parent.top + anchors.left: parent.left + + visible: scope.activeFocus + + text: "✱" + opacity: 0.5 + color: Style.text.hint.textColor + font.pixelSize: Style.text.hint.textSize +} diff --git a/resources/qml/Governikus/View/+desktop/FramedImage.qml b/resources/qml/Governikus/View/+desktop/FramedImage.qml new file mode 100644 index 0000000..f45f4e9 --- /dev/null +++ b/resources/qml/Governikus/View/+desktop/FramedImage.qml @@ -0,0 +1,37 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 + + +Item { + property alias border: frame.border + property alias source: image.source + property bool circularFrame: true + + Rectangle { + id: frame + + color: Style.color.transparent + border.width: height/20 + border.color: Constants.white + anchors.fill: parent + anchors.centerIn: parent + radius: circularFrame ? width/2 : 0 + } + + Image { + id: image + + fillMode: Image.PreserveAspectFit + anchors.margins: frame.border.width * 2 + anchors.centerIn: frame + anchors.fill: frame + sourceSize.height: frame.height + sourceSize.width: frame.width + } +} diff --git a/resources/qml/Governikus/View/+desktop/SectionPage.qml b/resources/qml/Governikus/View/+desktop/SectionPage.qml index 1ce8016..c18ee0c 100644 --- a/resources/qml/Governikus/View/+desktop/SectionPage.qml +++ b/resources/qml/Governikus/View/+desktop/SectionPage.qml @@ -1,20 +1,44 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 +import QtQuick.Controls 2.3 import Governikus.TitleBar 1.0 +import Governikus.View 1.0 -Item { +Controller { + id: controller + + // Keep in sync with the order/length main.qml contentLoader sectionPages enum Views { - Main = 1, + Main = 0, + SelfAuthentication, Identify, - Provider + ChangePin, + Provider, + Information, + Settings, + History, + SetupAssistant + } + + property bool isAbstract: false + property TitleBarAction titleBarAction: null + readonly property bool sectionPageTypeMarker: true + function setActive() { + if (visible && !isAbstract) { + forceActiveFocus() + } } anchors.fill: parent - signal nextView(int pName) + Accessible.role: Accessible.Grouping + activeFocusOnTab: !isAbstract - readonly property bool sectionPageTypeMarker: true + onVisibleChanged: setActive() - property TitleBarAction titleBarAction: null - property Item navSuccessor: null + FocusPoint {} } diff --git a/resources/qml/Governikus/View/+mobile/+android/ContentArea.qml b/resources/qml/Governikus/View/+mobile/+android/ContentArea.qml index 14ef4ce..db67567 100644 --- a/resources/qml/Governikus/View/+mobile/+android/ContentArea.qml +++ b/resources/qml/Governikus/View/+mobile/+android/ContentArea.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 @@ -11,10 +15,12 @@ import Governikus.IdentifyView 1.0 import Governikus.ProviderView 1.0 import Governikus.HistoryView 1.0 import Governikus.View 1.0 +import Governikus.Type.SettingsModel 1.0 + Item { id: baseItem - property bool ready: settingsModel.showTutorialOnStart ? tutorialView.ready : identifyView.ready + property bool ready: SettingsModel.showSetupAssistantOnStart ? tutorialView.ready : identifyView.ready readonly property var visibleItem: visibleChildren[0] readonly property var currentSectionPage: if (visibleItem) visibleItem.currentSectionPage @@ -52,7 +58,10 @@ Item { anchors.fill: parent visible: baseItem.state === "remoteservice" prefetch: baseItem.ready - sourceComponent: RemoteServiceView {} + sourceComponent: RemoteServiceView { + width: baseItem.width + height: baseItem.height + } } TabBarView { @@ -74,7 +83,7 @@ Item { anchors.fill: parent visible: baseItem.state === "information" prefetch: baseItem.ready - sourceComponent: Information {} + sourceComponent: InformationView {} } TabBarView { diff --git a/resources/qml/Governikus/View/+mobile/+ios/ContentArea.qml b/resources/qml/Governikus/View/+mobile/+ios/ContentArea.qml index 7c06c0f..a977167 100644 --- a/resources/qml/Governikus/View/+mobile/+ios/ContentArea.qml +++ b/resources/qml/Governikus/View/+mobile/+ios/ContentArea.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 @@ -5,12 +9,14 @@ import Governikus.ChangePinView 1.0 import Governikus.MoreView 1.0 import Governikus.IdentifyView 1.0 import Governikus.ProviderView 1.0 -import Governikus.HistoryView 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.TutorialView 1.0 +import Governikus.RemoteServiceView 1.0 import Governikus.View 1.0 Item { id: baseItem - property alias ready: identifyView.ready + property bool ready: SettingsModel.showSetupAssistantOnStart ? tutorialView.ready : identifyView.ready readonly property var visibleItem: visibleChildren[0] readonly property var currentSectionPage: if (visibleItem) visibleItem.currentSectionPage @@ -18,35 +24,46 @@ Item { id: identifyView anchors.fill: parent visible: baseItem.state === "identify" + prefetch: baseItem.ready sourceComponent: IdentifyView {} } TabBarView { anchors.fill: parent visible: baseItem.state === "provider" - prefetch: identifyView.ready + prefetch: baseItem.ready sourceComponent: ProviderView {} } TabBarView { anchors.fill: parent - visible: baseItem.state === "history" - prefetch: identifyView.ready - sourceComponent: HistoryView {} + visible: baseItem.state === "remoteservice" + prefetch: baseItem.ready + sourceComponent: RemoteServiceView { + width: baseItem.width + height: baseItem.height + } } TabBarView { id: pinView anchors.fill: parent visible: baseItem.state === "pin" - prefetch: identifyView.ready + prefetch: baseItem.ready sourceComponent: ChangePinView {} } TabBarView { anchors.fill: parent visible: baseItem.state === "more" - prefetch: identifyView.ready + prefetch: baseItem.ready sourceComponent: MoreView {} } + + TabBarView { + id: tutorialView + visible: baseItem.state === "tutorial" + anchors.fill: parent + sourceComponent: TutorialView {} + } } diff --git a/resources/qml/Governikus/View/+mobile/ContentAreaLoader.qml b/resources/qml/Governikus/View/+mobile/ContentAreaLoader.qml index 0918ff8..2b69bb7 100644 --- a/resources/qml/Governikus/View/+mobile/ContentAreaLoader.qml +++ b/resources/qml/Governikus/View/+mobile/ContentAreaLoader.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 @@ -8,6 +12,11 @@ import Governikus.Global 1.0 // parses the given source. Item { id: baseItem + + function reselectedState() { + visibleItem.popAll() + } + property bool ready: false readonly property var visibleItem: if (loader.item) loader.item.visibleChildren[0] readonly property var currentSectionPage: if (visibleItem) visibleItem.currentSectionPage diff --git a/resources/qml/Governikus/View/+mobile/FocusFrame.qml b/resources/qml/Governikus/View/+mobile/FocusFrame.qml new file mode 100644 index 0000000..3206ad7 --- /dev/null +++ b/resources/qml/Governikus/View/+mobile/FocusFrame.qml @@ -0,0 +1,12 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 + +Item { + property Item framee + property Item scope + property real marginFactor + property bool dynamic +} diff --git a/resources/qml/Governikus/View/+mobile/SectionPage.qml b/resources/qml/Governikus/View/+mobile/SectionPage.qml index 61e0f57..1c2b0fa 100644 --- a/resources/qml/Governikus/View/+mobile/SectionPage.qml +++ b/resources/qml/Governikus/View/+mobile/SectionPage.qml @@ -1,50 +1,72 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 Item { signal firePush(var pSectionPage) + signal firePushWithProperties(var pSectionPage, var pProperties) signal fireReplace(var pSectionPage) signal firePop() signal firePopAll() + function scrollPageDown() { + sectionPageFlickable.scrollPageDown() + } + + function scrollPageUp() { + sectionPageFlickable.scrollPageUp() + } + + function highlightScrollbar() { + sectionPageFlickable.highlightScrollbar() + } + + property var onActivated: highlightScrollbar + property bool pushed: false property bool topLevelPage: false - property var leftTitleBarAction: TitleBarAction {} - property var headerTitleBarAction: TitleBarAction {} - property var rightTitleBarAction: Item {} - property var subTitleBarAction: Item {} + property var navigationAction: null + property string title: null + property var rightTitleBarAction: null + property var subTitleBarAction: null - property color titleBarColor: Constants.blue + property bool titleBarVisible: true + property color titleBarColor: Style.color.accent /* if the header component has a property named titleBarOpacity, use it, otherwise use default value*/ readonly property real titleBarOpacity: header !== null && typeof(header.titleBarOpacity) != "undefined" ? header.titleBarOpacity : 1 + // If a header is set, it is shown as background of the TitleBar, so we need to expand the height + property bool contentBehindTitlebar: header !== null && typeof(header.titleBarOpacity) != "undefined" - property QtObject header: null - property QtObject content: null - property alias contentY: flickable.contentY - property bool disableFlicking: false + // Main flickable of this view + property var sectionPageFlickable: flickable - Flickable { - property real startContentY: 0 + // When enabled the section page will automatically add a safeAreaMargin to the bottom of the page + property bool automaticSafeAreaMarginHandling: true + + // Default header/content of flickable + property QtObject header + property QtObject content + + GFlickable { id: flickable - clip: true - flickableDirection: Flickable.VerticalFlick + + height: contentBehindTitlebar ? (parent.height + Style.dimens.titlebar_height) : parent.height + width: parent.width + anchors.bottom: parent.bottom + + scrollBarTopPadding: contentBehindTitlebar ? Style.dimens.titlebar_height : 0 + contentWidth: flickableContent.width contentHeight: flickableContent.height - anchors.bottom: parent.bottom - width: parent.width - maximumFlickVelocity: Constants.scrolling_speed - /* if a header is set, it is shown as background of the TitleBar, so we need to expand the height*/ - height: header !== null ? parent.height + Constants.titlebar_height : parent.height - onMovementStarted: { - startContentY = contentY - } - onContentYChanged: { - if (disableFlicking || contentY < 0) { contentY = 0 /* prevent flicking over the top */} - } + Column { id: flickableContent diff --git a/resources/qml/Governikus/View/+mobile/TabBarView.qml b/resources/qml/Governikus/View/+mobile/TabBarView.qml index 8e24e9b..d15bbb2 100644 --- a/resources/qml/Governikus/View/+mobile/TabBarView.qml +++ b/resources/qml/Governikus/View/+mobile/TabBarView.qml @@ -1,8 +1,13 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.2 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { id: baseItem @@ -25,22 +30,46 @@ Item { property var pendingSignals: [] - function push(pSectionPage) { + function disconnectSectionPageSignals(pSectionPage) { + if (pSectionPage === null) { + console.warn("tried to disconnect signals from null") + return + } + + pSectionPage.pushed = false + pSectionPage.firePush.disconnect(baseItem.push) + pSectionPage.firePushWithProperties.disconnect(baseItem.push) + pSectionPage.fireReplace.disconnect(baseItem.replace) + pSectionPage.firePop.disconnect(baseItem.pop) + pSectionPage.firePopAll.disconnect(baseItem.popAll) + } + + function connectSectionPageSignals(pSectionPage) { + if (pSectionPage === null) { + console.warn("tried to connect signals to null") + return + } + + pSectionPage.firePush.connect(baseItem.push) + pSectionPage.firePushWithProperties.connect(baseItem.push) + pSectionPage.fireReplace.connect(baseItem.replace) + pSectionPage.firePop.connect(baseItem.pop) + pSectionPage.firePopAll.connect(baseItem.popAll) + pSectionPage.pushed = true + } + + function push(pSectionPage, pProperties) { if (stack.currentItem === pSectionPage) { return } if (baseItem.pushed) { - pSectionPage.firePush.connect(baseItem.push) - pSectionPage.fireReplace.connect(baseItem.replace) - pSectionPage.firePop.connect(baseItem.pop) - pSectionPage.firePopAll.connect(baseItem.popAll) - stack.push(pSectionPage) - pSectionPage.pushed = true + let item = stack.push(pSectionPage, pProperties) + connectSectionPageSignals(item) } // Main item has not been loaded yet, delay push. else { - baseItem.pendingItems.push({ "item": pSectionPage }) + baseItem.pendingItems.push({ "item": pSectionPage, "properties" : pProperties }) } } @@ -58,12 +87,14 @@ Item { pSectionPage.pushed = false var item = stack.currentItem item.firePush.disconnect(baseItem.push) + item.firePushWithProperties.disconnect(baseItem.push) item.fireReplace.disconnect(baseItem.replace) item.firePop.disconnect(baseItem.pop) item.firePopAll.disconnect(baseItem.popAll) var page = stack.replace(pSectionPage) page.firePush.connect(baseItem.push) + page.firePushWithProperties.connect(baseItem.push) page.fireReplace.connect(baseItem.replace) page.firePop.connect(baseItem.pop) page.firePopAll.connect(baseItem.popAll) @@ -72,18 +103,15 @@ Item { function pop() { var sectionPage = stack.pop() - sectionPage.pushed = false - sectionPage.firePush.disconnect(baseItem.push) - sectionPage.fireReplace.disconnect(baseItem.replace) - sectionPage.firePop.disconnect(baseItem.pop) - sectionPage.firePopAll.disconnect(baseItem.popAll) + disconnectSectionPageSignals(sectionPage) } - function popAll() { - while (stack.depth > 1) { - d.pop() + for (let i = stack.depth - 1; i > 0; i--) { + disconnectSectionPageSignals(stack.get(i)) } + + stack.pop(null) } // Workaround for QTBUG-57267 @@ -126,6 +154,46 @@ Item { anchors.fill: parent } + MouseArea { + id: iosBackGestureMouseArea + + readonly property real minSwipeDistance: parent.width * 0.2 + readonly property real minVelocity: 10 + readonly property real touchStartAreaWidth: 10 + property real startPosX: 0.0 + property real previousPosX: 0.0 + property real velocity: 0.0 + + anchors.fill: parent + + enabled: Constants.is_layout_ios + preventStealing: true + + onPressed: { + if (mouse.x < touchStartAreaWidth && currentSectionPage.navigationAction.state === "back") { + mouse.accepted = true + startPosX = mouse.x + previousPosX = startPosX + velocity = 0.0 + } else { + mouse.accepted = false + } + } + + onPositionChanged: { + let currentVelocity = mouse.x - previousPosX + velocity = (velocity + currentVelocity) / 2.0 + previousPosX = mouse.x + } + + onReleased: { + let swipeDistance = mouse.x - startPosX + if (swipeDistance > minSwipeDistance && velocity > minVelocity) { + currentSectionPage.navigationAction.clicked() + } + } + } + Timer { id: pendingSignalsTimer interval: 100 @@ -133,8 +201,8 @@ Item { onTriggered: d.handlePendingSignals() } - function push(pSectionPage) { - d.pendingSignals.push(function() {d.push(pSectionPage)}) + function push(pSectionPage, pProperties) { + d.pendingSignals.push(function() {d.push(pSectionPage, pProperties)}) d.handlePendingSignals() } @@ -155,4 +223,16 @@ Item { d.pendingSignals.push(function() {d.popAll()}) d.handlePendingSignals() } + + onVisibleChanged: { + if (currentSectionPage) { + currentSectionPage.onActivated() + } + } + + onCurrentSectionPageChanged: { + if (currentSectionPage) { + currentSectionPage.onActivated() + } + } } diff --git a/resources/qml/Governikus/View/qmldir b/resources/qml/Governikus/View/qmldir index f119d43..87bf17f 100644 --- a/resources/qml/Governikus/View/qmldir +++ b/resources/qml/Governikus/View/qmldir @@ -2,6 +2,9 @@ module View ContentArea 1.0 ContentArea.qml ContentAreaLoader 1.0 ContentAreaLoader.qml +Controller 1.0 Controller.qml SectionPage 1.0 SectionPage.qml TabBarView 1.0 TabBarView.qml FocusFrame 1.0 FocusFrame.qml +FocusPoint 1.0 FocusPoint.qml +FramedImage 1.0 FramedImage.qml diff --git a/resources/qml/Governikus/WhiteListClient/+mobile/WhiteListSurveyView.qml b/resources/qml/Governikus/WhiteListClient/+mobile/WhiteListSurveyView.qml index c5e8920..429b87d 100644 --- a/resources/qml/Governikus/WhiteListClient/+mobile/WhiteListSurveyView.qml +++ b/resources/qml/Governikus/WhiteListClient/+mobile/WhiteListSurveyView.qml @@ -1,152 +1,240 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.TitleBar 1.0 import Governikus.View 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.AuthModel 1.0 +import Governikus.Type.SurveyModel 1.0 + SectionPage { id: root - leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: root.done(false) } - headerTitleBarAction: TitleBarAction { text: qsTr("Feedback") + settingsModel.translationTrigger; font.bold: true } signal done(bool pUserAccepted) + navigationAction: NavigationAction { state: "cancel"; onClicked: root.done(false) } + //: LABEL ANDROID IOS + title: qsTr("Feedback") + SettingsModel.translationTrigger + + QtObject { + id: d + + property bool dataHidden: true + } + content: Column { width: root.width + padding: Constants.pane_padding spacing: Constants.pane_spacing Pane { id: whitePane + anchors.margins: Constants.pane_padding - title: qsTr("Send device data?") + settingsModel.translationTrigger + //: INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Header + title: qsTr("Send device data?") + SettingsModel.translationTrigger - Text { + GText { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Would you like to help us to improve the AusweisApp2?") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - wrapMode: Text.WordWrap - } - Text { - anchors.left: parent.left - anchors.right: parent.right - text: qsTr("Supplying your device characteristics helps us to gather reliable information about the compatibility of your device.") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - wrapMode: Text.WordWrap - } - Text { - anchors.left: parent.left - anchors.right: parent.right - text: qsTr("The transmission is anonymous. No personal data is collected or transmitted!") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - wrapMode: Text.WordWrap - } - Text { - anchors.left: parent.left - anchors.right: parent.right - text: qsTr("The following information will be transmitted, if you decide so:") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - wrapMode: Text.WordWrap + //: INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Part of content text + text: qsTr("Would you like to help us to improve the AusweisApp2?") + SettingsModel.translationTrigger + textStyle: Style.text.normal } - Item { + GText { anchors.left: parent.left anchors.right: parent.right - height: Math.max(column1.height, column2.height) + //: INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Part of content text + text: qsTr("Supplying your device characteristics helps us to gather reliable information about the compatibility of your device.") + SettingsModel.translationTrigger + textStyle: Style.text.normal + } - ListModel { - id: leftInformationModel - ListElement { - entry: QT_TR_NOOP("Vendor") - } - ListElement { - entry: QT_TR_NOOP("Model number") - } - ListElement { - entry: QT_TR_NOOP("Model name") - } - ListElement { - entry: QT_TR_NOOP("Collection date") - } - ListElement { - entry: QT_TR_NOOP("AusweisApp2 version") - } - } + GText { + anchors.left: parent.left + anchors.right: parent.right + //: INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Part of content text + text: qsTr("The transmission is anonymous. No personal data is collected or transmitted!") + SettingsModel.translationTrigger + textStyle: Style.text.normal + } - ListModel { - id: rightInformationModel - ListElement { - entry: QT_TR_NOOP("ROM build number") - } - ListElement { - entry: QT_TR_NOOP("Android version") - } - ListElement { - entry: QT_TR_NOOP("Kernel version") - } - ListElement { - entry: QT_TR_NOOP("Max. NFC packet length") - } - } + Column { + anchors.left: parent.left + anchors.right: parent.right - Column { - id: column1 - width: parent.width / 2 + spacing: 2 + + GSeparator { anchors.left: parent.left - - Repeater { - model: leftInformationModel - delegate: BulletPointDelegate { - text: qsTr(entry) + settingsModel.translationTrigger - } - } + anchors.right: parent.right } - Column { - id: column2 - width: parent.width / 2 + Button { + id: collapsableCollectedData + + height: showDataButton.height + Constants.pane_spacing + anchors.left: parent.left anchors.right: parent.right - Repeater { - model: rightInformationModel - delegate: BulletPointDelegate { - text: qsTr(entry) + settingsModel.translationTrigger + states: [ + State { + name: "open"; + when: !d.dataHidden + + PropertyChanges { + target: collapsableCollectedData; + height: collectedData.openHeight + showDataButton.height + Constants.pane_spacing + } + PropertyChanges { + target: collectedData; + height: collectedData.openHeight + } + PropertyChanges { + target: collectedData; + opacity: 1.0 + } + } + ] + transitions: [ + Transition { + PropertyAnimation { + target: collectedData + property: "height" + easing.type: Easing.InOutQuad + duration: 500 + } + PropertyAnimation { + target: collectedData + property: "opacity" + easing.type: Easing.InOutQuad + duration: 500 + } + PropertyAnimation { + target: collapsableCollectedData + property: "height" + easing.type: Easing.InOutQuad + duration: 500 + } + } + ] + + background: Rectangle { + color: collapsableCollectedData.down ? Style.color.tutorial_box_background : Style.color.background_pane + } + + onClicked: { + d.dataHidden = !d.dataHidden + } + + contentItem: Item { + Item { + id: showDataButton + + height: showDataText.height + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + + GText { + id: showDataTriangle + + anchors.top: parent.top + anchors.right: parent.right + + rightPadding: Constants.groupbox_spacing + text: d.dataHidden ? "\u25BC" : "\u25B2" + textStyle: Style.text.normal + horizontalAlignment: Text.AlignRight + } + + GText { + id: showDataText + + anchors.right: showDataTriangle.left + anchors.bottom: showDataTriangle.bottom + anchors.bottomMargin: showDataText.height / 8 + + rightPadding: Constants.groupbox_spacing + text: qsTr("Collected data") + SettingsModel.translationTrigger + textStyle: Style.text.normal + } + } + + Item { + id: collectedData + + property real openHeight: dataColumn.implicitHeight + + height: openHeight + width: parent.width + anchors.top: showDataButton.bottom + + opacity: 0 + clip: true + + Column { + id: dataColumn + + width: parent.width + anchors.left: parent.left + + topPadding: Constants.groupbox_spacing + + Repeater { + id: repeater + + model: SurveyModel + delegate: LabeledText { + width: dataColumn.width + label: title + text: value + } + } + } } } } + + GSeparator { + anchors.left: parent.left + anchors.right: parent.right + } } - Text { + GText { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Thank you for your assistance!") + settingsModel.translationTrigger - font.pixelSize: Constants.normal_font_size - font.bold: true - color: Constants.secondary_text - wrapMode: Text.WordWrap + //: INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Thank you message + text: qsTr("Thank you for your assistance!") + SettingsModel.translationTrigger + textStyle: Style.text.normal } } Row { - spacing: Constants.component_spacing height: childrenRect.height anchors.horizontalCenter: parent.horizontalCenter + spacing: Constants.component_spacing + GButton { - text: qsTr("Cancel") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Cancel") + SettingsModel.translationTrigger onClicked: root.done(false) } GButton { - text: qsTr("Transmit") + settingsModel.translationTrigger + //: LABEL ANDROID IOS + text: qsTr("Transmit") + SettingsModel.translationTrigger onClicked: root.done(true) } } diff --git a/resources/qml/Governikus/WhiteListClient/BulletPointDelegate.qml b/resources/qml/Governikus/WhiteListClient/BulletPointDelegate.qml deleted file mode 100644 index e673bf9..0000000 --- a/resources/qml/Governikus/WhiteListClient/BulletPointDelegate.qml +++ /dev/null @@ -1,31 +0,0 @@ -import QtQuick 2.10 - -import Governikus.Global 1.0 - -Item { - width: parent.width - height: content.height - property alias text: content.text - - Text { - id: bullet - anchors.top: parent.top - anchors.left: parent.left - text: "\u2022" - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - } - - Text { - id: content - anchors.top: parent.top - anchors.left: bullet.right - anchors.leftMargin: Constants.groupbox_spacing - anchors.right: parent.right - anchors.rightMargin: Constants.groupbox_spacing - - font.pixelSize: Constants.normal_font_size - color: Constants.secondary_text - wrapMode: Text.WordWrap - } -} diff --git a/resources/qml/Governikus/WhiteListClient/qmldir b/resources/qml/Governikus/WhiteListClient/qmldir index 0ece239..d9bcf4f 100644 --- a/resources/qml/Governikus/WhiteListClient/qmldir +++ b/resources/qml/Governikus/WhiteListClient/qmldir @@ -1,5 +1,3 @@ module WhiteListClient -internal BulletPointDelegate BulletPointDelegate.qml - WhiteListSurveyView 1.0 WhiteListSurveyView.qml diff --git a/resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml b/resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml new file mode 100644 index 0000000..8ade5bb --- /dev/null +++ b/resources/qml/Governikus/Workflow/+desktop/GeneralWorkflow.qml @@ -0,0 +1,206 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import Governikus.Global 1.0 +import Governikus.Style 1.0 +import Governikus.View 1.0 +import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 +import Governikus.Type.AuthModel 1.0 +import Governikus.Type.NumberModel 1.0 +import Governikus.Type.CardReturnCode 1.0 +import Governikus.Type.ReaderPlugIn 1.0 + + +SectionPage +{ + property int waitingFor: 0 + property bool isPinChange: false + + Accessible.name: qsTr("General workflow view") + SettingsModel.translationTrigger + Accessible.description: qsTr("This is the general workflow view of the AusweisApp2.") + SettingsModel.translationTrigger + + QtObject { + id: d + + readonly property bool foundSelectedReader: ApplicationModel.foundSelectedReader + readonly property bool foundPCSCReader: ApplicationModel.foundSelectedReader && ApplicationModel.isReaderTypeAvailable(ReaderPlugIn.PCSC) + readonly property bool foundRemoteReader: ApplicationModel.foundSelectedReader && ApplicationModel.isReaderTypeAvailable(ReaderPlugIn.REMOTE) + //: LABEL DESKTOP_QML + readonly property string purpose: (isPinChange ? qsTr("Change PIN") : qsTr("Identify")) + SettingsModel.translationTrigger + } + + + + Connections { + target: ApplicationModel + onFireCertificateRemoved: { + //: INFO DESKTOP_QML The paired devices was removed since it did not respond to connection attempts. It needs to be paired again if it should be used as card reader. + ApplicationModel.showFeedback(qsTr("The device %1 was unpaired because it does not react to connection attempts. Retry the pairing process if you want to use this device to authenticate yourself.").arg(pDeviceName)) + } + } + + GText { + visible: retryCounter.visible + anchors.horizontalCenter: retryCounter.horizontalCenter + anchors.bottom: retryCounter.top + anchors.bottomMargin: Constants.component_spacing + + font.bold: true + //: LABEL DESKTOP_QML + text: qsTr("Attempts") + SettingsModel.translationTrigger + textStyle: Style.text.normal + } + + StatusIcon { + id: retryCounter + + visible: NumberModel.retryCounter >= 0 && NumberModel.passwordType === NumberModel.PASSWORD_PIN + height: Style.dimens.status_icon_small + anchors.left: parent.left + anchors.top: parent.top + anchors.margins: height + + activeFocusOnTab: true + Accessible.name: qsTr("Remaining attempts:") + " " + NumberModel.retryCounter + SettingsModel.translationTrigger + + text: NumberModel.retryCounter + + FocusFrame {} + } + + StatusIcon { + height: Style.dimens.status_icon_large + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.top + anchors.verticalCenterOffset: parent.height / 4 + + busy: true + source: AuthModel.readerImage + } + + ProgressCircle { + id: progressCircle + + visible: waitingFor !== Workflow.WaitingFor.None + anchors.top: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + + activeFocusOnTab: true + Accessible.role: Accessible.ProgressBar + Accessible.name: qsTr("Step %1 of 3").arg(state) + SettingsModel.translationTrigger + + state: switch (waitingFor) { + case Workflow.WaitingFor.Reader: + return d.foundSelectedReader ? "2" : "1" + case Workflow.WaitingFor.Card: + return "2" + case Workflow.WaitingFor.Password: + return "3" + default: + return "1" + } + + FocusFrame {} + } + + GText { + id: mainText + + visible: text !== "" + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: progressCircle.bottom + anchors.topMargin: Constants.component_spacing + + activeFocusOnTab: true + Accessible.role: Accessible.Paragraph + Accessible.name: mainText.text + + text: { + SettingsModel.translationTrigger + + switch (waitingFor) { + case Workflow.WaitingFor.Reader: + if (ApplicationModel.extendedLengthApdusUnsupported) { + //: ERROR DESKTOP_QML + return qsTr("The used card reader does not meet the technical requirements (Extended Length not supported).") + } + //: LABEL DESKTOP_QML + return d.foundSelectedReader ? d.purpose : qsTr("Establish connection") + case Workflow.WaitingFor.Card: + if (NumberModel.pinDeactivated) { + //: LABEL DESKTOP_QML + return qsTr("Information") + SettingsModel.translationTrigger + } + return d.purpose + case Workflow.WaitingFor.Password: + //: LABEL DESKTOP_QML + return qsTr("Information") + SettingsModel.translationTrigger + default: + return "" + } + } + textStyle: Style.text.header + + horizontalAlignment: Text.AlignHCenter + FocusFrame {} + } + + GText { + id: subText + + readonly property string requestCardText: { + if (d.foundPCSCReader && !d.foundRemoteReader) { + //: INFO DESKTOP_QML The AA2 is waiting for an id card to be inserted into the card reader. + return qsTr("Please insert the card into the device") + } else if (!d.foundPCSCReader && d.foundRemoteReader) { + //: INFO DESKTOP_QML The AA2 is waiting for the smartphone to be placed on the id. + return qsTr("Please place the smartphone on the card") + } + + //: INFO DESKTOP_QML The AA2 is waiting for an id card to be inserted into the card reader (or smartphone for that matter). + return qsTr("Please place the smartphone on the card or insert the card into the device") + } + + visible: text !== "" && !ApplicationModel.extendedLengthApdusUnsupported + width: Math.min(parent.width - (2 * Constants.pane_padding), Style.dimens.max_text_width) + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: mainText.bottom + anchors.topMargin: Constants.text_spacing + + activeFocusOnTab: true + Accessible.role: Accessible.Paragraph + Accessible.name: subText.text + + text: { + SettingsModel.translationTrigger + + switch (waitingFor) { + case Workflow.WaitingFor.Reader: + //: INFO DESKTOP_QML AA2 is waiting for the card reader or the id card. + return d.foundSelectedReader ? requestCardText : qsTr("Searching for card reader") + case Workflow.WaitingFor.Card: + if (NumberModel.pinDeactivated) { + //: INFO DESKTOP_QML The online authentication feature of the card is disabled and needs to be activated by the authorities. + return qsTr("The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function.") + } + return requestCardText + case Workflow.WaitingFor.Password: + //: INFO DESKTOP_QML The card reader is a comfort reader with its own display, the user is requested to pay attention to that display (instead of the AA2). + return qsTr("Please observe the display of your card reader.") + default: + return "" + } + } + textStyle: Style.text.header_secondary + + horizontalAlignment: Text.AlignHCenter + + FocusFrame {} + } +} diff --git a/resources/qml/Governikus/Workflow/+desktop/ProgressCircle.qml b/resources/qml/Governikus/Workflow/+desktop/ProgressCircle.qml index 8ab3f2b..0b9f2f0 100644 --- a/resources/qml/Governikus/Workflow/+desktop/ProgressCircle.qml +++ b/resources/qml/Governikus/Workflow/+desktop/ProgressCircle.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 import Governikus.Type.ApplicationModel 1.0 @@ -55,7 +60,7 @@ Item { anchors.verticalCenter: parent.verticalCenter width: d.stepWidth * 2 height: ApplicationModel.scaleFactor * 8 - color: Constants.grey_light + color: Style.color.border } TextCircle { @@ -84,7 +89,7 @@ Item { height: circle1.height + ApplicationModel.scaleFactor * 40 width: height anchors.centerIn: parent - color: "transparent" + color: Style.color.transparent radius: height / 2 border.color: Constants.white border.width: ApplicationModel.scaleFactor * 6 diff --git a/resources/qml/Governikus/Workflow/+desktop/TextCircle.qml b/resources/qml/Governikus/Workflow/+desktop/TextCircle.qml index fc03d10..6bc3a4c 100644 --- a/resources/qml/Governikus/Workflow/+desktop/TextCircle.qml +++ b/resources/qml/Governikus/Workflow/+desktop/TextCircle.qml @@ -1,7 +1,12 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 import Governikus.Global 1.0 +import Governikus.Style 1.0 Rectangle { @@ -11,13 +16,12 @@ Rectangle { width: height enabled: false radius: width * 0.5 - color: enabled ? Constants.blue : Constants.white + color: enabled ? Style.color.accent : Constants.white - Text { + GText { id: number anchors.centerIn: parent font.bold: true - font.pixelSize: Constants.header_font_size - color: parent.enabled ? Constants.white : Constants.blue + textStyle: parent.enabled ? Style.text.header : Style.text.header_accent } } diff --git a/resources/qml/Governikus/Workflow/+mobile/BluetoothWorkflow.qml b/resources/qml/Governikus/Workflow/+mobile/BluetoothWorkflow.qml index 75436e5..c56c98c 100644 --- a/resources/qml/Governikus/Workflow/+mobile/BluetoothWorkflow.qml +++ b/resources/qml/Governikus/Workflow/+mobile/BluetoothWorkflow.qml @@ -1,9 +1,14 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.1 import Governikus.Global 1.0 import Governikus.TechnologyInfo 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ReaderPlugIn 1.0 import Governikus.Type.NumberModel 1.0 @@ -47,14 +52,15 @@ Item { TechnologyInfo { id: techInfo anchors.left: parent.left - anchors.leftMargin: Utils.dp(5) + anchors.leftMargin: 5 anchors.right: parent.right anchors.rightMargin: anchors.leftMargin anchors.top: progressIndicator.bottom anchors.bottom: technologySwitch.top enableButtonVisible: ApplicationModel.bluetoothAvailable && (!ApplicationModel.bluetoothEnabled || parent.showLocationPermissionInfo) - enableButtonText: (!ApplicationModel.bluetoothEnabled ? qsTr("Enable Bluetooth") : qsTr("Continue")) + settingsModel.translationTrigger + //: LABEL ANDROID IOS + enableButtonText: (!ApplicationModel.bluetoothEnabled ? qsTr("Enable Bluetooth") : qsTr("Continue")) + SettingsModel.translationTrigger onEnableClicked: { if (!ApplicationModel.bluetoothEnabled) { ApplicationModel.bluetoothEnabled = true @@ -63,21 +69,30 @@ Item { } } enableText: (!visible ? "" + //: INFO ANDROID IOS Bluetooth is not available to AA2, the user is requested to use NFC instead. : !ApplicationModel.bluetoothAvailable ? qsTr("Bluetooth is not supported by your device.") + "
    " + qsTr("Please try NFC.") + //: INFO ANDROID IOS Bluetooth is available but not active. : !ApplicationModel.bluetoothEnabled ? qsTr("Bluetooth is switched off.") + "
    " + qsTr("Please enable Bluetooth.") + //: INFO ANDROID IOS Bluetooth is active but the AA2 does not have the location permission which is required to find the bluetooth reader. The user is asked to give the permission to the AA2 after pressing the "ok" button. : parent.showLocationPermissionInfo ? qsTr("No paired and activated Bluetooth device was detected. The AusweisApp2 needs access to your location in order to discover available devices. You can grant this permission after clicking the continue button.") + //: INFO ANDROID IOS The connection to the bluetooth reader failed. : !ApplicationModel.bluetoothResponding ? qsTr("An error occured while connecting to your bluetooth device. Try to pair your device in the system settings and restart the app.") - : "") + settingsModel.translationTrigger + : "") + SettingsModel.translationTrigger + //: INFO ANDROID IOS Status message while connecting to the bluetooth reader - Header titleText: ((baseItem.waitingFor === Workflow.WaitingFor.Reader) ? qsTr("Establish connection") + //: INFO ANDROID IOS Status message while the connection to the bluetooth has been established and an id card needs to be inserted - Header : (baseItem.waitingFor === Workflow.WaitingFor.Card) ? qsTr("Determine card") - : "") + settingsModel.translationTrigger + : "") + SettingsModel.translationTrigger + //: LABEL ANDROID IOS subTitleText: (!visible ? "" : !!NumberModel.inputError ? NumberModel.inputError + //: INFO ANDROID IOS Status message while the connection to the bluetooth reader is being established. : (baseItem.waitingFor === Workflow.WaitingFor.Reader) ? qsTr("Search card reader...") + //: INFO ANDROID IOS Status message after the connection to the bluetooth reader is established and an id card needs to be inserted. : (baseItem.waitingFor === Workflow.WaitingFor.Card) ? qsTr("Please insert your ID card.") - : "") + settingsModel.translationTrigger + : "") + SettingsModel.translationTrigger } TechnologySwitch { diff --git a/resources/qml/Governikus/Workflow/+mobile/BusyImageIndicator.qml b/resources/qml/Governikus/Workflow/+mobile/BusyImageIndicator.qml index a4b49c3..aaeb4e7 100644 --- a/resources/qml/Governikus/Workflow/+mobile/BusyImageIndicator.qml +++ b/resources/qml/Governikus/Workflow/+mobile/BusyImageIndicator.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 diff --git a/resources/qml/Governikus/Workflow/+mobile/CardReader.qml b/resources/qml/Governikus/Workflow/+mobile/CardReader.qml index 4a2d465..c77bd86 100644 --- a/resources/qml/Governikus/Workflow/+mobile/CardReader.qml +++ b/resources/qml/Governikus/Workflow/+mobile/CardReader.qml @@ -1,6 +1,11 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { property bool pinFieldAnimation: true @@ -53,7 +58,7 @@ Item { Rectangle { id: reader - color: "#92cef9" + color: Style.color.card_reader radius: height * 0.05 anchors.bottom: parent.bottom width: parent.width @@ -61,7 +66,7 @@ Item { Rectangle { id: slot - color: "white" + color: Constants.white radius: 10 height: reader.height * 0.05 anchors.top: parent.top @@ -74,7 +79,7 @@ Item { Rectangle { id: card - color: Constants.blue + color: Style.color.id_card radius: height * 0.05 anchors.horizontalCenter: parent.horizontalCenter height: baseItem.height * 1.5 / 7 @@ -84,7 +89,7 @@ Item { Rectangle { id: cardStripe1 - color: "white" + color: Constants.white radius: 10 height: parent.height * 0.1 anchors.top: parent.top @@ -97,7 +102,7 @@ Item { Rectangle { id: cardStripe2 - color: "white" + color: Constants.white radius: cardStripe1.radius height: parent.height * 0.1 anchors.top: cardStripe1.top @@ -134,7 +139,7 @@ Item { Rectangle { readonly property int margin: parent.width * 0.1 id: display - color: "white" + color: Constants.white radius: height * 0.2 height: reader.height * 0.2 anchors.bottom: pinGrid.top @@ -196,7 +201,7 @@ Item { states: [ State { name: "off" - PropertyChanges {target: pinButtonCircle; color: "white"} + PropertyChanges {target: pinButtonCircle; color: Constants.white} PropertyChanges {target: pinButtonCircle; width: pinButton._size} }, State { diff --git a/resources/qml/Governikus/Workflow/+mobile/GeneralWorkflow.qml b/resources/qml/Governikus/Workflow/+mobile/GeneralWorkflow.qml index 5998e93..9dadd55 100644 --- a/resources/qml/Governikus/Workflow/+mobile/GeneralWorkflow.qml +++ b/resources/qml/Governikus/Workflow/+mobile/GeneralWorkflow.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 @@ -21,12 +25,12 @@ SectionPage property int waitingFor: 0 - leftTitleBarAction: TitleBarAction { + navigationAction: NavigationAction { enabled: baseItem.waitingFor !== Workflow.WaitingFor.Password state: enabled ? "cancel" : "hidden" onClicked: workflowModel.cancelWorkflow() } - headerTitleBarAction: TitleBarAction { text: workflowTitle; font.bold: true } + title: workflowTitle NfcWorkflow { diff --git a/resources/qml/Governikus/Workflow/+mobile/NfcProgressIndicator.qml b/resources/qml/Governikus/Workflow/+mobile/NfcProgressIndicator.qml index 6f22a6e..3669ab1 100644 --- a/resources/qml/Governikus/Workflow/+mobile/NfcProgressIndicator.qml +++ b/resources/qml/Governikus/Workflow/+mobile/NfcProgressIndicator.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 @@ -10,7 +14,7 @@ Item { SequentialAnimation { id: shaking loops: Animation.Infinite - readonly property int delta: Utils.dp(4) + readonly property int delta: 4 readonly property int deltaDuration: 300 ParallelAnimation { diff --git a/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml b/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml index ec57ea8..fa75274 100644 --- a/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml +++ b/resources/qml/Governikus/Workflow/+mobile/NfcWorkflow.qml @@ -1,9 +1,14 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.1 import Governikus.Global 1.0 import Governikus.TechnologyInfo 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.ReaderPlugIn 1.0 import Governikus.Type.NumberModel 1.0 @@ -34,28 +39,36 @@ Item { id: technologyInfo anchors.left: parent.left - anchors.leftMargin: Utils.dp(5) + anchors.leftMargin: 5 anchors.right: parent.right anchors.rightMargin: anchors.leftMargin anchors.top: progressIndicatorWrapper.bottom anchors.bottom: technologySwitch.top clip: true - enableButtonVisible: ApplicationModel.nfcAvailable && !ApplicationModel.nfcEnabled - enableButtonText: qsTr("Go to NFC settings") + settingsModel.translationTrigger - onEnableClicked: qmlExtension.showSettings("android.settings.NFC_SETTINGS") + enableButtonVisible: ApplicationModel.nfcAvailable && (!ApplicationModel.nfcEnabled || !ApplicationModel.nfcRunning) + //: LABEL DESKTOP_QML + enableButtonText: (!ApplicationModel.nfcEnabled ? qsTr("Go to NFC settings") : qsTr("Start NFC scan")) + SettingsModel.translationTrigger + onEnableClicked: !ApplicationModel.nfcEnabled ? ApplicationModel.showSettings(ApplicationModel.SETTING_NFC) : ApplicationModel.nfcRunning = true enableText: (!visible ? "" : - !ApplicationModel.nfcAvailable ? qsTr("NFC is not supported by your device.") + "
    " + qsTr("Please try Bluetooth.") : - !ApplicationModel.nfcEnabled ? qsTr("NFC is switched off.") + "
    " + qsTr("Please enable NFC in your system settings.") : "" - ) + settingsModel.translationTrigger + //: INFO ANDROID IOS AA2 can't use NFC on this device, suggest to use bluetooth instead. + !ApplicationModel.nfcAvailable ? qsTr("NFC is not supported by your device.") + "
    " + qsTr("You require an additional 'Bluetooth card reader' or an additional 'smartphone as card reader' to use the online identification function with this device.") : + //: INFO ANDROID IOS NFC is available but needs to be activated in the settings of the smartphone. + !ApplicationModel.nfcEnabled ? qsTr("NFC is switched off.") + "
    " + qsTr("Please enable NFC in your system settings.") : + //: INFO ANDROID IOS NFC is available but needs to be activated in the settings of the smartphone. + !ApplicationModel.nfcRunning ? qsTr("NFC scan is not running.") + "
    " + qsTr("Please start the NFC scan.") : "" + ) + SettingsModel.translationTrigger - titleText: qsTr("Establish connection") + settingsModel.translationTrigger + titleText: qsTr("Establish connection") + SettingsModel.translationTrigger subTitleText: (!visible ? "" : + //: INFO ANDROID IOS The NFC interface does not meet the minimum requirements, using a bluetooth reader or a differnt smarthpone is suggested. ApplicationModel.extendedLengthApdusUnsupported ? qsTr("Your device does not meet the technical requirements (Extended Length not supported). You require an additional 'Bluetooth card reader' or an additional 'smartphone as card reader' to use the online identification function with this device.") : + //: INFO ANDROID IOS The online authentication feature is disabled and needs to be activated by the authorities. NumberModel.pinDeactivated ? qsTr("The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function.") : + //: INFO ANDROID IOS The id card may be inserted, the authentication process may be started. qsTr("Please place your device
    on your ID card.") - ) + settingsModel.translationTrigger + ) + SettingsModel.translationTrigger } diff --git a/resources/qml/Governikus/Workflow/+mobile/ProgressCircle.qml b/resources/qml/Governikus/Workflow/+mobile/ProgressCircle.qml index 030095f..15071cd 100644 --- a/resources/qml/Governikus/Workflow/+mobile/ProgressCircle.qml +++ b/resources/qml/Governikus/Workflow/+mobile/ProgressCircle.qml @@ -1,18 +1,23 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import Governikus.Global 1.0 +import Governikus.Style 1.0 Item { id: baseItem - height: Utils.dp(70) - readonly property int _stepWidth: Utils.dp(60) + height: 70 + readonly property int _stepWidth: 60 Rectangle { id: rec1 anchors.left: baseItem.horizontalCenter anchors.verticalCenter: parent.verticalCenter width: _stepWidth - height: Utils.dp(2) + height: 2 color: Constants.blue } @@ -20,20 +25,20 @@ Item { id: tCircle1 anchors.verticalCenter: rec1.verticalCenter anchors.horizontalCenter: rec1.left - width: state === "active" ? Utils.dp(70) : Utils.dp(25) + border.width + width: state === "active" ? 70 : 25 + border.width height: width radius: width / 2 - color: Constants.background_color - border.color: "white" + color: Style.color.background + border.color: Constants.white border.width: state === "active" ? 2 : 0 state: "inactive" states: [ State { name: "active" - PropertyChanges { target: innerDisc; width: Utils.dp(50) } + PropertyChanges { target: innerDisc; width: 50 } }, State { name: "inactive" - PropertyChanges { target: innerDisc; width: Utils.dp(25) } + PropertyChanges { target: innerDisc; width: 25 } } ] @@ -46,7 +51,7 @@ Item { Rectangle { id: innerDisc anchors.centerIn: parent - color: tCircle1.state === "active" ? Constants.blue : "white" + color: tCircle1.state === "active" ? Style.color.accent : Constants.white radius: width / 2 height: width border.color: Constants.blue @@ -56,7 +61,7 @@ Item { text: "1" font.bold: true font.pixelSize: parent.height / 3 - color: tCircle1.state === "active" ? "white" : Constants.blue + color: tCircle1.state === "active" ? Constants.white : Style.color.accent } } } diff --git a/resources/qml/Governikus/Workflow/+mobile/ProgressIndicator.qml b/resources/qml/Governikus/Workflow/+mobile/ProgressIndicator.qml index 7ace838..e80dbd1 100644 --- a/resources/qml/Governikus/Workflow/+mobile/ProgressIndicator.qml +++ b/resources/qml/Governikus/Workflow/+mobile/ProgressIndicator.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtGraphicalEffects 1.0 @@ -40,7 +44,7 @@ Item { id: busyIcon anchors.centerIn: parent width: height - height: Math.min(parent.height - Utils.dp(40), 2 * pCircle.height) + height: Math.min(parent.height - 40, 2 * pCircle.height) running: visible visible: baseItem.state === "one" } diff --git a/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml b/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml index f4ffaaf..53d2409 100644 --- a/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml +++ b/resources/qml/Governikus/Workflow/+mobile/RemoteWorkflow.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Layouts 1.1 @@ -5,6 +9,7 @@ import Governikus.Global 1.0 import Governikus.RemoteServiceView 1.0 import Governikus.TechnologyInfo 1.0 import Governikus.Type.ApplicationModel 1.0 +import Governikus.Type.SettingsModel 1.0 import Governikus.Type.RemoteServiceModel 1.0 import Governikus.Type.ReaderPlugIn 1.0 import Governikus.Type.NumberModel 1.0 @@ -21,7 +26,8 @@ Item { Connections { target: ApplicationModel onFireCertificateRemoved: { - qmlExtension.showFeedback(qsTr("The device %1 was unpaired because it does not react to connection attempts. Retry the pairing process if you want to use this device to authenticate yourself.").arg(pDeviceName)) + //: INFO ANDROID IOS The paired smartphone was removed since it did not respond to connection attempts. It needs to be paired again before using it. + ApplicationModel.showFeedback(qsTr("The device %1 was unpaired because it does not react to connection attempts. Retry the pairing process if you want to use this device to authenticate yourself.").arg(pDeviceName)) } } @@ -45,7 +51,7 @@ Item { TechnologyInfo { id: techInfo anchors.left: parent.left - anchors.leftMargin: Utils.dp(5) + anchors.leftMargin: 5 anchors.right: parent.right anchors.rightMargin: anchors.leftMargin anchors.top: progressIndicator.bottom @@ -53,13 +59,16 @@ Item { enableButtonVisible: !wifiEnabled || !foundSelectedReader enableButtonText: { - settingsModel.translationTrigger + SettingsModel.translationTrigger if (!wifiEnabled) { + //: LABEL DESKTOP_QML return qsTr("Enable Wifi"); } else if (!foundSelectedReader) { + //: LABEL DESKTOP_QML return qsTr("Pair device"); } else { + //: LABEL DESKTOP_QML return qsTr("Continue") } } @@ -72,34 +81,41 @@ Item { } } enableText: { - settingsModel.translationTrigger + SettingsModel.translationTrigger if (!wifiEnabled) { + //: INFO ANDROID IOS The wifi module needs to be enabled in the system settings to use the remote service. return qsTr("To use the remote service WiFi has to be activated. Please activate WiFi in your device settings."); } else if (!foundSelectedReader) { - return qsTr("No paired and activated remote device was detected. Make sure that you have started remote service on you remote device."); + //: INFO ANDROID IOS No paired and reachable device was found, hint that the remote device needs to be actually started for this feature. + return qsTr("No paired and activated remote device was detected. Make sure that you have started the remote service on your remote device."); } else { return ""; } } titleText: (foundSelectedReader ? + //: LABEL DESKTOP_QML qsTr("Determine card") : + //: LABEL DESKTOP_QML qsTr("Establish connection") - ) + settingsModel.translationTrigger + ) + SettingsModel.translationTrigger subTitleText: { - settingsModel.translationTrigger + SettingsModel.translationTrigger if (!visible) { return ""; } else if (!!NumberModel.inputError) { return NumberModel.inputError; } else if (ApplicationModel.extendedLengthApdusUnsupported) { + //: INFO ANDROID IOS The device does not support Extended Length and can not be used as card reader. qsTr("Your remote device does not meet the technical requirements (Extended Length not supported)."); } else if (NumberModel.pinDeactivated) { + //: INFO ANDROID IOS The online authentication is disabled and needs to be enabled by the authorities. return qsTr("The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function."); } else { + //: INFO ANDROID IOS The connection to the smartphone was established, the id card may be inserted. return qsTr("Connected to %1. Please insert your ID card.").arg(RemoteServiceModel.connectedServerDeviceNames); } } diff --git a/resources/qml/Governikus/Workflow/+mobile/TextCircle.qml b/resources/qml/Governikus/Workflow/+mobile/TextCircle.qml index 3b86cb0..3fc61d6 100644 --- a/resources/qml/Governikus/Workflow/+mobile/TextCircle.qml +++ b/resources/qml/Governikus/Workflow/+mobile/TextCircle.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 import QtQuick.Controls 2.3 @@ -6,7 +10,7 @@ import Governikus.Style 1.0 Item { property alias text: t.text - height: Utils.dp(50) + height: 50 width: height BusyIndicator { @@ -22,19 +26,19 @@ Item { id: rec border.width: 1 border.color: Constants.blue - color: parent.state === "active" ? Constants.blue : "white" + color: parent.state === "active" ? Style.color.accent : Constants.white height: parent.state === "active" ? parent.height : parent.height / 2 width: height radius: width * 0.5 anchors.centerIn: parent } - Text { + GText { id: t anchors.centerIn: rec font.bold: parent.state === "active" - font.pixelSize: rec.height / 3 - color: parent.state === "active" ? "white" : Constants.blue + textStyle: Style.text.normal + color: parent.state === "active" ? Constants.white : Style.color.accent } state:"inactive" diff --git a/resources/qml/Governikus/Workflow/+mobile/Workflow.qml b/resources/qml/Governikus/Workflow/Workflow.qml similarity index 53% rename from resources/qml/Governikus/Workflow/+mobile/Workflow.qml rename to resources/qml/Governikus/Workflow/Workflow.qml index cc3d0ed..2934fd2 100644 --- a/resources/qml/Governikus/Workflow/+mobile/Workflow.qml +++ b/resources/qml/Governikus/Workflow/Workflow.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtQuick 2.10 QtObject { diff --git a/resources/qml/main.qml b/resources/qml/main.qml deleted file mode 100644 index 9ec7fb7..0000000 --- a/resources/qml/main.qml +++ /dev/null @@ -1,4 +0,0 @@ -import "main.qml" - -main { -} diff --git a/resources/sonar-project.properties.in b/resources/sonar-project.properties.in index 768df57..c0e27c9 100644 --- a/resources/sonar-project.properties.in +++ b/resources/sonar-project.properties.in @@ -1,4 +1,4 @@ -sonar.host.url=https://sonar.governikus.de +sonar.host.url=https://sonar.govkg.de sonar.projectKey=ausweisapp2:default sonar.projectName=AusweisApp2 @@ -9,9 +9,10 @@ sonar.sources=src sonar.sourceEncoding=UTF-8 sonar.language=cpp +sonar.c.file.suffixes=.c sonar.cpp.file.suffixes=.cpp,.h sonar.objc.file.suffixes=.m,.mm sonar.cfamily.build-wrapper-output=@PROJECT_BINARY_DIR@ sonar.cfamily.gcov.reportsPath=@PROJECT_BINARY_DIR@/Testing/CoverageInfo -sonar.exclusions=src/external/**,utils/**,**/CMakeFiles/* +sonar.exclusions=src/external/**,utils/**,**/CMakeFiles/*,**/*.java diff --git a/resources/statemachine.sh.in b/resources/statemachine.sh.in index 568b961..d402dd6 100755 --- a/resources/statemachine.sh.in +++ b/resources/statemachine.sh.in @@ -5,7 +5,7 @@ s/[[:alnum:]]+\.setInitialState\(s([[:alnum:]]+)\)\;/[*] --> \1/p s/setInitialState\(s([[:alnum:]]+)\)\;/[*] --> \1/p s/auto[[:space:]]sFinal[[:space:]]=[[:space:]]addState\(\)\;/state Final #DarkSeaGreen/p s/[[:alnum:]]+\-.addTransition\(s([[:alnum:]]+)\,[[:space:]]+\&[[:alnum:]]+\:\:fire([[:alnum:]]+)\,[[:space:]]+s([[:alnum:]]+)\)\;/\1 --> \3 : \2/p -s/connect\(s([[:alnum:]]+)\,[[:space:]]+\&[[:alnum:]]+\:\:fire([[:alnum:]]+)\,[[:space:]]+this\,[[:space:]]+\&[[:alnum:]]+\:\:fire([[:alnum:]]+)\)\;/state \3 #DarkSeaGreen\n \1 --> \3 : \2/p +s/connect\(s([[:alnum:]]+)\,[[:space:]]+\&[[:alnum:]]+\:\:fire([[:alnum:]]+)\,[[:space:]]+this\,[[:space:]]+\&[[:alnum:]]+\:\:fire([[:alnum:]]+)\)\;/state \3 #DarkSeaGreen\'$'\n'' \1 --> \3 : \2/p s/auto[[:space:]]+([[:alnum:]]+)[[:space:]]+=\s+addAndConnectState\(\);/\1 --> [*]/p ' @@ -19,9 +19,9 @@ function createImage { rm $2.uml } -createImage @PROJECT_SOURCE_DIR@/src/core/states/CompositeStateSelectCard.cpp @PROJECT_BINARY_DIR@/uml_CompositeStateSelectCard createImage @PROJECT_SOURCE_DIR@/src/core/states/CompositeStatePace.cpp @PROJECT_BINARY_DIR@/uml_CompositeStatePace createImage @PROJECT_SOURCE_DIR@/src/core/states/CompositeStateProcessCvcsAndSetRights.cpp @PROJECT_BINARY_DIR@/uml_CompositeStateProcessCvcsAndSetRights +createImage @PROJECT_SOURCE_DIR@/src/core/states/CompositeStateTrustedChannel.cpp @PROJECT_BINARY_DIR@/uml_CompositeStateTrustedChannel createImage @PROJECT_SOURCE_DIR@/src/core/controller/ChangePinController.cpp @PROJECT_BINARY_DIR@/uml_ChangePinController createImage @PROJECT_SOURCE_DIR@/src/core/controller/SelfAuthController.cpp @PROJECT_BINARY_DIR@/uml_SelfAuthController createImage @PROJECT_SOURCE_DIR@/src/core/controller/AuthController.cpp @PROJECT_BINARY_DIR@/uml_AuthController diff --git a/resources/translations/ausweisapp2_de.ts b/resources/translations/ausweisapp2_de.ts index 0b9574d..5bce47b 100644 --- a/resources/translations/ausweisapp2_de.ts +++ b/resources/translations/ausweisapp2_de.ts @@ -16,16 +16,38 @@ OK - AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Ministry of the Interior, Building and Community. - Die AusweisApp2 ist ein Produkt der Governikus GmbH & Co. KG - im Auftrag des Bundesministeriums des Innern, für Bau und Heimat. + AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Office for Information Security. + Die AusweisApp2 ist ein Produkt der Governikus GmbH & Co. KG - im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik. AdditionalResultsItem Additional results: + LABEL ANDROID_TABLET IOS_TABLET Weitere Ergebnisse: + + Additional results in other categories: %1. Click here to remove filter. + Weitere Ergebnisse in anderen Kategorien: %1. Klicken Sie hier, um den Filter zu entfernen. + + + Additional results in other categories: + LABEL DESKTOP_QML + Weitere Ergebnisse in anderen Kategorien: + + + Show + Anzeigen + + + %1 additional results in other categories + %1 Ergebnisse in anderen Kategorien + + + Click to remove category filter and show additional results. + Klicken Sie hier, um den Filter zu entfernen. + AppQtMainWidget @@ -161,14 +183,58 @@ AvailableDevicesListDelegate - Unsupported - Nicht unterstützt + Great quality + LABEL ANDROID IOS + Gute Qualität + + + Bad quality + Schlechte Qualität + + + Device %1 is available for pairing + Gerät %1 kann gekoppelt werden + + + + BaseConfirmationPopup + + Ok + LABEL ALL_PLATFORMS + Ok + + + Cancel + LABEL ALL_PLATFORMS + Abbrechen + + + + BaseHistoryView + + History + INFO ANDROID IOS + Verlauf + + + Currently there are no history entries. + INFO ANDROID IOS No authentication history, placeholder text. + Derzeit gibt es keine Einträge im Verlauf. + + + + BaseProviderView + + No match found + LABEL IOS_PHONE ANDROID_PHONE Der in das Suchfeld eingegebene String erzielte kein Ergebnis + Keine Übereinstimmung gefunden BluetoothWorkflow Enable Bluetooth + LABEL ANDROID IOS Bluetooth aktivieren @@ -177,6 +243,7 @@ Bluetooth is not supported by your device. + INFO ANDROID IOS Bluetooth is not available to AA2, the user is requested to use NFC instead. Ihr Gerät unterstützt kein Bluetooth. @@ -185,6 +252,7 @@ Bluetooth is switched off. + INFO ANDROID IOS Bluetooth is available but not active. Bluetooth ist deaktiviert. @@ -193,26 +261,32 @@ No paired and activated Bluetooth device was detected. The AusweisApp2 needs access to your location in order to discover available devices. You can grant this permission after clicking the continue button. - Es konnte kein gekoppeltes, eingeschaltetes Bluetooth-Kartenlesegerät erkannt werden. Zur Erkennung benötigt die AusweisApp2 Zugriff auf Ihren Standort. Nach Klicken auf den Fortsetzen-Knopf können Sie die benötigte Freigabe erteilen. + INFO ANDROID IOS Bluetooth is active but the AA2 does not have the location permission which is required to find the bluetooth reader. The user is asked to give the permission to the AA2 after pressing the "ok" button. + Es konnte kein gekoppelter, eingeschalteter Bluetooth-Kartenleser erkannt werden. Zur Erkennung benötigt die AusweisApp2 Zugriff auf Ihren Standort. Nach Klicken auf den Fortsetzen-Knopf können Sie die benötigte Freigabe erteilen. An error occured while connecting to your bluetooth device. Try to pair your device in the system settings and restart the app. - Beim Verbindungsaufbau zum Bluetooth-Kartenlesegerät ist ein Fehler aufgetreten. Bitte koppeln Sie das Gerät über die Einstellungen des Systems und starten Sie die App erneut. + INFO ANDROID IOS The connection to the bluetooth reader failed. + Beim Verbindungsaufbau zum Bluetooth-Kartenleser ist ein Fehler aufgetreten. Bitte koppeln Sie das Gerät über die Einstellungen des Systems und starten Sie die App erneut. Establish connection + INFO ANDROID IOS Status message while connecting to the bluetooth reader - Header Verbindung wird hergestellt Determine card + INFO ANDROID IOS Status message while the connection to the bluetooth has been established and an id card needs to be inserted - Header Ermittle Ausweis Search card reader... - Suche Kartenlesegerät... + LABEL ANDROID IOS INFO ANDROID IOS Status message while the connection to the bluetooth reader is being established. + Suche Kartenleser... Please insert your ID card. + INFO ANDROID IOS Status message after the connection to the bluetooth reader is established and an id card needs to be inserted. Bitte legen Sie Ihren Ausweis ein. @@ -277,6 +351,13 @@ Abbrechen + + CardReaderView + + After connecting a new card reader it may take a few seconds to recognize the driver. It may be necessary to restart your system after installing the driver. Only supported and connected card reader are shown here. %1 + Nachdem ein neuer Kartenleser angeschlossen worden ist, kann es einige Sekunden dauern bis der Treiber erkannt wird. Unter Umständen kann ein Neustart Ihres Betriebssystems notwendig sein. Es werden hier nur unterstützte und angeschlossene Kartenleser angezeigt. %1 + + Category @@ -308,88 +389,128 @@ CertificateDescriptionPage Provider Information + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Anbieterinformationen Close + LABEL DESKTOP_QML Schließen + + Self-authentication data view + Datenansicht der Selbstauskunft + + + This is the self-authentication data view of the AusweisApp2. + Dies ist die Datenansicht der Selbstauskunft der AusweisApp2. + ChangePinController You may now remove your ID card from the device. + INFO DESKTOP_QML Changing the PIN was successful; hint that the id card may now be removed from the card reader. +---------- +INFO ANDROID IOS Hint that the id card may be removed from the card reader since the PIN was changed successfully. Sie können nun Ihr Ausweisdokument vom Gerät entfernen. + + Weak NFC signal + INFO IOS The NFC signal is weak or unstable. The scan is stopped with this information in the iOS dialog. + Schwacher NFC-Empfang + ChangePinView PIN Management + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS PIN-Verwaltung Change PIN + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS PIN ändern Please wait a moment... + INFO DESKTOP_QML Processing screen text while the card communication is running after the PIN has been entered during PIN change process. +---------- +INFO ANDROID IOS Loading screen during PIN change process, data communcation is currently ongoing. Message is usually not visible since the password handling with basic reader is handled by EnterPasswordView. +---------- +INFO ANDROID IOS Generic progress message during PIN change process. Bitte warten Sie einen Moment... The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function. + INFO ANDROID IOS The card communcation was aborted, the online identification functionality is deactivated and needs to be actived by the authorities. Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren. Please observe the display of your card reader. - Bitte beachten Sie die Anzeige Ihres Kartenlesegeräts. + INFO ANDROID IOS Either an comfort card reader or smartphone-as-card-reader is used, the user needs to react to request on that device. + Bitte beachten Sie die Anzeige Ihres Kartenlesers. You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card. + INFO ANDROID IOS The wrong PIN was entered twice, the next attempt requires additional verifcation via CAN. Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises. You have entered a wrong PIN three times. Your PIN is now blocked. You have to enter the PUK now for unblocking. + INFO ANDROID IOS The PIN (including the CAN) was entered wrongfully three times, the PUK is required to unlock the id card. Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein. Weak NFC signal. Please reposition your card. - Schwacher NFC-Empfang. Bitte korrigieren Sie die Position Ihres Ausweises. + INFO ANDROID IOS The NFC signal is weak or unstable, the user is asked to change the card's position to (hopefully) reduce the distance to the NFC chip. + Schwacher NFC-Empfang. Bitte korrigieren Sie die Position Ihres Ausweisdokuments. Retry + LABEL ANDROID IOS Erneut versuchen + + Weak NFC signal. +Please reposition your card. + INFO DESKTOP_QML The NFC signal is weak or unstable, the user is asked to change the card's position to (hopefully) reduce the distance to the NFC chip. + Schwacher NFC-Empfang. +Bitte korrigieren Sie die Position Ihres Ausweises. + + + Your ID card is unblocked. You now have three more tries to change your PIN + INFO DESKTOP_QML The ID card has just been unblocked and the user can now continue with their PIN change. +---------- +INFO ANDROID IOS The ID card has just been unblocked and the user can now continue with their PIN change. + Ihr Ausweisdokument wurde entsperrt. Sie haben nun drei weitere Versuche um Ihre PIN zu ändern + ChangePinViewContent PIN Management + LABEL ANDROID IOS PIN-Verwaltung You have the opportunity to change your transport PIN into a personal PIN. You can also change the PIN at any time or unblock the PIN using the personal unblocking key (PUK). The transport PIN and the PUK can be found in the letter sent to you by your competent authority. + LABEL ANDROID IOS Hier haben Sie die Möglichkeit, Ihre Transport-PIN in eine persönliche PIN zu ändern. Zudem können Sie jederzeit Ihre persönliche PIN ändern oder eine Blockierung mit Hilfe der Entsperrnummer (PUK) aufheben. Sie finden Ihre Transport-PIN und die PUK in dem Schreiben, das Sie nach Beantragung Ihres Ausweisdokuments von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde erhalten haben. Change PIN now + LABEL ANDROID IOS Jetzt PIN ändern - - ConfirmationPopup - - Cancel - Abbrechen - - - - ContinueButton - - Continue - Fortsetzen - - CredentialDialog @@ -421,8 +542,21 @@ DataGroup No data requested + LABEL DESKTOP_QML +---------- +LABEL ANDROID +---------- +LABEL IOS_TABLET Keine Daten erforderlich + + selected + ausgewählt + + + not selected + nicht ausgewählt + DetailDialog @@ -447,54 +581,90 @@ - DeveloperSettingsWidget + DeveloperSettings - Self authentication test URI: - Test URI für die Selbstauskunft: + Developer options + LABEL DESKTOP_QML + Entwickleroptionen + + Test PKI + LABEL DESKTOP_QML + Test-PKI + + + Developer mode + LABEL DESKTOP_QML + Entwicklermodus + + + The developer mode is aimed at integrators / developers for new service applications. For this reason, the developer mode works only in the test PKI. By activating the developer mode, some safety tests are deactivated. This means that the authentication process continues although the AusweisApp2 would usually abort the process with an error message when used in normal operation mode. Information on the disregarded error in the developer mode is displayed in the attached window below the AusweisApp2. + LABEL DESKTOP_QML Only visible when the user activates the developer mode in the settings. + Der Entwicklermodus richtet sich an Integratoren / Entwickler für neue Dienste. Aus diesem Grund funktioniert der Entwicklermodus lediglich in der Test-PKI. Durch Aktivierung des Entwicklermodus werden einige Sicherheitsprüfungen abgestellt. Die Authentisierung wird auch dann weitergeführt, wenn die AusweisApp2 im Normalbetrieb die Authentisierung mit einer Fehlermeldung abbrechen würde. Der übergangene Fehler im Entwicklermodus wird im angehängten Fenster unterhalb der AusweisApp2 angezeigt. + + + + DeveloperSettingsWidget use verwenden + + Self-authentication test URI: + Test URI für die Selbstauskunft: + DeveloperView Developer options + LABEL ALL_PLATFORMS Entwickleroptionen Test environment + LABEL ALL_PLATFORMS Testumgebung - - Use the test environment during a selfauthentication - Benutze die Test-Umgebung während der Selbstauskunft - Developer Mode + LABEL ALL_PLATFORMS Entwicklermodus Use a more tolerant mode + LABEL ALL_PLATFORMS Benutze einen toleranten Modus Change the layout style + LABEL ALL_PLATFORMS Ändere den Style des Layouts iOS + LABEL ALL_PLATFORMS iOS Android + LABEL ALL_PLATFORMS Android Tablet, Android + LABEL ALL_PLATFORMS Tablet, Android + + Use the test environment during a self-authentication + LABEL ALL_PLATFORMS + Benutze die Test-Umgebung während der Selbstauskunft + + + Developer mode + Entwicklermodus + DiagnosisDialog @@ -511,150 +681,412 @@ Schließen + + DiagnosisView + + Diagnosis view + Anzeige der Diagnose + + + This is the diagnosis view of the AusweisApp2. + Dies ist die Anzeige der Diagnose der AusweisApp2. + + + Diagnosis + LABEL DESKTOP_QML + Diagnose + + + Save diagnosis to textfile + Speichere Diagnose in Textdatei + + + Save to file + LABEL DESKTOP_QML + Speichern unter + + EditRights You are about to identify yourself towards the following service provider: + LABEL DESKTOP_QML +---------- +LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET Sie möchten sich bei folgendem Diensteanbieter ausweisen: Purpose for reading out requested data + LABEL DESKTOP_QML +---------- +LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET Zweck des Auslesevorgangs Service provider + LABEL DESKTOP_QML +---------- +LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET Diensteanbieter more... + LABEL DESKTOP_QML mehr... The following data will be transferred to the service provider when you enter the PIN: + LABEL DESKTOP_QML +---------- +LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET Folgende Daten Ihres Ausweises werden nach Eingabe der PIN ausgelesen und an den Diensteanbieter übermittelt: Transactional information + LABEL DESKTOP_QML +---------- +LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET Transaktionsinformationen Required Data + LABEL DESKTOP_QML +---------- +LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET Erforderliche Daten Optional Data + LABEL DESKTOP_QML +---------- +LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET Optionale Daten - Identify now - Jetzt ausweisen + Identify + LABEL ANDROID_PHONE +---------- +LABEL ANDROID_TABLET +---------- +LABEL IOS_PHONE +---------- +LABEL IOS_TABLET + Ausweisen - Identify - Ausweisen + Edit rights view + Anzeige zum Ändern der Berechtigungen + + + This is the edit rights view of the AusweisApp2. + Dies ist die Anzeige zum Ändern der Berechtigungen der AusweisApp2. + + + Click for more information about the service provider + Klicke hier für mehr Informationen zum Diensteanbieter + + + Proceed to %1 entry + LABEL DESKTOP_QML %1 can be CAN or PIN +---------- +LABEL ANDROID_PHONE %1 can be CAN or PIN +---------- +LABEL ANDROID_TABLET %1 can be CAN or PIN +---------- +LABEL IOS_PHONE %1 can be CAN or PIN +---------- +LABEL IOS_TABLET %1 can be CAN or PIN + Weiter zur %1-Eingabe - EnterPinView + EnterPasswordView + + Enter %1 view. You can start to enter the number. + Anzeige der %1-Eingabe. Sie können nun Ihre Ziffern eingeben. + + + This is the enter password view of the AusweisApp2. + Dies ist die Anzeige der Passworteingabe der AusweisApp2. + + + Attempts + LABEL DESKTOP_QML + Versuche + + + Remaining attempts: %1 + LABEL DESKTOP_QML + Verbleibende Versuche: %1 + + + %1-Entry + LABEL DESKTOP_QML %1 can be "PIN, CAN, PUK or UNKNOWN" + %1-Eingabe + The entered PIN does not match the new PIN. Please correct your input. + INFO DESKTOP_QML The changed PIN was entered wrongfully during the confirmation process. +---------- +INFO ANDROID IOS The changed PIN was entered wrongfully during confirmation. Die eingegebene PIN stimmt nicht mit Ihrer neuen PIN überein. Bitte korrigieren Sie Ihre PIN-Eingabe. - Please enter the six-digit card access number. You can find the card access number on the front of the ID card. - Bitte geben Sie Ihre 6-stellige Zugangsnummer ein. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises. + Please enter your 6-digit PIN. Use the keyboard or numpad. + INFO DESKTOP_QML The AA2 expects a PIN with 6 digit which can be entered via the physical or onscreen keyboard. + Bitte geben Sie Ihre 6-stellige PIN ein. Benutzen Sie dazu die Tastatur oder den Ziffernblock. + + + More information + Mehr Informationen + + + Please enter the 6-digit CAN you can find on the front of your ID card. + INFO DESKTOP_QML The user is required to enter the 6 digit CAN. + Bitte geben Sie Ihre 6-stellige CAN ein. Diese befindet sich auf der Vorderseite Ihres Ausweises. You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card. + INFO DESKTOP_QML The PIN was entered wrongfully twice, this may have happened during an earlier session of the AA2, too. The user needs to enter the CAN for additional verification. +---------- +INFO ANDROID IOS The wrong PIN was entered twice, the third attempt requires the CAN for additional verification, hint where the CAN is found. Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises. - You have entered a wrong PIN three times. Your PIN is now blocked. You have to enter the PUK now for unblocking. - Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein. + The online identification function is blocked. Please use your personal unblocking key (PUK) to unblock your ID card. + INFO DESKTOP_QML The PUK is required to unlock the id card. + Die Online-Ausweisfunktion ist blockiert. Die Blockierung können Sie mit Ihrer Entsperrnummer (PUK) aufheben. Please enter a new 6-digit PIN of your choice. + INFO DESKTOP_QML A new 6-digit PIN needs to be supplied. +---------- +INFO ANDROID IOS A new 6-digit PIN needs to be supplied. Geben Sie nun bitte eine neue 6-stellige PIN Ihrer Wahl ein. Please enter your new 6-digit PIN again. + INFO DESKTOP_QML The new PIN needs to be entered again for verification. +---------- +INFO ANDROID IOS The new PIN needs to be confirmed. Wiederholen Sie bitte Ihre neue 6-stellige PIN. - Enter the pairing code shown on your other device to use it as a card reader. - Geben Sie den Kopplungscode, der auf Ihrem anderen Gerät angezeigt wird, ein, um dieses als Kartenlesegerät verwenden zu können. - - - Please enter your personal PIN. - Geben Sie bitte Ihre persönliche PIN ein. - - - Please enter your transport PIN. - Geben Sie bitte Ihre Transport-PIN ein. + Unknown password type: + INFO DESKTOP_QML Error message during PIN/CAN/PUK input procedure, the requested password type is unknown; internal error. + Unbekannter Passwort-Typ: Your PIN has 6 digits? - Ihre PIN ist 6-stellig? + LABEL DESKTOP_QML Button, mit dem der Benutzer eine TransportPIN-Änderung starten kann. +---------- +LABEL ANDROID IOS Button, mit dem der Benutzer eine TransportPIN-Änderung starten kann. + Ist Ihre PIN 6-stellig? Your PIN has 5 digits? - Ihre PIN ist 5-stellig? + Ist Ihre PIN 5-stellig? + + + Please enter the six-digit card access number. You can find the card access number on the front of the ID card. + INFO ANDROID IOS The CAN needs to be entered in CAN-allowed mode, hint where the CAN can be found. + Bitte geben Sie Ihre 6-stellige Zugangsnummer ein. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises. + + + You have entered a wrong PIN three times. Your PIN is now blocked. You have to enter the PUK now for unblocking. + INFO ANDROID IOS The PUK is required to unlock the id card since the wrong PIN entered three times. + Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein. + + + Please enter your transport PIN. + INFO ANDROID IOS The transport PIN is required by AA2, it needs to be change to an actual PIN. + Geben Sie bitte Ihre Transport-PIN ein. + + + Enter the pairing code shown on your other device to use it as a card reader. + INFO ANDROID IOS The pairing code for the smartphone is required. + Geben Sie den Kopplungscode, der auf Ihrem anderen Gerät angezeigt wird, ein, um dieses als Kartenleser verwenden zu können. + + + Please enter your PIN. + LABEL ANDROID IOS + Geben Sie bitte Ihre PIN ein. + + + Please start the remote service in order to use your smartphone as a card reader with AusweisApp2. + Bitte starten sie den Fernzugriff um Ihr Smartphone als Kartenleser in der AusweisApp2 zu nutzen. + + + Please enter your 5-digit Transport PIN. Use the keyboard or numpad. + INFO DESKTOP_QML The AA2 expects a PIN with 5 digit which can be entered via the physical or onscreen keyboard. + Bitte geben Sie Ihre 5-stellige Transport-PIN ein. Benutzen Sie dazu die Tastatur oder den Ziffernblock. Feedback Rate AusweisApp2 + LABEL ANDROID IOS Bewerten Sie die AusweisApp2 Help & Feedback + LABEL ANDROID IOS Hilfe & Feedback FAQ + LABEL ANDROID IOS FAQ Do you have questions how to use AusweisApp2? + LABEL ANDROID IOS Haben Sie Fragen zur Nutzung der AusweisApp2? - - https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/ - https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/ - Support + LABEL ANDROID IOS Support You need further help? + LABEL ANDROID IOS Benötigen Sie weitere Hilfe? - - https://www.ausweisapp.bund.de/en/qa/support/ - https://www.ausweisapp.bund.de/fragen-und-antworten/support/ - Please rate us in the Google Play Store. + LABEL ANDROID IOS Bewerten Sie die AusweisApp2. Report error + LABEL ANDROID IOS Melden Sie einen Fehler You found a bug? Please tell us, so we can fix it. + LABEL ANDROID IOS Sie haben einen Fehler gefunden? Teilen Sie ihn uns mit, damit wir ihn beheben können. Show log + LABEL ANDROID IOS Protokoll anzeigen You can view the logs of the AusweisApp2 here. + LABEL ANDROID IOS Hier können Sie das Protokoll der AusweisApp2 einsehen. + + https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/ + LABEL ANDROID IOS + https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/ + + + https://www.ausweisapp.bund.de/en/qa/support/ + LABEL ANDROID IOS + https://www.ausweisapp.bund.de/fragen-und-antworten/support/ + + + + GSwitch + + Switch + Wechseln + + + + GeneralSettings + + Language selection + LABEL DESKTOP_QML + Sprachauswahl + + + German + Deutsch + + + Set language to german + Verwende deutsche Sprache + + + English + Englisch + + + Set language to english + Verwende englische Sprache + + + UI settings + LABEL DESKTOP_QML + Einstellungen der grafischen Oberfläche + + + Switch back to old UI + LABEL DESKTOP_QML + Alte Oberfläche verwenden + + + Behavior + LABEL DESKTOP_QML + Verhalten + + + Auto start AusweisApp2 after boot + LABEL DESKTOP_QML + AusweisApp2 automatisch beim Hochfahren starten + + + Close after authentication + LABEL DESKTOP_QML + Nach Authentisierung schließen + GeneralSettingsWidget @@ -722,107 +1154,294 @@ use on screen password Bildschirmtastatur verwenden + + Try out the new beta UI: + Probieren Sie die neue grafische Oberfläche: + + + Switch UI + Grafische Oberfläche wechseln + + + + GeneralWorkflow + + General workflow view + Allgemeiner Fortschritt + + + This is the general workflow view of the AusweisApp2. + Dies ist die allgemeine Fortschrittsansicht der AusweisApp2. + + + Change PIN + LABEL DESKTOP_QML + PIN ändern + + + Identify + Ausweisen + + + The device %1 was unpaired because it does not react to connection attempts. Retry the pairing process if you want to use this device to authenticate yourself. + INFO DESKTOP_QML The paired devices was removed since it did not respond to connection attempts. It needs to be paired again if it should be used as card reader. + Das Gerät %1 wurde entkoppelt, da es nicht auf Verbindungsversuche reagiert hat. Versuchen Sie das Gerät erneut zu koppeln, wenn Sie es zur Authentisierung verwenden möchten. + + + Attempts + LABEL DESKTOP_QML + Versuche + + + Remaining attempts: + Verbleibende Versuche: + + + Step %1 of 3 + Schritt %1 von 3 + + + Establish connection + LABEL DESKTOP_QML + Verbindung wird hergestellt + + + Information + LABEL DESKTOP_QML + Information + + + Please insert the card into the device + INFO DESKTOP_QML The AA2 is waiting for an id card to be inserted into the card reader. + Bitte legen Sie die Karte auf den Kartenleser + + + Searching for card reader + INFO DESKTOP_QML AA2 is waiting for the card reader or the id card. + Suche nach Kartenleser + + + The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function. + INFO DESKTOP_QML The online authentication feature of the card is disabled and needs to be activated by the authorities. + Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren. + + + Please observe the display of your card reader. + INFO DESKTOP_QML The card reader is a comfort reader with its own display, the user is requested to pay attention to that display (instead of the AA2). + Bitte beachten Sie die Anzeige Ihres Kartenlesers. + + + Please place the smartphone on the card + INFO DESKTOP_QML The AA2 is waiting for the smartphone to be placed on the id. + Bitte platzieren Sie das Smartphone auf der Karte + + + Please place the smartphone on the card or insert the card into the device + INFO DESKTOP_QML The AA2 is waiting for an id card to be inserted into the card reader (or smartphone for that matter). + Bitte platzieren Sie das Smartphone auf der Karte oder legen Sie die Karte in den Kartenleser ein + + + The used card reader does not meet the technical requirements (Extended Length not supported). + ERROR DESKTOP_QML + Der verwendete Kartenleser erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). + + + + Hamburger + + Show navigation + Zeige Navigation + + + Back + Zurück + + + Cancel + Abbrechen + + + + HistoryListItem + + Click to view details of history entry. + Zeige Details des Verlaufseintrags. + + + today + LABEL ANDROID IOS + heute + + + yesterday + gestern + + + dddd + dddd + + + dd.MM.yyyy + dd.MM.yyyy + + + Tap for more details + LABEL ANDROID IOS + Berühren Sie hier für mehr Details + HistoryListViewDelegate - today - heute - - - yesterday - gestern - - - dddd - dddd - - - dd.MM.yyyy - dd.MM.yyyy - - - Tap for more details - Berühren Sie hier für mehr Details + Delete history entry: %1 + INFO IOS Accessible name for the trash icon of a history entry. + Lösche Verlaufseintrag: %1 - HistoryListViewDelegateContent + HistoryRemovalTimePeriodControl - today - heute + Time period + LABEL DESKTOP_QML + Zeitspanne - yesterday - gestern + Past hour + LABEL DESKTOP_QML + Letzte Stunde - dddd - dddd + Past day + LABEL DESKTOP_QML + Letzter Tag - dd.MM.yyyy - dd.MM.yyyy + Past week + LABEL DESKTOP_QML + Letzte Woche - Tap for more details - Berühren Sie hier für mehr Details + Last four weeks + LABEL DESKTOP_QML + Letzte vier Wochen + + + All history + LABEL DESKTOP_QML + Gesamter Zeitraum HistoryView History + LABEL DESKTOP_QML Verlauf Currently there are no history entries. + INFO DESKTOP_QML No authentication history, placeholder text. Derzeit gibt es keine Einträge im Verlauf. Delete all + LABEL IOS Lösche alle - Please confirm that you want to delete your complete history. - Bitte bestätigen Sie, dass der komplette Verlauf gelöscht werden soll. + History view + Verlaufsanzeige + + + This is the history view of the AusweisApp2. + Dies ist die Verlaufsanzeige der AusweisApp2. + + + Delete history? + INFO DESKTOP_QML Header of the confirmation dialog to clear the entire authentication history. + Verlauf löschen? + + + Please confirm that you want to delete your history entries. + INFO DESKTOP_QML Content of the confirmation dialog to clear the entire authentication history. + Bitte bestätigen Sie das Löschen der Verlaufseinträge. + + + Removed %1 entries from the history. + INFO DESKTOP_QML Feedback how many history entries were removed. + Es wurden %1 Einträge aus dem Verlauf entfernt. + + + Clear history + LABEL DESKTOP_QML + Lösche Verlauf + + + Save to pdf + LABEL DESKTOP_QML + Speichern als PDF + + + today + heute + + + yesterday + gestern + + + dddd + dddd + + + dd.MM.yyyy + dd.MM.yyyy HistoryViewConfirmationPopup Delete history + LABEL ANDROID IOS Verlauf löschen - - Cancel - Abbrechen - Delete + LABEL ANDROID IOS Löschen - Removed %1 entries from the history. - Es wurden %1 Einträge aus dem Verlauf entfernt. + Please confirm that you want to delete your complete history. + LABEL ANDROID IOS Confirmaton popup to clear all history entries. + Bitte bestätigen Sie, dass der komplette Verlauf gelöscht werden soll. HistoryViewDetails Provider Information + LABEL ANDROID IOS Anbieterinformationen Provider name + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Anbieter Purpose + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Zweck Date + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Datum @@ -831,27 +1450,34 @@ Requested data + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Angeforderte Daten Terms of usage + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Nutzungsbedingungen + + Details for history entry + Details des Verlaufseintrags + HistoryViewTitleBarControls History enabled + LABEL ANDROID IOS Verlauf aktiviert History disabled Verlauf deaktiviert - - Please confirm that you want to delete your complete history. - Bitte bestätigen Sie, dass der komplette Verlauf gelöscht werden soll. - HistoryWidget @@ -904,175 +1530,279 @@ IdentifyController You may now remove your ID card from the device. + INFO DESKTOP_QML The authentication process is completed, the id card may be removed from the card reader. +---------- +INFO ANDROID IOS The authentication process is completed, the id card may (and should) be removed from the card reader. Sie können nun Ihr Ausweisdokument vom Gerät entfernen. + + Weak NFC signal + INFO IOS The NFC signal is weak or unstable. The scan is stopped with this information in the iOS dialog. + Schwacher NFC-Empfang + IdentifyView Identify + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Ausweisen Authentication in progress + INFO DESKTOP_QML Header of the progress information during the authentication process. +---------- +INFO ANDROID IOS Header of the progress status message during the authentication process. Authentisierung wird durchgeführt Acquiring provider certificate + INFO ANDROID IOS Header of the progress status message during the authentication process. Lade Berechtigungszertifikat herunter Please wait a moment... + INFO DESKTOP_QML Second line text if a basic card reader is used and data is exchanged with the card/server in the background. Is not actually visible since the basic reader password handling is done by EnterPasswordView. +---------- +INFO DESKTOP_QML Generic progress status message during authentication. +---------- +INFO ANDROID IOS Second line text if a basic card reader is used and background communication with the card/server is running. Is not actually visible since the basic reader password handling is done by EnterPasswordView. +---------- +INFO ANDROID IOS Generic status message during the authentication process. Bitte warten Sie einen Moment... The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function. + INFO DESKTOP_QML The online authentication feature of the id card is deactivated and needs to be activated by the local authorities. +---------- +INFO ANDROID IOS The online authentication feature of the id card is disabled and needs to be actived the be authorities. Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren. Please observe the display of your card reader. - Bitte beachten Sie die Anzeige Ihres Kartenlesegeräts. + INFO ANDROID IOS The card reader requests the user's attention. + Bitte beachten Sie die Anzeige Ihres Kartenlesers. You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card. + INFO ANDROID IOS The PIN was entered wrongfully two times, the third attempts requires additional CAN verification, hint where the CAN is found. Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises. - - Service provider is being verified - Diensteanbieter wird geprüft - - - Card is being verified - Karte wird geprüft - - - Reading data - Daten werden gelesen - - - Sending data to service provider - Sende Daten an den Dienstanbieter - - - Preparing results - Bereite Ergebnisse vor - No network connectivity + INFO DESKTOP_QML Header of the message that no network connection is present during the authentication procedure. +---------- +LABEL ANDROID IOS Keine Netzwerkverbindung Please enable the network interface or cancel the workflow. + INFO DESKTOP_QML Content of the message that no network connection is present during the authentication procedure. +---------- +INFO ANDROID IOS No network connection, the user needs to active the network interface or abort the procedure. Bitte stellen Sie eine Internetverbindung her oder beenden Sie den Vorgang. - - Identify view - Ausweisen-Ansicht - - - This is the identify view of the AusweisApp2. - Dies ist die Ausweisen-Ansicht der AusweisApp2. - Weak NFC signal. Please reposition your card. + INFO ANDROID IOS The NFC signal is weak, by repositioning the card the signal might improve. Schwacher NFC-Empfang. Bitte korrigieren Sie die Position Ihres Ausweises. Change transport PIN + LABEL ANDROID IOS Transport-PIN ändern Change PIN + LABEL ANDROID IOS PIN ändern Retry + LABEL ANDROID IOS Erneut versuchen Cancel authentication process + LABEL ANDROID IOS Beende Ausweisvorgang You have to change your transport PIN into a personal PIN to use the online ID function. You are currently leaving the started process and are forwarded to the PIN management. Please restart the desired process after the PIN has been changed. + INFO DESKTOP_QML The user clicked that the current PIN has 5 digits (transport PIN) which needs to be changed to a 6-digit PIN. The current process will be aborted and needs to be restarted *manually* by the user. +---------- +INFO ANDROID IOS The user clicked that the current PIN has 5 digits (transport PIN), it needs to be changed to an ordinary 6 digit PIN. The current process needs to be restarted *manually* by the user. Sie müssen Ihre fünfstellige Transport-PIN zunächst in eine persönliche PIN ändern. Sie sind dabei den aktuell laufenden Vorgang zu verlassen und zur PIN-Verwaltung weitergeleitet zu werden. Starten Sie den gewünschten Vorgang bitte nach der PIN-Änderung erneut. + + Transport PIN + LABEL DESKTOP_QML + Transport PIN + + + Weak NFC signal. +Please reposition your card. + INFO DESKTOP_QML A weak NFC signal was detected since the card communication was aborted. The card's position needs to be adjusted to hopefully achieve better signal strength. + Schwacher NFC-Empfang. +Bitte korrigieren Sie die Position Ihres Ausweises. + - Information + InformationView - Information - Information + Help section + Hilfe + + + This is the help section of the AusweisApp2. + Dies ist die Hilfe der AusweisApp2. + + + Help + LABEL DESKTOP_QML + Hilfe + + + Questions, feedback, and rating + LABEL DESKTOP_QML + Fragen, Rückmeldungen und Bewertungen + + + Questions + LABEL DESKTOP_QML + Fragen + + + https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/ + https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/ + + + Report error + LABEL DESKTOP_QML + Melden Sie einen Fehler + + + https://www.ausweisapp.bund.de/en/qa/report-an-error/ + https://www.ausweisapp.bund.de/feedback/melden-sie-einen-fehler/ + + + Rate application + LABEL DESKTOP_QML + Anwendung bewerten + + + https://www.ausweisapp.bund.de/en/qa/evaluate-us/ + https://www.ausweisapp.bund.de/feedback/bewerten-sie-uns/ + + + Setup and manual + LABEL DESKTOP_QML + Einrichtung und Handbuch + + + Setup + LABEL DESKTOP_QML + Einrichtung + + + Online help + LABEL DESKTOP_QML + Online-Hilfe + + + Diagnosis and application log + LABEL DESKTOP_QML + Diagnose- und Anwendungsprotokoll + + + Diagnosis + LABEL DESKTOP_QML + Diagnose + + + Application log + LABEL DESKTOP_QML + Anwendungsprotokoll + + + Version and license information + LABEL DESKTOP_QML + Version und Lizenzinformationen Version information + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS Versionsinformationen + + Software licenses + LABEL DESKTOP_QML + Softwarelizenzen + + + https://www.ausweisapp.bund.de/en/download/windows-and-mac/ + LABEL ANDROID IOS + https://www.ausweisapp.bund.de/download/windows-und-mac/ + + + Information + LABEL ANDROID IOS + Information + Here you can see detailed information about AusweisApp2. + LABEL ANDROID IOS Hier finden Sie detaillierte Informationen zur AusweisApp2. Software license + LABEL ANDROID IOS Softwarelizenz Read the software license text on the application homepage. + LABEL ANDROID IOS Lesen Sie die Softwarelizenz auf der Internetseite der Anwendung. https://www.ausweisapp.bund.de/en/download/android/ + LABEL ANDROID IOS https://www.ausweisapp.bund.de/download/android/ https://www.ausweisapp.bund.de/en/download/ios/ + LABEL ANDROID IOS https://www.ausweisapp.bund.de/download/ios/ - - https://www.ausweisapp.bund.de/en/download/windows-and-mac/ - https://www.ausweisapp.bund.de/download/windows-und-mac/ - KnownDevicesListDelegate - - Available - Verfügbar - - - Available, but unsupported - Verfügbar, aber nicht unterstützt - Last connection: + LABEL ANDROID IOS Letzte Verbindung: - - - Log - Log - Protokoll + Not available + LABEL ANDROID IOS + Nicht verfügbar - Delete - Löschen + Great quality + LABEL ANDROID IOS + Gute Qualität - Log: - Protokoll: + Bad quality + Schlechte Qualität - Please confirm that you want to delete your old logfiles. - Bitte bestätigen Sie, dass alle alten Protokolle gelöscht werden sollen. - - - Delete all - Lösche alle - - - Please confirm that you want to delete the logfile. - Bitte bestätigen Sie, dass das Protokoll gelöscht werden soll. + Device %1 has status %2 + Gerät %1 hat den Status %2 @@ -1098,6 +1828,91 @@ Schließen + + LogTitleBarControls + + Share logfile + Teile Protokolldatei + + + Delete logfile + Lösche Protokolldatei + + + Delete all logfiles + Lösche alle Protokolldateien + + + + LogView + + Logfile viewer + Protokolldatei anzeigen + + + This is the logfile viewer of the AusweisApp2. + Dies ist die Anzeige der Protokolldatei der AusweisApp2. + + + Application log + LABEL DESKTOP_QML + Anwendungsprotokoll + + + Log: + LABEL ANDROID IOS + Protokoll: + + + Save logfile + LABEL DESKTOP_QML + Protokolldatei speichern + + + Delete logfile + LABEL DESKTOP_QML + Lösche Protokolldatei + + + Delete old logfiles + LABEL DESKTOP_QML + Lösche alte Protokolldateien + + + Delete selected logfile + Lösche ausgewählte Protokolldateien + + + Please confirm that you want to delete your old logfiles. + INFO DESKTOP_QML The current/all logfile(s) are about to be removed, user confirmation required. +---------- +INFO ANDROID IOS The current/all logfile(s) are about to be removed, user confirmation required. + Bitte bestätigen Sie, dass alle alten Protokolle gelöscht werden sollen. + + + Please confirm that you want to delete the logfile. + Bitte bestätigen Sie, dass das Protokoll gelöscht werden soll. + + + Log + LABEL ANDROID IOS + Protokoll + + + Delete all + LABEL ANDROID IOS + Lösche alle + + + Delete + LABEL ANDROID IOS + Löschen + + + Select logfile from list. + Wähle Protokolldatei aus. + + MainView @@ -1108,121 +1923,139 @@ This is the main view of the AusweisApp2. Dies ist die Hauptseite der AusweisApp2. - - Identify - Ausweisen - Provider + LABEL DESKTOP_QML Anbieter History + LABEL DESKTOP_QML Verlauf PIN management + LABEL DESKTOP_QML PIN-Verwaltung Settings + LABEL DESKTOP_QML Einstellungen Help + LABEL DESKTOP_QML Hilfe - You can use your ID card anywhere you see this logo. - Überall wo Sie dieses Logo sehen, können Sie Ihr Ausweisdokument einsetzen. - - - Use the button 'See my personal data' to display the data stored on your ID card. An Internet connection is required to display the data. - Über die Schaltfläche 'Meine Daten einsehen' können Sie sich die im Chip Ihres Ausweisdokuments gespeicherten Daten anzeigen lassen. Um die Daten anzeigen zu können, benötigt diese Anwendung eine Internetverbindung. - - - Your personal data is neither saved nor processed in any way. Please see our %1 for details on how your personal data is processed. - Es erfolgt keine Speicherung oder Weiterverarbeitung Ihrer persönlichen Daten. Näheres dazu erfahren Sie in unserer %1. - - - https://www.ausweisapp.bund.de/datenschutz/ - https://www.ausweisapp.bund.de/datenschutz/ - - - data privacy statement - Datenschutzerklärung - - - See my personal data - Meine Daten einsehen + Self-authentication + LABEL DESKTOP_QML + Selbstauskunft MoreView More + LABEL ANDROID IOS DESKTOP_QML Mehr Version information + LABEL ANDROID IOS DESKTOP_QML Versionsinformationen FAQ + LABEL ANDROID IOS DESKTOP_QML FAQ - - https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/ - https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/ - Support + LABEL ANDROID IOS DESKTOP_QML Support - - https://www.ausweisapp.bund.de/en/qa/support/ - https://www.ausweisapp.bund.de/fragen-und-antworten/support/ - Rate app + LABEL ANDROID IOS DESKTOP_QML Bewerten - - https://www.ausweisapp.bund.de/en/qa/evaluate-us/ - https://www.ausweisapp.bund.de/fragen-und-antworten/bewerten-sie-uns/ - Software license + LABEL ANDROID IOS DESKTOP_QML Softwarelizenz https://www.ausweisapp.bund.de/en/download/android/ + LABEL ANDROID IOS DESKTOP_QML https://www.ausweisapp.bund.de/download/android/ https://www.ausweisapp.bund.de/en/download/ios/ + LABEL ANDROID IOS DESKTOP_QML https://www.ausweisapp.bund.de/download/ios/ https://www.ausweisapp.bund.de/en/download/windows-and-mac/ + LABEL ANDROID IOS DESKTOP_QML https://www.ausweisapp.bund.de/download/windows-und-mac/ - Configure remote service - Fernzugriff konfigurieren + History + LABEL ANDROID IOS DESKTOP_QML + Verlauf Developer options + LABEL ANDROID IOS DESKTOP_QML Entwickleroptionen Show log + LABEL ANDROID IOS DESKTOP_QML Protokoll anzeigen Tutorial + LABEL ANDROID IOS DESKTOP_QML Tutorial + + https://www.ausweisapp.bund.de/en/qa/frequently-asked-questions/ + LABEL ANDROID IOS DESKTOP_QML + https://www.ausweisapp.bund.de/fragen-und-antworten/haeufig-gestellte-fragen/ + + + https://www.ausweisapp.bund.de/en/qa/support/ + LABEL ANDROID IOS DESKTOP_QML + https://www.ausweisapp.bund.de/fragen-und-antworten/support/ + + + Set language to german + Verwende deutsche Sprache + + + Set language to english + Verwende englische Sprache + + + Report error + LABEL ANDROID IOS DESKTOP_QML + Melden Sie einen Fehler + + + + NavigationButton + + Continue + LABEL DESKTOP_QML + Fortsetzen + + + Back + Zurück + NavigationView @@ -1238,6 +2071,10 @@ History Verlauf + + Remote + Fernzugriff + PIN Management PIN-Verwaltung @@ -1252,7 +2089,7 @@ Smartphone as card reader - Smartphone als Kartenlesegerät + Smartphone als Kartenleser Developer options @@ -1266,23 +2103,38 @@ Tutorial Tutorial + + PIN + PIN + + + Set language to german + Verwende deutsche Sprache + + + Set language to english + Verwende englische Sprache + NfcWorkflow NFC is not supported by your device. + INFO ANDROID IOS AA2 can't use NFC on this device, suggest to use bluetooth instead. Ihr Gerät unterstützt kein NFC. - Please try Bluetooth. - Bitte versuchen Sie Bluetooth. + You require an additional 'Bluetooth card reader' or an additional 'smartphone as card reader' to use the online identification function with this device. + Sie können die Online-Ausweisfunktion aber mit einem separaten Bluetooth-Leser oder einem anderen Smartphone als Kartenleser nutzen. NFC is switched off. + INFO ANDROID IOS NFC is available but needs to be activated in the settings of the smartphone. NFC ist nicht aktiv. Go to NFC settings + LABEL DESKTOP_QML Zu den NFC Einstellungen @@ -1295,22 +2147,97 @@ Your device does not meet the technical requirements (Extended Length not supported). You require an additional 'Bluetooth card reader' or an additional 'smartphone as card reader' to use the online identification function with this device. - Ihr Gerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length). Sie können die Online-Ausweisfunktion daher mit diesem Gerät nur über einen separaten Bluetooth-Leser oder mit einem separaten Smartphone als Kartenlesegerät nutzen. + INFO ANDROID IOS The NFC interface does not meet the minimum requirements, using a bluetooth reader or a differnt smarthpone is suggested. + Ihr Gerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length). Sie können die Online-Ausweisfunktion daher mit diesem Gerät nur über einen separaten Bluetooth-Leser oder mit einem separaten Smartphone als Kartenleser nutzen. The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function. + INFO ANDROID IOS The online authentication feature is disabled and needs to be activated by the authorities. Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren. Please place your device<br/>on your ID card. + INFO ANDROID IOS The id card may be inserted, the authentication process may be started. Bitte platzieren Sie Ihr Gerät<br/>über Ihrem Personalausweis. + + Start NFC scan + NFC-Scan starten + + + NFC scan is not running. + INFO ANDROID IOS NFC is available but needs to be activated in the settings of the smartphone. + Der NFC-Scan ist nicht aktiv. + + + Please start the NFC scan. + Bitte starten Sie den NFC-Scan. + + + + NumberPad + + Numberpad to enter the password + Ziffernblock Passworteingabe + + + Delete last digit + Lösche letzte Ziffer + + + Submit + Absenden + + + + PasswordInfoView + + Password information + Passwort Information + + + This is the password information section of the AusweisApp2. + Dies ist die Informationsansicht zu Passwörtern der AusweisApp2. + + + %1 information + %1 can be "PIN, CAN, PUK or UNKNOWN" + Informationen zur %1 + + + The card access number (CAN) is only required if you have already entered the PIN incorrectly twice. In order to prevent a third incorrect entry and thus the blocking of the ID card without your consent, the CAN is also requested at this point. The CAN is a six-digit number that can be found on the front of the ID card. It is located at the bottom right next to the validity date (marked in red). + INFO DESKTOP_QML Description text of CAN + Die Zugangsnummer (CAN) wird nur dann verlangt, wenn Sie die PIN bereits zwei Mal falsch eingegeben haben. Um zu verhindern, dass ohne Ihre Zustimmung eine dritte Fehleingabe und somit die Sperrung des Ausweises erfolgen kann, wird an dieser Stelle zusätzlich die CAN abgefragt. Die CAN ist eine sechsstellige Zahl, die auf der Vorderseite des Personalausweises zu finden ist. Sie steht rechts unten neben dem Gültigkeitsdatum (rot markiert). + + + The personal unblocking key (PUK) is only required if you entered the the wrong PIN three times. The online eID function is blocked at this time. The PUK is a ten-digit number you received with the letter sent to you by your competent authority (marked in red). Please note that you can only use the PUK to unblock the PIN entry. If you have forgotten your PIN, you can have a new PIN set at your competent authority. + INFO DESKTOP_QML Description text of PUK + Die Entsperrnummer (PUK) wird nur dann verlangt, wenn Sie die PIN bereits drei Mal falsch eingegeben haben. Zu diesem Zeitpunkt ist die Online-Ausweisfunktion gesperrt. Die PUK ist eine zehnstellige Zahl die Sie mit dem Schreiben bekommen haben, das Sie nach Beantragung Ihres Ausweisdokuments von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde erhalten haben (rot markiert). Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihre PIN-Eingabe entsperren können. Sollten Sie Ihre PIN vergessen haben, können Sie von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde eine neue PIN setzen lassen. + + + The personal identification number (PIN) is required for every use of the online eID function. You can change it anytime and indefinitely if you know your valid PIN. For your 6-digit PIN choose a combination of numbers, that is not easy to guess, neither "123456" nor your birth date, or any other numbers printed on the ID card. If you are no longer aware of your valid PIN, you will need to contact the authority responsible for issuing your identification document to renew your PIN. + +When changing the PIN for the first time, please use your 5-digit transport PIN. You will find the transport PIN in the letter you received from the authority responsible for issuing your identification document (marked in red) after you have applied for your identity card. + +Please note that you can not use the online eID function with your 5-digit transport PIN. A change to a 6-digit PIN is mandatory. + INFO DESKTOP_QML Description text of PIN + Die Geheimnummer (PIN) benötigen Sie bei jeder Nutzung der Online-Ausweisfunktion. Sie können diese jederzeit und unbegrenzt oft ändern, wenn Ihnen Ihre gültige PIN bekannt ist. Wählen Sie für Ihre 6-stellige PIN eine Zahlenkombination, die nicht leicht zu erraten ist, also weder "123456", noch Ihr Geburtsdatum oder andere Zahlen, die auf dem Ausweisdokument aufgedruckt sind. Soweit Ihnen Ihre gültige PIN nicht mehr bekannt ist, müssen Sie zur Neuvergabe einer persönlichen PIN die für die Ausgabe Ihres Ausweisdokuments zuständige Behörde aufsuchen. + +Bei der erstmaligen PIN-Änderung verwenden Sie bitte Ihre 5-stellige Transport-PIN. Sie finden die Transport-PIN in dem Schreiben, das Sie nach Beantragung Ihres Ausweisdokuments von der für die Ausgabe Ihres Ausweisdokuments zuständigen Behörde erhalten haben (rot markiert). + +Bitte beachten Sie, dass Sie die Online-Ausweisfunktion mit Ihrer 5-stellige Transport-PIN nicht nutzen können. Eine Änderung in eine 6-stellige PIN ist zwingend erforderlich. + + + You may use your smartphone as a card reader with AusweisApp2. The smartphone needs to feature a supported NFC chipset and both devices, your smartphone and this machine, need to be connected to the same WiFi network.<br><br>Please make sure that the remote service is running on your smartphone. Start the pairing process by clicking the "Start pairing" button and enter the shown 4-digit PIN. + INFO DESKTOP_QML Description text of SaC pairing + Sie können Ihr Smartphone als Kartenleser in der AusweisApp2 verwenden. Das Smartphone muss einen unterstützen NFC-Chip verbaut haben und beide Geräte, sowohl das Smartphone als auch dieser Computer, müssen mit dem selben WLAN-Netz verbunden sein.<br><br>Bitte stellen Sie sicher, dass der Fernzugriff in der App des Smartphones aktiviert ist. Starten sie den Kopplungsprozess indem Sie den "Koppeln"-Knopf anklicken und die vom Smartphone dargestellte 4-stellige PIN eingeben. + PinSettingsWidget Please pay attention to the display of your card reader. - Bitte beachten Sie die Anzeige auf Ihrem Kartenlesegerät. + Bitte beachten Sie die Anzeige auf Ihrem Kartenleser. <h4>PIN successfully changed</h4> @@ -1322,7 +2249,7 @@ If not, you can now remove your ID card form the card reader. Klicken Sie auf "PIN ändern", wenn Sie noch einmal Ihre PIN neu setzen wollen. -Anderenfalls können Sie nun Ihr Ausweisdokument vom Kartenlesegerät entfernen. +Anderenfalls können Sie nun Ihr Ausweisdokument vom Kartenleser entfernen. <html> @@ -1331,8 +2258,8 @@ Anderenfalls können Sie nun Ihr Ausweisdokument vom Kartenlesegerät entfernen. </p> </html> <html> -<h4>Es wurde kein Kartenlesegerät gefunden. Bitte stellen Sie sicher, dass ein Kartenlesegerät angeschlossen ist.</h4> -<p>Wenn Sie Hilfe bei der Einrichtung Ihres Kartenlesegerät benötigen, klicken Sie auf "Diagnose".</p> +<h4>Es wurde kein Kartenleser gefunden. Bitte stellen Sie sicher, dass ein Kartenleser angeschlossen ist.</h4> +<p>Wenn Sie Hilfe bei der Einrichtung Ihres Kartenleser benötigen, klicken Sie auf "Diagnose".</p> </html> @@ -1357,7 +2284,7 @@ Anderenfalls können Sie nun Ihr Ausweisdokument vom Kartenlesegerät entfernen. Please make sure that only one card reader with an ID card on it is connected to your computer. - Bitte stellen Sie sicher, dass an Ihrem Computer nur ein Kartenlesegerät mit aufliegendem Ausweisdokument angeschlossen ist. + Bitte stellen Sie sicher, dass an Ihrem Computer nur ein Kartenleser mit aufliegendem Ausweisdokument angeschlossen ist. <html> @@ -1383,10 +2310,6 @@ Bei der erstmaligen PIN-Änderung geben Sie bitte in das Feld "Aktuelle PIN You have entered the wrong PIN two times. For a third attempt you first have to enter your six-digit card access number. You can find your card access number on the front side of your ID card next to the date of expiry. On the electronic residence permit the card access number is printed above your signature. Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie zunächst Ihre 6-stellige Zugangsnummer eingeben. Die Zugangsnummer finden Sie beim Personalausweis auf der Vorderseite rechts neben dem letzten Tag der Gültigkeitsdauer. Beim elektronischen Aufenthaltstitel finden Sie die Zugangsnummer über Ihrer Unterschrift. - - <h4>PUK entry successful</h4><p>Your ID card is unblocked. You now have three more tries to change your PIN.</p> - <h4>Eingabe der PUK erfolgreich</h4><p>Ihr Ausweis ist entsperrt. Sie haben nun erneut drei Versuche, Ihre PIN zu ändern.</p> - Current PIN / Transport PIN: Aktuelle PIN / Transport-PIN: @@ -1429,19 +2352,19 @@ Bei der erstmaligen PIN-Änderung geben Sie bitte in das Feld "Aktuelle PIN card reader icon - Icon des Kartenlesegeräts + Icon des Kartenlesers no reader icon - Kein Kartenlesegerät Icon + Kein Kartenleser Icon multiple card reader icon - Mehrer Kartenlesegerät Icon + Mehrere Kartenleser Icon deactivated card reader icon - Deaktiverter Kartenlesegerät Icon + Deaktiverter Kartenleser Icon successful PIN change icon @@ -1464,23 +2387,67 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe <h4>Extended Length is not supported.</h4> <p>Your remote reader does not meet the technical requirements (Extended Length not supported).</p> </html> - Ihr entferntes Kartenlesegerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt).< + Ihr entfernter Kartenleser erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt).< open on screen keyboard öffne bildschirmtastatur + + ProgressView + + Progress view + Fortschrittsanzeige + + + This is the progress view of the AusweisApp2. + This ist die Fortschrittsanzeige der AusweisApp2. + + + Step %1 of %2 + Schritt %1 von %2 + + + + ProviderCard + + Provider: + Anbieter: + + + Unknown error + Unbekannter Fehler + + + Provider description: + Anbieterbeschreibung: + + ProviderContactInfo Contact + LABEL DESKTOP_QML +---------- +LABEL ANDROID_TABLET IOS_TABLET Kontakt Unknown + LABEL DESKTOP_QML +---------- +LABEL ANDROID_TABLET IOS_TABLET Unbekannt + + Provider contact information + Kontaktinformationen des Diensteanbieters + + + Contact information of the selected service provider. + Kontaktinformationen des ausgewählten Diensteanbieters. + ProviderContactTab @@ -1493,13 +2460,28 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ProviderDetailButtonBar ONLINE APPLICATION + LABEL ANDROID_TABLET IOS_TABLET Online-Anwendung + + Link to service provider + Link zum Diensteanbieter + + + Clicking this link will open the website of the service provider in your web browser. The URL of the provider is + Durch einen Klick auf diesen Link öffnen Sie die Webseite des Diensteanbieters. Die URL des Anbieters lautet + + + To online application + LABEL DESKTOP_QML + Zur Online-Anwendung + ProviderDetailDescription Description + LABEL ANDROID_TABLET IOS_TABLET Beschreibung @@ -1507,29 +2489,48 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ProviderDetailHistory History + LABEL ANDROID_TABLET IOS_TABLET Verlauf Purpose for reading out requested data + LABEL ANDROID_TABLET IOS_TABLET Zweck des Auslesevorgangs + + List of your past interactions with this provider + Ihre vergangenen Interaktionen mit diesem Diensteanbieter + + + The list is empty, no recorded interaction with this service provider. + Die Liste ist leer, keine Interaktion mit diesem Diensteanbieter aufgezeichnet. + + + Currently there are no history entries. + INFO DESKTOP_QML No authentication history, placeholder text. + Derzeit gibt es keine Einträge im Verlauf. + ProviderDetailHistoryInfo Service provider + LABEL ANDROID_TABLET IOS_TABLET Diensteanbieter Purpose for reading out requested data + LABEL ANDROID_TABLET IOS_TABLET Zweck des Auslesevorgangs Read data + LABEL ANDROID_TABLET IOS_TABLET Daten auslesen Terms of usage + LABEL ANDROID_TABLET IOS_TABLET Nutzungsbedingungen @@ -1537,6 +2538,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ProviderDetailHistoryItem today + LABEL ANDROID IOS heute @@ -1553,32 +2555,74 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Touch for more details + LABEL ANDROID IOS Berühren Sie hier für mehr Details + + Service: + LABEL DESKTOP_QML + Dienst: + + + Provider: + LABEL DESKTOP_QML + Anbieter: + + + Click to view details of history entry. + Zeige Details des Verlaufseintrags. + ProviderDetailView DESCRIPTION + LABEL ANDROID_PHONE IOS_PHONE BESCHREIBUNG CONTACT + LABEL ANDROID_PHONE IOS_PHONE KONTAKT Description not available + LABEL ANDROID_PHONE IOS_PHONE Beschreibung nicht verfügbar - Provider details - Anbieterdetails + Provider detail view + Detailansicht des Diensteanbieters + + + This view shows a detailed description of a service provider. + Diese Ansicht zeigt eine detaillierte Beschreibung eines Diensteanbieters. + + + Description + LABEL DESKTOP_QML + Beschreibung + + + Description of the service provider. + Beschreibung des Diensteanbieters. + + + The service provider did not provide a description. + LABEL DESKTOP_QML + Der Diensteanbieter hat keine Beschreibung zur Verfügung gestellt. + + + History + LABEL DESKTOP_QML + Verlauf ProviderHeader To service provider + LABEL ANDROID IOS Zum Anbieter @@ -1586,13 +2630,22 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ProviderInfoSection Touch for more details + LABEL ANDROID IOS Berühren Sie hier für mehr Details See details under "more..." + LABEL DESKTOP_QML Weitere Details unter "mehr..." + + ProviderListItemDelegate + + Open provider details for + Öffne Details vom Diensteanbieter + + ProviderModelItem @@ -1611,9 +2664,14 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Contact Kontakt + + Costs + LABEL DESKTOP_QML + Kosten + - ProviderView + ProviderOverview Provider view Anbieteransicht @@ -1623,35 +2681,81 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Dies ist die Anbieteransicht der AusweisApp2. - Provider - Anbieter + All provider + LABEL DESKTOP_QML + Alle Diensteanbieter Citizen services + LABEL DESKTOP_QML + Bürgerdienste + + + Financials + LABEL DESKTOP_QML + Finanzen + + + Insurances + LABEL DESKTOP_QML + Versicherungen + + + Other services + LABEL DESKTOP_QML + Weitere Dienste + + + + ProviderSectionDelegate + + Click to set category filter to %1 + Klicke hier um den Kategoriefilter auf %1 zu setzen + + + + ProviderView + + Provider + LABEL DESKTOP_QML +---------- +LABEL IOS_TABLET + Diensteanbieter + + + Citizen services + LABEL ANDROID_TABLET +---------- +LABEL IOS_TABLET Bürgerdienste Insurances + LABEL ANDROID_TABLET +---------- +LABEL IOS_TABLET Versicherungen Financials + LABEL ANDROID_TABLET +---------- +LABEL IOS_TABLET Finanzen Other services + LABEL ANDROID_TABLET +---------- +LABEL IOS_TABLET Weitere Services No match found - Kein Ergebnis gefunden - - - - ProviderViewDelegate - - i - i + LABEL ANDROID_TABLET +---------- +LABEL IOS_TABLET Der in das Suchfeld eingegebene String erzielte kein Ergebnis + Keine Übereinstimmung gefunden @@ -1673,6 +2777,25 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Bitte geben Sie Ihre Suche ein + + QObject + + Please describe the error that occurred. + Bitte beschreiben Sie den aufgetretenen Fehler. + + + You may want to attach the logfile which can be saved from the error dialog. + Bitte fügen Sie der E-Mail das Protokoll als Anhang zu. + + + Error code + Fehlernummer + + + Critical errors: + Kritische Fehler: + + RandomPinDialog @@ -1700,7 +2823,8 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ReaderConfigurationInfo Unknown reader - Unbekanntes Kartenlesegerät + LABEL ALL_PLATFORMS + Unbekannter Kartenleser @@ -1718,11 +2842,11 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ReaderDeviceWidget In order to use the online identification function of your ID card you need a separate card reader or a suitable smartphone. The following overview shows the status of a connected card reader or connected smartphone. - Um die Online-Ausweisfunktion des Personalausweises nutzen zu können, benötigen Sie ein separates Kartenlesegerät oder auch ein geeignetes Smartphone. Die nachfolgende Übersicht stellt dar, in welchem Status sich ein angeschlossenes Kartenlesegerät oder verbundenes Smartphone befindet. + Um die Online-Ausweisfunktion des Personalausweises nutzen zu können, benötigen Sie einen separaten Kartenleser oder auch ein geeignetes Smartphone. Die nachfolgende Übersicht stellt dar, in welchem Status sich ein angeschlossener Kartenleser oder verbundenes Smartphone befindet. Smartphone as card reader - Smartphone als Kartenlesegerät + Smartphone als Kartenleser Pair @@ -1734,11 +2858,11 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Card readers - Kartenlesegeräte + Kartenleser After connecting a new card reader it may take a few seconds to recognize the driver. It may be necessary to restart your system after installing the driver. - Nachdem ein neues Kartenlesegerät angeschlossen worden ist, kann es einige Sekunden dauern bis der Treiber erkannt wird. Unter Umständen kann ein Neustart Ihres Betriebssystems notwendig sein. + Nachdem ein neuer Kartenleser angeschlossen worden ist, kann es einige Sekunden dauern bis der Treiber erkannt wird. Unter Umständen kann ein Neustart Ihres Betriebssystems notwendig sein. TextLabel @@ -1756,29 +2880,54 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Geben Sie den 4-stelligen Kopplungscode ein, der auf Ihrem anderen Gerät angezeigt wird. + + RemoteReaderDelegate + + Click to pair + Klicken zum Koppeln + + + + RemoteReaderView + + Paired remote devices + Gekoppelte Netzwerkgeräte + + + Available remote devices + Verfügbare Netzwerkgeräte + + + No devices with enabled remote service were found on the current WiFi network + Im WLAN-Netz wurden keine Geräte mit aktiviertem Fernzugriff gefunden + + + Only devices that are already paired or are connected to the same WiFi network and have the remote service enabled are shown here. + Nur Geräte die bereits gekoppelt wurden, oder sich mit aktiviertem Fernzugriff im selben WLAN-Netz befinden, werden hier angezeigt. + + RemoteServicePairingPopup Pairing code + INFO ANDROID IOS Header of the pairing dialog when using the smartphone as card reader Kopplungscode - - Enter the pairing code shown on your other device to use it as a card reader - Geben Sie den Kopplungscode ein, der auf Ihrem anderen Gerät angezeigt wird, um es als Kartenlesegerät zu verwenden - Enter this code on your other device to use this device as a card reader - Geben Sie diesen Code auf Ihrem anderen Gerät ein, um dieses Gerät als Kartenlesegerät zu verwenden + INFO ANDROID IOS Main text of the pairing dialog when using the smartphone as card reader. + Geben Sie diesen Code auf Ihrem anderen Gerät ein, um dieses Gerät als Kartenleser zu verwenden - Start pairing - Kopplung starten + Click to close dialog + Schließe hiermit den Dialog RemoteServiceSettings Configure remote service + LABEL ANDROID IOS Fernzugriff konfigurieren @@ -1786,18 +2935,22 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe RemoteServiceView Configure local settings + LABEL ANDROID IOS Konfiguriere lokale Einstellungen Pair remote devices - Kopple entferntes Kartenlesegerät + LABEL ANDROID IOS + Kopple entfernten Kartenleser Remote service + LABEL ANDROID IOS Fernzugriff Pairing failed. Please try again to activate pairing on your other device and enter the shown pairing code. + ERROR ANDROID IOS An error occurred while pairing the device. Die Kopplung ist fehlgeschlagen. Bitte starten Sie eine neue Kopplung an Ihrem anderen Gerät und geben den angezeigten Kopplungscode ein. @@ -1805,18 +2958,22 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe RemoteServiceViewLocal Device name + LABEL ANDROID IOS Gerätename Set device name: + LABEL ANDROID IOS Wählen Sie einen Gerätenamen: PIN pad mode + LABEL ANDROID IOS Tastaturmodus Enter PIN on this device + LABEL ANDROID IOS PIN-Eingabe auf diesem Gerät @@ -1824,108 +2981,128 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe RemoteServiceViewRemote Paired devices + LABEL ANDROID IOS Gekoppelte Geräte No device is paired. + LABEL ANDROID IOS Kein Gerät gekoppelt. Available devices + LABEL ANDROID IOS Verfügbare Geräte No new remote reader was found on your network. Make sure that the remote reader functionality in AusweisApp2 on your other device is activated and that your devices are connected to the same network. - Kein entferntes Kartenlesegerät in Ihrem Netzwerk verfügbar. Bitte stellen Sie sicher, dass die Funktion "Fernzugriff" in der AusweisApp2 auf Ihrem anderen Gerät aktiviert ist. Beide Geräte müssen sich im selben Netzwerk befinden. + INFO ANDROID IOS No remote reader was found on the network, both devices need to be connected to the same wifi network. + Kein entfernter Kartenleser in Ihrem Netzwerk verfügbar. Bitte stellen Sie sicher, dass die Funktion "Fernzugriff" in der AusweisApp2 auf Ihrem anderen Gerät aktiviert ist. Beide Geräte müssen sich im selben Netzwerk befinden. Please start pairing mode first. + INFO ANDROID IOS Information dialog that requests the user to start the pairing mode on the smarthpone. Starten Sie den Kopplungsmodus auf Ihrem Smartphone, falls noch nicht geschehen. - OK - OK + Pairing code + LABEL ANDROID IOS + Kopplungscode - Pairing code - Kopplungscode + Pairing mode + INFO ANDROID IOS + Kopplungsmodus RemoteServiceViewStartStop Please start the remote service in order to use your smartphone as a card reader with AusweisApp2. Please note: Both your devices have to be connected to the same WiFi. - Bitte starten Sie den Fernzugriff, damit Sie Ihr Smartphone als Kartenlesegerät für die AusweisApp2 nutzen können. Bitte beachten Sie: dies ist nur möglich, wenn beide Geräte mit demselben WLAN verbunden sind. + INFO ANDROID IOS The remote service is active. Hint that both devices need to be connected to the same network. + Bitte starten Sie den Fernzugriff, damit Sie Ihr Smartphone als Kartenleser für die AusweisApp2 nutzen können. Bitte beachten Sie: dies ist nur möglich, wenn beide Geräte mit demselben WLAN verbunden sind. Enable NFC + LABEL ANDROID IOS NFC aktivieren Stop remote service + LABEL ANDROID IOS Fernzugriff stoppen Start remote service + LABEL ANDROID IOS Fernzugriff starten Start pairing + LABEL ANDROID IOS Kopplung starten Card access in progress + LABEL ANDROID IOS Kartenzugriff - - Please pay attention to the display on your other device %1. - Bitte beachten Sie die Anzeige auf Ihrem anderen Gerät %1. - RemoteWorkflow Continue + LABEL DESKTOP_QML Fortsetzen Pair device + LABEL DESKTOP_QML Gerät koppeln Enable Wifi + LABEL DESKTOP_QML WLAN aktivieren Establish connection + LABEL DESKTOP_QML Verbindung wird hergestellt Your remote device does not meet the technical requirements (Extended Length not supported). - Ihr entferntes Kartenlesegerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). + INFO ANDROID IOS The device does not support Extended Length and can not be used as card reader. + Ihr entfernter Kartenleser erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function. + INFO ANDROID IOS The online authentication is disabled and needs to be enabled by the authorities. Die Online-Ausweisfunktion Ihres Ausweisdokumentes ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren. Connected to %1. Please insert your ID card. + INFO ANDROID IOS The connection to the smartphone was established, the id card may be inserted. Verbunden mit %1. Bitte legen Sie Ihr Ausweisdokument auf. Determine card + LABEL DESKTOP_QML Ermittle Ausweis The device %1 was unpaired because it does not react to connection attempts. Retry the pairing process if you want to use this device to authenticate yourself. + INFO ANDROID IOS The paired smartphone was removed since it did not respond to connection attempts. It needs to be paired again before using it. Das Gerät %1 wurde entkoppelt, da es nicht auf Verbindungsversuche reagiert hat. Versuchen Sie das Gerät erneut zu koppeln, wenn Sie es zur Authentisierung verwenden möchten. To use the remote service WiFi has to be activated. Please activate WiFi in your device settings. + INFO ANDROID IOS The wifi module needs to be enabled in the system settings to use the remote service. Um den Fernzugriff zu nutzen, muss WLAN aktiviert werden. Bitte aktivieren Sie WLAN in Ihren Einstellungen. - No paired and activated remote device was detected. Make sure that you have started remote service on you remote device. + No paired and activated remote device was detected. Make sure that you have started the remote service on your remote device. + INFO ANDROID IOS No paired and reachable device was found, hint that the remote device needs to be actually started for this feature. Kein gekoppeltes und aktiviertes Gerät gefunden. Stellen Sie sicher, dass der Fernzugriff auf Ihrem Gerät gestartet wurde. @@ -1933,6 +3110,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ResultView OK + LABEL ANDROID IOS OK @@ -1945,53 +3123,207 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Send log file + LABEL ANDROID IOS Sende Protokoll + + Send email + LABEL DESKTOP_QML + E-Mail senden + SearchBar Search + LABEL DESKTOP_QML +---------- +LABEL IOS Suchen Cancel + LABEL IOS Abbrechen + + Clear + Löschen + + + Enter search string + Sucheingabe + + + Clear search string + Lösche Sucheingabe + SectionSwitch Service + LABEL ANDROID IOS Dienst Pairing + LABEL ANDROID IOS Kopplung Settings + LABEL ANDROID IOS Einstellungen + + SecurityAndPrivacySettings + + History + LABEL DESKTOP_QML + Verlauf + + + Save authentification history + LABEL DESKTOP_QML + Verlauf der Ausweisvorgänge speichern + + + Clear entire history + LABEL DESKTOP_QML + Lösche gesamten Verlauf + + + Onscreen keypad + LABEL DESKTOP_QML + Bildschirmtastatur + + + Use on screen keypad for PIN entry + LABEL DESKTOP_QML + Bildschirmtastatur für die PIN-Eingabe verwenden + + + Shuffle keypad buttons + LABEL DESKTOP_QML + Zufällige Anordnung der Ziffern + + + Software updates + LABEL DESKTOP_QML + Software-Aktualisierungen + + + Check at program start + LABEL DESKTOP_QML + Automatisch bei Programmstart prüfen + + + Check now + LABEL DESKTOP_QML + Jetzt überprüfen + + SelfAuthenticationData Identify + LABEL ANDROID IOS Ausweisen - - Successfull reading data - Daten erfolgreich gelesen - OK + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS OK Read data + LABEL DESKTOP_QML Daten auslesen + + Self-authentication data view + Anzeige der Selbstauskunft + + + This is the self-authentication data view of the AusweisApp2. + Dies ist die Anzeige der Selbstauskunft der AusweisApp2. + + + Successfully read data + INFO DESKTOP_QML Status message that the self authentication successfully completed. + Lesevorgang erfolgreich + + + Read data successfully + INFO ANDROID IOS The self authentication was successfully completed. + Daten erfolgreich ausgelesen + + + + SelfAuthenticationView + + Identify + LABEL DESKTOP_QML + Ausweisen + + + You can use your ID card anywhere you see this logo. + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS + Überall wo Sie dieses Logo sehen, können Sie Ihr Ausweisdokument einsetzen. + + + Use the button 'See my personal data' to display the data stored on your ID card. An Internet connection is required to display the data. + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS + Über die Schaltfläche 'Meine Daten einsehen' können Sie sich die im Chip Ihres Ausweisdokuments gespeicherten Daten anzeigen lassen. Um die Daten anzeigen zu können, benötigt diese Anwendung eine Internetverbindung. + + + Your personal data is neither saved nor processed in any way. Please see our %1 for details on how your personal data is processed. + LABEL ANDROID IOS + Es erfolgt keine Speicherung oder Weiterverarbeitung Ihrer persönlichen Daten. Näheres dazu erfahren Sie in unserer %1. + + + https://www.ausweisapp.bund.de/en/privacy/ + https://www.ausweisapp.bund.de/datenschutz/ + + + data privacy statement + Datenschutzerklärung + + + See my personal data + LABEL DESKTOP_QML +---------- +LABEL ANDROID IOS + Meine Daten einsehen + + + %1 more presses to toggle test PKI. + %1 weitere Klicks um die Test-PKI umzuschalten. + + + Test PKI activated. + Test-PKI aktiviert. + + + Test PKI deactivated. + Test-PKI deaktiviert. + + + https://www.ausweisapp.bund.de/datenschutz/ + https://www.ausweisapp.bund.de/datenschutz/ + + + Click to open link to data privacy statement in browser: %1 + Öffne den Link der Datenschutzerklärung im Browser: %1 + SelfInfoWidget @@ -2019,6 +3351,47 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe eID Logo + + SettingsView + + Settings view + Einstellungsanzeige + + + This is the settings panel of the AusweisApp2. + Dies ist die Einstellungsanzeige der AusweisApp2. + + + Settings + LABEL DESKTOP_QML + Einstellungen + + + Developer options + LABEL DESKTOP_QML + Entwickleroptionen + + + General + LABEL DESKTOP_QML + Allgemein + + + Smartphone as card reader + LABEL DESKTOP_QML + Smartphone als Kartenleser + + + USB card reader + LABEL DESKTOP_QML + USB Kartenleser + + + Security and privacy + LABEL DESKTOP_QML + Sicherheit und Datenschutz + + SettingsWidget @@ -2043,7 +3416,81 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Card Readers - Kartenlesegeräte + Kartenleser + + + + SetupAssistantBinaryDecisionView + + No + LABEL DESKTOP_QML + Nein + + + Yes + LABEL DESKTOP_QML + Ja + + + + SetupAssistantCardReaderView + + Advance + LABEL DESKTOP_QML + Fortfahren + + + + SetupAssistantView + + Setup Assistant + LABEL DESKTOP_QML + Einrichtungsassistent + + + Welcome to the AusweisApp2. Please take a few moments to setup the environment to your needs. Every decision you make can later be changed in the settings menu. + INFO DESKTOP_QML Welcome message when starting the setup assistant. + Willkommen in der AusweisApp2. Bitte nehmen Sie sich einen Moment Zeit, um die App nach Ihren Wünschen anzupassen. Jede Einstellung kann später wieder im Einstellungsmenü geändert werden. + + + Do you want to save a history of performed authentications? + INFO DESKTOP_QML Question if the authentication history shall be stored. + Möchten Sie den Verlauf durchgeführter Authentifizierungen speichern? + + + The following data is saved: authentication date, service provider contact data, read data. + INFO DESKTOP_QML Information text which data is stored in the history record. + Folgende Daten werden gespeichert: Authentisierungsdatum, Kontaktdaten des Diensteanbieters, Art der ausgelesenen Daten. + + + History Setting + LABEL DESKTOP_QML + Verlaufseinstellungen + + + Continue + LABEL DESKTOP_QML + Fortsetzen + + + Do you want to change your transport PIN to a personal PIN now? + INFO DESKTOP_QML Inquiry message if the 5 digit transport PIN should be changed to an ordinary PIN (now). + Möchten Sie jetzt Ihre Transport PIN in eine persönliche PIN ändern? + + + This process can always be started from the main menu. The online-ID function is only usable with a personal PIN. + INFO DESKTOP_QML Hint that this change may be carried out form the main menu as well and that it is required to use the online authentication feature of the id card. + Dieser Prozess kann jederzeit aus dem Hauptmenü heraus gestartet werden. Die Online-Ausweisfunktion ist nur mit einer persönlichen PIN nutzbar. + + + Transport PIN + LABEL DESKTOP_QML + Transport PIN + + + You have completed the setup of the AusweisApp2 successfully. + INFO DESKTOP_QML Success message after completing the setup assistant. + Sie haben die Einrichtung der AusweisApp2 erfolgreich abgeschlossen. @@ -2089,43 +3536,63 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe StoreFeedbackPopup Would you like to rate this app? + INFO ANDROID Header of the app rating popup. Möchten Sie diese App bewerten? - - No, Thanks - Nein danke - Rate + LABEL ANDROID Bewerten We would be very grateful if you could leave a rating on the Google Play Store! + INFO ANDROID Content of the app rating popup. Wir würden uns sehr über eine Bewertung im Google Play Store freuen! + + No, thanks + LABEL ANDROID + Nein, danke + + + + TabbedReaderView + + Card Readers + LABEL DESKTOP_QML + Kartenleser + + + Smartphone as card reader + Smartphone als Kartenleser + + + USB card reader + USB Kartenleser + + + Please start pairing mode first. + LABEL DESKTOP_QML + Starten Sie den Kopplungsmodus auf Ihrem Smartphone, falls noch nicht geschehen. + TechnologySwitch NFC + LABEL ANDROID IOS NFC WiFi + LABEL ANDROID IOS WLAN Bluetooth + LABEL ANDROID IOS Bluetooth - - Use WiFi card reader instead<br/>of Bluetooth card reader - WLAN Kartenlesegerät anstelle <br/>vom Bluetooth Kartenlesegerät verwenden - - - Use Bluetooth card reader instead<br/>of remote card reader - Bluetooth Kartenlesegerät anstelle <br/>vom WLAN Kartenlesegerät verwenden - TitleBar @@ -2139,6 +3606,7 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Start + LABEL DESKTOP_QML Start @@ -2149,30 +3617,50 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Help Hilfe + + Notifications + Benachrichtungen + - TitleBarAction + TitleBarNavigation Cancel + LABEL ANDROID IOS Abbrechen Edit + LABEL ANDROID IOS Bearbeiten - < back - < Zurück + Back + LABEL ANDROID IOS + Zurück + + + + ToggleableOption + + is enabled + ist aktiviert + + + is disabled + ist deaktiviert TutorialFooter Fold in + LABEL ANDROID IOS Einklappen Quit tutorial + LABEL ANDROID IOS Tutorial beenden @@ -2180,10 +3668,12 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe TutorialHow You can find a list of compatible NFC-capable smartphones here: + LABEL ANDROID IOS Eine Liste kompatibler NFC-fähiger Smartphones finden Sie hier: Direct connection via NFC chip + LABEL ANDROID IOS Direktes Auslesen über NFC-Chip @@ -2192,50 +3682,57 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Smartphone as card reader + LABEL ANDROID IOS Smartphone als Kartenleser App on computer <b>without</b> NFC chip + LABEL ANDROID IOS App auf Computer <b>ohne</b> NFC-Chip - - Android smartphone <b>with</b> NFC chip as card reader - Android-Telefon <b>mit</b> NFC-Chip als Kartenlesegerät - App on tablet or smartphone <b>without</b> NFC chip + LABEL ANDROID IOS App auf Tablet oder Telefon <b>ohne</b> NFC-Chip Using a bluetooth card reader - Mit Bluetooth-Kartenlesegerät + LABEL ANDROID IOS + Mit Bluetooth-Kartenleser App on smartphone or tablet + LABEL ANDROID IOS App auf Telefon oder Tablet Bluetooth card reader - Bluetooth-Kartenlesegerät + LABEL ANDROID IOS + Bluetooth-Kartenleser Another tip + LABEL ANDROID IOS Noch ein Tipp For lenghty forms, e.g. a BAföG application, we recommend you to use the AusweisApp2 on a computer... + LABEL ANDROID IOS Für aufwändigere Formulare wie z.B. den BAföG-Antrag empfehlen wir Ihnen die AusweisApp2 am Computer zu verwenden... Filling long forms is no fun on a smartphone! + LABEL ANDROID IOS Längere Anträge ausfüllen macht am Mobiltelefon keinen Spaß! ... and to use a smartphone to communicate with your ID card. A USB reader is of course also an alternative. - ... und zum Lesen des Ausweises das Smartphone als Kartenlesegerät zu nutzen. Alternativ geht natürlich auch ein USB-Lesegerät. + LABEL ANDROID IOS + ... und zum Lesen des Ausweises das Smartphone als Kartenleser zu nutzen. Alternativ geht natürlich auch ein USB-Lesegerät. https://www.ausweisapp.bund.de/mobile-geraete/ + LABEL ANDROID IOS https://www.ausweisapp.bund.de/mobile-geraete/ @@ -2243,18 +3740,40 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Wie kann ich die AusweisApp2 auf meinem Smartphone nutzen? - Many Android devices can access the id card via the NFC interface. - Viele Android-Geräte mit NFC können den Ausweis auslesen. + The AusweisApp2 offers the following options to access your id card: + LABEL ANDROID IOS + Die AusweisApp2 bietet zum Auslesen die folgenden Möglichkeiten: - The AusweisApp2 offers the following options to access your id card: - Die AusweisApp2 bietet zum Auslesen die folgenden Möglichkeiten: + How can I use the AusweisApp2 on my iPhone? + INFO ANDROID IOS + Wie kann ich die AusweisApp2 auf meinem iPhone nutzen? + + + Many iPhones (iPhone 7 and newer) can access the id card via the built-in NFC interface. + INFO ANDROID IOS + Viele iPhones (iPhone 7 und neuer) können direkt über die im Gerät verbaute NFC-Schnittstelle auf die Online-Ausweisfunktion des Ausweises zugreifen. + + + Many Android devices can access the id card via the built-in NFC interface. + Viele Android-Geräte können direkt über die im Gerät verbaute NFC-Schnittstelle auf die Online-Ausweisfunktion des Ausweises zugreifen. + + + App on iPhone <b>with</b> NFC chip as card reader + LABEL ANDROID IOS + App auf iPhone <b>mit</b> NFC-Chip als Kartenleser + + + Smartphone <b>with</b> NFC chip as card reader + LABEL ANDROID IOS + Smartphone <b>mit</b> NFC-Chip als Kartenleser TutorialImportant Please exchange your + LABEL ANDROID IOS Bitte tauschen Sie Ihre @@ -2263,22 +3782,27 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe 5 digits long + LABEL ANDROID IOS 5-stellige transport PIN + LABEL ANDROID IOS Transport-PIN with a personal + LABEL ANDROID IOS durch eine persönliche 6 digits long PIN + LABEL ANDROID IOS 6-stellige PIN before you use the online ID function! + LABEL ANDROID IOS bevor Sie die Online-Ausweisfunktion verwenden! @@ -2287,22 +3811,27 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe Choose for this purpose the menu entry PIN management + LABEL ANDROID IOS Hierzu den Menüpunkt PIN-Verwaltung auswählen Let's go + LABEL ANDROID IOS Los geht's Do you still have questions? + LABEL ANDROID IOS Oder haben Sie noch Fragen? You can read our <b>FAQs</b> or <b>write</b> to us... + LABEL ANDROID IOS Dann können Sie in unsere <b>FAQs</b> schauen oder uns <b>schreiben</b>... www.ausweisapp.bund.de + LABEL ANDROID IOS www.ausweisapp.bund.de @@ -2315,69 +3844,88 @@ Bitte beachten Sie, dass Sie mit Ihrer PUK lediglich Ihren Online-Ausweis entspe ... or click this button to change your PIN right now: + LABEL ANDROID IOS ... oder auf diesen Button klicken um die PIN jetzt zu ändern: Change PIN + LABEL ANDROID IOS PIN ändern Later you can also change your personal PIN here + LABEL ANDROID IOS Hier können Sie auch später jederzeit Ihre persönliche PIN ändern - - qrc:///images/tutorial/screenshot_pin_management_menu_en.png - qrc:///images/tutorial/screenshot_pin_management_menu_de.png - https://www.youtube.com/watch?v=wZglRda5Y60&index=4&list=PLLB5ERhVkn25qQXgMHQr-1KgyZsJKoSAm https://www.youtube.com/watch?v=wZglRda5Y60&index=4&list=PLLB5ERhVkn25qQXgMHQr-1KgyZsJKoSAm Learn more about this in the YouTube video + LABEL ANDROID IOS Sie können mehr dazu im YouTube-Video erfahren - - The transport PIN is send to you by the Bundesdruckerei via mail. - Die Transport-PIN wird Ihnen von der Bundesdruckerei per Brief zugesandt. - You can always access this tutorial again from the side bar. Sie können dieses Tutorial jederzeit wieder von der Seitenleiste aus aufrufen. + + The transport PIN is sent to you by the Bundesdruckerei via mail. + LABEL ANDROID IOS + Die Transport-PIN wird Ihnen von der Bundesdruckerei per Brief zugesandt. + + + qrc:///images/tutorial/screenshot_pin_management_menu_%1_en.png + LABEL ANDROID IOS + qrc:///images/tutorial/screenshot_pin_management_menu_%1_de.png + + + You can always access this tutorial again from the "More" section in the menu bar. + LABEL ANDROID IOS + Sie können dieses Tutorial jederzeit wieder über den Bereich "Mehr" aus aufrufen. + TutorialReaderMethodBluetooth Tutorial: Bluetooth + LABEL ANDROID IOS Tutorial: Bluetooth Using a bluetooth card reader - Mit Bluetooth-Kartenlesegerät + LABEL ANDROID IOS + Mit Bluetooth-Kartenleser App on smartphone or tablet + LABEL ANDROID IOS App auf Telefon oder Tablet Bluetooth card reader - Bluetooth-Kartenlesegerät + LABEL ANDROID IOS + Bluetooth-Kartenleser You need a suitable card reader if you want to use the bluetooth connection. - Die Bluetooth-Verbindung setzt voraus, dass ein geeignetes Kartenlesegerät vorhanden ist. + LABEL ANDROID IOS + Die Bluetooth-Verbindung setzt voraus, dass ein geeigneter Kartenleser vorhanden ist. Set the card reader visible first... - Zunächst das Kartenlesegerät sichtbar machen... + LABEL ANDROID IOS + Zunächst den Kartenleser sichtbar machen... ... and then pair it with your device. + LABEL ANDROID IOS ...und mit dem Gerät koppeln. Click the link on the website of the service provider. + LABEL ANDROID IOS Link auf Webseite des Diensteanbieters klicken. @@ -2387,38 +3935,42 @@ klicken. The App opens automatically. + LABEL ANDROID IOS Die App öffnet sich automatisch. The AusweisApp2 will display who wants to access which data. + LABEL ANDROID IOS Ihnen wird angezeigt, wer welche Ihrer Daten abfragen will. Start the process with a click on: + LABEL ANDROID IOS Starten Sie den Vorgang mit: - Identify now - Jetzt ausweisen - - - qrc:///images/tutorial/screenshot_choose_reader_en.png - qrc:///images/tutorial/screenshot_choose_reader_de.png + Proceed to PIN entry + LABEL ANDROID IOS + Weiter zur PIN-Eingabe Tap on Bluetooth + LABEL ANDROID IOS Tap auf Bluetooth Insert card into card reader + LABEL ANDROID IOS Karte ins Lesegerät stecken ... and confirm the displayed information. + LABEL ANDROID IOS ...und angezeigte Informationen bestätigen. Enter + LABEL ANDROID IOS Eingeben @@ -2427,25 +3979,33 @@ klicken. 6 digits long PIN + LABEL ANDROID IOS 6-stellige PIN now on the card reader! - jetzt auf dem Kartenlesegerät! + LABEL ANDROID IOS + jetzt auf dem Kartenleser! enter on the card reader! - am Kartenlesegerät eingeben! + am Kartenleser eingeben! This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand. + LABEL ANDROID IOS Funktioniert nur, wenn Sie Ihre 5-stellige Transport-PIN bereits in Ihre persönliche 6-stellige PIN geändert haben. + + qrc:///images/tutorial/screenshot_choose_reader_%1_en.png + qrc:///images/tutorial/screenshot_choose_reader_%1_de.png + TutorialReaderMethodFooter Back + LABEL ANDROID IOS Zurück @@ -2453,10 +4013,12 @@ klicken. TutorialReaderMethodNfc Tutorial: NFC + LABEL ANDROID IOS Tutorial: NFC Direct connection via NFC chip + LABEL ANDROID IOS Direktes Auslesen über NFC Chip @@ -2465,6 +4027,7 @@ klicken. Click link on the website of the service provider. + LABEL ANDROID IOS Link auf Webseite des Diensteanbieters klicken. @@ -2473,19 +4036,23 @@ klicken. The App opens automatically. + LABEL ANDROID IOS Die App öffnet sich automatisch. The AusweisApp2 will display who wants to access which data. + LABEL ANDROID IOS Ihnen wird angezeigt, wer welche Ihrer Daten abfragen will. Start the process with a click on: + LABEL ANDROID IOS Starten Sie den Vorgang mit: - Identify now - Jetzt ausweisen + Proceed to PIN entry + LABEL ANDROID IOS + Weiter zur PIN-Eingabe ... and place the id card flat onto the NFC interface. @@ -2493,14 +4060,17 @@ klicken. Do not move device or id card! + LABEL ANDROID IOS Gerät und Ausweis nicht bewegen! The correct position is specific for your device... + LABEL ANDROID IOS Die genaue Position hängt von Ihrem Gerät ab... https://www.ausweisapp.bund.de/mobile-geraete/ + LABEL ANDROID IOS https://www.ausweisapp.bund.de/mobile-geraete/ @@ -2509,6 +4079,7 @@ klicken. Enter + LABEL ANDROID IOS Eingeben @@ -2517,10 +4088,12 @@ klicken. 6 digits long PIN + LABEL ANDROID IOS 6-stellige PIN now! + LABEL ANDROID IOS jetzt! @@ -2529,129 +4102,145 @@ klicken. This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand. + LABEL ANDROID IOS Funktioniert nur, wenn Sie Ihre 5-stellige Transport-PIN bereits in Ihre persönliche 6-stellige PIN geändert haben. + + App on iPhone <b>with</b> NFC chip as card reader + LABEL ANDROID IOS + App auf iPhone <b>mit</b> NFC-Chip als Kartenleser + + + ... and place the top of the iPhone onto the id card. + LABEL ANDROID IOS + ...und platzieren Sie die Oberkante des iPhones auf dem Ausweis. + TutorialReaderMethodSacDesktop Tutorial: Smartphone as card reader - Tutorial: Smartphone als Kartenlesegerät + LABEL ANDROID IOS + Tutorial: Smartphone als Kartenleser Smartphone as card reader - Smartphone als Kartenlesegerät + LABEL ANDROID IOS + Smartphone als Kartenleser App on computer <b>without</b> NFC chip + LABEL ANDROID IOS App auf Computer <b>ohne</b> NFC-Chip - - Android smartphone <b>with</b> NFC chip as card reader - Android-Telefon <b>mit</b> NFC-Chip als Kartenlesegerät - - - Install AusweisApp2 on both your computer <b>and</b> your android smartphone with NFC ability. - Installieren Sie AusweisApp2 auf Ihren Computer und Ihrem Android-Telefon mit NFC. - Both devices have to be connected to the same wifi network + LABEL ANDROID IOS Beide Geräte müssen im selben WLAN sein - - Now enter "Smartphone as card reader" in the app on your android smartphone... - Jetzt in der App auf Ihrem Android-Telefon im Menü auf „Smartphone als Kartenlesegerät“ tappen... - - - qrc:///images/tutorial/generated/reader_sac_menu_en.svg - qrc:///images/tutorial/generated/reader_sac_menu_de.svg - Start remote service + LABEL ANDROID IOS Fernzugriff starten Now + LABEL ANDROID IOS Jetzt Start pairing + LABEL ANDROID IOS Kopplung starten Next + LABEL ANDROID IOS Dann Pairing code + LABEL ANDROID IOS Kopplungscode appears! + LABEL ANDROID IOS erscheint! Start the App now on your computer and enter the settings. + LABEL ANDROID IOS Öffnen Sie nun die App auf dem Computer und gehen auf Einstellungen. Select the <b>Card Readers</b> tab. - Den Reiter <b>Kartenlesegeräte</b> auswählen. + LABEL ANDROID IOS + Den Reiter <b>Kartenleser</b> auswählen. qrc:///images/tutorial/screenshot_pairing_en.png + LABEL ANDROID IOS qrc:///images/tutorial/screenshot_pairing_de.png Select smartphone from list and click "pair" + LABEL ANDROID IOS Smartphone in der Liste wählen und auf „koppeln“ klicken Enter pairing code next. + LABEL ANDROID IOS Dann Kopplungscode eingeben. Click link on the website of the service provider. + LABEL ANDROID IOS Link auf Webseite des Diensteanbieters klicken. qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg + LABEL ANDROID IOS qrc:///images/tutorial/generated/reader_nfc_userdata_example_de.svg The App opens automatically. + LABEL ANDROID IOS Die App öffnet sich automatisch. The AusweisApp2 will display who wants to access which data. + LABEL ANDROID IOS Ihnen wird angezeigt, wer welche Ihrer Daten abfragen will. Start the process with a click on: + LABEL ANDROID IOS Starten Sie den Vorgang mit: - Identify now - Jetzt ausweisen + Proceed to PIN entry + LABEL ANDROID IOS + Weiter zur PIN-Eingabe qrc:///images/tutorial/generated/where_lay_down_id.svg + LABEL ANDROID IOS qrc:///images/tutorial/generated/where_lay_down_id.svg - - ... and place the id card flat onto the NFC interface. - ... und platzieren Sie den Ausweis flach an der NFC-Schnittstelle Ihres Android-Telefons. - Do not move device or id card! + LABEL ANDROID IOS Gerät und Ausweis nicht bewegen! The correct position is specific for your device... + LABEL ANDROID IOS Die genaue Position hängt von Ihrem Gerät ab... https://www.ausweisapp.bund.de/mobile-geraete/ + LABEL ANDROID IOS https://www.ausweisapp.bund.de/mobile-geraete/ @@ -2660,14 +4249,17 @@ klicken. Enter + LABEL ANDROID IOS Eingeben 6 digits long PIN + LABEL ANDROID IOS 6-stellige PIN now! + LABEL ANDROID IOS jetzt! @@ -2676,129 +4268,158 @@ klicken. This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand. + LABEL ANDROID IOS Funktioniert nur, wenn Sie Ihre 5-stellige Transport-PIN bereits in Ihre persönliche 6-stellige PIN geändert haben. + + qrc:///images/tutorial/generated/reader_sac_menu_%1_en.svg + LABEL ANDROID IOS + qrc:///images/tutorial/generated/reader_sac_menu_%1_de.svg + + + Smartphone <b>with</b> NFC chip as card reader + LABEL ANDROID IOS + Smartphone <b>mit</b> NFC-Chip als Kartenleser + + + Install AusweisApp2 on both your computer <b>and</b> your smartphone with NFC capability. + LABEL ANDROID IOS + Installieren Sie die AusweisApp2 <b>sowohl</b> auf Ihrem Rechner <b>als auch</b> auf Ihrem NFC-fähigen Smartphone. + + + Now choose "Remote" in the AusweisApp2 on your smartphone... + LABEL ANDROID IOS + Öffnen Sie nun in der AusweisApp2 auf dem Smartphone die Ansicht "Fernzugriff"... + + + Now choose "Smartphone as card reader" in the AusweisApp2 on your smartphone... + Öffnen Sie nun in der AusweisApp2 auf dem Smartphone den Bereich "Smartphone als Kartenleser"... + + + ... and place the id card onto the NFC interface. + LABEL ANDROID IOS + ...und platzieren Sie den Ausweis auf die NFC-Schnittstelle. + TutorialReaderMethodSacMobile Tutorial: Smartphone as card reader - Tutorial: Smartphone als Kartenlesegerät + LABEL ANDROID IOS + Tutorial: Smartphone als Kartenleser App on tablet or smartphone <b>without</b> NFC chip + LABEL ANDROID IOS App auf Tablet oder Telefon <b>ohne</b> NFC-Chip - - Android smartphone <b>with</b> NFC chip as card reader - Android-Telefon <b>mit</b> NFC-Chip als Kartenlesegerät - - - Install AusweisApp2 on both your device without NFC <b>and</b> your android smartphone with NFC ability. - Installieren Sie die AusweisApp2 auf Ihrem Gerät ohne NFC <b>und</b> auf Ihrem Android-Telefon mit NFC. - Both devices have to be connected to the same wifi network + LABEL ANDROID IOS Beide Geräte müssen im selben WLAN sein - - Now enter "Smartphone as card reader" in the app on your android smartphone <b>with</b>... - Jetzt in der App auf Ihrem Android-Telefon <b>mit</b> NFC im Menü auf „Smartphone als Kartenlesegerät“ tappen... - - - qrc:///images/tutorial/generated/reader_sac_menu_en.svg - qrc:///images/tutorial/generated/reader_sac_menu_en.svg - Start remote service + LABEL ANDROID IOS Fernzugriff starten Now + LABEL ANDROID IOS Jetzt Start pairing + LABEL ANDROID IOS Kopplung starten Next + LABEL ANDROID IOS Dann Pairing code + LABEL ANDROID IOS Kopplungscode appears! + LABEL ANDROID IOS erscheint! - Now open the app on your device <b>without</b> NFC and select <b>Smartphone as card reader</b>. - Nun die App auf dem Gerät <b>ohne</b> NFC öffnen und auf <b>Smartphone als Kartenlesegerät</b> gehen. + Now open the AusweisApp2 on your device <b>without</b> NFC and select <b>Smartphone as card reader</b>. + Öffnen Sie nun die AusweisApp2 auf dem Gerät <b>ohne</b> NFC und wählen <b>Smartphone als Kartenleser</b> aus. Now select <b>Settings</b>. + LABEL ANDROID IOS Dort <b>Einstellungen</b> auswählen. Choose smartphone from list + LABEL ANDROID IOS Smartphone aus Liste wählen Enter pairing code next. + LABEL ANDROID IOS Dann Kopplungscode eingeben. Click link on the website of the service provider on the device <b>without</b> NFC. + LABEL ANDROID IOS Auf dem Gerät <b>ohne</b> NFC Link auf Webseite des Diensteanbieters klicken. qrc:///images/tutorial/generated/reader_nfc_userdata_example_en.svg + LABEL ANDROID IOS qrc:///images/tutorial/generated/reader_nfc_userdata_example_de.svg The App opens automatically. + LABEL ANDROID IOS Die App öffnet sich automatisch. The AusweisApp2 will display who wants to access which data. + LABEL ANDROID IOS Ihnen wird angezeigt, wer welche Ihrer Daten abfragen will. Start the process with a click on: + LABEL ANDROID IOS Den Vorgang starten mit: - Identify now - Jetzt ausweisen - - - qrc:///images/tutorial/screenshot_choose_reader_en.png - qrc:///images/tutorial/screenshot_choose_reader_de.png + Proceed to PIN entry + LABEL ANDROID IOS + Weiter zur PIN-Eingabe Tap on Wifi + LABEL ANDROID IOS Tap auf WLAN qrc:///images/tutorial/generated/where_lay_down_id.svg + LABEL ANDROID IOS qrc:///images/tutorial/generated/where_lay_down_id.svg - - ... and place the id card flat onto the NFC interface. - ... und den Ausweis flach an der NFC-Schnittstelle Ihres Android-Telefons platzieren. - Do not move device or id card! + LABEL ANDROID IOS Gerät und Ausweis nicht bewegen! The correct position is specific for your device... + LABEL ANDROID IOS Die genaue Position hängt von Ihrem Gerät ab... https://www.ausweisapp.bund.de/mobile-geraete/ + LABEL ANDROID IOS https://www.ausweisapp.bund.de/mobile-geraete/ @@ -2807,14 +4428,17 @@ klicken. Enter + LABEL ANDROID IOS Eingeben 6 digits long PIN + LABEL ANDROID IOS 6-stellige PIN now! + LABEL ANDROID IOS jetzt! @@ -2823,29 +4447,74 @@ klicken. This is only possible if you have exchanged the 5 digits long transport PIN with a 6 digits long personal PIN beforehand. + LABEL ANDROID IOS Funktioniert nur, wenn Sie Ihre 5-stellige Transport-PIN bereits in Ihre persönliche 6-stellige PIN geändert haben. + + qrc:///images/tutorial/generated/reader_sac_menu_%1_en.svg + LABEL ANDROID IOS + qrc:///images/tutorial/generated/reader_sac_menu_%1_de.svg + + + Now open the AusweisApp2 on your device <b>without</b> NFC and select <b>Configure remote service</b>. + LABEL ANDROID IOS + Öffnen Sie nun die AusweisApp2 auf dem Gerät <b>ohne</b> NFC und wählen Sie <b>Fernzugriff konfigurieren</b> aus. + + + qrc:///images/tutorial/screenshot_choose_reader_%1_en.png + LABEL ANDROID IOS + qrc:///images/tutorial/screenshot_choose_reader_%1_de.png + + + Smartphone <b>with</b> NFC chip as card reader + LABEL ANDROID IOS + Smartphone <b>mit</b> NFC-Chip als Kartenleser + + + Install AusweisApp2 on both your device without NFC <b>and</b> your smartphone with NFC capability. + LABEL ANDROID IOS + Installieren Sie die AusweisApp2 auf Ihrem Gerät ohne NFC <b>und</b> auf Ihrem NFC-fähigen Smartphone. + + + Now choose "Remote" in the AusweisApp2 on your smartphone... + LABEL ANDROID IOS + Öffnen Sie nun in der AusweisApp2 auf dem Smartphone den Bereich "Fernzugriff"... + + + Now choose "Smartphone as card reader" in the AusweisApp2 on your smartphone... + Öffnen Sie nun in der AusweisApp2 auf dem Smartphone den Bereich "Smartphone als Kartenleser"... + + + ... and place the id card onto the NFC interface. + LABEL ANDROID IOS + ...und platzieren Sie den Ausweis auf die NFC-Schnittstelle. + TutorialView Tutorial + LABEL ANDROID IOS Tutorial What? + LABEL ANDROID IOS Was? Where? + LABEL ANDROID IOS Wo? How? + LABEL ANDROID IOS Wie? Important! + LABEL ANDROID IOS Wichtig! @@ -2853,101 +4522,120 @@ klicken. TutorialWhat What is the online ID function? + LABEL ANDROID IOS Was ist die Online-Ausweisfunktion? - - You can authenticate yourself in the internet - Mit ihr weisen Sie sich sicher im Internet aus - - - and use it to deal with administrative paperwork and business matters electronically! - und erledigen damit Behördengänge oder geschäftliche Angelegenheiten einfach elektronisch! - Alright, but is it secure? + LABEL ANDROID IOS Alles klar, nur ist das auch sicher? Of course, because we use a so called + LABEL ANDROID IOS Natürlich, dafür haben wir die sogenannte Mutual authentication + LABEL ANDROID IOS gegenseitige Authentifizierung ... it establishes a secure connection between ID document and service provider. + LABEL ANDROID IOS ...sie stellt eine sichere Verbindung zwischen Ausweisdokument und Diensteanbieter her. On every authentication you get displayed <b>who</b> wants to access <b>which</b> data + LABEL ANDROID IOS Ihnen wird immer zuerst angezeigt, <b>wer welche</b> Daten auslesen möchte and you consent to the request with your personal PIN. + LABEL ANDROID IOS und Sie stimmen der Abfrage mit Ihrer persönlichen PIN zu. ... is the provider authorized for this? + LABEL ANDROID IOS ... und darf der das? The provider needs an authorization of the Federal Office of Administration. + LABEL ANDROID IOS Der Anbieter benötigt eine Berechtigung vom Bundesverwaltungsamt. Certificate + LABEL ANDROID IOS Zertifikat Everytime both participants authenticate each other... + LABEL ANDROID IOS Es weisen sich also immer beide Seiten eindeutig aus... ... and therefore your data is protected and securely transfered. + LABEL ANDROID IOS ... so werden Ihre Daten geschützt und sicher übermittelt. - - qrc:///images/tutorial/screenshot_cert_en.png - qrc:///images/tutorial/screenshot_cert_de.png - https://www.youtube.com/watch?v=fzbUZmHaZp4&index=5&list=PLLB5ERhVkn25qQXgMHQr-1KgyZsJKoSAm + LABEL ANDROID IOS https://www.youtube.com/watch?v=fzbUZmHaZp4&index=5&list=PLLB5ERhVkn25qQXgMHQr-1KgyZsJKoSAm You can also watch a video on YouTube on this topic + LABEL ANDROID IOS Sie können sich hierzu auch ein Video auf YouTube anschauen + + You can use it to authenticate yourself in the internet + LABEL ANDROID IOS + Mit ihr weisen Sie sich sicher im Internet aus + + + and also to deal with administrative paperwork and business matters electronically! + LABEL ANDROID IOS + und erledigen damit Behördengänge oder geschäftliche Angelegenheiten einfach elektronisch! + + + qrc:///images/tutorial/screenshot_cert_%1_en.png + LABEL ANDROID IOS + qrc:///images/tutorial/screenshot_cert_%1_de.png + TutorialWhere On every website of a service provider where you see this icon: + LABEL ANDROID IOS Überall, wo Sie auf der Webseite eines Online-Dienstes folgendes Logo sehen: By the way, you can find many services directly in the AusweisApp2 <b>provider list</b>. + LABEL ANDROID IOS Übrigens, viele Dienste finden Sie direkt in der <b>Anbieterliste</b> der AusweisApp2. The <b>integrated self-disclosure</b> is a special service to view the data saved on your ID card. + LABEL ANDROID IOS Die <b>integrierte Selbstauskunft</b> ist ein spezieller Dienst, um Daten einzusehen, die auf Ihrem Ausweis gespeichert sind. - - You can access it by clicking "See my personal data" on the AusweisApp2 start page, followed by "Identify now" - Sie erreichen sie von der Startseite der AusweisApp2 mit "Meine Daten einsehen" und dann auf "Jetzt ausweisen" - And this is how it works + LABEL ANDROID IOS Und so funkioniert's The AusweisApp2 will always display <b>who</b> wants to access <b>which</b> of your data. + LABEL ANDROID IOS Die AusweisApp2 zeigt Ihnen immer an, wer welche Ihrer Daten abfragen will. qrc:///images/tutorial/generated/where_userdata_example_en.svg + LABEL ANDROID IOS qrc:///images/tutorial/generated/where_userdata_example_de.svg @@ -2960,6 +4648,7 @@ klicken. Enter + LABEL ANDROID IOS Eingeben @@ -2968,10 +4657,12 @@ klicken. 6 digits long PIN + LABEL ANDROID IOS 6-stellige PIN now! + LABEL ANDROID IOS jetzt! @@ -2980,15 +4671,38 @@ klicken. Where can I use the online ID function? + LABEL ANDROID IOS Wo kann ich die Online-Ausweisfunktion nutzen? - qrc:///images/tutorial/generated/where_providerlist_screenshot_en.svg - qrc:///images/tutorial/generated/where_providerlist_screenshot_de.svg + qrc:///images/tutorial/generated/where_identify_now_en.svg + LABEL ANDROID IOS + qrc:///images/tutorial/generated/where_identify_now_de.svg - qrc:///images/tutorial/generated/where_identify_now_en.svg - qrc:///images/tutorial/generated/where_identify_now_de.svg + qrc:///images/tutorial/generated/where_providerlist_screenshot_android_en.svg + LABEL ANDROID + qrc:///images/tutorial/generated/where_providerlist_screenshot_android_de.svg + + + qrc:///images/tutorial/screenshot_providerlist_ios_en.png + LABEL IOS + qrc:///images/tutorial/screenshot_providerlist_ios_de.png + + + You can access the self-disclosure by clicking "See my personal data" on the AusweisApp2 start page, followed by "Proceed to PIN entry" + LABEL ANDROID IOS + Sie erreichen die Selbstauskunft indem Sie auf der Startseite der AusweisApp2 "Meine Daten einsehen" und dann "Weiter zur PIN-Eingabe" auswählen + + + Now lay down your ID card and hold the top of your iPhone to the ID card. + LABEL ANDROID IOS + Legen Sie nun Ihren Ausweis vor sich hin und halten Sie die Oberkante des iPhones an den Ausweis. + + + Don't move your iPhone during the procedure! + LABEL ANDROID IOS + iPhone während des gesamten Vorgangs nicht bewegen! @@ -3034,83 +4748,65 @@ klicken. VersionInformation Version Information + LABEL ANDROID IOS Versionsinformationen + + Version information + LABEL DESKTOP_QML + Versionsinformationen + + + This is the version information section of the AusweisApp2. + Dies ist die Anzeige der Versionsinformationen der AusweisApp2.. + WhiteListSurveyView Feedback + LABEL ANDROID IOS Feedback Would you like to help us to improve the AusweisApp2? + INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Part of content text Möchten Sie uns helfen, die AusweisApp2 zu verbessern? Supplying your device characteristics helps us to gather reliable information about the compatibility of your device. + INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Part of content text Mit der Übermittlung Ihrer Gerätedaten helfen Sie uns, verlässliche Aussagen über die Kompatibilität Ihres Gerätes mit der AusweisApp2 zu treffen. The transmission is anonymous. No personal data is collected or transmitted! + INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Part of content text Die Übermittlung erfolgt anonym und es werden keine personenbezogenen Daten übermittelt! - - The following information will be transmitted, if you decide so: - Nach Ihrer Bestätigung werden folgende Daten übermittelt: - - - Vendor - Name des Herstellers - - - Model number - Modellnummer - - - Model name - Modellname - - - Collection date - Datum der Erfassung - - - AusweisApp2 version - Version der AusweisApp2 - - - ROM build number - Build-Nummer des Betriebssystems - - - Android version - Android-Version - - - Kernel version - Kernel-Version - - - Max. NFC packet length - Max. NFC-Paket-Länge - Thank you for your assistance! + INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Thank you message Vielen Dank für Ihre Mithilfe! Cancel + LABEL ANDROID IOS Abbrechen Transmit + LABEL ANDROID IOS Senden Send device data? + INFO ANDROID IOS Request to the user if the device information should be shared for statistics (Whitelist) - Header Gerätedaten senden? + + Collected data + Identifizierte Eigenschaften + governikus::AboutDialog @@ -3139,134 +4835,167 @@ klicken. governikus::AccessRoleAndRightsUtil WRITE_DG17 + LABEL ALL_PLATFORMS WRITE_DG17 WRITE_DG18 + LABEL ALL_PLATFORMS WRITE_DG18 WRITE_DG19 + LABEL ALL_PLATFORMS WRITE_DG19 WRITE_DG20 + LABEL ALL_PLATFORMS WRITE_DG20 WRITE_DG21 + LABEL ALL_PLATFORMS WRITE_DG21 Optional data + LABEL ALL_PLATFORMS Optionale Daten Residence permit II + LABEL ALL_PLATFORMS Nebenbestimmungen II Residence permit I + LABEL ALL_PLATFORMS Nebenbestimmungen I (nur eAT) Pseudonym + LABEL ALL_PLATFORMS Pseudonym Address + LABEL ALL_PLATFORMS Anschrift Birth name + LABEL ALL_PLATFORMS Geburtsname Date of birth + LABEL ALL_PLATFORMS Geburtsdatum Doctoral degree + LABEL ALL_PLATFORMS Doktorgrad Religious / artistic name + LABEL ALL_PLATFORMS Ordens- / Künstlername Given name(s) + LABEL ALL_PLATFORMS Vorname(n) Valid until + LABEL ALL_PLATFORMS Gültig bis Issuing country + LABEL ALL_PLATFORMS Ausstellender Staat Address verification + LABEL ALL_PLATFORMS Wohnortbestätigung RFU + LABEL ALL_PLATFORMS RFU Community-ID + LABEL ALL_PLATFORMS Wohnort-ID Gender + LABEL ALL_PLATFORMS Geschlecht Nationality + LABEL ALL_PLATFORMS Staatsangehörigkeit Place of birth + LABEL ALL_PLATFORMS Geburtsort Family name + LABEL ALL_PLATFORMS Familienname Document type + LABEL ALL_PLATFORMS Dokumentenart Installation of qualified signature certificates + LABEL ALL_PLATFORMS Installation qualifizierter Signaturzertifikate Installation of signature certificates + LABEL ALL_PLATFORMS Installation von Signaturzertifikaten PIN Management + LABEL ALL_PLATFORMS PIN-Verwaltung CAN allowed + LABEL ALL_PLATFORMS CAN erlaubt Privileged terminal + LABEL ALL_PLATFORMS Privilegiertes Terminal Age verification + LABEL ALL_PLATFORMS Altersbestätigung Unknown (reserved) + LABEL ALL_PLATFORMS Unbekannt (reserviert) Unknown + LABEL ALL_PLATFORMS Unbekannt @@ -3328,6 +5057,14 @@ klicken. Did you change the transport PIN already?<br><br>Prior to the first use of the online identification function you have to replace the transport PIN by an individual 6-digit PIN. Online identification with transport PIN is not possible. Haben Sie Ihre Transport-PIN schon geändert? <br><br>Bevor Sie das erste Mal die Online-Ausweisfunktion nutzen können, müssen Sie Ihre Transport-PIN durch eine persönliche, 6-stellige PIN ersetzen. Die Benutzung der Online-Ausweisfunktion ist mit der Transport-PIN nicht möglich. + + Switch UI + Grafische Oberfläche wechseln + + + Do you want to switch to the new beta UI? You can switch back to the old UI in "Settings". + Möchten Sie die neue grafische Oberfläche ausprobieren? Sie können in den Einstellungen zur alten Oberfläche zurückwechseln. + governikus::AppQtMainWidget @@ -3349,46 +5086,61 @@ klicken. not inserted Karte + ERROR ALL_PLATFORMS No card is present/inserted. The text is only used in DiagnosisView. nicht eingelegt unknown type Karte + ERROR ALL_PLATFORMS An unknown card is present/inserted. The text is only used in DiagnosisView. unbekannter Typ ID card (PA/eAT) + ERROR ALL_PLATFORMS An id card is present/inserted. The text is only used in DiagnosisView. Ausweisdokument (PA/eAT) + + Passport + ERROR ALL_PLATFORMS A passport card is present/inserted. The text is only used in DiagnosisView. + Reisepass + governikus::CertificateDescriptionModel Service provider + LABEL ALL_PLATFORMS Diensteanbieter Certificate issuer + LABEL ALL_PLATFORMS Aussteller des Berechtigungszertifikats Name, address and mail address of the service provider + LABEL ALL_PLATFORMS Name, Adresse und E-Mail vom Diensteanbieter Purpose + LABEL ALL_PLATFORMS Zweck Indication of the bodies responsible for the service provider, that verify the compliance with data security regulations - Angabe der für den Dienstanbieter zuständigen Datenschutzaufsicht + LABEL ALL_PLATFORMS + Angabe der für den Diensteanbieter zuständigen Datenschutzaufsicht Service provider information - Dienstanbieterinformationen + LABEL ALL_PLATFORMS + Diensteanbieterinformationen Validity + LABEL ALL_PLATFORMS Gültigkeit @@ -3484,21 +5236,9 @@ klicken. governikus::DiagnosisModel - - Operating system - Betriebssystem - Card reader - Kartenlesegerät - - - PC/SC - PC/SC - - - Firewall - Firewall + Kartenleser Time of diagnosis @@ -3526,7 +5266,7 @@ klicken. Basic card reader - Basis-Kartenlesegerät + Basis-Kartenleser Standard / comfort card reader @@ -3542,7 +5282,7 @@ klicken. Retry counter: %1 - Fehlbedienungszähler: %1 + Verbleibende Versuche: %1 Components @@ -3560,10 +5300,6 @@ klicken. d. MMMM yyyy, hh:mm:ss AP d. MMMM yyyy, HH:mm:ss 'Uhr' - - Diagnosis data - Diagnosedaten - Hardware address: %1 Hardwareadresse: %1 @@ -3572,22 +5308,10 @@ klicken. No Antivirus information available on this platform. Keine Antivirus-Informationen auf dieser Platform verfügbar. - - No devices paired - Keine gekoppelten Geräte - dd.MM.yyyy, hh:mm:ss dd.MM.yyyy, hh:mm:ss - - No information found for this certificate - Keine Informationen für dieses Zertifikat verfügbar - - - Proxy - Proxy - Hostname: %1 Hostname: %1 @@ -3616,10 +5340,6 @@ klicken. Connection test with proxy: Failed Proxy-Verbindungstest: Fehlgeschlagen - - No Proxy Found - Kein Proxy gefunden - Connection test without proxy: Successful Verbindungstest ohne Proxy: Erfolgreich @@ -3681,8 +5401,127 @@ klicken. Eingehende AusweisApp2-Regel - Windows Firewall profiles - Windows-Firewall-Profile + Certificate fingerprint: %1 + Zertifikats-Fingerabdruck: %1 + + + Last connection: %1 + Zuletzt verbunden: %1 + + + <Not set> + <Nicht gesetzt> + + + No IP addresses assigned + Keine IP-Adressen zugewiesen + + + Warning: The current firewall status can be obscured by additional Group Policies on your system, often set by system administrators. + Warnung: Der aktuelle Firewallstatus kann durch zusätzliche Gruppenregeln, die oftmals von Administratoren gesetzt werden, auf Ihrem System verschleiert sein. + + + An error occurred while trying to gather firewall information. Please check the log for more information. + Beim Sammeln von Firewallinformationen ist ein Fehler aufgetreten. Bitte konsultieren Sie das Protokoll für weitere Informationen. + + + No Antivirus software detected. + Es konnte keine Antivirus-Software erkannt werden. + + + Third party firewalls cannot be detected on Windows 7. + Firewalls von Drittherstellern können auf Windows 7 nicht erkannt werden. + + + PC/SC information + PC/SC Informationen + + + Paired remote devices + Gekoppelte Netzwerkgeräte + + + Antivirus information + Antivirusinformationen + + + Firewall information + Firewallinformationen + + + Failed to retrieve date & time + Datum & Uhrzeit konnten nicht ermittelt werden + + + IPv4 address: %1 + IPv4-Adresse: %1 + + + IPv6 address: %1 + IPv6-Adresse: %1 + + + Unknown address: %1 + Unbekannte Adresse: %1 + + + Interface: "%1" + Schnittstelle: %1 + + + No proxy found + Kein Proxy erkannt + + + Proxy information + Proxyinformationen + + + Windows firewall profiles + Windows Firewall-Profile + + + No devices paired. + Keine Geräte gekoppelt. + + + No information found for this certificate. + Für dieses Zertifikat konnten keine Informationen ermittelt werden. + + + Connected Card reader + Verbundene Kartenleser + + + No supported reader found. + Keine unterstützten Leser erkannt. + + + Network + Netzwerk + + + Antivirus and firewall + Antivirus und Firewall + + + + governikus::DiagnosisTreeModel + + Diagnosis data + Diagnosedaten + + + Operating system + Betriebssystem + + + Card reader + Kartenleser + + + PC/SC + PC/SC Paired devices @@ -3700,22 +5539,106 @@ klicken. Installed antivirus software Installierte Antivirus-Software + + Firewall + Firewall + + + Time of diagnosis + Diagnosezeitpunkt + + + Diagnosis is running... + Diagnose läuft... + + + No Antivirus information available on this platform. + Keine Antivirus-Informationen auf dieser Platform verfügbar. + + + No Firewall information available on this platform. + Auf dieser Platform sind keine Firewallinformationen verfügbar. + + + Vendor: %1 + Hersteller: %1 + + + Version: %1 + Version: %1 + + + File path: %1 + Dateipfad: %1 + Not recognised Nicht erkannt + + Basic card reader + Basis-Kartenleser + + + Standard / comfort card reader + Standard- / Komfortleser + + + Type: %1 + Typ: %1 + + + Card: %1 + Karte: %1 + + + Retry counter: %1 + Verbleibende Versuche: %1 + + + Components + Komponenten + + + Driver + Treiber + + + No devices paired + Keine gekoppelten Geräte + Certificate fingerprint: %1 Zertifikats-Fingerabdruck: %1 + + dd.MM.yyyy, hh:mm:ss + dd.MM.yyyy, hh:mm:ss + Last connection: %1 Zuletzt verbunden: %1 + + No information found for this certificate + Keine Informationen für dieses Zertifikat verfügbar + + + Initial diagnosis running, please wait. + Führe initiale Diagnose durch, bitte warten. + + + d. MMMM yyyy, hh:mm:ss AP + d. MMMM yyyy, HH:mm:ss 'Uhr' + <Not set> <Nicht gesetzt> + + Hardware address: %1 + Hardwareadresse: %1 + No IP addresses assigned Keine IP-Adressen zugewiesen @@ -3724,6 +5647,114 @@ klicken. IP addresses IP-Adressen + + Proxy + Proxy + + + Hostname: %1 + Hostname: %1 + + + Port: %1 + Port: %1 + + + Capabilities: %1 + Fähigkeiten: %1 + + + Ping test to proxy: Successful + Proxy-Pingtest: Erfolgreich + + + Ping test to proxy: Failed + Proxy-Pingtest: Fehlgeschlagen + + + Connection test with proxy: Successful + Proxy-Verbindungstest: Erfolgreich + + + Connection test with proxy: Failed + Proxy-Verbindungstest: Fehlgeschlagen + + + No Proxy Found + Kein Proxy gefunden + + + Connection test without proxy: Successful + Verbindungstest ohne Proxy: Erfolgreich + + + Connection test without proxy: Failed + Verbindungstest ohne Proxy: Fehlgeschlagen + + + No Antivirus software detected. + Es konnte keine Antivirus-Software erkannt werden. + + + Last updated: %1 + Zuletzt aktualisiert: %1 + + + Executable path: %1 + Anwendungspfad: %1 + + + Antivirus detection failed. + Antivirus-Erkennung fehlgeschlagen. + + + Yes + Ja + + + No + Nein + + + Third party firewalls cannot be detected on Windows 7. + Firewalls von Drittherstellern können auf Windows 7 nicht erkannt werden. + + + No third party firewalls detected + Keine Drittanbieterfirewall erkannt + + + Firewalls from third party vendors + Firewalls von Drittanbietern + + + Enabled: %1 + Aktiviert: %1 + + + Up to date: %1 + Auf dem aktuellen Stand: %1 + + + Windows firewall rules + Windows-Firewallregeln + + + Outgoing AusweisApp2 rule + Ausgehende AusweisApp2-Regel + + + Exists: %1 + Existiert: %1 + + + Incoming AusweisApp2 rule + Eingehende AusweisApp2-Regel + + + Windows Firewall profiles + Windows-Firewall-Profile + Warning: The current firewall status can be obscured by additional Group Policies on your system, often set by system administrators. Warnung: Der aktuelle Firewallstatus kann durch zusätzliche Gruppenregeln, die oftmals von Administratoren gesetzt werden, auf Ihrem System verschleiert sein. @@ -3732,115 +5763,132 @@ klicken. An error occurred while trying to gather firewall information. Please check the log for more information. Beim Sammeln von Firewallinformationen ist ein Fehler aufgetreten. Bitte konsultieren Sie das Protokoll für weitere Informationen. - - No Antivirus software detected. - Es konnte keine Antivirus-Software erkannt werden. - - - Third party firewalls cannot be detected on Windows 7. - Firewalls von Drittherstellern können auf Windows 7 nicht erkannt werden. - governikus::ECardApiResult An unexpected error has occurred during processing. + LABEL ALL_PLATFORMS Während der Verarbeitung ist ein unerwarteter Fehler aufgetreten. Use of the function by the client application is not permitted. + LABEL ALL_PLATFORMS Für die Operation fehlen die benötigten Rechte. An internal error has occurred during processing. + LABEL ALL_PLATFORMS Während der Verarbeitung ist ein interner Fehler aufgetreten. There was some problem with a provided or omitted parameter. + LABEL ALL_PLATFORMS Ein fehlerhafter Parameter wurde übermittelt. The API function is unknown. + LABEL ALL_PLATFORMS Die Schnittstellenfunktion ist unbekannt. The framework or layer has not been initialized. + LABEL ALL_PLATFORMS Die Schnittstelle ist nicht initialisiert. The active session has been terminated. + LABEL ALL_PLATFORMS Die aktuelle Sitzung wurde beendet. A Communication error occurred during processing. + LABEL ALL_PLATFORMS Während der Verarbeitung ist ein Verbindungsfehler aufgetreten. The operation was terminated as the set time was exceeded. + LABEL ALL_PLATFORMS Der Vorgang wurde wegen einer Zeitüberschreitung abgebrochen. The operation was aborted as an invalid channel handle was used. + LABEL ALL_PLATFORMS Der Vorgang wurde wegen einer ungültigen Verbindung abgebrochen. A trusted channel could not be opened. + LABEL ALL_PLATFORMS Es konnte keine sichere Verbindung hergestellt werden. The operation was aborted as an unknown protocol was used. + LABEL ALL_PLATFORMS Der Vorgang wurde wegen der Verwendung eines unbekannten Protokolls abgebrochen. The operation was aborted as an unknown cipher suite was used. + LABEL ALL_PLATFORMS Der Vorgang wurde wegen der Verwendung eines unbekannten Verschlüsselungsalgorithmus abgebrochen. The operation was aborted as an unknown web service binding was used. + LABEL ALL_PLATFORMS Der Vorgang wurde wegen der Verwendung eines unbekannten Webservice-Bindings abgebrochen. The card is missing or was removed. + LABEL ALL_PLATFORMS Es liegt keine Karte auf oder sie wurde entfernt. The new PIN and the confirmation do not match. + LABEL ALL_PLATFORMS Die neue PIN und ihre Wiederholung stimmen nicht überein. The format of the PIN is wrong. + LABEL ALL_PLATFORMS Die Zeichenanzahl der PIN ist inkorrekt. Signature certificate key generation is not possible. + LABEL ALL_PLATFORMS Die Erzeugung eines Schlüssels für das Signaturzertifikat war nicht möglich. The process was cancelled by the user. + LABEL ALL_PLATFORMS Der Benutzer hat den Vorgang abgebrochen. One or more certificate checks failed. The operation will be aborted due to security reasons. + LABEL ALL_PLATFORMS Eine oder mehrere Zertifikatsprüfungen schlugen fehl. Der Vorgang wird aus Sicherheitsgründen abgebrochen. This action cannot be performed. The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function. + LABEL ALL_PLATFORMS Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweisdokuments ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren. The authenticity of your ID card could not be verified. Please make sure that you are using a genuine ID card. Please note that test applications require the use of a test ID card. + LABEL ALL_PLATFORMS Die Echtheit Ihres Ausweisdokuments konnte nicht überprüft werden. Bitte stellen Sie sicher, dass Sie ein echtes Ausweisdokument verwenden. Bitte beachten Sie, dass Sie bei Testanwendungen einen Testausweis verwenden müssen. The age verification failed. + LABEL ALL_PLATFORMS Die Altersverifikation war nicht erfolgreich. The community verification failed. + LABEL ALL_PLATFORMS Die Wohnortverifikation war nicht erfolgreich. The ID card is invalid or disabled. + LABEL ALL_PLATFORMS Das Ausweisdokument ist ungültig oder gesperrt. @@ -3848,275 +5896,317 @@ klicken. governikus::GlobalStatus No error occurred. + ERROR ALL_PLATFORMS No actual error occured, required to provide a message for status code No_Error. Es ist kein Fehler aufgetreten. An unexpected error has occurred during processing. + ERROR ALL_PLATFORMS An unknown error from any of the subcomponents (PCSC, EcardAPI, QtNetwork, ...) occurred. Während der Verarbeitung ist ein unerwarteter Fehler aufgetreten. - The ID card has been removed. The process is aborted. - Das Ausweisdokument wurde entfernt. Der Vorgang wird abgebrochen. + The connection to the ID card has been lost. The process was aborted. + ERROR ALL_PLATFORMS The card was removed after the PACE channel was established. + Die Verbindung zum Ausweisdokument wurde unterbrochen. Der Vorgang wird abgebrochen. The authenticity of your ID card could not be confirmed. + ERROR ALL_PLATFORMS The certificates supplied by the card did not pass the authenticity check, further operation is not allowed. Die Echtheit Ihres Ausweisdokuments konnte nicht bestätigt werden. The program received an unknown message from the server. + ERROR_MASKED ALL_PLATFORMS The type of a POAS message could not be determined. Die Anwendung hat eine unbekannte Nachricht vom Server erhalten. The program received an unexpected message from the server. + ERROR_MASKED ALL_PLATFORMS The server sent a valid PAOS message but its type was unexpected. Die Anwendung hat eine nicht erwartete Nachricht vom Server erhalten. Pre-verification failed. + ERROR_MASKED ALL_PLATFORMS The certificates submitted by the server failed the authenticity check during pre-verification. Eine oder mehrere Zertifikatsprüfungen schlugen fehl. No unique AT CVC + ERROR_MASKED ALL_PLATFORMS The EAC1 request contained more than one At certificate. Kein eindeutiges AT CVC No unique DV CVC + ERROR_MASKED ALL_PLATFORMS The EAC1 request contained more than one Dv certificate. Kein eindeutiges DV CVC Authentication failed. + ERROR ALL_PLATFORMS DidAuthenticateEAC2, AA2 or the id card declined the certificates. Die Authentisierung ist fehlgeschlagen. No certificate description available. + ERROR_MASKED ALL_PLATFORMS Keine Zertifikatsbeschreibung vorhanden. No subject url available in certificate description. + ERROR_MASKED ALL_PLATFORMS Es konnte keine URL in der Zertifikatsbeschreibung gefunden werden. The certificate description does not match the certificate. + ERROR_MASKED ALL_PLATFORMS Die Zertifikatsbeschreibung passt nicht zum Zertifikat. The subject URL in the certificate description and the TCToken URL don't satisfy the same origin policy. + ERROR_MASKED ALL_PLATFORMS Die URL in der Zertifikatsbeschreibung und die TCToken-URL erfüllen die Same-Origin-Policy nicht. - - Failed to establish secure connection - Die sichere Verbindung konnte nicht aufgebaut werden - The program received an error from the server. + ERROR_MASKED ALL_PLATFORMS Die Anwendung hat einen Fehler vom Server erhalten. Received no data. + ERROR_MASKED ALL_PLATFORMS Received an empty TC token. Keine Daten erhalten. Cannot start authentication. An operation is already in progress. + ERROR ALL_PLATFORMS An ActivationHandler is requested even though an operation is currently still running. Die Authentisierung kann nicht gestartet werden. Es läuft bereits eine Operation. After three wrong entries your PIN is blocked. Please use the PIN management in this app to unblock it with the help of your PUK. + ERROR ALL_PLATFORMS The id card was blocked after three wrongfully entered PINs, the PUK is required to unlock the card. Hint to do so in the PIN management section of the app. Ihre PIN ist nach dreimaliger Fehleingabe gesperrt. Verwenden Sie die PIN-Verwaltung dieser App, um diese mit Ihrer PUK zu entsperren. Using the developer mode is only allowed in a test environment. + ERROR ALL_PLATFORMS The developer mode is enabled but a productive environment was detected. Der Entwicklermodus darf nur in einer Testumgebung verwendet werden. The service is temporarily not available. Please try again later. + ERROR ALL_PLATFORMS A server has responded with an HTTP error code 503. Der Dienst ist vorübergehend nicht verfügbar, bitte versuchen Sie es zu einem späteren Zeitpunkt erneut. Establishing a connection is taking too long. + ERROR_MASKED ALL_PLATFORMS The TCP connection to the server timed out. Der Verbindungsaufbau dauert zu lange. Establishing a connection via the proxy did not succeed. + ERROR_MASKED ALL_PLATFORMS The connection using a proxy failed, it may be misconfigured.. Der Verbindungsaufbau über den Proxy war nicht erfolgreich. It wasn't possible to connect to the server: the server sent a non-standard response. + ERROR_MASKED ALL_PLATFORMS An critical error while retrieving or parsing the TC token occurred. Die Verbindung zum Server ist fehlgeschlagen: Der Server hat eine nicht-standard Antwort gesendet. It wasn't possible to connect to the server: a secure connection could not be established. + ERROR_MASKED ALL_PLATFORMS Critical error from Qt's TLS API. Die Verbindung zum Server ist fehlgeschlagen: Es konnte keine sichere Verbindung aufgebaut werden. Application was invoked with wrong parameters. + ERROR_MASKED ALL_PLATFORMS The TC token URL could not be parsed/validated. Die Anwendung wurde mit den falschen Parametern aufgerufen. An unknown network error occurred. + ERROR_MASKED ALL_PLATFORMS Other critial network error by Qt. Ein unbekannter Netzwerkfehler ist aufgetreten. The selected card reader cannot be accessed anymore. - Das ausgewählte Kartenlesegerät kann nicht mehr angesprochen werden. - - - An error occurred while communicating with the card reader. - Bei der Kommunikation mit dem Kartenlesegerät ist ein Fehler aufgetreten. + ERROR ALL_PLATFORMS The card reader was removed after the PACE channel was established. + Der ausgewählte Kartenleser kann nicht mehr angesprochen werden. The server provided no or incomplete information. Your personal data could not be read out. + ERROR ALL_PLATFORMS The result of the self authentication could not be retrieved from the eService. Der Server lieferte keine oder nur unvollständige Informationen. Ihre persönlichen Daten konnten nicht ausgelesen werden. Error while connecting to the service provider. The SSL connection uses an unsupported key algorithm or length. + ERROR_MASKED ALL_PLATFORMS Fehler bei der Verbindung mit dem Diensteanbieter. Der Verschlüsselungsalgorithmus oder die Länge des Schlüssels der SSL-Verbindung wird nicht unterstützt. Empty redirect URL + ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined because the server sent an empty response. Leere Redirect-URL Expected redirect, got %1 + ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined due to an erroneous HTTP code. Erwartete HTTP-redirect, tatsächlich erhalten: %1 Invalid scheme: %1 + ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined because the redirect URL did not adhere to the HTTPS scheme. Ungültiges URL-Schema: %1 Malformed redirect URL: %1 + ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined because the redirect URL was invalid. Nicht wohlgeformte Redirect-URL: %1 The process was cancelled by the user. + ERROR ALL_PLATFORMS The user cancelled the authentication in either the UI or the card reader. Der Benutzer hat den Vorgang abgebrochen. The maximum time was exceeded during input process. + ERROR ALL_PLATFORMS The card reader signalled that it timed out. Bei der Eingabe wurde die maximale Zeit überschritten. Card does not exist + ERROR ALL_PLATFORMS Internal error, either PCSC, SaK or card reader could not find the id card. Karte nicht vorhanden An error occurred while communicating with the ID card. Please make sure that your ID card is placed correctly on the card reader and try again. + ERROR ALL_PLATFORMS Communication with the card failed due to the specification of the TR (Technische Richtlinie), Bei der Kommunikation mit dem Ausweisdokument ist ein Fehler aufgetreten. Bitte überprüfen Sie, dass das Ausweisdokument korrekt aufgelegt ist und versuchen Sie es erneut. A protocol error occurred. Please make sure that your ID card is placed correctly on the card reader and try again. If the problem occurs again, please contact our support at + ERROR ALL_PLATFORMS Communication with the card failed due to the specification of the TR (Technische Richtlinie). The protocol was faulty or invalid values were requested/received, Ein Protokollfehler ist aufgetreten. Bitte überprüfen Sie, dass das Ausweisdokument korrekt aufgelegt ist und versuchen Sie es erneut. Wenn das Problem wieder auftritt kontaktieren Sie bitte unseren Support unter - - https://www.ausweisapp.bund.de/en/qa/support/ - https://www.ausweisapp.bund.de/fragen-und-antworten/support/ - AusweisApp2 Support AusweisApp2 Support The given PIN is invalid. + ERROR ALL_PLATFORMS The id card declined the PIN. Die eingegebene PIN ist ungültig. The given card access number (CAN) is invalid. + ERROR ALL_PLATFORMS The id card declined the CAN. Die eingegebene Zugangsnummer (CAN) ist ungültig. The given PUK is invalid. + ERROR ALL_PLATFORMS The id card declined the PUK. Die eingegebene PUK ist ungültig. The PIN was blocked after too many unsuccessful attempts. + ERROR ALL_PLATFORMS The id card refused the PIN since the PIN feature is blocked after too many wrong attemps. Die PIN ist nach zu vielen Fehlversuchen gesperrt. The PIN is not blocked. + ERROR ALL_PLATFORMS It was attempted to unlock the id card via PUK even though it was not locked in the first place. This scenario is avoided in the UI by hiding the respective UI elements. Die PIN ist nicht gesperrt. The PUK was used ten times and is set inoperative. Please contact the competent authority that issued your ID document to unlock the PIN. + ERROR ALL_PLATFORMS The card declined the PUK since it was entered wrongfully 10 times, the local authorities have to be contacted to unlock the id card. Die eingegebene PUK wurde zehn Mal verwendet und ist außer Betrieb. Bitte kontaktieren Sie die für die Ausgabe Ihres Ausweisdokuments zuständige Behörde um Ihre PIN zu entsperren. The new PIN and the confirmation do not match. + ERROR ALL_PLATFORMS The card reader signalled that the new PIN was not confirmed correctly. Die neue PIN und ihre Wiederholung stimmen nicht überein. The length of the new PIN is not valid. + ERROR ALL_PLATFORMS The card reader declined the new PIN since its length was invalid. Die neue PIN hat eine ungültige Länge. An error occurred while connecting to a reader device. - Es ist ein Fehler während des Verbindungsaufbaus zu einem Kartenlesegerät aufgetreten. + ERROR ALL_PLATFORMS Error while connecting to a bluetooth card reader. + Es ist ein Fehler während des Verbindungsaufbaus zu einem Kartenleser aufgetreten. An error occurred while scanning for reader devices. - Es ist ein Fehler während der Suche nach einem Kartenlesegerät aufgetreten. - - - The remote reader connection was closed properly. - Die Verbindung zum entfernten Kartenlesegerät wurde ordnungsgemäß geschlossen. + ERROR ALL_PLATFORMS Error while searching for bluetooth card reader. + Es ist ein Fehler während der Suche nach einem Kartenleser aufgetreten. The remote card reader connection was not closed properly. + ERROR ALL_PLATFORMS The connection to the smartphone card reader (SaK) was lost. Die Verbindung zum Remote-Lesegerät wurde abgebrochen. - - Undefined error code occured when the remote card reader connection was closed. - Unbekannter Fehler beim Beenden der Verbindung zum Remote-Lesegerät. - Remote reader connection request contains invalid parameters. - Die Verbindungsanforderung zum entfernten Kartenlesegerät enthält einen ungültigen Parameter. - - - Empty password in extended encryption of remote reader connection request. - Die Anforderung der erweiterten Verschlüsselung mit dem entfernten Kartenlesegerät enthält ein leeres Kennwort. + ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) was invalid (missing device ID). + Die Verbindungsanforderung zum entfernten Kartenleser enthält einen ungültigen Parameter. Your remote reader version is incompatible with the local version. Please install the latest AusweisApp2 version on both your smartphone and your computer. - Die Version Ihres Smartphones als Kartenlesegerätes ist inkompatibel. Bitte aktualisieren Sie Ihre Installation. + ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) was invalid (API mismatch). + Die Version Ihres Smartphones als Kartenleser ist inkompatibel. Bitte aktualisieren Sie Ihre Installation. A timeout occurred while trying to establish a connection to a remote reader. - Bei der Verbindung zum entfernten Kartenlesegerät kam es zu einer Zeitüberschreitung. + ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) timed out. + Bei der Verbindung zum entfernten Kartenleser kam es zu einer Zeitüberschreitung. An error occurred while trying to establish a connection to a remote reader. - Bei der Verbindung zum entfernten Kartenlesegerät ist ein Fehler aufgetreten. + ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) failed due to network errors (Host not found, OS error, ...) + Bei der Verbindung zum entfernten Kartenleser ist ein Fehler aufgetreten. Remote device has rejected the connection. Please check the pairing code. + ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) was rejected by the device. Das zu koppelnde Gerät hat die Verbindung verweigert. Überprüfen Sie bitte den Kopplungscode. File not found. + ERROR ALL_PLATFORMS Download of the file failed with HTTP error code 404. Datei nicht gefunden. Cannot save file. + ERROR ALL_PLATFORMS Saving the downloaded file on the local disk failed. Speichern der Datei nicht möglich. Received data were corrupted. + ERROR ALL_PLATFORMS The downloaded file contained unsupported/invalid data. Die empfangenen Daten waren beschädigt. Hash of certificate not in certificate description (issuer: %1). This indicates a misconfiguration or manipulation of the certificate. Please check that your antivirus-software and firewalls are not interfering with SSL traffic. + ERROR ALL_PLATFORMS The TLS certificate was not folded with the Authorization Certificate, thus violating the security requirements. Might also be caused by a firewall and/or the antivirus software. Der Hashwert des Zertifikats ist nicht in der Zertifikatsbeschreibung vorhanden (Aussteller: %1). Dies deutet auf eine Fehlkonfiguration oder Manipulation des Zertifikats hin. Bitte überprüfen Sie, dass weder eine Antivirus-Software noch eine Firewall in den SSL-Verkehr eingreifen. Error while connecting to the server. The SSL certificate uses an unsupported key algorithm or length. Certificate issuer: %1 + ERROR ALL_PLATFORMS Received a TLS certificate that uses an invalid algorithm or key length. Fehler bei der Verbindung zum Server. Der Verschlüsselungsalgorithmus oder die Länge des Schlüssels im SSL-Zertifikat des Servers wird nicht unterstützt. Zertifikatsaussteller: %1 An error occurred. Please contact our %1support%2. - Es ist ein Fehler aufgetreten. Bitte kontaktieren und Sie unseren %1Support%2. + ERROR ANDROID IOS Error message which is used for "masked" errors. Generic message with link to support section of the homepage. + Ein Fehler ist aufgetreten. Bitte kontaktieren Sie unseren %1Support%2. An error occurred. Please contact our %1support%2 or feel free to send us an email. - Es ist ein Fehler aufgetreten. Bitte kontaktieren und Sie unseren %1Support%2 oder senden Sie uns eine Email. + ERROR DESKTOP Error message which is used for "masked" errors. Generic message with link to support section of the homepage. + Ein Fehler ist aufgetreten. Bitte kontaktieren Sie unseren %1Support%2 oder senden Sie uns eine E-Mail. + + + https://www.ausweisapp.bund.de/en/qa/support/ + LABEL ALL_PLATFORMS + https://www.ausweisapp.bund.de/fragen-und-antworten/support/ @@ -4127,7 +6217,7 @@ klicken. The given card access number (CAN) is not correct. You have one more try to enter the correct PIN. Please mind that you have to acknowledge this last try with your card access number (CAN). - Die eingegebene Zugangsnummer (CAN) ist nicht korrekt. Sie haben noch eine weitere Möglichkeit die korrekte PIN einzugeben. Beachten Sie, dass Sie diesen letzten Versuch mit der Zugangsnummer (CAN) bestätigen müssen. + Die eingegebene Zugangsnummer (CAN) ist nicht korrekt. Sie haben noch einen weiteren Versuch die korrekte PIN einzugeben. Beachten Sie, dass Sie diesen letzten Versuch mit der Zugangsnummer (CAN) bestätigen müssen. Wrong PUK @@ -4159,7 +6249,7 @@ klicken. The given PIN is not correct. You have one more try to enter the correct PIN. Please mind that you have to acknowledge this last try with your card access number (CAN). - Die eingegebene PIN ist nicht korrekt. Sie haben noch eine weitere Möglichkeit die korrekte PIN einzugeben. Beachten Sie, dass Sie diesen letzten Versuch mit der Zugangsnummer (CAN) bestätigen müssen. + Die eingegebene PIN ist nicht korrekt. Sie haben noch einen weiteren Versuch die korrekte PIN einzugeben. Beachten Sie, dass Sie diesen letzten Versuch mit der Zugangsnummer (CAN) bestätigen müssen. PIN blocked @@ -4171,7 +6261,15 @@ klicken. The given PIN is not correct. You have 2 remaining tries to enter the correct PIN. - Die eingegebene PIN ist nicht korrekt. Sie haben noch 2 weitere Möglichkeiten die korrekte PIN einzugeben. + Die eingegebene PIN ist nicht korrekt. Sie haben noch 2 weitere Versuche die korrekte PIN einzugeben. + + + PIN successfully unblocked + PIN erfolgreich entsperrt + + + Your ID card is unblocked. You now have three more tries to change your PIN + Ihr Ausweisdokument wurde entsperrt. Sie haben nun drei weitere Versuche um Ihre PIN zu ändern @@ -4224,6 +6322,32 @@ klicken. PDF-Dokumente + + governikus::IosReader + + Scanning process has been finished successfully. + INFO IOS The current session was stopped without errors. + Scannen erfolgreich abgeschlossen. + + + The connection to the ID card has been lost. The process was aborted. + ERROR IOS The card was removed during the communication. + Die Verbindung zum Ausweisdokument wurde unterbrochen. Der Vorgang wird abgebrochen. + + + The connection could not be established. The process was aborted. + ERROR IOS The connection to the card could not be established. + Die Verbindung zum Ausweisdokument konnte nicht hergestellt werden. Der Vorgang wird abgebrochen. + + + + governikus::IosReaderDelegate + + Please place your device on your ID card. + INFO IOS The id card may be inserted, the authentication process may be started. + Bitte platzieren Sie Ihr Gerät über Ihrem Personalausweis. + + governikus::LogFileSaveDialog @@ -4236,7 +6360,7 @@ klicken. An error occurred while saving the file: - Während des Speichervorgangs ist ein Fehler aufgetreten: + Beim Speichern der Datei ist ein Fehler aufgetreten: @@ -4274,6 +6398,7 @@ klicken. governikus::LogHandler An error occurred in log handling: %1 + LABEL ALL_PLATFORMS Es ist ein Fehler bei der Protokollverwaltung aufgetreten: %1 @@ -4281,6 +6406,7 @@ klicken. governikus::LogModel Current log + LABEL ALL_PLATFORMS Aktuelles Protokoll @@ -4289,56 +6415,76 @@ klicken. Send application log per email... + LABEL ANDROID Anwendungsprotokoll per E-Mail senden... Share application log... + LABEL ANDROID Anwendungsprotokoll teilen... support.ausweisapp2@governikus.de support.ausweisapp2@governikus.de - - Android log file - Android Protokolle - <Please describe the error> <Bitte beschreiben Sie den Fehler> + + Mobile log file + Mobile Protokolldatei + + + Could not send log! Please configure your mail client first. + Konnte das Protokoll nicht senden! Bitte konfigurieren Sie Ihr E-Mail-Programm. + + + + governikus::NotificationModel + + hh:mm:ss + HH:mm:ss + governikus::NumberModel The given PIN is not correct. You have 2 tries to enter the correct PIN. - Die eingegebene PIN ist nicht korrekt. Sie haben noch 2 weitere Möglichkeiten die korrekte PIN einzugeben. + INFO ALL_PLATFORMS The wrong PIN was entered on the first attempt. + Die eingegebene PIN ist nicht korrekt. Sie haben noch 2 weitere Versuche die korrekte PIN einzugeben. You have entered the wrong PIN twice. Prior to a third attempt, you have to enter your six-digit card access number first. You can find your card access number on the front of your ID card. + INFO ALL_PLATFORMS The wrong PIN was entered twice, the next attempt requires the CAN for additional verification. Sie haben Ihre PIN zweimal falsch eingegeben. Für einen dritten Versuch müssen Sie vorher Ihre 6-stellige Zugangsnummer eingeben. Sie finden Ihre Zugangsnummer auf der Vorderseite Ihres Ausweises. You have entered a wrong PIN three times. Your PIN is now blocked. You have to enter the PUK now for unblocking. + INFO ALL_PLATFORMS The PIN was entered wrongfully three times, the id card needs to be unlocked using the PUK. Sie haben Ihre PIN dreimal falsch eingegeben. Ihre PIN ist jetzt gesperrt. Zum Entsperren geben Sie bitte Ihre PUK ein. You have entered a wrong CAN, please try again. + INFO ALL_PLATFORMS The CAN was entered wrongfully and needs to be supplied again. Sie haben eine falsche CAN eingegeben. Bitte versuchen Sie es erneut. You have entered a wrong PUK. Please try again. + INFO ALL_PLATFORMS The PUK entered wrongfully and needs to be supplied again. Sie haben eine falsche PUK eingegeben. Bitte versuchen Sie es erneut. governikus::PdfCreator - AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Ministry of the Interior, Building and Community. - Die AusweisApp2 ist ein Produkt der Governikus GmbH & Co. KG - im Auftrag des Bundesministeriums des Innern, für Bau und Heimat. + AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Office for Information Security. + LABEL ALL_PLATFORMS + Die AusweisApp2 ist ein Produkt der Governikus GmbH & Co. KG - im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik. For further information, please see <a href='https://www.ausweisapp.bund.de/'>https://www.ausweisapp.bund.de/</a> + LABEL ALL_PLATFORMS Mehr Information finden Sie auf <a href='https://www.ausweisapp.bund.de/'>https://www.ausweisapp.bund.de/</a> @@ -4346,58 +6492,72 @@ klicken. governikus::PdfExporter Date + LABEL ALL_PLATFORMS Datum Details + LABEL ALL_PLATFORMS Details dd.MM.yyyy hh:mm AP + LABEL ALL_PLATFORMS dd.MM.yyyy HH:mm Provider: + LABEL ALL_PLATFORMS Diensteanbieter: Purpose: + LABEL ALL_PLATFORMS Zweck: Data: + LABEL ALL_PLATFORMS Daten: dd.MM.yyyy + LABEL ALL_PLATFORMS dd.MM.yyyy hh:mm AP + LABEL ALL_PLATFORMS HH:mm At %1 %2 the following data were saved: + LABEL ALL_PLATFORMS Die folgenden Daten wurden hier %1 %2 gespeichert: History + LABEL ALL_PLATFORMS Verlauf Entry + LABEL ALL_PLATFORMS Eintrag Content + LABEL ALL_PLATFORMS Inhalt At %1 %2 the following data has been read out of your ID card: + LABEL ALL_PLATFORMS Die folgenden Daten wurden hier %1 %2 aus Ihrem Ausweisdokument ausgelesen: Information + LABEL ALL_PLATFORMS Information @@ -4436,14 +6596,17 @@ klicken. governikus::ProviderModel %1 seconds free, afterwards + INFO ALL_PLATFORMS Free of charge seconds when calling the hotline. %1 Sekunde frei, danach landline costs %1; + INFO ALL_PLATFORMS Land line charges when calling the hotline. Festnetzpreis %1; mobile costs may vary. + INFO ALL_PLATFORMS Cell phone charges when calling the hotline. Mobilfunkpreise abweichen. @@ -4452,14 +6615,17 @@ klicken. %1/min + INFO ALL_PLATFORMS Unit for expenses for calling the hotline (per minute). %1/min %1/call + INFO ALL_PLATFORMS Unit for expenses for calling the hotline (per call). %1/Anruf %1 EUR + INFO ALL_PLATFORMS Currency unit for expenses for calling the hotline (Euro/Cent). %1 EUR @@ -4489,39 +6655,18 @@ klicken. governikus::ReaderDeviceDialog Reader Driver Integration - Treiber für Kartenlesegeräte + Treiber für Kartenleser governikus::ReaderDeviceWidget - online help - Is embedded in a sentence. - Online-Hilfe - - - No smartphone with enabled remote service found. See %1 for details of use. - Kein Smartphone mit aktiviertem Fernzugriff gefunden. Informationen zur Verwendung befinden sich unter %1. - - - No connected card reader found. See %1 for installation of card readers. - Es wurde kein Kartenlesegerät gefunden. Details zur Installation finden Sie in der %1. - - - Please connect suitable card reader. - Bitte schließen Sie ein geeignetes Kartenlesegerät an. + Please connect a suitable card reader. + Bitte schließen Sie einen geeigneten Kartenleser an. Select a device to display more information about it - Wählen Sie ein Kartenlesegerät aus, um mehr Informationen zu erhalten - - - hh:mm:ss AP - HH:mm:ss - - - The list of card readers was last updated at %1. - Die Liste der Kartenlesegeräte wurde zuletzt um %1 aktualisiert. + Wählen Sie einen Kartenleser aus, um mehr Informationen zu erhalten Please start pairing mode first. @@ -4536,71 +6681,115 @@ klicken. governikus::ReaderDriverModel Driver installed + LABEL ALL_PLATFORMS Treiber installiert No driver installed + LABEL ALL_PLATFORMS Treiber nicht installiert Not connected + LABEL ALL_PLATFORMS Nicht angeschlossen - Device - Gerät + Card reader + LABEL ALL_PLATFORMS + Kartenleser Status + LABEL ALL_PLATFORMS Status Card reader ready for use. - Das Kartenlesegerät kann verwendet werden. + LABEL ALL_PLATFORMS + Der Kartenleser kann verwendet werden. Please download and install the driver you can find at: %1 + INFO ALL_PLATFORMS The driver for card reader needs to be installed, the download link is provided in the message. Bitte installieren Sie den Treiber: %1 + + online help + Is embedded in a sentence. + Online-Hilfe + + + No connected card reader found. See %1 for installation of card readers. + INFO ALL_PLATFORMS No card reader was found, the message contains a link to the installation section of the manual. + Es wurde kein Kartenleser gefunden. Details zur Installation finden Sie in der %1. + + + hh:mm:ss AP + HH:mm:ss + + + The list of card readers was last updated at %1. + LABEL ALL_PLATFORMS + Die Liste der Kartenleser wurde zuletzt um %1 aktualisiert. + governikus::RemoteDeviceModel Not connected + LABEL ALL_PLATFORMS Nicht verbunden - - Paired and available - Gekoppelt und verfügbar - Paired, but unsupported + LABEL ALL_PLATFORMS Gekoppelt, aber nicht unterstützt Paired, but unavailable + LABEL ALL_PLATFORMS Gekoppelt, aber nicht verfügbar - - Unsupported version - Nicht unterstützte Version - Not paired + LABEL ALL_PLATFORMS Nicht gekoppelt Device + LABEL ALL_PLATFORMS Gerät Status + LABEL ALL_PLATFORMS Status dd.MM.yyyy hh:mm AP dd.MM.yyyy HH:mm + + Available + LABEL ALL_PLATFORMS + Verfügbar + + + Unsupported + LABEL ALL_PLATFORMS + Nicht unterstützt + + + online help + Is embedded in a sentence. + Online-Hilfe + + + No smartphone with enabled remote service found. See %1 for details of use. + INFO ALL_PLATFORMS No smartphone with enabled remote service was found on the same network. + Kein Smartphone mit aktiviertem Fernzugriff gefunden. Informationen zur Verwendung befinden sich unter %1. + governikus::RemotePinInputDialog @@ -4617,28 +6806,38 @@ klicken. governikus::RemoteServiceModel NFC is not available on your device. + INFO ALL_PLATFORMS The device does not offer NFC. NFC ist auf Ihrem Gerät nicht verfügbar. Please enable NFC to use the remote service. + INFO ALL_PLATFORMS NFC is available but not active. Bitte aktivieren Sie NFC, um den Fernzugriff zu benutzen. Please connect your WiFi to use the remote service. + INFO ALL_PLATFORMS The wifi feature is not enabled but required to use the smartphone as a card reader (SaK). Bitte verbinden Sie sich mit Ihrem WLAN, um den Fernzugriff zu benutzen. + + Please pay attention to the display on your other device "%1". + INFO ANDROID IOS The smartphone is connected as card reader (SaK) and currently processing an authentication request. The user is asked to pay attention the its screen. + Bitte beachten Sie die Anzeige auf Ihrem anderen Gerät "%1". + governikus::RemoteServiceSettings Remote Reader - Entferntes Kartenlesegeräte + LABEL ALL_PLATFORMS + Entfernter Kartenleser governikus::SelfData This data has not been stored in this chip generation. + INFO ALL_PLATFORMS The requested data is not stored on this chip's generation. Diese Datengruppe wurde in dieser Chip-Generation nicht gespeichert. @@ -4647,50 +6846,62 @@ klicken. Family name + LABEL ALL_PLATFORMS Familienname Birth name + LABEL ALL_PLATFORMS Geburtsname Given name(s) + LABEL ALL_PLATFORMS Vorname(n) Doctoral degree + LABEL ALL_PLATFORMS Doktorgrad Date of birth + LABEL ALL_PLATFORMS Geburtsdatum Place of birth + LABEL ALL_PLATFORMS Geburtsort Address + LABEL ALL_PLATFORMS Adresse Document type + LABEL ALL_PLATFORMS Dokumentenart Nationality + LABEL ALL_PLATFORMS Staatsangehörigkeit Religious / artistic name + LABEL ALL_PLATFORMS Ordens- / Künstlername Issuing country + LABEL ALL_PLATFORMS Ausstellender Staat Residence permit I + LABEL ALL_PLATFORMS Nebenbestimmungen I (nur eAT) @@ -4803,7 +7014,7 @@ klicken. Card Readers - Kartenlesegeräte + Kartenleser Almost done! @@ -4826,14 +7037,47 @@ klicken. governikus::StateChangePin You have successfully changed your PIN. + INFO ALL_PLATFORMS The pin was changed successfully. Sie haben Ihre PIN erfolgreich geändert. - governikus::StateEstablishPaceChannel + governikus::StateCheckRefreshAddress - PIN successfully unblocked - PIN erfolgreich entsperrt + Sending data to service provider + INFO ALL_PLATFORMS Status message after the communication between card and server is completed, the result is being forwarded to the provider. + Sende Daten an den Diensteanbieter + + + + governikus::StateConnectCard + + The online identification function is disabled. + Die Online-Ausweisfunktion ist deaktiviert. + + + + governikus::StateDidAuthenticateEac1 + + Service provider is being verified + INFO ALL_PLATFORMS Status message after the PIN was entered, Terminal Authentication. + Diensteanbieter wird geprüft + + + + governikus::StateDidAuthenticateEac2 + + Card is being verified + INFO ALL_PLATFORMS Status message after the PIN was entered, Card Authentication. + Karte wird geprüft + + + + governikus::StateTransmit + + Reading data + INFO ALL_PLATFORMS Status message after the PIN was entered, communication between eID server and card is running. + Daten werden gelesen @@ -4841,9 +7085,15 @@ klicken. Validity: %1 - %2 + LABEL ALL_PLATFORMS Gültigkeit: %1 - %2 + + Preparing results + INFO ALL_PLATFORMS Status message after the authentication was completed, the results are prepared for the user, mainly relevant for the self authentication since it takes some more time. + Bereite Ergebnisse auf + governikus::StepAdviseUserToRemoveCardGui @@ -4853,7 +7103,7 @@ klicken. You may now remove your ID card from the card reader. - Sie können nun Ihr Ausweisdokument vom Kartenlesegerät entfernen. + Sie können nun Ihr Ausweisdokument vom Kartenleser entfernen. @@ -4864,7 +7114,7 @@ klicken. Please observe the display of your card reader. - Bitte beachten Sie die Anzeige Ihres Kartenlesegeräts. + Bitte beachten Sie die Anzeige Ihres Kartenlesers. @@ -4879,26 +7129,6 @@ klicken. Only digits (0-9) are permitted. Es sind nur Ziffern (0-9) erlaubt. - - Card is being verified - Karte wird geprüft - - - Service provider is verified - Diensteanbieter wird geprüft - - - Reading data - Daten werden gelesen - - - Service provider is being verified - Diensteanbieter wird geprüft - - - Identify now - Jetzt ausweisen - See details under "more..." Weitere Details unter "mehr..." @@ -4933,7 +7163,7 @@ klicken. Please pay attention to the display of your card reader. - Bitte beachten Sie die Anzeige auf Ihrem Kartenlesegerät. + Bitte beachten Sie die Anzeige auf Ihrem Kartenleser. Please enter the six-digit card access number (CAN) for identification. @@ -4979,6 +7209,10 @@ klicken. PIN: PIN: + + Identify now + Jetzt ausweisen + governikus::StepChooseCardGui @@ -4996,15 +7230,15 @@ klicken. No card reader found. Please connect card reader first. - Kein Kartenlesegerät erkannt. Bitte schließen Sie ein Kartenlesegerät an. + Kein Kartenleser erkannt. Bitte schließen Sie einen Kartenleser an. If you need help or have problems with your card reader, you can consult the %1online help%2 for futher information. - Wenn Sie Hilfe benötigen oder Probleme mit Ihrem Kartenlesegerät haben, können Sie für weitere Informationen die %1Online-Hilfe%2 öffnen. + Wenn Sie Hilfe benötigen oder Probleme mit Ihrem Kartenleser haben, können Sie für weitere Informationen die %1Online-Hilfe%2 öffnen. Please choose "Settings" to install a card reader or configure your smartphone as a card reader. - Falls Sie ein Kartenlesegerät einrichten oder Ihr Smartphone für die Nutzung als Kartenlesegerät konfigurieren möchten, klicken Sie bitte auf "Einstellungen". + Falls Sie einen Kartenleser einrichten oder Ihr Smartphone für die Nutzung als Kartenleser konfigurieren möchten, klicken Sie bitte auf "Einstellungen". Extended Length is not supported. @@ -5012,11 +7246,11 @@ klicken. Your remote reader does not meet the technical requirements (Extended Length not supported). - Ihr entferntes Kartenlesegerät erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). + Ihr entfernter Kartenleser erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). At least one of your card readers does not meet the technical requirements (Extended Length not supported). Please place the ID card on a different card reader. - Mindestens eines Ihrer Kartenlesegeräte erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). Bitte platzieren Sie Ihren Ausweis auf einem anderen Kartenlesegerät. + Mindestens einer Ihrer Kartenleser erfüllt leider nicht die technischen Voraussetzungen (Extended Length wird nicht unterstützt). Bitte platzieren Sie Ihren Ausweis auf einem anderen Kartenleser. Connected to following remote readers: %1. @@ -5036,7 +7270,7 @@ klicken. Please make sure that only one card reader with an ID card on it is connected to your computer. If you have already placed an ID card on your card reader, you can consult the %1online help%2 for futher information. - Bitte stellen Sie sicher, dass an Ihrem Computer nur ein Kartenlesegerät mit aufliegendem Ausweisdokument angeschlossen ist. Sollten Sie bereits ein Ausweisdokument aufgelegt haben, können Sie für weitere Informationen die %1Online-Hilfe%2 öffnen. + Bitte stellen Sie sicher, dass an Ihrem Computer nur ein Kartenleser mit aufliegendem Ausweisdokument angeschlossen ist. Sollten Sie bereits ein Ausweisdokument aufgelegt haben, können Sie für weitere Informationen die %1Online-Hilfe%2 öffnen. Online identification function is disabled. @@ -5046,6 +7280,18 @@ klicken. This action cannot be performed. The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function. Diese Aktion kann leider nicht durchgeführt werden. Die Online-Ausweisfunktion Ihres Ausweisdokuments ist nicht aktiviert. Bitte wenden Sie sich an die Behörde, die Ihr Ausweisdokument ausgegeben hat, um die Online-Ausweisfunktion zu aktivieren. + + Retry connection + Verbindungsversuch wiederholen + + + Retry? + Erneut versuchen? + + + Weak NFC signal. Please reposition your card. + Schwacher NFC-Empfang. Bitte korrigieren Sie die Position Ihres Ausweises. + governikus::StepErrorGui @@ -5063,29 +7309,13 @@ klicken. Send email - Email versenden + E-Mail senden AusweisApp2 error report - %1 Subject from error report mail AusweisApp2 Fehlerbericht - %1 - - Please describe the error that occurred. - Bitte beschreiben Sie den aufgetretenen Fehler. - - - You may want to attach the logfile which can be saved from the error dialog. - Im Fehlerdialog können Sie eine Logdatei speichern um sie an diese Email anzuhängen. - - - Error code - Fehlercode - - - Critical errors: - Kritische Fehler: - governikus::StepShowSelfAuthenticationDataGui @@ -5094,18 +7324,56 @@ klicken. Schließen + + governikus::SurveyModel + + Vendor + Hersteller + + + Model Name + Modellname + + + Model Number + Modellnummer + + + Build Number + Versionsnummer + + + Android version + Android-Version + + + Kernel version + Kernel-Version + + + Max. NFC Packet Length + Max. NFC Paketlänge + + + AusweisApp2 Version + AusweisApp2-Version + + governikus::TrayIcon Open + LABEL DESKTOP Öffnen Exit AusweisApp2 + LABEL DESKTOP AusweisApp2 beenden AusweisApp2 was started. + LABEL DESKTOP AusweisApp2 wurde gestartet. @@ -5128,58 +7396,72 @@ klicken. governikus::WebserviceActivationContext The browser connection was lost. + ERROR ALL_PLATFORMS No HTTP connection present. Die Verbindung zum Browser ging verloren. Cannot start authentication + ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. Authentisierungsvorgang kann nicht gestartet werden An operation is already in progress. + ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. Ein Vorgang ist bereits in Arbeit. Would you like to try again? + ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. Möchten Sie es erneut versuchen? Try again + ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. Erneut versuchen 400 Bad Request + ERROR ALL_PLATFORMS HTTP error code 400, invalid request, part of an HTML error page. 400 Ungültige Anfrage 404 Not found + ERROR ALL_PLATFORMS HTTP error code 404, invalid request, part of an HTML error page. 404 Nicht gefunden Invalid request + ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page Ungültige Anfrage Your browser sent a request that couldn't be interpreted. + ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page Ihr Browser hat eine Anfrage gesendet, die nicht interpretiert werden konnte. Error message + ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page Fehlermeldung Would you like to report this error? + ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page Möchten Sie diesen Fehler melden? Report now + ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page Jetzt melden The connection to the browser was lost. No forwarding was executed. Please try to call the URL again manually: %1 + ERROR ALL_PLATFORMS The connection to the browser was lost/timed out.. Die Verbindung zum Browser ging verloren. Es konnte keine Weiterleitung durchgeführt werden. Bitte versuchen Sie die URL manuell aufzurufen: %1 https://www.ausweisapp.bund.de/en/qa/report-an-error/ + ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page https://www.ausweisapp.bund.de/fragen-und-antworten/melden-sie-einen-fehler/ @@ -5187,50 +7469,62 @@ klicken. governikus::WebserviceActivationHandler An unknown program uses the required port (%1). Please exit the other program and try again! + ERROR ALL_PLATFORMS An unknown programme is using the local port on which the AA2 listens. Eine unbekannte Anwendung verwendet den benötigten Port (%1) bereits. Bitte beenden Sie zuerst die andere Anwendung und versuchen Sie es anschließend erneut! Another program (%1) uses the required port (%2). Please exit this other program and try again! + ERROR ALL_PLATFORMS A known programme is using the local port on which the AA2 listens. Eine andere Anwendung (%1) verwendet den benötigten Port (%2) bereits. Bitte beenden Sie zuerst die andere Anwendung und versuchen Sie es anschließend erneut! 404 Not found + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. 404 Nicht gefunden Invalid request + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. Ungültige Anfrage Your browser sent a request that couldn't be interpreted. + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. Ihr Browser hat eine Anfrage gesendet, die nicht interpretiert werden konnte. Error message + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. Fehlermeldung Unknown request: %1 + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. Unbekannte Anfrage: %1 Would you like to report this error? + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. Möchten Sie diesen Fehler melden? Report now + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. Jetzt melden You tried to start a newer version (%1) of currently running application. Please stop the current version (%2) and start again! + ERROR ALL_PLATFORMS The external request to show the UI requested a newer version than the one currently installed. Sie versuchen eine neuere Version (%1) der aktuell laufenden Anwendung zu starten. Bitte beenden Sie zuerst die andere Version (%2) und versuchen Sie es anschließend erneut! You tried to start an older version (%1) of currently running application. Please open the currently running version (%2)! + ERROR ALL_PLATFORMS The external request to show the UI requested an older version than the one currently installed. Sie versuchen eine ältere Version (%1) der aktuell laufenden Anwendung zu starten. Bitte öffnen Sie die aktuell laufende Version (%2)! https://www.ausweisapp.bund.de/en/qa/report-an-error/ + ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. https://www.ausweisapp.bund.de/fragen-und-antworten/melden-sie-einen-fehler/ @@ -5253,6 +7547,14 @@ klicken. Sie können sich auch später ausweisen, indem Sie erneut auf die Internetseite des Diensteanbieters gehen. + + governikus::WorkflowModel + + AusweisApp2 error report - %1 + Subject from error report mail + AusweisApp2 Fehlerbericht - %1 + + governikus::WorkflowQtWidget @@ -5275,7 +7577,68 @@ klicken. main To close the app, quickly press the back button twice. + INFO ANDROID IOS Hint that is shown if the users pressed the "back" button on the top-most navigation level for the first time (a second press closes the app). Um die Anwendung zu schließen, drücken Sie zweimal schnell die Zurück-Taste. + + Text files + LABEL DESKTOP_QML + Textdateien + + + Another application uses %1 + INFO DESKTOP_QML The AA2 is currently remote controlled via the SDK interface, concurrent usage of the AA2 is not possible. + Eine andere Anwendung verwendet %1 + + + The user interface of the %1 is closed. + INFO DESKTOP_QML Header of the popup that is shown when the AA2 is closed for the first time. + Die Benutzeroberfläche der %1 wird geschlossen. + + + The program remains available via the icon in the system tray. Click on the %1 icon to reopen the user interface. + INFO DESKTOP_QML Content of the popup that is shown when the AA2 is closed for the first time. + Das Programm steht weiterhin im Infobereich zur Verfügung. Klicken Sie auf das Symbol der %1, um die Anwendung wieder zu öffnen. + + + Do not show this dialog again. + LABEL DESKTOP_QML + Diesen Hinweis nicht mehr anzeigen. + + + Unsupported version of %1. + INFO DESKTOP_QML Message that the update data is invalid and can't be used. + Nicht unterstützte Version von %1. + + + An update is available (Version: %1). + INFO DESKTOP_QML An update was found which matches the current platform, the new version number is shown in the message. + Eine Aktualisierung ist verfügbar (Version: %1). + + + Download + INFO DESKTOP_QML An update was found. This is the caption of the download button, clicking it opens the link in the browser. + Download + + + Release notes + INFO DESKTOP_QML An update was found. This is the caption of the release note button, clicking it opens the note in the browser. + Aktualisierungshinweise + + + Current version %1 is up to date. + INFO DESKTOP_QML The AA2 is up-to-date, this message is only shown if the update check is started by the user and not via the auto-update functionality. + Version %1 ist aktuell. + + + Developer Mode: Enabled! + LABEL DESKTOP_QML + Entwicklermodus: Aktiviert! + + + Disable + LABEL DESKTOP_QML Global button to disable developer mode. + Deaktivieren + diff --git a/resources/travis/setup.sh b/resources/travis/setup.sh index a34f10f..80a1901 100644 --- a/resources/travis/setup.sh +++ b/resources/travis/setup.sh @@ -5,8 +5,8 @@ set -eu readonly CLONE_DIR="${CLONE_DIR:-$(pwd)}" -MINIROOTFS_VERSION="3.9.0" -MINIROOTFS_SHA="f82efed1a80c9af86c38bed10f3541c5588453b97684d767a5a3b0f3fa0e3f09" +MINIROOTFS_VERSION="3.10.0" +MINIROOTFS_SHA="ec3da7fb5f709a1ce912e6e31fccc5588420c5f1dcecc362c72c989532c1917a" MINIROOTFS="alpine-minirootfs-${MINIROOTFS_VERSION}-x86_64.tar.gz" MINIROOTFS_URI="http://dl-cdn.alpinelinux.org/alpine/v${MINIROOTFS_VERSION%.*}/releases/x86_64/$MINIROOTFS" diff --git a/resources/updatable-files/supported-providers.json b/resources/updatable-files/supported-providers.json index 4abfac8..bc967da 100644 --- a/resources/updatable-files/supported-providers.json +++ b/resources/updatable-files/supported-providers.json @@ -274,13 +274,13 @@ "exclude": ["ios"], "shortName": {"" : "BAföG Online Nordrhein-Westfalen"}, "longDescription": {"": "In Nordrhein-Westfalen können Sie mit der Online-Ausweisfunktion Ihren Antrag auf BAföG für eine Ausbildung (Schulausbildung, Studium in Nordrhein-Westfalen sowie Studium in Belgien, den Niederlanden oder Luxemburg) oder Ihren Antrag auf Aufstiegsfortbildungsförderung (z. B. für die Meisterausbildung) in Nordrhein-Westfalen bequem und schnell im Internet stellen.
    Ihr Antrag muss dann nicht mehr ausgedruckt, unterschrieben und versandt werden, sondern gilt mit der Übermittlung Ihrer Daten als wirksam gestellt. Beizufügende und nachzureichende Unterlagen sowie Bescheinigungen können Sie über die Upload-Funktion ebenfalls elektronisch übermitteln.
    Nach Übermittlung der Daten wird Ihnen der Antrag als PDF-Dokument zum Download angeboten. Der Bescheid wird Ihnen per Post zugestellt."}, - "address": "https://www.bafoeg-online.nrw.de", - "homepage": "https://www.bafoeg-online.nrw.de", - "phone": "+49 385-588 7145", - "email": "m.boehm@bm.mv-regierung.de", - "postalAddress": "Ministerium für Bildung, Wissenschaft und Kultur Mecklenburg-Vorpommern
    Abteilung 1
    Referat 140
    Werderstraße 124
    19055 Schwerin", + "address": "https://www.bafoeg-online.nrw.de/bafoeg/StartNutzung.html", + "homepage": "https://www.bafoeg-online.nrw.de/bafoeg/StartNutzung.html", + "phone": "+49 211 896-04", + "email": " poststelle@miwf.nrw.de", + "postalAddress": "Ministerium für Innovation, Wissenschaft und Forschung des Landes Nordrhein-Westfalen
    Besucher- und Lieferanschrift
    Völklinger Straße 49
    40221 Düsseldorf", "category": "citizen", - "subjectUrls": [] + "subjectUrls": ["https://www.bafoeg-online.nrw.de/bafoeg"] }, { "exclude": ["ios"], @@ -380,7 +380,6 @@ "subjectUrls": [] }, { - "exclude": ["ios"], "shortName": {"" : "Bürgerportal Baden-Württemberg"}, "longDescription": {"": "Das Bürgerportal ,mein service-bw' bietet Bürgerinnen und Bürgern mit dem Personalausweis praktische Anwendungen für die Online-Ausweisfunktion. Das Portal bietet seinen Nutzern unter anderem:
    - sicheres Registrieren und Anmelden, um Behördengänge im Internet zu erledigen
    - verschlüsselte Ablage persönlicher Daten und Dateien in einem Datenspeicher im Internet, dem sogenannten Dokumentensafe
    - orts- und zeitunabhängiger Zugang zu den Daten im Dokumentensafe sowie die Möglichkeit, diese elektronisch an Behörden weiterzuleiten (z. B. für eine Gewerbeanmeldung)."}, "address": "https://service-bw.de/zfinder-bw-web/welcome.do?showMsbwDetails=1", @@ -573,7 +572,6 @@ "subjectUrls": ["https://easy-login.vdg-portal.de"] }, { - "exclude": ["ios"], "shortName": {"" : "ELSTER"}, "longName": {"" : "ELSTER - Die elektronische Steuererklärung"}, "shortDescription": {"": "Abwicklung der Steuererklärungen und -anmeldungen über das Internet."}, @@ -629,15 +627,18 @@ { "exclude": ["ios"], "shortName": {"" : "Hamburg Service Online-Bürgerdienste"}, - "longDescription": {"": "Über das Portal ,HamburgService' finden Sie auf einen Blick alle Online-Dienste der Freien und Hansestadt Hamburg. Für die Dienste, die mit sensiblen Daten arbeiten (Dienste der Sicherheitsstufe 2), müssen Sie sich nach der Registrierung einmalig identifizieren. Sie können dazu die Online-Ausweisfunktion Ihres Personalausweises nutzen. Eine persönliche Identifizierung in einem Kundenzentrum der Stadt Hamburg ist dann nicht mehr nötig."}, - "address": "https://gateway.hamburg.de/HamburgGateway/FVP/Application/Index.aspx", - "homepage": "https://www.hamburg.de/", - "phone": "", + "longName": {"" : "Hamburg Service Online-Bürgerdienste"}, + "shortDescription": {"": "Digitales Dienstleistungsangebot der Freien und Hansestadt Hamburg (FHH)"}, + "longDescription": {"": "Digitales Dienstleistungsangebot der Freien und Hansestadt Hamburg (FHH)"}, + "address": "https://servicekonto.serviceportal.hamburg.de/Servicekonto/Registration/SelectServicekontotype/ShowMenu/", + "homepage": "https://serviceportal.hamburg.de", + "phone": "+49 40 42823-2420", "email": "dataporthamburggateway-service@dataport.de", - "postalAddress": "Bürgermeister Olaf Scholz
    Rathausmarkt 1
    20095 Hamburg", + "postalAddress": "Freie und Hansestadt Hamburg
    Erster Bürgermeister Dr. Peter Tschentscher Rathausmarkt 1
    20095 Hamburg", "category": "citizen", - "tcTokenUrlInfo" : "TcToken URL requires valid dynamic request id.", - "subjectUrls": ["https://gateway.hamburg.de"] + "tcTokenUrl": "https://idp.servicekonto.serviceportal.hamburg.de", + "subjectUrls": ["https://idp.servicekonto.serviceportal.hamburg.de"], + "icon": "hamburg_serviceportal_icon.png" }, { "exclude": ["ios"], @@ -747,6 +748,8 @@ "phone": "+49 421 204 95-0", "email": "kontakt@governikus.com", "postalAddress": "Governikus GmbH & Co. KG
    Hochschulring 4
    28359 Bremen", + "image": "openpgp_image.jpg", + "icon": "openpgp_icon.svg", "category": "other", "tcTokenUrl" : "https://pgp.governikus.de/pgp/ausweis-app-2", "subjectUrls": ["https://pgp.governikus-eid.de"] @@ -754,13 +757,13 @@ { "shortName": {"" : "Selbstauskunft - „Meine Daten einsehen“"}, "longDescription": {"": "Die AusweisApp2 verfügt über die Funktion \"Meine Daten einsehen\". Mit dieser Funktion können die auf dem Personalausweis bzw. dem elektronischen Aufenthaltstitel gespeicherten Daten ausgelesen und angezeigt werden. Hierbei sprechen wir auch von einer sogenannten Selbstauskunft.

    Sobald Sie die AusweisApp2 gestartet und ein geeigneter Kartenleser installiert bzw. ein Android-Smartphone verbunden haben, können Sie diese Funktion unter dem Menüpunkt \"Ausweisen\" aufrufen. (Auf Mobilgeräten finden Sie die Ausweis-Auskunft übrigens auch direkt auf der Startseite sowie im Menüeintrag „Ausweisen“.)

    Nach Ihrer PIN-Eingabe und erfolgreicher Datenübertragung werden die Daten in der AusweisApp2 dargestellt.

    Bei der Selbstauskunft handelt es sich um einen reinen Demonstrationsdienst. Die ausgelesenen Daten werden lediglich zur Anzeige gebracht und nicht weitergegeben.

    Bitte beachten Sie, dass Sie auch für diesen Vorgang eine Internetverbindung benötigen. Dies hat folgenden Hintergrund: Der Zugriff auf die Daten des Personalausweises bzw. des elektronischen Aufenthaltstitels ist nur möglich, wenn derjenige, der auf die Daten zugreifen möchte sich selbst zunächst eindeutig identifiziert. Dies geschieht über das sog. Berechtigungszertifikat. Es wird Ihnen immer angezeigt, wer auf Ihre Daten zugreifen möchte. Die Erlaubnis, ein Berechtigungszertifikat zu erhalten, wird einen Diensteanbieter auf Antrag und nach Prüfung bei der Vergabestelle für Berechtigungszertifikate beim Bundesverwaltungsamt erteilt. Um das technische Berechtigungszertifikat anzuzeigen und darüber hinaus eine Gültigkeitsprüfung des Ausweisdokuments durchführen zu können, ist eine Internetverbindung zwingend erforderlich. Aus diesem Grund spricht man auch von der Online-Ausweisfunktion."}, - "address": "https://www.ausweisapp.bund.de/ausweisapp2/ausprobieren-meine-daten-einsehen/", + "address": "https://www.ausweisapp.bund.de/online-ausweisen/meine-daten-auslesen/", "homepage": "https://www.ausweisapp.bund.de/", "phone": "+49 421 - 204 95 995", "email": "support@ausweisapp.de", - "postalAddress": "Governikus GmbH & Co. KG
    - im Auftrag des Bundesministeriums des Innern, für Bau und Heimat -
    Hochschulring 4
    D-28359 Bremen", - "image": "Selbstauskunft.jpg", - "icon": "npa.svg", + "postalAddress": "Governikus GmbH & Co. KG
    - im Auftrag des Bundesamtes für Sicherheit in der Informationstechnik -
    Hochschulring 4
    D-28359 Bremen", + "image": "selbstauskunft_image.jpg", + "icon": "selbstauskunft_icon.svg", "category": "citizen", "tcTokenUrlInfo" : "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml", "subjectUrls": ["https://www.autentapp.de"] diff --git a/resources/updatable-files/supported-readers.json b/resources/updatable-files/supported-readers.json index 8e09444..a8688d3 100644 --- a/resources/updatable-files/supported-readers.json +++ b/resources/updatable-files/supported-readers.json @@ -238,7 +238,7 @@ { "Platforms": [{"os": "win"}], "DE": "Der Kartenleser funktioniert nur mit der SCL011-nPA-version. Nach der Installation ist ein Neustart erforderlich.", - "EN": "The cardreader works only with the SCL011-nPA-version. A reboot is required after the installation of the driver." + "EN": "The card reader works only with the SCL011-nPA-version. A reboot is required after the installation of the driver." }, { "Platforms": [{"os": "mac"}], @@ -498,11 +498,6 @@ "DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber. Falls Sie jedoch den Treiber von der Webseite des Herstellers installieren möchten, ist anschließend ein Neustart erforderlich.", "EN": "The card reader operates with the driver automatically installed by the system. In case you prefer to install the driver from the manufacturer's webseite, a reboot is required." }, - { - "Platforms":[{"os": "mac", "max": "10.11"}], - "DE": "Der Kartenleser funktioniert nicht mit dem installierten CCID Treiber des Systems. Es existiert kein Treiber vom Hersteller.", - "EN": "The card reader is not compatible with the installed CCID driver of the operating system. The manufacturer does not provide a driver." - }, { "Platforms":[{"os": "mac", "min": "10.12"}], "DE": "Der Kartenleser funktioniert mit dem systemseitig installierten Treiber.", @@ -543,7 +538,7 @@ "VendorId": "0x076B", "ProductId": "0x5421", "Name": "OMNIKEY 5421", - "Pattern": "OMNIKEY CardMan 5x21-CL 0|OMNIKEY CardMan \\(076B:5421\\) 5421(\\(1\\)|\\(2\\))", + "Pattern": "OMNIKEY CardMan 5x21-CL 0|OMNIKEY Smart Card Reader USB 0|OMNIKEY CardMan \\(076B:5421\\) 5421(\\(1\\)|\\(2\\))", "Icon": "img_HID_Omnikey_542x.png", "IconWithNPA": "img_HID_Omnikey_542x_mit_ausweis.png", "Drivers": @@ -645,11 +640,15 @@ [ { "Platforms": [{"os": "win"}], - "URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=8f07753f37854fc0cc47261953990e04&sysparm_article=KB0016422" + "URL": "https://supportportal.gemalto.com/csm/?id=kb_article_view&sysparm_article=KB0016422" }, { "Platforms": [{"os": "mac"}], - "URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=43a9b1f337c54fc0cc47261953990e8c&sysparm_article=KB0016424" + "URL": "https://supportportal.gemalto.com/csm/?id=kb_article_view&sysparm_article=KB0016424" + }, + { + "Platforms": [{"os": "unknown"}], + "URL": "https://supportportal.gemalto.com/csm/?id=kb_article_view&sysparm_article=KB0016423" } ], "Information": @@ -666,18 +665,22 @@ "VendorId": "0x08E6", "ProductId": "0x5503", "Name": "Prox-DU HID", - "Pattern": "Gemalto Prox(-DU| Dual)( Contactless_| USB PC Link(Reader| Reader)(\\(2\\)|\\(1\\)))", + "Pattern": "Gemalto .*Prox(-DU| Dual)( Contactless_| USB PC Link(Reader| Reader)(\\(2\\)|\\(1\\)))", "Icon": "img_Gemalto_Prox_DU.png", "IconWithNPA": "img_Gemalto_Prox_DU_mit_ausweis.png", "Drivers": [ { "Platforms": [{"os": "win"}], - "URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=8f07753f37854fc0cc47261953990e04&sysparm_article=KB0016422" + "URL": "https://supportportal.gemalto.com/csm/?id=kb_article_view&sysparm_article=KB0016422" }, { "Platforms": [{"os": "mac"}], - "URL": "https://supportportal.gemalto.com/csm?id=kb_article_view&sys_kb_id=43a9b1f337c54fc0cc47261953990e8c&sysparm_article=KB0016424" + "URL": "https://supportportal.gemalto.com/csm/?id=kb_article_view&sysparm_article=KB0016424" + }, + { + "Platforms": [{"os": "unknown"}], + "URL": "https://supportportal.gemalto.com/csm/?id=kb_article_view&sysparm_article=KB0016423" } ], "Information": @@ -758,7 +761,7 @@ "Drivers": [ { - "Platforms": [{"os": "win"}, {"os": "unknown"}], + "Platforms": [{"os": "unknown"}], "URL": "https://cherry.de/download/de/download.php" } ], @@ -774,7 +777,8 @@ "DE": "Es ist kein Treiber vom Hersteller vorhanden.", "EN": "There is no driver from the manufacturer." } - ] + ], + "Internal information": "Unter Windows funktioniert nur NFC A. Reader wird nicht als unterstützt markiert, da er nicht zertifiziert ist." }, { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fcb7696..67d2377 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -84,9 +84,9 @@ IF(IOS) LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/qml) LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/packaging/ios/de.lproj) + LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/packaging/ios/launchscreen.storyboard) LIST(APPEND IOS_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/translations) LIST(APPEND IOS_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/config.json) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/qtlogging.ini) # Attention: the file names correspond to values in the Info.plist IF(BUILD_PREVIEW) @@ -99,20 +99,6 @@ IF(IOS) LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/appIcons/${IOS_APPICON_PATH}Images.xcassets) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/Default-568h@2x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage568@2x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage568@3x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage667@2x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage667@3x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage736@2x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage736@3x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1024@2x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1024@3x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1112@2x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1112@3x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1366@2x.png) - LIST(APPEND IOS_RESOURCES ${RESOURCES_DIR}/images/iOS/launchImages/launchImage1366@3x.png) - LIST(APPEND IOS_RESOURCES ${RCC}) SET_SOURCE_FILES_PROPERTIES(${RCC} PROPERTIES GENERATED TRUE) ENDIF() @@ -140,15 +126,14 @@ SET_TARGET_PROPERTIES(AusweisApp PROPERTIES MACOSX_BUNDLE_COPYRIGHT "${COPYRIGHT IF(IOS) TARGET_LINK_LIBRARIES(AusweisApp OpenSSL::SSL) # remove this if iOS uses shared libraries - TARGET_LINK_LIBRARIES(AusweisApp -L${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks) TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/plugins/platforms) TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/plugins/imageformats) TARGET_LINK_LIBRARIES(AusweisApp -L${QT_HOST_PREFIX}/lib) TARGET_LINK_LIBRARIES(AusweisApp -lQt5Network -lQt5Gui -lQt5Core -lQt5Bluetooth -lQt5Svg -lQt5Quick -lQt5Qml -lQt5QuickTemplates2 -lQt5QuickControls2) TARGET_LINK_LIBRARIES(AusweisApp -lqtpcre2 -lqtlibpng -lQt5GraphicsSupport -lQt5FontDatabaseSupport -lQt5ClipboardSupport -lqios -lqsvg -lqjpeg -lqtfreetype) - TARGET_LINK_LIBRARIES(AusweisApp "-lc++ -lz -lm -u _qt_registerPlatformPlugin") - TARGET_LINK_LIBRARIES(AusweisApp ${IOS_ASSETSLIBRARY} ${IOS_UIKIT} ${IOS_COREBLUETOOTH} ${IOS_COREFOUNDATION} ${IOS_OPENGLES} ${IOS_FOUNDATION} ${IOS_QUARTZCORE} ${IOS_CORETEXT} ${IOS_COREGRAPHICS} ${IOS_SECURITY} ${IOS_SYSTEMCONFIGURATION} ${IOS_MOBILECORESERVICES} ${IOS_AUDIOTOOLBOX} ${IOS_IMAGEIO}) + TARGET_LINK_LIBRARIES(AusweisApp "-lc++ -lz -lm") + TARGET_LINK_LIBRARIES(AusweisApp ${IOS_ASSETSLIBRARY} ${IOS_UIKIT} ${IOS_COREBLUETOOTH} ${IOS_COREFOUNDATION} ${IOS_OPENGLES} ${IOS_FOUNDATION} ${IOS_QUARTZCORE} ${IOS_CORETEXT} ${IOS_COREGRAPHICS} ${IOS_SECURITY} ${IOS_SYSTEMCONFIGURATION} ${IOS_MOBILECORESERVICES} ${IOS_AUDIOTOOLBOX} ${IOS_IMAGEIO} ${IOS_CORENFC} ${IOS_MESSAGEUI} ${IOS_STOREKIT}) TARGET_LINK_LIBRARIES(AusweisApp -Wl,-e,_qt_main_wrapper) @@ -172,10 +157,9 @@ IF(IOS) SET_TARGET_PROPERTIES(AusweisApp PROPERTIES RESOURCE "${IOS_RESOURCES}") SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon") - SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_ARCHS "arm64") SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") - SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "10.0") - SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_ENABLE_BITCODE "NO") + SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${PACKAGING_DIR}/ios/AusweisApp2.entitlements") + IF(USE_DISTRIBUTION_PROFILE) SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_PROVISIONING_PROFILE_SPECIFIER "iOS Release (Distribution)") SET_TARGET_PROPERTIES(AusweisApp PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Distribution: Governikus GmbH & Co. KG (G7EQCJU4BR)") @@ -209,6 +193,10 @@ IF(ANDROID) ENDIF() ENDIF() +IF(IOS) + TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCardIos) +ENDIF() + IF((ANDROID AND NOT ANDROID_BUILD_AAR) OR IOS) TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCardBluetooth) ELSEIF(LINUX) @@ -231,7 +219,7 @@ ENDIF() IF(DESKTOP) TARGET_LINK_LIBRARIES(AusweisApp AusweisAppCardPcsc AusweisAppCardDrivers AusweisAppActivationWebservice) - TARGET_LINK_LIBRARIES(AusweisApp AusweisAppUiWidget AusweisAppUiCli) + TARGET_LINK_LIBRARIES(AusweisApp AusweisAppUiWidget) ENDIF() TARGET_LINK_LIBRARIES(AusweisApp AusweisAppUiWebsocket) diff --git a/src/CommandLineParser.cpp b/src/CommandLineParser.cpp index 880261f..fa7a4b3 100644 --- a/src/CommandLineParser.cpp +++ b/src/CommandLineParser.cpp @@ -66,7 +66,7 @@ void CommandLineParser::addOptions() void CommandLineParser::parse(QCoreApplication* pApp) { - if (!pApp) + if (pApp == nullptr) { return; } diff --git a/src/activation/customscheme/CustomSchemeActivationContext.h b/src/activation/customscheme/CustomSchemeActivationContext.h index 1c487ad..299129c 100644 --- a/src/activation/customscheme/CustomSchemeActivationContext.h +++ b/src/activation/customscheme/CustomSchemeActivationContext.h @@ -19,7 +19,7 @@ class CustomSchemeActivationContext QUrl mRedirectAddress; public: - CustomSchemeActivationContext(const QUrl& pActivationUrl); + explicit CustomSchemeActivationContext(const QUrl& pActivationUrl); virtual ~CustomSchemeActivationContext() override; QUrl getActivationURL() const override; diff --git a/src/activation/intent/IntentActivationContext.cpp b/src/activation/intent/IntentActivationContext.cpp index d10c2e2..75935a5 100644 --- a/src/activation/intent/IntentActivationContext.cpp +++ b/src/activation/intent/IntentActivationContext.cpp @@ -13,9 +13,10 @@ using namespace governikus; -IntentActivationContext::IntentActivationContext(const QUrl& pActivationUrl) +IntentActivationContext::IntentActivationContext(const QUrl& pActivationUrl, const QString& pReferrer) : ActivationContext() , mActivationUrl(pActivationUrl) + , mReferrer(pReferrer) , mRedirectAddress() { } diff --git a/src/activation/intent/IntentActivationContext.h b/src/activation/intent/IntentActivationContext.h index 298f96a..5faf2ed 100644 --- a/src/activation/intent/IntentActivationContext.h +++ b/src/activation/intent/IntentActivationContext.h @@ -19,10 +19,11 @@ class IntentActivationContext Q_OBJECT const QUrl mActivationUrl; + const QString mReferrer; QUrl mRedirectAddress; public: - IntentActivationContext(const QUrl& pActivationUrl); + explicit IntentActivationContext(const QUrl& pActivationUrl, const QString& pReferrer); virtual ~IntentActivationContext() override; QUrl getActivationURL() const override; diff --git a/src/activation/intent/IntentActivationHandler.cpp b/src/activation/intent/IntentActivationHandler.cpp index 4c83183..d587a8c 100644 --- a/src/activation/intent/IntentActivationHandler.cpp +++ b/src/activation/intent/IntentActivationHandler.cpp @@ -18,11 +18,11 @@ using namespace governikus; Q_DECLARE_LOGGING_CATEGORY(activation) -void IntentActivationHandler::onIntent(const QUrl& pUrl) +void IntentActivationHandler::onIntent(const QUrl& pUrl, const QString& pReferrer) { - qCDebug(activation) << "Got new authentication request"; + qCDebug(activation) << "Got new authentication request by:" << pReferrer; qCDebug(activation) << "Request URL:" << pUrl; - const auto& context = QSharedPointer::create(pUrl); + const auto& context = QSharedPointer::create(pUrl, pReferrer); connect(context.data(), &IntentActivationContext::fireShowUserInformation, this, &ActivationHandler::fireShowUserInformation); Q_EMIT fireAuthenticationRequest(context); } @@ -50,9 +50,10 @@ void IntentActivationHandler::onApplicationActivated() { #ifdef Q_OS_ANDROID const QString& intent = QAndroidJniObject::callStaticObjectMethod("com/governikus/ausweisapp2/MainActivity", "fetchStoredIntent").toString(); + const QString& referrer = QAndroidJniObject::callStaticObjectMethod("com/governikus/ausweisapp2/MainActivity", "fetchStoredReferrer").toString(); if (!intent.isNull()) { - onIntent(intent); + onIntent(intent, referrer); } #endif } diff --git a/src/activation/intent/IntentActivationHandler.h b/src/activation/intent/IntentActivationHandler.h index 3db1d28..1691eac 100644 --- a/src/activation/intent/IntentActivationHandler.h +++ b/src/activation/intent/IntentActivationHandler.h @@ -22,7 +22,7 @@ class IntentActivationHandler Q_INTERFACES(governikus::ActivationHandler) private: - void onIntent(const QUrl& pUrl); + void onIntent(const QUrl& pUrl, const QString& pReferrer); public: IntentActivationHandler() = default; diff --git a/src/activation/intent/MainActivity.java b/src/activation/intent/MainActivity.java index 401d819..b58232f 100644 --- a/src/activation/intent/MainActivity.java +++ b/src/activation/intent/MainActivity.java @@ -4,18 +4,25 @@ package com.governikus.ausweisapp2; +import android.accessibilityservice.AccessibilityServiceInfo; import android.app.Activity; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; -import android.content.res.Configuration; +import android.content.pm.PackageManager; +import android.graphics.Color; +import android.net.Uri; import android.nfc.NfcAdapter; import android.nfc.tech.IsoDep; +import android.os.Build; import android.os.Bundle; import android.util.Log; +import android.view.accessibility.AccessibilityManager; +import android.view.Window; import android.view.WindowManager; +import java.util.List; import org.qtproject.qt5.android.bindings.QtActivity; @@ -24,6 +31,7 @@ public class MainActivity extends QtActivity private static final String LOG_TAG = AusweisApp2Service.LOG_TAG; private static Intent cIntent; + private static Uri cReferrer; private static boolean cStartedByAuth; private NfcForegroundDispatcher mNfcForegroundDispatcher; @@ -55,7 +63,7 @@ public class MainActivity extends QtActivity void enable() { - if (mAdapter != null) + if (mAdapter != null && mActivity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) { mAdapter.enableForegroundDispatch(mActivity, mPendingIntent, mFilters, mTechLists); } @@ -64,7 +72,7 @@ public class MainActivity extends QtActivity void disable() { - if (mAdapter != null) + if (mAdapter != null && mActivity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) { mAdapter.disableForegroundDispatch(mActivity); } @@ -89,6 +97,24 @@ public class MainActivity extends QtActivity } + // required by IntentActivationHandler -> MainActivityAccessor + public static String fetchStoredReferrer() + { + if (cReferrer == null) + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) // API 22 + { + Log.e(LOG_TAG, "No stored referrer available, returning null"); + } + return null; + } + + String ref = cReferrer.toString(); + cReferrer = null; + return ref; + } + + public static boolean isStartedByAuth() { return cStartedByAuth; @@ -98,27 +124,41 @@ public class MainActivity extends QtActivity @Override public void onCreate(Bundle savedInstanceState) { - Log.d(LOG_TAG, "onCreate (initial invocation of application): " + getIntent()); + Log.d(LOG_TAG, "onCreate: " + getIntent()); super.onCreate(savedInstanceState); - cIntent = getIntent(); - cStartedByAuth = "android.intent.action.VIEW".equals(cIntent.getAction()); + + // Make statusbar transparent + Window window = getWindow(); + window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + window.setStatusBarColor(Color.TRANSPARENT); + + onNewIntent(getIntent()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) // API 22 + { + cReferrer = getReferrer(); + } // register the broadcast receiver after loading the C++ library in super.onCreate() AndroidBluetoothReceiver.register(this); mNfcForegroundDispatcher = new NfcForegroundDispatcher(this); - setRequestedOrientation(isTablet() ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + setRequestedOrientation(isTablet() ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } @Override protected void onNewIntent(Intent newIntent) { - Log.d(LOG_TAG, "onNewIntent (subsequent invocation of application): " + newIntent); + Log.d(LOG_TAG, "onNewIntent: " + newIntent); super.onNewIntent(newIntent); cIntent = newIntent; cStartedByAuth = "android.intent.action.VIEW".equals(cIntent.getAction()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) // API 22 + { + cReferrer = getReferrer(); + } } @@ -168,11 +208,40 @@ public class MainActivity extends QtActivity public boolean isTablet() { final Context context = getBaseContext(); - final int screenLayout = context.getResources().getConfiguration().screenLayout; - final boolean xlarge = (screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE; - final boolean large = (screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE; + // https://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali + return context.getResources().getConfiguration().smallestScreenWidthDp >= 600; + } - return xlarge || large; + + public boolean isScreenReaderRunning() + { + AccessibilityManager accessibilityManager = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE); + List services = accessibilityManager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN); + return !services.isEmpty(); + } + + + public int getStatusBarHeight() + { + return getDimension("status_bar_height"); + } + + + public int getNavigationBarHeight() + { + return getDimension("navigation_bar_height"); + } + + + private int getDimension(String dimensionName) + { + int result = 0; + int resourceId = getResources().getIdentifier(dimensionName, "dimen", "android"); + if (resourceId > 0) + { + result = getResources().getDimensionPixelSize(resourceId); + } + return result; } diff --git a/src/activation/internal/InternalActivationContext.h b/src/activation/internal/InternalActivationContext.h index 63dafb6..b0c7bb9 100644 --- a/src/activation/internal/InternalActivationContext.h +++ b/src/activation/internal/InternalActivationContext.h @@ -18,7 +18,7 @@ class InternalActivationContext const QUrl mTcTokenUrl; public: - InternalActivationContext(const QUrl& pUrl); + explicit InternalActivationContext(const QUrl& pUrl); virtual ~InternalActivationContext() override = default; QUrl getActivationURL() const override; diff --git a/src/activation/webservice/Template.h b/src/activation/webservice/Template.h index 4d575ff..5901390 100644 --- a/src/activation/webservice/Template.h +++ b/src/activation/webservice/Template.h @@ -31,7 +31,7 @@ class Template /*! * \brief Construct the template \a pTemplate */ - Template(const QString& pTemplate); + explicit Template(const QString& pTemplate); /*! * \brief Get template context keys, i.e. the possible keys diff --git a/src/activation/webservice/WebserviceActivationContext.cpp b/src/activation/webservice/WebserviceActivationContext.cpp index b055193..2571c26 100644 --- a/src/activation/webservice/WebserviceActivationContext.cpp +++ b/src/activation/webservice/WebserviceActivationContext.cpp @@ -41,6 +41,7 @@ bool WebserviceActivationContext::sendProcessing() { if (!mRequest->isConnected()) { + //: ERROR ALL_PLATFORMS No HTTP connection present. mSendError = tr("The browser connection was lost."); return false; } @@ -54,16 +55,22 @@ bool WebserviceActivationContext::sendOperationAlreadyActive() { if (!mRequest->isConnected()) { + //: ERROR ALL_PLATFORMS No HTTP connection present. mSendError = tr("The browser connection was lost."); return false; } Template htmlTemplate = Template::fromFile(QStringLiteral(":/html_templates/alreadyactive.html")); + //: ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("TITLE"), tr("Cannot start authentication")); + //: ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("MESSAGE_HEADER"), tr("Cannot start authentication")); + //: ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("MESSAGE_HEADER_EXPLANATION"), tr("An operation is already in progress.")); + //: ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("CONTENT_HEADER"), tr("Would you like to try again?")); htmlTemplate.setContextParameter(QStringLiteral("CONTENT_LINK"), mRequest->getUrl().toString()); + //: ERROR ALL_PLATFORMS A new authentication request was received while the previous one was still running. Part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("CONTENT_BUTTON"), tr("Try again")); QByteArray htmlPage = htmlTemplate.render().toUtf8(); @@ -79,6 +86,7 @@ bool WebserviceActivationContext::sendErrorPage(http_status pStatusCode, const G { if (!mRequest->isConnected()) { + //: ERROR ALL_PLATFORMS No HTTP connection present. mSendError = tr("The browser connection was lost."); return false; } @@ -88,21 +96,29 @@ bool WebserviceActivationContext::sendErrorPage(http_status pStatusCode, const G QString statusCodeString; if (pStatusCode == HTTP_STATUS_BAD_REQUEST) { + //: ERROR ALL_PLATFORMS HTTP error code 400, invalid request, part of an HTML error page. statusCodeString = tr("400 Bad Request"); } else if (pStatusCode == HTTP_STATUS_NOT_FOUND) { + //: ERROR ALL_PLATFORMS HTTP error code 404, invalid request, part of an HTML error page. statusCodeString = tr("404 Not found"); } Template htmlTemplate = Template::fromFile(QStringLiteral(":/html_templates/error.html")); htmlTemplate.setContextParameter(QStringLiteral("TITLE"), statusCodeString); + //: ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page htmlTemplate.setContextParameter(QStringLiteral("MESSAGE_HEADER"), tr("Invalid request")); + //: ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page htmlTemplate.setContextParameter(QStringLiteral("MESSAGE_HEADER_EXPLANATION"), tr("Your browser sent a request that couldn't be interpreted.")); + //: ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page htmlTemplate.setContextParameter(QStringLiteral("ERROR_MESSAGE_LABEL"), tr("Error message")); htmlTemplate.setContextParameter(QStringLiteral("ERROR_MESSAGE"), pStatus.toErrorDescription(true)); + //: ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page htmlTemplate.setContextParameter(QStringLiteral("REPORT_HEADER"), tr("Would you like to report this error?")); + //: ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page htmlTemplate.setContextParameter(QStringLiteral("REPORT_LINK"), tr("https://www.ausweisapp.bund.de/en/qa/report-an-error/")); + //: ERROR ALL_PLATFORMS Invalid request by the browser, part of an HTML error page htmlTemplate.setContextParameter(QStringLiteral("REPORT_BUTTON"), tr("Report now")); QByteArray htmlPage = htmlTemplate.render().toUtf8(); @@ -123,6 +139,7 @@ bool WebserviceActivationContext::sendRedirect(const QUrl& pRedirectAddress, con if (!mRequest->isConnected()) { const auto& url = QStringLiteral("%2").arg(redirectAddressWithResult.toString(), redirectAddressWithResult.host()); + //: ERROR ALL_PLATFORMS The connection to the browser was lost/timed out.. mSendError = tr("The connection to the browser was lost. No forwarding was executed. Please try to call the URL again manually: %1").arg(url); return false; } diff --git a/src/activation/webservice/WebserviceActivationContext.h b/src/activation/webservice/WebserviceActivationContext.h index ed80848..168e315 100644 --- a/src/activation/webservice/WebserviceActivationContext.h +++ b/src/activation/webservice/WebserviceActivationContext.h @@ -9,7 +9,6 @@ #include -class test_WebserviceActivationContext; namespace governikus { @@ -18,14 +17,13 @@ class WebserviceActivationContext : public ActivationContext { Q_OBJECT - friend class ::test_WebserviceActivationContext; const QSharedPointer mRequest; void setCommonHeaders(HttpResponse& pResponse); public: - WebserviceActivationContext(const QSharedPointer& pRequest); + explicit WebserviceActivationContext(const QSharedPointer& pRequest); virtual ~WebserviceActivationContext() override = default; diff --git a/src/activation/webservice/WebserviceActivationHandler.cpp b/src/activation/webservice/WebserviceActivationHandler.cpp index 897dfb9..cc2a730 100644 --- a/src/activation/webservice/WebserviceActivationHandler.cpp +++ b/src/activation/webservice/WebserviceActivationHandler.cpp @@ -64,8 +64,13 @@ bool WebserviceActivationHandler::start() { qCCritical(activation) << "Cannot start application. Port on localhost is already bound by another program:" << serverAppName; - QString msg = serverAppName.isEmpty() ? tr("An unknown program uses the required port (%1). Please exit the other program and try again!").arg(port) : - tr("Another program (%1) uses the required port (%2). Please exit this other program and try again!").arg(serverAppName).arg(port); + //: ERROR ALL_PLATFORMS An unknown programme is using the local port on which the AA2 listens. + QString msg = tr("An unknown program uses the required port (%1). Please exit the other program and try again!").arg(port); + if (!serverAppName.isEmpty()) + { + //: ERROR ALL_PLATFORMS A known programme is using the local port on which the AA2 listens. + msg = tr("Another program (%1) uses the required port (%2). Please exit this other program and try again!").arg(serverAppName).arg(port); + } Q_EMIT fireShowUserInformation(msg); } @@ -116,13 +121,21 @@ void WebserviceActivationHandler::onNewRequest(const QSharedPointer qCWarning(activation) << "Request type: unknown"; Template htmlTemplate = Template::fromFile(QStringLiteral(":/html_templates/error.html")); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("TITLE"), tr("404 Not found")); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("MESSAGE_HEADER"), tr("Invalid request")); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("MESSAGE_HEADER_EXPLANATION"), tr("Your browser sent a request that couldn't be interpreted.")); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("ERROR_MESSAGE_LABEL"), tr("Error message")); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("ERROR_MESSAGE"), tr("Unknown request: %1").arg(url.toString())); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("REPORT_HEADER"), tr("Would you like to report this error?")); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("REPORT_LINK"), tr("https://www.ausweisapp.bund.de/en/qa/report-an-error/")); + //: ERROR ALL_PLATFORMS The broweser sent an unknown or faulty request, part of an HTML error page. htmlTemplate.setContextParameter(QStringLiteral("REPORT_BUTTON"), tr("Report now")); QByteArray htmlPage = htmlTemplate.render().toUtf8(); @@ -146,12 +159,14 @@ void WebserviceActivationHandler::handleShowUiRequest(UiModule pUiModule, const if (callerVersion > VersionNumber::getApplicationVersion()) { qCWarning(activation) << "Current version is lower than caller version"; + //: ERROR ALL_PLATFORMS The external request to show the UI requested a newer version than the one currently installed. Q_EMIT fireShowUserInformation(tr("You tried to start a newer version (%1) of currently running application. Please stop the current version (%2) and start again!").arg(version, QCoreApplication::applicationVersion())); return; } else if (callerVersion < VersionNumber::getApplicationVersion()) { qCWarning(activation) << "Current version is higher than caller version"; + //: ERROR ALL_PLATFORMS The external request to show the UI requested an older version than the one currently installed. Q_EMIT fireShowUserInformation(tr("You tried to start an older version (%1) of currently running application. Please open the currently running version (%2)!").arg(version, QCoreApplication::applicationVersion())); return; } diff --git a/src/card/CMakeLists.txt b/src/card/CMakeLists.txt index 1ba6fb9..c23e30c 100644 --- a/src/card/CMakeLists.txt +++ b/src/card/CMakeLists.txt @@ -19,6 +19,10 @@ IF(TARGET Qt5::Nfc) ADD_SUBDIRECTORY(nfc) ENDIF() +IF(IOS) + ADD_SUBDIRECTORY(ios) +ENDIF() + IF(TARGET Qt5::Bluetooth) ADD_SUBDIRECTORY(bluetooth) ENDIF() diff --git a/src/card/base/Apdu.cpp b/src/card/base/Apdu.cpp index 358f27f..fa45ed4 100644 --- a/src/card/base/Apdu.cpp +++ b/src/card/base/Apdu.cpp @@ -22,6 +22,12 @@ int Apdu::length() const } +bool Apdu::isEmpty() const +{ + return mBuffer.isEmpty(); +} + + const QByteArray& Apdu::getBuffer() const { return mBuffer; diff --git a/src/card/base/Apdu.h b/src/card/base/Apdu.h index a5787ad..60dad01 100644 --- a/src/card/base/Apdu.h +++ b/src/card/base/Apdu.h @@ -14,12 +14,13 @@ class Apdu protected: QByteArray mBuffer; - Apdu(const QByteArray& pBuffer); + explicit Apdu(const QByteArray& pBuffer); ~Apdu() = default; public: const QByteArray& getBuffer() const; int length() const; + bool isEmpty() const; }; diff --git a/src/card/base/Card.cpp b/src/card/base/Card.cpp index 1a12ec2..97b21a8 100644 --- a/src/card/base/Card.cpp +++ b/src/card/base/Card.cpp @@ -16,13 +16,18 @@ Card::Card() } -CardReturnCode Card::establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds) +void Card::setProgressMessage(const QString& pMessage) { - Q_UNUSED(pPasswordId); - Q_UNUSED(pChat); - Q_UNUSED(pCertificateDescription); - Q_UNUSED(pChannelOutput); - Q_UNUSED(pTimeoutSeconds); + Q_UNUSED(pMessage); +} + + +EstablishPaceChannelOutput Card::establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, quint8 pTimeoutSeconds) +{ + Q_UNUSED(pPasswordId) + Q_UNUSED(pChat) + Q_UNUSED(pCertificateDescription) + Q_UNUSED(pTimeoutSeconds) qCWarning(card) << "Establishment of PACE channel not supported"; return CardReturnCode::COMMAND_FAILED; } @@ -37,8 +42,8 @@ CardReturnCode Card::destroyPaceChannel() CardReturnCode Card::setEidPin(quint8 pTimeoutSeconds, ResponseApdu& pResponseApdu) { - Q_UNUSED(pTimeoutSeconds); - Q_UNUSED(pResponseApdu); + Q_UNUSED(pTimeoutSeconds) + Q_UNUSED(pResponseApdu) qCWarning(card) << "Setting eID PIN is not supported"; return CardReturnCode::COMMAND_FAILED; diff --git a/src/card/base/Card.h b/src/card/base/Card.h index 95b4bdb..2d6675e 100644 --- a/src/card/base/Card.h +++ b/src/card/base/Card.h @@ -8,7 +8,6 @@ #include "CardReturnCode.h" #include "CommandApdu.h" -#include "Commands.h" #include "EstablishPaceChannelOutput.h" #include "ResponseApdu.h" #include "SmartCardDefinitions.h" @@ -44,6 +43,12 @@ class Card */ virtual bool isConnected() = 0; + /*! + * Sets the current workflow progress message. This is necessary for platforms like iOS, + * where interacting with a card leads to a dialog where the message needs to be updated. + */ + virtual void setProgressMessage(const QString& pMessage); + /*! * Performs a transmit to the smart card. * The command APDU buffer is transmitted to the card. @@ -54,7 +59,7 @@ class Card /*! * Establishes a PACE channel, i.e. the corresponding reader is no basic reader. */ - virtual CardReturnCode establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds = 60); + virtual EstablishPaceChannelOutput establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, quint8 pTimeoutSeconds = 60); /*! * Destroys an existing PACE channel, i.e. the corresponding reader is no basic reader. diff --git a/src/card/base/CardConnection.cpp b/src/card/base/CardConnection.cpp index eb8706b..253ed1c 100644 --- a/src/card/base/CardConnection.cpp +++ b/src/card/base/CardConnection.cpp @@ -48,6 +48,14 @@ bool CardConnection::getPacePinSuccessful() const } +void CardConnection::setProgressMessage(const QString& pMessage) +{ + QMetaObject::invokeMethod(mCardConnectionWorker.data(), [ = ] { + mCardConnectionWorker->setProgressMessage(pMessage); + }, Qt::QueuedConnection); +} + + bool CardConnection::stopSecureMessaging() { bool result; diff --git a/src/card/base/CardConnection.h b/src/card/base/CardConnection.h index 7bc8dd8..6eebc9e 100644 --- a/src/card/base/CardConnection.h +++ b/src/card/base/CardConnection.h @@ -11,7 +11,6 @@ #include "asn1/CVCertificateChain.h" #include "command/BaseCardCommand.h" #include "CardConnectionWorker.h" -#include "Commands.h" #include "InputAPDUInfo.h" #include "ReaderInfo.h" #include "SmartCardDefinitions.h" @@ -28,11 +27,8 @@ #include -class test_WorkflowContext; -class test_SelfAuthModel; class test_CardConnection; -class test_StateEstablishPaceChannel; - +class test_StatePreparePace; namespace governikus { @@ -44,10 +40,7 @@ class CardConnection : public QObject { private: - friend class ::test_WorkflowContext; - friend class ::test_SelfAuthModel; friend class ::test_CardConnection; - friend class ::test_StateEstablishPaceChannel; Q_OBJECT @@ -87,7 +80,7 @@ class CardConnection } else { - qCritical() << "Cannot invoke card command:" << pCommand->metaObject()->className(); + qCCritical(card) << "Cannot invoke card command:" << pCommand->metaObject()->className(); pCommand->deleteLater(); } @@ -102,7 +95,7 @@ class CardConnection CardConnection(); public: - CardConnection(const QSharedPointer& pCardConnectionWorker); + explicit CardConnection(const QSharedPointer& pCardConnectionWorker); /*! * Destroys the CardConnection and disconnects from the card. @@ -120,6 +113,7 @@ class CardConnection bool getPaceCanSuccessful() const; bool getPacePinSuccessful() const; + void setProgressMessage(const QString& pMessage); bool stopSecureMessaging(); template diff --git a/src/card/base/CardConnectionWorker.cpp b/src/card/base/CardConnectionWorker.cpp index 2e98041..09f09a2 100644 --- a/src/card/base/CardConnectionWorker.cpp +++ b/src/card/base/CardConnectionWorker.cpp @@ -3,7 +3,12 @@ */ #include "CardConnectionWorker.h" + +#include "MSEBuilder.h" #include "pace/PaceHandler.h" +#include "ReadBinaryBuilder.h" +#include "ResetRetryCounterBuilder.h" +#include "SelectBuilder.h" #include @@ -26,9 +31,10 @@ CardConnectionWorker::CardConnectionWorker(Reader* pReader) CardConnectionWorker::~CardConnectionWorker() { - if (hasCard() && mReader->getCard()->isConnected()) + const auto card = mReader ? mReader->getCard() : nullptr; + if (card && card->isConnected()) { - mReader->getCard()->disconnect(); + card->disconnect(); } } @@ -51,12 +57,6 @@ void CardConnectionWorker::setPukInoperative() } -bool CardConnectionWorker::hasCard() const -{ - return !mReader.isNull() && mReader->getCard() != nullptr; -} - - QSharedPointer CardConnectionWorker::getEfCardAccess() const { return getReaderInfo().getCardInfo().getEfCardAccess(); @@ -72,7 +72,8 @@ void CardConnectionWorker::onReaderInfoChanged(const QString& pReaderName) CardReturnCode CardConnectionWorker::transmit(const CommandApdu& pCommandApdu, ResponseApdu& pResponseApdu) { - if (!hasCard()) + const auto card = mReader ? mReader->getCard() : nullptr; + if (!card) { return CardReturnCode::CARD_NOT_FOUND; } @@ -88,15 +89,19 @@ CardReturnCode CardConnectionWorker::transmit(const CommandApdu& pCommandApdu, R } ResponseApdu securedResponseApdu; - returnCode = mReader->getCard()->transmit(securedCommandApdu, securedResponseApdu); - if (!mSecureMessaging->decrypt(securedResponseApdu, pResponseApdu)) + returnCode = card->transmit(securedCommandApdu, securedResponseApdu); + pResponseApdu = mSecureMessaging->decrypt(securedResponseApdu); + if (pResponseApdu.isEmpty()) { + qCDebug(::card) << "Stopping Secure Messaging since it failed. The channel therefore must no be re-used."; + stopSecureMessaging(); + return CardReturnCode::COMMAND_FAILED; } } else { - returnCode = mReader->getCard()->transmit(pCommandApdu, pResponseApdu); + returnCode = card->transmit(pCommandApdu, pResponseApdu); } return returnCode; @@ -105,7 +110,7 @@ CardReturnCode CardConnectionWorker::transmit(const CommandApdu& pCommandApdu, R CardReturnCode CardConnectionWorker::readFile(const FileRef& pFileRef, QByteArray& pFileContent) { - if (!hasCard()) + if (!mReader || !mReader->getCard()) { return CardReturnCode::CARD_NOT_FOUND; } @@ -144,6 +149,16 @@ CardReturnCode CardConnectionWorker::readFile(const FileRef& pFileRef, QByteArra } +void CardConnectionWorker::setProgressMessage(const QString& pMessage) +{ + const auto card = mReader ? mReader->getCard() : nullptr; + if (card) + { + card->setProgressMessage(pMessage); + } +} + + bool CardConnectionWorker::stopSecureMessaging() { if (mSecureMessaging.isNull()) @@ -156,26 +171,25 @@ bool CardConnectionWorker::stopSecureMessaging() } -CardReturnCode CardConnectionWorker::establishPaceChannel(PacePasswordId pPasswordId, - const QString& pPasswordValue, - EstablishPaceChannelOutput& pChannelOutput) +EstablishPaceChannelOutput CardConnectionWorker::establishPaceChannel(PacePasswordId pPasswordId, + const QString& pPasswordValue) { - return establishPaceChannel(pPasswordId, pPasswordValue, nullptr, nullptr, pChannelOutput); + return establishPaceChannel(pPasswordId, pPasswordValue, nullptr, nullptr); } -CardReturnCode CardConnectionWorker::establishPaceChannel(PacePasswordId pPasswordId, +EstablishPaceChannelOutput CardConnectionWorker::establishPaceChannel(PacePasswordId pPasswordId, const QString& pPasswordValue, const QByteArray& pChat, - const QByteArray& pCertificateDescription, - EstablishPaceChannelOutput& pChannelOutput) + const QByteArray& pCertificateDescription) { - if (!hasCard()) + const auto card = mReader ? mReader->getCard() : nullptr; + if (!card) { - pChannelOutput.setPaceReturnCode(CardReturnCode::CARD_NOT_FOUND); return CardReturnCode::CARD_NOT_FOUND; } - CardReturnCode returnCode; + + EstablishPaceChannelOutput output; qCInfo(support) << "Starting PACE for" << pPasswordId; if (mReader->getReaderInfo().isBasicReader()) @@ -183,35 +197,35 @@ CardReturnCode CardConnectionWorker::establishPaceChannel(PacePasswordId pPasswo Q_ASSERT(!pPasswordValue.isEmpty()); PaceHandler paceHandler(sharedFromThis()); paceHandler.setChat(pChat); - returnCode = paceHandler.establishPaceChannel(pPasswordId, pPasswordValue); - pChannelOutput.setPaceReturnCode(returnCode); - pChannelOutput.setStatusMseSetAt(paceHandler.getStatusMseSetAt()); + const auto returnCode = paceHandler.establishPaceChannel(pPasswordId, pPasswordValue); + output.setPaceReturnCode(returnCode); + output.setStatusMseSetAt(paceHandler.getStatusMseSetAt()); if (returnCode == CardReturnCode::OK) { - pChannelOutput.setCarCurr(paceHandler.getCarCurr()); - pChannelOutput.setCarPrev(paceHandler.getCarPrev()); - pChannelOutput.setIdIcc(paceHandler.getIdIcc()); - pChannelOutput.setEfCardAccess(getEfCardAccess()->getContentBytes()); - pChannelOutput.setPaceReturnCode(CardReturnCode::OK); + output.setCarCurr(paceHandler.getCarCurr()); + output.setCarPrev(paceHandler.getCarPrev()); + output.setIdIcc(paceHandler.getIdIcc()); + output.setEfCardAccess(getEfCardAccess()->getContentBytes()); + output.setPaceReturnCode(CardReturnCode::OK); mSecureMessaging.reset(new SecureMessaging(paceHandler.getPaceProtocol(), paceHandler.getEncryptionKey(), paceHandler.getMacKey())); } } else { Q_ASSERT(pPasswordValue.isNull()); - returnCode = mReader->getCard()->establishPaceChannel(pPasswordId, pChat, pCertificateDescription, pChannelOutput); - pChannelOutput.setPaceReturnCode(returnCode); + output = card->establishPaceChannel(pPasswordId, pChat, pCertificateDescription); } - qCInfo(support) << "Finished PACE for" << pPasswordId << "with result" << returnCode; - return returnCode; + qCInfo(support) << "Finished PACE for" << pPasswordId << "with result" << output.getPaceReturnCode(); + return output; } CardReturnCode CardConnectionWorker::destroyPaceChannel() { - if (!hasCard()) + const auto card = mReader ? mReader->getCard() : nullptr; + if (!card) { return CardReturnCode::CARD_NOT_FOUND; } @@ -222,20 +236,21 @@ CardReturnCode CardConnectionWorker::destroyPaceChannel() stopSecureMessaging(); MSEBuilder builder(MSEBuilder::P1::ERASE, MSEBuilder::P2::DEFAULT_CHANNEL); ResponseApdu response; - CardReturnCode cardReturnCode = mReader->getCard()->transmit(builder.build(), response); - qCDebug(card) << "Destroying PACE channel with invalid command causing 6700 as return code"; + CardReturnCode cardReturnCode = card->transmit(builder.build(), response); + qCDebug(::card) << "Destroying PACE channel with invalid command causing 6700 as return code"; return cardReturnCode; } else { - return mReader->getCard()->destroyPaceChannel(); + return card->destroyPaceChannel(); } } CardReturnCode CardConnectionWorker::setEidPin(const QString& pNewPin, quint8 pTimeoutSeconds, ResponseApdu& pResponseApdu) { - if (!hasCard()) + const auto card = mReader ? mReader->getCard() : nullptr; + if (!card) { return CardReturnCode::CARD_NOT_FOUND; } @@ -246,7 +261,7 @@ CardReturnCode CardConnectionWorker::setEidPin(const QString& pNewPin, quint8 pT ResetRetryCounterBuilder commandBuilder(pNewPin.toUtf8()); if (transmit(commandBuilder.build(), pResponseApdu) != CardReturnCode::OK || pResponseApdu.getReturnCode() != StatusCode::SUCCESS) { - qCWarning(card) << "Modify PIN failed"; + qCWarning(::card) << "Modify PIN failed"; return CardReturnCode::COMMAND_FAILED; } return CardReturnCode::OK; @@ -254,14 +269,14 @@ CardReturnCode CardConnectionWorker::setEidPin(const QString& pNewPin, quint8 pT else { Q_ASSERT(pNewPin.isEmpty()); - return mReader->getCard()->setEidPin(pTimeoutSeconds, pResponseApdu); + return card->setEidPin(pTimeoutSeconds, pResponseApdu); } } CardReturnCode CardConnectionWorker::updateRetryCounter() { - if (!hasCard()) + if (!mReader || !mReader->getCard()) { return CardReturnCode::CARD_NOT_FOUND; } diff --git a/src/card/base/CardConnectionWorker.h b/src/card/base/CardConnectionWorker.h index 9a7e527..945d269 100644 --- a/src/card/base/CardConnectionWorker.h +++ b/src/card/base/CardConnectionWorker.h @@ -9,7 +9,6 @@ #include "asn1/SecurityInfos.h" #include "CardReturnCode.h" #include "CommandApdu.h" -#include "Commands.h" #include "EstablishPaceChannel.h" #include "FileRef.h" #include "pace/SecureMessaging.h" @@ -42,7 +41,6 @@ class CardConnectionWorker */ QScopedPointer mSecureMessaging; - bool hasCard() const; inline QSharedPointer getEfCardAccess() const; private Q_SLOTS: @@ -53,7 +51,7 @@ class CardConnectionWorker * The Card hold by the Reader is expected to be connected. * The connection is closed, when the CardConnection is destroyed. */ - CardConnectionWorker(Reader* pReader); + explicit CardConnectionWorker(Reader* pReader); /*! * Destroys the CardConnection and disconnects from the card. @@ -78,26 +76,30 @@ class CardConnectionWorker * If the Reader is a basic reader and the PACE channel is successfully established, the subsequent transmits will be secured using, secure messaging. * I. e., a secure messaging channel is established. */ - virtual CardReturnCode establishPaceChannel(PacePasswordId pPasswordId, - const QString& pPasswordValue, - EstablishPaceChannelOutput& pChannelOutput); + virtual EstablishPaceChannelOutput establishPaceChannel(PacePasswordId pPasswordId, + const QString& pPasswordValue); /*! * Performs PACE and establishes a PACE channel for later terminal authentication. * If the Reader is a basic reader and the PACE channel is successfully established, the subsequent transmits will be secured using, secure messaging. * I. e., a secure messaging channel is established. */ - virtual CardReturnCode establishPaceChannel(PacePasswordId pPasswordId, + virtual EstablishPaceChannelOutput establishPaceChannel(PacePasswordId pPasswordId, const QString& pPasswordValue, const QByteArray& pChat, - const QByteArray& pCertificateDescription, - EstablishPaceChannelOutput& pChannelOutput); + const QByteArray& pCertificateDescription); /*! * Destroys a previously established PACE channel. */ virtual CardReturnCode destroyPaceChannel(); + /*! + * Sets the current workflow progress message. This is necessary for platforms like iOS, + * where interacting with a card leads to a dialog where the message needs to be updated. + */ + virtual void setProgressMessage(const QString& pMessage); + /*! * Destroys an established secure messaging channel, if there is one. */ diff --git a/src/card/base/CardInfo.cpp b/src/card/base/CardInfo.cpp index c7ffe62..4a13cb4 100644 --- a/src/card/base/CardInfo.cpp +++ b/src/card/base/CardInfo.cpp @@ -9,6 +9,7 @@ #include "asn1/PaceInfo.h" #include "asn1/SecurityInfos.h" #include "CardConnectionWorker.h" +#include "SelectBuilder.h" #include #include @@ -39,16 +40,24 @@ QString CardInfo::getCardTypeString() const switch (mCardType) { case CardType::NONE: + //: ERROR ALL_PLATFORMS No card is present/inserted. The text is only used in DiagnosisView. return tr("not inserted", "Karte"); case CardType::UNKNOWN: + //: ERROR ALL_PLATFORMS An unknown card is present/inserted. The text is only used in DiagnosisView. return tr("unknown type", "Karte"); + case CardType::PASSPORT: + //: ERROR ALL_PLATFORMS A passport card is present/inserted. The text is only used in DiagnosisView. + return tr("Passport"); + case CardType::EID_CARD: + //: ERROR ALL_PLATFORMS An id card is present/inserted. The text is only used in DiagnosisView. return tr("ID card (PA/eAT)"); } Q_UNREACHABLE(); + return QString(); } @@ -64,15 +73,15 @@ bool CardInfo::isEid() const } -QSharedPointer CardInfo::getEfCardAccess() const +bool CardInfo::isPassport() const { - return mEfCardAccess; + return mCardType == CardType::PASSPORT; } -QString CardInfo::getEidApplicationPath() const +QSharedPointer CardInfo::getEfCardAccess() const { - return mCardType == CardType::EID_CARD ? QStringLiteral("e80704007f00070302") : QString(); + return mEfCardAccess; } @@ -102,35 +111,36 @@ bool CardInfo::isPukInoperative() const bool CardInfoFactory::create(const QSharedPointer& pCardConnectionWorker, ReaderInfo& pReaderInfo) { + pReaderInfo.setCardInfo(CardInfo(CardType::UNKNOWN)); + if (pCardConnectionWorker == nullptr) { qCWarning(card) << "No connection to smart card"; - pReaderInfo.setCardInfo(CardInfo(CardType::UNKNOWN)); return false; } - if (!CardInfoFactory::isGermanEidCard(pCardConnectionWorker)) + const CardType type = CardInfoFactory::detectCard(pCardConnectionWorker); + + if (type != CardType::EID_CARD) { qCWarning(card) << "Not a German EID card"; - pReaderInfo.setCardInfo(CardInfo(CardType::UNKNOWN)); return false; } - QSharedPointer efCardAccess = readEfCardAccess(pCardConnectionWorker); - if (efCardAccess == nullptr || !checkEfCardAccess(efCardAccess)) + const auto& efCardAccess = readEfCardAccess(pCardConnectionWorker); + if (!checkEfCardAccess(efCardAccess)) { - qCWarning(card) << "EFCardAccess not found or invalid"; - pReaderInfo.setCardInfo(CardInfo(CardType::UNKNOWN)); + qCWarning(card) << "EFCardAccess not found or is invalid"; return false; } - pReaderInfo.setCardInfo(CardInfo(CardType::EID_CARD, efCardAccess)); + pReaderInfo.setCardInfo(CardInfo(type, efCardAccess)); pCardConnectionWorker->updateRetryCounter(); return true; } -bool CardInfoFactory::isGermanEidCard(const QSharedPointer& pCardConnectionWorker) +CardType CardInfoFactory::detectCard(const QSharedPointer& pCardConnectionWorker) { // This is actually not specified in the CIF, but we do it to make the PersoSim work // 0. Select the master file @@ -151,7 +161,7 @@ bool CardInfoFactory::isGermanEidCard(const QSharedPointer qCDebug(card) << "ResponseApdu return code" << response.getReturnCode(); } - return false; + return CardType::UNKNOWN; } // 1. CL=00, INS=A4=SELECT, P1= 02, P2=0C, Lc=02, Data=2F00 (FI of EF.DIR), Le=absent @@ -160,7 +170,17 @@ bool CardInfoFactory::isGermanEidCard(const QSharedPointer if (returnCode != CardReturnCode::OK || response.getReturnCode() != StatusCode::SUCCESS) { qCWarning(card) << "Cannot select EF.DIR"; - return false; + + qCInfo(card) << "Check for passport..."; + command = SelectBuilder(FileRef::appPassport()).build(); + returnCode = pCardConnectionWorker->transmit(command, response); + if (returnCode != CardReturnCode::OK || response.getReturnCode() != StatusCode::SUCCESS) + { + qCWarning(card) << "Cannot select application identifier"; + return CardType::UNKNOWN; + } + + return CardType::PASSPORT; } // 2. CL=00, INS=B0=Read Binary, P1=00, P2=00 (no offset), Lc=00, Le=5A @@ -169,7 +189,7 @@ bool CardInfoFactory::isGermanEidCard(const QSharedPointer if (returnCode != CardReturnCode::OK || response.getReturnCode() != StatusCode::SUCCESS) { qCWarning(card) << "Cannot read EF.DIR"; - return false; + return CardType::UNKNOWN; } // matching value from CIF @@ -179,10 +199,10 @@ bool CardInfoFactory::isGermanEidCard(const QSharedPointer { qCWarning(card) << "expected EF.DIR(00,5A): " << matchingValue.toHex(); qCWarning(card) << "actual EF.DIR(00,5A): " << response.getData().left(90).toHex(); - return false; + return CardType::UNKNOWN; } - return true; + return CardType::EID_CARD; } @@ -206,6 +226,11 @@ QSharedPointer CardInfoFactory::readEfCardAccess(const QSharedPoin bool CardInfoFactory::checkEfCardAccess(const QSharedPointer& pEfCardAccess) { + if (!pEfCardAccess) + { + return false; + } + /* * At least one PACEInfo must have standardized domain parameters */ diff --git a/src/card/base/CardInfo.h b/src/card/base/CardInfo.h index 97210ad..d5d5ed0 100644 --- a/src/card/base/CardInfo.h +++ b/src/card/base/CardInfo.h @@ -12,7 +12,6 @@ #include #include -class test_CardInfo; namespace governikus { @@ -30,7 +29,6 @@ class CardInfo Q_DECLARE_TR_FUNCTIONS(governikus::CardInfo) private: - friend class ::test_CardInfo; CardType mCardType; QSharedPointer mEfCardAccess; int mRetryCounter; @@ -47,11 +45,10 @@ class CardInfo QString getCardTypeString() const; bool isAvailable() const; bool isEid() const; + bool isPassport() const; QSharedPointer getEfCardAccess() const; - QString getEidApplicationPath() const; - int getRetryCounter() const; bool isRetryCounterDetermined() const; @@ -84,9 +81,9 @@ class CardInfoFactory private: /*! - * Checks, if the smart card is a german eID card, i.e. a NPA or an EAT. + * Checks, if the smart card is a german eID card (i.e. a NPA or an EAT) or a passport. */ - static bool isGermanEidCard(const QSharedPointer& pCardConnectionWorker); + static CardType detectCard(const QSharedPointer& pCardConnectionWorker); /*! * Reads the EF.CardAccess diff --git a/src/card/base/CardOperationResult.h b/src/card/base/CardOperationResult.h deleted file mode 100644 index abd2ee3..0000000 --- a/src/card/base/CardOperationResult.h +++ /dev/null @@ -1,42 +0,0 @@ -/*! - * \brief Generic class representing the result of a card operation, or an error. - * - * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include "CardReturnCode.h" - -namespace governikus -{ -template -class CardOperationResult -{ - private: - const CardReturnCode mReturnCode; - const T mPayload; - - public: - CardOperationResult(const CardReturnCode& pReturnCode, const T& pPayload) - : mReturnCode(pReturnCode) - , mPayload(pPayload) - { - } - - - const CardReturnCode& getReturnCode() const - { - return mReturnCode; - } - - - const T& getPayload() const - { - return mPayload; - } - - -}; - -} // namespace governikus diff --git a/src/card/base/CommandApdu.h b/src/card/base/CommandApdu.h index d210bd7..a4cd5e8 100644 --- a/src/card/base/CommandApdu.h +++ b/src/card/base/CommandApdu.h @@ -6,6 +6,8 @@ #include "Apdu.h" +#include + namespace governikus { @@ -25,9 +27,9 @@ class CommandApdu final static const char CLA_COMMAND_CHAINING = 0x10; static const char CLA_SECURE_MESSAGING = 0x0c; - CommandApdu(const QByteArray& pBuffer); - CommandApdu(const QByteArray& pHeader, const QByteArray& pData, int pLe); - CommandApdu(char pCla, char pIns, char pP1, char pP2, const QByteArray& pData = QByteArray(), int pLe = NO_LE); + explicit CommandApdu(const QByteArray& pBuffer); + explicit CommandApdu(const QByteArray& pHeader, const QByteArray& pData, int pLe); + explicit CommandApdu(char pCla, char pIns, char pP1, char pP2, const QByteArray& pData = QByteArray(), int pLe = NO_LE); char getCLA() const; char getINS() const; diff --git a/src/card/base/CommandApduBuilder.cpp b/src/card/base/CommandApduBuilder.cpp new file mode 100644 index 0000000..4718be8 --- /dev/null +++ b/src/card/base/CommandApduBuilder.cpp @@ -0,0 +1,22 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "CommandApduBuilder.h" +#include + +using namespace governikus; + +Q_DECLARE_LOGGING_CATEGORY(card) + +/* + * The base class CommandApduBuilder + */ +CommandApduBuilder::CommandApduBuilder() +{ +} + + +CommandApduBuilder::~CommandApduBuilder() +{ +} diff --git a/src/card/base/CommandApduBuilder.h b/src/card/base/CommandApduBuilder.h new file mode 100644 index 0000000..bdbbb79 --- /dev/null +++ b/src/card/base/CommandApduBuilder.h @@ -0,0 +1,25 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApdu.h" + +#include + +namespace governikus +{ + +class CommandApduBuilder +{ + private: + Q_DISABLE_COPY(CommandApduBuilder) + + public: + CommandApduBuilder(); + virtual ~CommandApduBuilder(); + virtual CommandApdu build() = 0; +}; + +} // namespace governikus diff --git a/src/card/base/Commands.cpp b/src/card/base/Commands.cpp deleted file mode 100644 index 02cd8d3..0000000 --- a/src/card/base/Commands.cpp +++ /dev/null @@ -1,330 +0,0 @@ -/*! - * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "Commands.h" - -#include "asn1/ASN1Util.h" -#include "FileRef.h" -#include "SecureMessagingResponse.h" - -#include - -using namespace governikus; - - -Q_DECLARE_LOGGING_CATEGORY(card) - - -/* - * The base class CommandApduBuilder - */ -CommandApduBuilder::CommandApduBuilder() -{ -} - - -CommandApduBuilder::~CommandApduBuilder() -{ -} - - -/* - * SelectBuilder - */ -SelectBuilder::SelectBuilder(const FileRef& pFileRef) - : CommandApduBuilder() - , mFileRef(pFileRef) -{ -} - - -CommandApdu SelectBuilder::build() -{ - static const char INS = char(0xA4); - return CommandApdu(CommandApdu::CLA, INS, mFileRef.type, static_cast(P2::NONE), mFileRef.path); -} - - -/* - * GetChallengeBuilder - */ - -GetChallengeBuilder::GetChallengeBuilder() -{ -} - - -CommandApdu GetChallengeBuilder::build() -{ - static const char INS = char(0x84); - return CommandApdu(CommandApdu::CLA, INS, 0, 0, QByteArray(), 0x08); -} - - -/* - * GetChallengeResponse - */ - -GetChallengeResponse::GetChallengeResponse() - : ResponseApdu() -{ -} - - -GetChallengeResponse::~GetChallengeResponse() -{ -} - - -QByteArray GetChallengeResponse::getChallenge() const -{ - if (getDataLength() != 8) - { - qCCritical(card) << "Challenge has wrong size. Expect 8 bytes, got " << getDataLength(); - } - return getData(); -} - - -/* - * MSEBuilder - */ -MSEBuilder::MSEBuilder(P1 p1, P2 p2) - : CommandApduBuilder() - , mP1(p1) - , mP2(p2) - , mAuxiliaryData() - , mOid() - , mPublicKey() - , mPrivateKey() - , mEphemeralPublicKey() - , mChat() -{ -} - - -void MSEBuilder::setAuxiliaryData(const QByteArray& pData) -{ - mAuxiliaryData = pData; -} - - -void MSEBuilder::setOid(const QByteArray& pData) -{ - static const char TAG_OID = char(0x80); - mOid = Asn1Util::encode(TAG_OID, pData); -} - - -void MSEBuilder::setPublicKey(const QByteArray& pData) -{ - static const char TAG_PUBLIC_KEY = char(0x83); - mPublicKey = Asn1Util::encode(TAG_PUBLIC_KEY, pData); -} - - -void MSEBuilder::setPublicKey(PacePasswordId pPasswordId) -{ - static const char TAG_PUBLIC_KEY = char(0x83); - QByteArray data; - data += Enum::getValue(pPasswordId); - mPublicKey = Asn1Util::encode(TAG_PUBLIC_KEY, data); -} - - -void MSEBuilder::setPrivateKey(const QByteArray& pData) -{ - static const char TAG_PRIVATE_KEY = char(0x84); - mPrivateKey = Asn1Util::encode(TAG_PRIVATE_KEY, pData); -} - - -void MSEBuilder::setEphemeralPublicKey(const QByteArray& pData) -{ - static const char TAG_EPHEMERAL_PUBLIC_KEY = char(0x91); - mEphemeralPublicKey = Asn1Util::encode(TAG_EPHEMERAL_PUBLIC_KEY, pData); -} - - -void MSEBuilder::setChat(const QByteArray& pData) -{ - mChat = pData; -} - - -CommandApdu MSEBuilder::build() -{ - QByteArray data; - data += mOid; - data += mPublicKey; - data += mPrivateKey; - data += mAuxiliaryData; - data += mEphemeralPublicKey; - data += mChat; - - return CommandApdu(CommandApdu::CLA, static_cast(MSEBuilder::INS::MANAGE_SECURITY_ENVIRONMENT), static_cast(mP1), static_cast(mP2), data); -} - - -/* - * PSOBuilder - */ -PSOBuilder::PSOBuilder(P1 p1, P2 p2) - : CommandApduBuilder() - , mP1(p1) - , mP2(p2) - , mCertificateBody() - , mSignature() -{ -} - - -void PSOBuilder::setCertificateBody(const QByteArray& pData) -{ - mCertificateBody = pData; -} - - -void PSOBuilder::setSignature(const QByteArray& pData) -{ - mSignature = pData; -} - - -CommandApdu PSOBuilder::build() -{ - static const int INS = 0x2a; - - QByteArray data; - data += mCertificateBody; - data += mSignature; - - return CommandApdu(CommandApdu::CLA, INS, char(mP1), char(mP2), data); -} - - -/* - * EABuilder - */ -EABuilder::EABuilder() - : CommandApduBuilder() - , mSignature() -{ -} - - -void EABuilder::setSignature(const QByteArray& pData) -{ - mSignature = pData; -} - - -CommandApdu EABuilder::build() -{ - static const char INS = char(0x82); - return CommandApdu(CommandApdu::CLA, INS, 0, 0, mSignature); -} - - -/* - * GABuilder - */ -GABuilder::GABuilder(char pClassByte) - : CommandApduBuilder() - , mClassByte(pClassByte) - , mCaEphemeralPublicKey() - , mPaceMappingData() - , mPaceEphemeralPublicKey() - , mPaceAuthenticationToken() -{ -} - - -void GABuilder::setCaEphemeralPublicKey(const QByteArray& pData) -{ - static const char TAG_EPHEMERAL_PUBLIC_KEY = char(0x80); - mCaEphemeralPublicKey = Asn1Util::encode(TAG_EPHEMERAL_PUBLIC_KEY, pData); -} - - -void GABuilder::setPaceMappingData(const QByteArray& pData) -{ - static const char TAG_PACE_MAPPING_DATA = char(0x81); - mPaceMappingData = Asn1Util::encode(TAG_PACE_MAPPING_DATA, pData); -} - - -void GABuilder::setPaceEphemeralPublicKey(const QByteArray& pData) -{ - static const char TAG_PACE_EPHEMERAL_PUBLIC_KEY = char(0x83); - mPaceEphemeralPublicKey = Asn1Util::encode(TAG_PACE_EPHEMERAL_PUBLIC_KEY, pData); -} - - -void GABuilder::setPaceAuthenticationToken(const QByteArray& pData) -{ - static const char TAG_PACE_AUTHENTICATION_TOKEN = char(0x85); - mPaceAuthenticationToken = Asn1Util::encode(TAG_PACE_AUTHENTICATION_TOKEN, pData); -} - - -CommandApdu GABuilder::build() -{ - static const char INS = char(0x86); - static const char TAG_DYNAMIC_AUTHENTICATION_DATA = 0x7C; - - QByteArray data; - if (!mCaEphemeralPublicKey.isNull()) - { - data += mCaEphemeralPublicKey; - } - else if (!mPaceMappingData.isNull()) - { - data += mPaceMappingData; - } - else if (!mPaceEphemeralPublicKey.isNull()) - { - data += mPaceEphemeralPublicKey; - } - else if (!mPaceAuthenticationToken.isNull()) - { - data += mPaceAuthenticationToken; - } - data = Asn1Util::encode(TAG_DYNAMIC_AUTHENTICATION_DATA, data); - - return CommandApdu(mClassByte, INS, 0, 0, data, CommandApdu::SHORT_MAX_LE); -} - - -ReadBinaryBuilder::ReadBinaryBuilder(uint pOffset, int pLe) - : CommandApduBuilder() - , mOffset(pOffset) - , mLe(pLe) -{ -} - - -CommandApdu ReadBinaryBuilder::build() -{ - static const char INS = char(0xB0); - return CommandApdu(CommandApdu::CLA, INS, static_cast((mOffset & 0xff00) >> 8), static_cast(mOffset & 0xff), QByteArray(), mLe); -} - - -ResetRetryCounterBuilder::ResetRetryCounterBuilder(const QByteArray& pPin) - : CommandApduBuilder() - , mPin(pPin) -{ -} - - -CommandApdu ResetRetryCounterBuilder::build() -{ - static const char INS = 0x2c; - // P1: 2 (change), 3 (unblock) - const char p1 = mPin.isNull() ? char(3) : char(2); - // P2: 3 (PIN) (2 (CAN) -- not used) - // data: new PIN, when changing - return CommandApdu(CommandApdu::CLA, INS, p1, 3, mPin); -} diff --git a/src/card/base/Commands.h b/src/card/base/Commands.h deleted file mode 100644 index 0b532ee..0000000 --- a/src/card/base/Commands.h +++ /dev/null @@ -1,190 +0,0 @@ -/*! - * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include "asn1/Chat.h" -#include "CommandApdu.h" -#include "FileRef.h" -#include "ResponseApdu.h" -#include "SmartCardDefinitions.h" - -class test_Commands; - -namespace governikus -{ - -class CommandApduBuilder -{ - private: - Q_DISABLE_COPY(CommandApduBuilder) - - public: - CommandApduBuilder(); - virtual ~CommandApduBuilder(); - virtual CommandApdu build() = 0; -}; - -class SelectBuilder - : public CommandApduBuilder -{ - private: - const FileRef mFileRef; - - public: - enum class P1 : char - { - SELECT_MF = 0x00, CHILD_DF = 0x01, CHILD_EF = 0x02, PARENT_DF = 0x03, APPLICATION_ID = 0x04, ABS_PATH = 0x08, REL_PATH = 0x09, - }; - - enum class P2 : char - { - FCI = 0x00, FCP = 0x04, FMD = 0x08, NONE = 0x0c, - }; - - SelectBuilder(const FileRef& pFileRef); - CommandApdu build() override; -}; - -class GetChallengeBuilder - : public CommandApduBuilder -{ - public: - GetChallengeBuilder(); - CommandApdu build() override; -}; - -class GetChallengeResponse - : public ResponseApdu -{ - public: - GetChallengeResponse(); - virtual ~GetChallengeResponse(); - QByteArray getChallenge() const; -}; - -class MSEBuilder - : public CommandApduBuilder -{ - public: - enum class INS : char - { - MANAGE_SECURITY_ENVIRONMENT = 0x22, - }; - - enum class P1 : char - { - COMPUTE_DIGITAL_SIGNATURE = 0x41, PUT_HASH = char(0xa0), PERFORM_SECURITY_OPERATION = char(0xc1), SET_DST = char(0x81), ERASE = char(0xF4), - }; - - enum class P2 : char - { - SET_AT = char(0xa4), HASH_ALGORITHM = char(0xaa), COMPUTE_DIGITAL_SIGNATURE = char(0xb6), ENCRYPTION_OPERATION = char(0xb8), DEFAULT_CHANNEL = 0x01, - }; - - MSEBuilder(P1 p1, P2 p2); - void setAuxiliaryData(const QByteArray& pData); - void setOid(const QByteArray& pData); - void setPublicKey(const QByteArray& pData); - void setPublicKey(PacePasswordId pPassword); - void setPrivateKey(const QByteArray& pData); - void setEphemeralPublicKey(const QByteArray& pData); - void setChat(const QByteArray& pData); - CommandApdu build() override; - - private: - P1 mP1; - P2 mP2; - QByteArray mAuxiliaryData; - QByteArray mOid; - QByteArray mPublicKey; - QByteArray mPrivateKey; - QByteArray mEphemeralPublicKey; - QByteArray mChat; -}; - -class PSOBuilder - : public CommandApduBuilder -{ - public: - enum class P1 : int - { - DECRYPT = 0x80, ENCRYPT = 0x86, SIGN_HASH = 0x9e, VERIFY = 0x00, - }; - - enum class P2 : int - { - UNCRYPTED_DATA = 0x80, ENCRYPTED_DATA = 0x86, HASH_VALUE = 0x9a, CERTIFICATE = 0xbe, - }; - - PSOBuilder(P1 p1, P2 p2); - void setCertificateBody(const QByteArray& pData); - void setSignature(const QByteArray& pData); - CommandApdu build() override; - - private: - friend class ::test_Commands; - P1 mP1; - P2 mP2; - QByteArray mCertificateBody; - QByteArray mSignature; -}; - -class EABuilder - : public CommandApduBuilder -{ - public: - EABuilder(); - void setSignature(const QByteArray& pData); - CommandApdu build() override; - - private: - friend class ::test_Commands; - QByteArray mSignature; -}; - -class GABuilder - : public CommandApduBuilder -{ - public: - GABuilder(char pClassByte = CommandApdu::CLA); - void setCaEphemeralPublicKey(const QByteArray& pData); - void setPaceMappingData(const QByteArray& pData); - void setPaceEphemeralPublicKey(const QByteArray& pData); - void setPaceAuthenticationToken(const QByteArray& pData); - CommandApdu build() override; - - private: - friend class ::test_Commands; - char mClassByte; - QByteArray mCaEphemeralPublicKey; - QByteArray mPaceMappingData; - QByteArray mPaceEphemeralPublicKey; - QByteArray mPaceAuthenticationToken; -}; - -class ReadBinaryBuilder - : public CommandApduBuilder -{ - private: - uint mOffset; - int mLe; - - public: - ReadBinaryBuilder(uint pOffset, int pLe); - CommandApdu build() override; -}; - -class ResetRetryCounterBuilder - : public CommandApduBuilder -{ - public: - ResetRetryCounterBuilder(const QByteArray& pPin = QByteArray()); - CommandApdu build() override; - - private: - QByteArray mPin; -}; - -} // namespace governikus diff --git a/src/card/base/EABuilder.cpp b/src/card/base/EABuilder.cpp new file mode 100644 index 0000000..34c53ee --- /dev/null +++ b/src/card/base/EABuilder.cpp @@ -0,0 +1,33 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "EABuilder.h" + +#include + +using namespace governikus; + +Q_DECLARE_LOGGING_CATEGORY(card) + +/* + * EABuilder + */ +EABuilder::EABuilder() + : CommandApduBuilder() + , mSignature() +{ +} + + +void EABuilder::setSignature(const QByteArray& pData) +{ + mSignature = pData; +} + + +CommandApdu EABuilder::build() +{ + static const char INS = char(0x82); + return CommandApdu(CommandApdu::CLA, INS, 0, 0, mSignature); +} diff --git a/src/card/base/EABuilder.h b/src/card/base/EABuilder.h new file mode 100644 index 0000000..d48b181 --- /dev/null +++ b/src/card/base/EABuilder.h @@ -0,0 +1,27 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" + +class test_Commands; + +namespace governikus +{ + +class EABuilder + : public CommandApduBuilder +{ + public: + EABuilder(); + void setSignature(const QByteArray& pData); + CommandApdu build() override; + + private: + friend class ::test_Commands; + QByteArray mSignature; +}; + +} // namespace governikus diff --git a/src/card/base/EstablishPaceChannel.cpp b/src/card/base/EstablishPaceChannel.cpp index 16a8ebc..b9e7276 100644 --- a/src/card/base/EstablishPaceChannel.cpp +++ b/src/card/base/EstablishPaceChannel.cpp @@ -12,30 +12,10 @@ #include #include - using namespace governikus; - Q_DECLARE_LOGGING_CATEGORY(card) - -namespace -{ -template QByteArray readByteArray(const QByteArray& pInput, int& pOffset) -{ - Q_ASSERT(sizeof(T) < INT_MAX); - - T length = qFromLittleEndian(pInput.data() + pOffset); - pOffset += static_cast(sizeof(T)); - QByteArray result = pInput.mid(pOffset, length); - pOffset += length; - return result; -} - - -} // namespace - - namespace governikus { @@ -147,7 +127,7 @@ CommandApdu EstablishPaceChannel::createCommandDataCcid() } if (!mCertificateDescription.isEmpty()) { - const uchar* unsignedCharPointer = reinterpret_cast(mCertificateDescription.constData()); + const auto* unsignedCharPointer = reinterpret_cast(mCertificateDescription.constData()); decodeAsn1Object(&channelInput->mCertificateDescription, &unsignedCharPointer, mCertificateDescription.size()); } diff --git a/src/card/base/EstablishPaceChannelOutput.cpp b/src/card/base/EstablishPaceChannelOutput.cpp index bc2deee..279a844 100644 --- a/src/card/base/EstablishPaceChannelOutput.cpp +++ b/src/card/base/EstablishPaceChannelOutput.cpp @@ -11,13 +11,11 @@ #include #include +Q_DECLARE_LOGGING_CATEGORY(card) using namespace governikus; -Q_DECLARE_LOGGING_CATEGORY(card) - - namespace { template QByteArray readByteArray(const QByteArray& pInput, int& pOffset) @@ -55,8 +53,8 @@ IMPLEMENT_ASN1_OBJECT(ESTABLISHPACECHANNELOUTPUT) } // namespace governikus -EstablishPaceChannelOutput::EstablishPaceChannelOutput() - : mPaceReturnCode(CardReturnCode::UNKNOWN) +EstablishPaceChannelOutput::EstablishPaceChannelOutput(CardReturnCode pPaceReturnCode) + : mPaceReturnCode(pPaceReturnCode) , mEfCardAccess() , mCarCurr() , mCarPrev() @@ -149,10 +147,10 @@ void EstablishPaceChannelOutput::parse(const QByteArray& pControlOutput, PacePas qCWarning(card) << "Output of EstablishPaceChannel has wrong size"; return; } - quint32 paceReturnCode = qFromLittleEndian(pControlOutput.data()); + auto paceReturnCode = qFromLittleEndian(pControlOutput.data()); mPaceReturnCode = parseReturnCode(paceReturnCode, pPasswordId); - quint16 dataLength = qFromLittleEndian(pControlOutput.data() + 4); + auto dataLength = qFromLittleEndian(pControlOutput.data() + 4); if (pControlOutput.size() < 6 + dataLength) { qCWarning(card) << "Output of EstablishPaceChannel has wrong size"; @@ -165,7 +163,7 @@ void EstablishPaceChannelOutput::parse(const QByteArray& pControlOutput, PacePas } // Response data according to PC/SC Part 10 amendment 1.1 - quint16 status = qFromBigEndian(pControlOutput.data() + 6); + auto status = qFromBigEndian(pControlOutput.data() + 6); if (status != StatusCode::SUCCESS) { qCWarning(card) << "PACE failed. Status code:" << status; @@ -210,7 +208,7 @@ QByteArray EstablishPaceChannelOutput::toCcid() const Asn1OctetStringUtil::setValue(mStatusMseSetAt, establishPaceChannelOutput->mStatusMSESetAt); } - const uchar* unsignedCharPointer = reinterpret_cast(mEfCardAccess.constData()); + const auto* unsignedCharPointer = reinterpret_cast(mEfCardAccess.constData()); decodeAsn1Object(&establishPaceChannelOutput->mEfCardAccess, &unsignedCharPointer, mEfCardAccess.size()); establishPaceChannelOutput->mIdPICC = ASN1_OCTET_STRING_new(); @@ -274,36 +272,36 @@ void EstablishPaceChannelOutput::parseFromCcid(const QByteArray& pOutput, PacePa quint32 paceReturnCode; QDataStream(paceReturnCodeBytes) >> paceReturnCode; mPaceReturnCode = parseReturnCode(paceReturnCode, pPasswordId); - qDebug() << "mPaceReturnCode:" << mPaceReturnCode << paceReturnCodeBytes.toHex(); + qCDebug(card) << "mPaceReturnCode:" << mPaceReturnCode << paceReturnCodeBytes.toHex(); if (channelOutput->mStatusMSESetAt) { mStatusMseSetAt = Asn1OctetStringUtil::getValue(channelOutput->mStatusMSESetAt); - qDebug() << "mStatusMseSetAt:" << mStatusMseSetAt.toHex(); + qCDebug(card) << "mStatusMseSetAt:" << mStatusMseSetAt.toHex(); } if (channelOutput->mEfCardAccess) { mEfCardAccess = encodeObject(channelOutput->mEfCardAccess); - qDebug() << "mEfCardAccess:" << mEfCardAccess.toHex(); + qCDebug(card) << "mEfCardAccess:" << mEfCardAccess.toHex(); } if (channelOutput->mIdPICC != nullptr) { mIdIcc = Asn1OctetStringUtil::getValue(channelOutput->mIdPICC); - qDebug() << "mIdIcc:" << mIdIcc.toHex(); + qCDebug(card) << "mIdIcc:" << mIdIcc.toHex(); } if (channelOutput->mCurCAR != nullptr) { mCarCurr = Asn1OctetStringUtil::getValue(channelOutput->mCurCAR); - qDebug() << "mCarCurr:" << mCarCurr; + qCDebug(card) << "mCarCurr:" << mCarCurr; } if (channelOutput->mPrevCAR != nullptr) { mCarPrev = Asn1OctetStringUtil::getValue(channelOutput->mPrevCAR); - qDebug() << "mCarPrev:" << mCarPrev; + qCDebug(card) << "mCarPrev:" << mCarPrev; } } diff --git a/src/card/base/EstablishPaceChannelOutput.h b/src/card/base/EstablishPaceChannelOutput.h index 334acdc..ddfcc3f 100644 --- a/src/card/base/EstablishPaceChannelOutput.h +++ b/src/card/base/EstablishPaceChannelOutput.h @@ -55,7 +55,7 @@ class EstablishPaceChannelOutput QByteArray mStatusMseSetAt; public: - EstablishPaceChannelOutput(); + EstablishPaceChannelOutput(CardReturnCode pPaceReturnCode = CardReturnCode::UNKNOWN); /** * Defined in pcsc10_v2.02.08_amd1.1 diff --git a/src/card/base/FileRef.cpp b/src/card/base/FileRef.cpp index 1a462ee..bbabcb4 100644 --- a/src/card/base/FileRef.cpp +++ b/src/card/base/FileRef.cpp @@ -2,9 +2,10 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ -#include "Commands.h" #include "FileRef.h" +#include "SelectBuilder.h" + using namespace governikus; FileRef FileRef::efDir() @@ -43,6 +44,18 @@ FileRef FileRef::appESign() } +FileRef FileRef::appEId() +{ + return FileRef(static_cast(SelectBuilder::P1::APPLICATION_ID), QByteArray::fromHex("e80704007f00070302")); +} + + +FileRef FileRef::appPassport() +{ + return FileRef(static_cast(SelectBuilder::P1::APPLICATION_ID), QByteArray::fromHex("a0000002471001")); +} + + FileRef::FileRef(char pType, const QByteArray& pPath) : type(pType) , path(pPath) diff --git a/src/card/base/FileRef.h b/src/card/base/FileRef.h index 7105036..f9b2eb5 100644 --- a/src/card/base/FileRef.h +++ b/src/card/base/FileRef.h @@ -23,6 +23,8 @@ struct FileRef static FileRef efCardAccess(); static FileRef efCardSecurity(); static FileRef appESign(); + static FileRef appEId(); + static FileRef appPassport(); }; diff --git a/src/card/base/GABuilder.cpp b/src/card/base/GABuilder.cpp new file mode 100644 index 0000000..8b24bc2 --- /dev/null +++ b/src/card/base/GABuilder.cpp @@ -0,0 +1,83 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "GABuilder.h" + +#include "asn1/ASN1Util.h" + +#include + +using namespace governikus; + + +Q_DECLARE_LOGGING_CATEGORY(card) + +/* + * GABuilder + */ +GABuilder::GABuilder(char pClassByte) + : CommandApduBuilder() + , mClassByte(pClassByte) + , mCaEphemeralPublicKey() + , mPaceMappingData() + , mPaceEphemeralPublicKey() + , mPaceAuthenticationToken() +{ +} + + +void GABuilder::setCaEphemeralPublicKey(const QByteArray& pData) +{ + static const char TAG_EPHEMERAL_PUBLIC_KEY = char(0x80); + mCaEphemeralPublicKey = Asn1Util::encode(TAG_EPHEMERAL_PUBLIC_KEY, pData); +} + + +void GABuilder::setPaceMappingData(const QByteArray& pData) +{ + static const char TAG_PACE_MAPPING_DATA = char(0x81); + mPaceMappingData = Asn1Util::encode(TAG_PACE_MAPPING_DATA, pData); +} + + +void GABuilder::setPaceEphemeralPublicKey(const QByteArray& pData) +{ + static const char TAG_PACE_EPHEMERAL_PUBLIC_KEY = char(0x83); + mPaceEphemeralPublicKey = Asn1Util::encode(TAG_PACE_EPHEMERAL_PUBLIC_KEY, pData); +} + + +void GABuilder::setPaceAuthenticationToken(const QByteArray& pData) +{ + static const char TAG_PACE_AUTHENTICATION_TOKEN = char(0x85); + mPaceAuthenticationToken = Asn1Util::encode(TAG_PACE_AUTHENTICATION_TOKEN, pData); +} + + +CommandApdu GABuilder::build() +{ + static const char INS = char(0x86); + static const char TAG_DYNAMIC_AUTHENTICATION_DATA = 0x7C; + + QByteArray data; + if (!mCaEphemeralPublicKey.isNull()) + { + data += mCaEphemeralPublicKey; + } + else if (!mPaceMappingData.isNull()) + { + data += mPaceMappingData; + } + else if (!mPaceEphemeralPublicKey.isNull()) + { + data += mPaceEphemeralPublicKey; + } + else if (!mPaceAuthenticationToken.isNull()) + { + data += mPaceAuthenticationToken; + } + data = Asn1Util::encode(TAG_DYNAMIC_AUTHENTICATION_DATA, data); + + return CommandApdu(mClassByte, INS, 0, 0, data, CommandApdu::SHORT_MAX_LE); +} diff --git a/src/card/base/GABuilder.h b/src/card/base/GABuilder.h new file mode 100644 index 0000000..55f22e4 --- /dev/null +++ b/src/card/base/GABuilder.h @@ -0,0 +1,34 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" + +class test_Commands; + +namespace governikus +{ + +class GABuilder + : public CommandApduBuilder +{ + public: + explicit GABuilder(char pClassByte = CommandApdu::CLA); + void setCaEphemeralPublicKey(const QByteArray& pData); + void setPaceMappingData(const QByteArray& pData); + void setPaceEphemeralPublicKey(const QByteArray& pData); + void setPaceAuthenticationToken(const QByteArray& pData); + CommandApdu build() override; + + private: + friend class ::test_Commands; + char mClassByte; + QByteArray mCaEphemeralPublicKey; + QByteArray mPaceMappingData; + QByteArray mPaceEphemeralPublicKey; + QByteArray mPaceAuthenticationToken; +}; + +} // namespace governikus diff --git a/src/card/base/GeneralAuthenticateResponse.cpp b/src/card/base/GeneralAuthenticateResponse.cpp index 7216f12..5e82d94 100644 --- a/src/card/base/GeneralAuthenticateResponse.cpp +++ b/src/card/base/GeneralAuthenticateResponse.cpp @@ -7,31 +7,30 @@ #include +Q_DECLARE_LOGGING_CATEGORY(card) using namespace governikus; -Q_DECLARE_LOGGING_CATEGORY(card) - - -GAResponseApdu::GAResponseApdu() - : ResponseApdu() +GAResponseApdu::GAResponseApdu(const ResponseApdu& pResponseApdu) + : mResponseApdu(pResponseApdu) { + if (!isValid()) + { + qCCritical(card) << "General authentication data seems invalid because of StatusCode:" << pResponseApdu.getReturnCode(); + } } -void GAResponseApdu::setBuffer(const QByteArray& pBuffer) +bool GAResponseApdu::isValid() const { - ResponseApdu::setBuffer(pBuffer); + return StatusCode::SUCCESS == getReturnCode(); +} - StatusCode statusCode = getReturnCode(); - if (statusCode != StatusCode::SUCCESS) - { - qCCritical(card) << "Avoid parsing of the general authentication data because of StatusCode" << statusCode; - return; - } - parseDynamicAuthenticationData(getData()); +StatusCode GAResponseApdu::getReturnCode() const +{ + return mResponseApdu.getReturnCode(); } @@ -67,14 +66,18 @@ void GAEncryptedNonceResponse::parseDynamicAuthenticationData(const QByteArray& } -GAEncryptedNonceResponse::GAEncryptedNonceResponse() - : GAResponseApdu() +GAEncryptedNonceResponse::GAEncryptedNonceResponse(const ResponseApdu& pResponseApdu) + : GAResponseApdu(pResponseApdu) , mEncryptedNonce() { + if (isValid()) + { + parseDynamicAuthenticationData(mResponseApdu.getData()); + } } -const QByteArray& GAEncryptedNonceResponse::getEncryptedNonce() +const QByteArray& GAEncryptedNonceResponse::getEncryptedNonce() const { return mEncryptedNonce; } @@ -112,14 +115,18 @@ void GAMapNonceResponse::parseDynamicAuthenticationData(const QByteArray& pDynam } -GAMapNonceResponse::GAMapNonceResponse() - : GAResponseApdu() +GAMapNonceResponse::GAMapNonceResponse(const ResponseApdu& pResponseApdu) + : GAResponseApdu(pResponseApdu) , mMappingData() { + if (isValid()) + { + parseDynamicAuthenticationData(mResponseApdu.getData()); + } } -const QByteArray& GAMapNonceResponse::getMappingData() +const QByteArray& GAMapNonceResponse::getMappingData() const { return mMappingData; } @@ -157,14 +164,18 @@ void GAPerformKeyAgreementResponse::parseDynamicAuthenticationData(const QByteAr } -GAPerformKeyAgreementResponse::GAPerformKeyAgreementResponse() - : GAResponseApdu() +GAPerformKeyAgreementResponse::GAPerformKeyAgreementResponse(const ResponseApdu& pResponseApdu) + : GAResponseApdu(pResponseApdu) , mEphemeralPublicKey() { + if (isValid()) + { + parseDynamicAuthenticationData(mResponseApdu.getData()); + } } -const QByteArray& GAPerformKeyAgreementResponse::getEphemeralPublicKey() +const QByteArray& GAPerformKeyAgreementResponse::getEphemeralPublicKey() const { return mEphemeralPublicKey; } @@ -204,33 +215,37 @@ void GAMutualAuthenticationResponse::parseDynamicAuthenticationData(const QByteA mCarCurr = Asn1OctetStringUtil::getValue(data->mCarCurr); mCarPrev = Asn1OctetStringUtil::getValue(data->mCarPrev); - qDebug() << "mCarCurr" << mCarCurr; - qDebug() << "mCarPrev" << mCarPrev; + qCDebug(card) << "mCarCurr" << mCarCurr; + qCDebug(card) << "mCarPrev" << mCarPrev; } -GAMutualAuthenticationResponse::GAMutualAuthenticationResponse() - : GAResponseApdu() +GAMutualAuthenticationResponse::GAMutualAuthenticationResponse(const ResponseApdu& pResponseApdu) + : GAResponseApdu(pResponseApdu) , mAuthenticationToken() , mCarCurr() , mCarPrev() { + if (isValid()) + { + parseDynamicAuthenticationData(mResponseApdu.getData()); + } } -const QByteArray& GAMutualAuthenticationResponse::getAuthenticationToken() +const QByteArray& GAMutualAuthenticationResponse::getAuthenticationToken() const { return mAuthenticationToken; } -const QByteArray& GAMutualAuthenticationResponse::getCarCurr() +const QByteArray& GAMutualAuthenticationResponse::getCarCurr() const { return mCarCurr; } -const QByteArray& GAMutualAuthenticationResponse::getCarPrev() +const QByteArray& GAMutualAuthenticationResponse::getCarPrev() const { return mCarPrev; } @@ -270,21 +285,25 @@ void GAChipAuthenticationResponse::parseDynamicAuthenticationData(const QByteArr } -GAChipAuthenticationResponse::GAChipAuthenticationResponse() - : GAResponseApdu() +GAChipAuthenticationResponse::GAChipAuthenticationResponse(const ResponseApdu& pResponseApdu) + : GAResponseApdu(pResponseApdu) , mNonce() , mAuthenticationToken() { + if (isValid()) + { + parseDynamicAuthenticationData(mResponseApdu.getData()); + } } -const QByteArray& GAChipAuthenticationResponse::getNonce() +const QByteArray& GAChipAuthenticationResponse::getNonce() const { return mNonce; } -const QByteArray& GAChipAuthenticationResponse::getAuthenticationToken() +const QByteArray& GAChipAuthenticationResponse::getAuthenticationToken() const { return mAuthenticationToken; } diff --git a/src/card/base/GeneralAuthenticateResponse.h b/src/card/base/GeneralAuthenticateResponse.h index 1149ae2..80c5481 100644 --- a/src/card/base/GeneralAuthenticateResponse.h +++ b/src/card/base/GeneralAuthenticateResponse.h @@ -14,16 +14,15 @@ namespace governikus { class GAResponseApdu - : public ResponseApdu { - private: - virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) = 0; + protected: + ResponseApdu mResponseApdu; + + bool isValid() const; public: - GAResponseApdu(); - virtual ~GAResponseApdu() override = default; - virtual void setBuffer(const QByteArray& pBuffer) override; - + explicit GAResponseApdu(const ResponseApdu& pResponseApdu); + StatusCode getReturnCode() const; }; @@ -33,10 +32,10 @@ class GAResponseApdu * * EncryptedNonce ::= APPLICATION [0x00] IMPLICIT OCTET_STRING */ -typedef struct ga_encryptednoncedata_st +using GA_ENCRYPTEDNONCEDATA = struct ga_encryptednoncedata_st { ASN1_OCTET_STRING* mEncryptedNonce; -} GA_ENCRYPTEDNONCEDATA; +}; DECLARE_ASN1_OBJECT(GA_ENCRYPTEDNONCEDATA) @@ -44,14 +43,12 @@ class GAEncryptedNonceResponse : public GAResponseApdu { private: - virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override; + void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData); QByteArray mEncryptedNonce; public: - GAEncryptedNonceResponse(); - virtual ~GAEncryptedNonceResponse() override = default; - const QByteArray& getEncryptedNonce(); - + explicit GAEncryptedNonceResponse(const ResponseApdu& pResponseApdu); + const QByteArray& getEncryptedNonce() const; }; @@ -61,10 +58,10 @@ class GAEncryptedNonceResponse * * MappingData ::= APPLICATION [0x02] IMPLICIT OCTET_STRING */ -typedef struct ga_mapnoncedata_st +using GA_MAPNONCEDATA = struct ga_mapnoncedata_st { ASN1_OCTET_STRING* mMappingData; -} GA_MAPNONCEDATA; +}; DECLARE_ASN1_OBJECT(GA_MAPNONCEDATA) @@ -72,14 +69,12 @@ class GAMapNonceResponse : public GAResponseApdu { private: - virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override; + void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData); QByteArray mMappingData; public: - GAMapNonceResponse(); - virtual ~GAMapNonceResponse() override = default; - const QByteArray& getMappingData(); - + explicit GAMapNonceResponse(const ResponseApdu& pResponseApdu); + const QByteArray& getMappingData() const; }; @@ -89,10 +84,10 @@ class GAMapNonceResponse * * EphemeralPublicKey ::= APPLICATION [0x04] IMPLICIT OCTET_STRING */ -typedef struct ga_performkeyagreementdata_st +using GA_PERFORMKEYAGREEMENTDATA = struct ga_performkeyagreementdata_st { ASN1_OCTET_STRING* mEphemeralPublicKey; -} GA_PERFORMKEYAGREEMENTDATA; +}; DECLARE_ASN1_OBJECT(GA_PERFORMKEYAGREEMENTDATA) @@ -100,14 +95,12 @@ class GAPerformKeyAgreementResponse : public GAResponseApdu { private: - virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override; + void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData); QByteArray mEphemeralPublicKey; public: - GAPerformKeyAgreementResponse(); - virtual ~GAPerformKeyAgreementResponse() override = default; - const QByteArray& getEphemeralPublicKey(); - + explicit GAPerformKeyAgreementResponse(const ResponseApdu& pResponseApdu); + const QByteArray& getEphemeralPublicKey() const; }; @@ -119,12 +112,12 @@ class GAPerformKeyAgreementResponse * CarCurr ::= APPLICATION [0x00] IMPLICIT OCTET_STRING OPTIONAL * CarPrev ::= APPLICATION [0x00] IMPLICIT OCTET_STRING OPTIONAL */ -typedef struct ga_mutualauthenticationdata_st +using GA_MUTUALAUTHENTICATIONDATA = struct ga_mutualauthenticationdata_st { ASN1_OCTET_STRING* mAuthenticationToken; ASN1_OCTET_STRING* mCarCurr; ASN1_OCTET_STRING* mCarPrev; -} GA_MUTUALAUTHENTICATIONDATA; +}; DECLARE_ASN1_OBJECT(GA_MUTUALAUTHENTICATIONDATA) @@ -132,16 +125,14 @@ class GAMutualAuthenticationResponse : public GAResponseApdu { private: - virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override; + void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData); QByteArray mAuthenticationToken, mCarCurr, mCarPrev; public: - GAMutualAuthenticationResponse(); - virtual ~GAMutualAuthenticationResponse() override = default; - const QByteArray& getAuthenticationToken(); - const QByteArray& getCarCurr(); - const QByteArray& getCarPrev(); - + explicit GAMutualAuthenticationResponse(const ResponseApdu& pResponseApdu); + const QByteArray& getAuthenticationToken() const; + const QByteArray& getCarCurr() const; + const QByteArray& getCarPrev() const; }; @@ -152,11 +143,11 @@ class GAMutualAuthenticationResponse * Nonce ::= APPLICATION [0x01] IMPLICIT OCTET_STRING * AuthenticationToken ::= APPLICATION [0x02] IMPLICIT OCTET_STRING */ -typedef struct ga_chipauthenticationdata_st +using GA_CHIPAUTHENTICATIONDATA = struct ga_chipauthenticationdata_st { ASN1_OCTET_STRING* mNonce; ASN1_OCTET_STRING* mAuthenticationToken; -} GA_CHIPAUTHENTICATIONDATA; +}; DECLARE_ASN1_OBJECT(GA_CHIPAUTHENTICATIONDATA) @@ -164,15 +155,13 @@ class GAChipAuthenticationResponse : public GAResponseApdu { private: - virtual void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData) override; + void parseDynamicAuthenticationData(const QByteArray& pDynamicAuthenticationData); QByteArray mNonce, mAuthenticationToken; public: - GAChipAuthenticationResponse(); - virtual ~GAChipAuthenticationResponse() override = default; - const QByteArray& getNonce(); - const QByteArray& getAuthenticationToken(); - + explicit GAChipAuthenticationResponse(const ResponseApdu& pResponseApdu); + const QByteArray& getNonce() const; + const QByteArray& getAuthenticationToken() const; }; diff --git a/src/card/base/GetChallengeBuilder.cpp b/src/card/base/GetChallengeBuilder.cpp new file mode 100644 index 0000000..5730430 --- /dev/null +++ b/src/card/base/GetChallengeBuilder.cpp @@ -0,0 +1,26 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "GetChallengeBuilder.h" + +#include + +using namespace governikus; + +Q_DECLARE_LOGGING_CATEGORY(card) + +/* + * GetChallengeBuilder + */ + +GetChallengeBuilder::GetChallengeBuilder() +{ +} + + +CommandApdu GetChallengeBuilder::build() +{ + static const char INS = char(0x84); + return CommandApdu(CommandApdu::CLA, INS, 0, 0, QByteArray(), 0x08); +} diff --git a/src/card/base/GetChallengeBuilder.h b/src/card/base/GetChallengeBuilder.h new file mode 100644 index 0000000..97db22b --- /dev/null +++ b/src/card/base/GetChallengeBuilder.h @@ -0,0 +1,20 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" + +namespace governikus +{ + +class GetChallengeBuilder + : public CommandApduBuilder +{ + public: + GetChallengeBuilder(); + CommandApdu build() override; +}; + +} // namespace governikus diff --git a/src/card/base/InputAPDUInfo.cpp b/src/card/base/InputAPDUInfo.cpp index e77de9a..35120e1 100644 --- a/src/card/base/InputAPDUInfo.cpp +++ b/src/card/base/InputAPDUInfo.cpp @@ -6,13 +6,6 @@ using namespace governikus; -InputAPDUInfo::InputAPDUInfo() - : mInputApdu() - , mAcceptableStatusCodes() -{ -} - - InputAPDUInfo::InputAPDUInfo(const QByteArray& pInputApdu) : mInputApdu(pInputApdu) , mAcceptableStatusCodes() diff --git a/src/card/base/InputAPDUInfo.h b/src/card/base/InputAPDUInfo.h index f34a5d5..ee2e1d7 100644 --- a/src/card/base/InputAPDUInfo.h +++ b/src/card/base/InputAPDUInfo.h @@ -4,12 +4,11 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ +#pragma once + #include "CommandApdu.h" #include -#include - -#pragma once namespace governikus { @@ -17,8 +16,7 @@ namespace governikus class InputAPDUInfo { public: - InputAPDUInfo(); - InputAPDUInfo(const QByteArray& pInputApdu); + explicit InputAPDUInfo(const QByteArray& pInputApdu = QByteArray()); bool isValid() const diff --git a/src/card/base/MSEBuilder.cpp b/src/card/base/MSEBuilder.cpp new file mode 100644 index 0000000..9c834dd --- /dev/null +++ b/src/card/base/MSEBuilder.cpp @@ -0,0 +1,92 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "MSEBuilder.h" + +#include "asn1/ASN1Util.h" + +#include + +using namespace governikus; + +Q_DECLARE_LOGGING_CATEGORY(card) + +/* + * MSEBuilder + */ +MSEBuilder::MSEBuilder(P1 p1, P2 p2) + : CommandApduBuilder() + , mP1(p1) + , mP2(p2) + , mAuxiliaryData() + , mOid() + , mPublicKey() + , mPrivateKey() + , mEphemeralPublicKey() + , mChat() +{ +} + + +void MSEBuilder::setAuxiliaryData(const QByteArray& pData) +{ + mAuxiliaryData = pData; +} + + +void MSEBuilder::setOid(const QByteArray& pData) +{ + static const char TAG_OID = char(0x80); + mOid = Asn1Util::encode(TAG_OID, pData); +} + + +void MSEBuilder::setPublicKey(const QByteArray& pData) +{ + static const char TAG_PUBLIC_KEY = char(0x83); + mPublicKey = Asn1Util::encode(TAG_PUBLIC_KEY, pData); +} + + +void MSEBuilder::setPublicKey(PacePasswordId pPasswordId) +{ + static const char TAG_PUBLIC_KEY = char(0x83); + QByteArray data; + data += Enum::getValue(pPasswordId); + mPublicKey = Asn1Util::encode(TAG_PUBLIC_KEY, data); +} + + +void MSEBuilder::setPrivateKey(const QByteArray& pData) +{ + static const char TAG_PRIVATE_KEY = char(0x84); + mPrivateKey = Asn1Util::encode(TAG_PRIVATE_KEY, pData); +} + + +void MSEBuilder::setEphemeralPublicKey(const QByteArray& pData) +{ + static const char TAG_EPHEMERAL_PUBLIC_KEY = char(0x91); + mEphemeralPublicKey = Asn1Util::encode(TAG_EPHEMERAL_PUBLIC_KEY, pData); +} + + +void MSEBuilder::setChat(const QByteArray& pData) +{ + mChat = pData; +} + + +CommandApdu MSEBuilder::build() +{ + QByteArray data; + data += mOid; + data += mPublicKey; + data += mPrivateKey; + data += mAuxiliaryData; + data += mEphemeralPublicKey; + data += mChat; + + return CommandApdu(CommandApdu::CLA, static_cast(MSEBuilder::INS::MANAGE_SECURITY_ENVIRONMENT), static_cast(mP1), static_cast(mP2), data); +} diff --git a/src/card/base/MSEBuilder.h b/src/card/base/MSEBuilder.h new file mode 100644 index 0000000..7eedcf7 --- /dev/null +++ b/src/card/base/MSEBuilder.h @@ -0,0 +1,55 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" +#include "SmartCardDefinitions.h" + +class test_Commands; + +namespace governikus +{ + +class MSEBuilder + : public CommandApduBuilder +{ + public: + enum class INS : char + { + MANAGE_SECURITY_ENVIRONMENT = 0x22, + }; + + enum class P1 : char + { + COMPUTE_DIGITAL_SIGNATURE = 0x41, PUT_HASH = char(0xa0), PERFORM_SECURITY_OPERATION = char(0xc1), SET_DST = char(0x81), ERASE = char(0xF4), + }; + + enum class P2 : char + { + SET_AT = char(0xa4), HASH_ALGORITHM = char(0xaa), COMPUTE_DIGITAL_SIGNATURE = char(0xb6), ENCRYPTION_OPERATION = char(0xb8), DEFAULT_CHANNEL = 0x01, + }; + + explicit MSEBuilder(P1 p1, P2 p2); + void setAuxiliaryData(const QByteArray& pData); + void setOid(const QByteArray& pData); + void setPublicKey(const QByteArray& pData); + void setPublicKey(PacePasswordId pPassword); + void setPrivateKey(const QByteArray& pData); + void setEphemeralPublicKey(const QByteArray& pData); + void setChat(const QByteArray& pData); + CommandApdu build() override; + + private: + P1 mP1; + P2 mP2; + QByteArray mAuxiliaryData; + QByteArray mOid; + QByteArray mPublicKey; + QByteArray mPrivateKey; + QByteArray mEphemeralPublicKey; + QByteArray mChat; +}; + +} // namespace governikus diff --git a/src/card/base/PSOBuilder.cpp b/src/card/base/PSOBuilder.cpp new file mode 100644 index 0000000..b6d6db5 --- /dev/null +++ b/src/card/base/PSOBuilder.cpp @@ -0,0 +1,47 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "PSOBuilder.h" + +#include + +using namespace governikus; + +Q_DECLARE_LOGGING_CATEGORY(card) + +/* + * PSOBuilder + */ +PSOBuilder::PSOBuilder(P1 p1, P2 p2) + : CommandApduBuilder() + , mP1(p1) + , mP2(p2) + , mCertificateBody() + , mSignature() +{ +} + + +void PSOBuilder::setCertificateBody(const QByteArray& pData) +{ + mCertificateBody = pData; +} + + +void PSOBuilder::setSignature(const QByteArray& pData) +{ + mSignature = pData; +} + + +CommandApdu PSOBuilder::build() +{ + static const int INS = 0x2a; + + QByteArray data; + data += mCertificateBody; + data += mSignature; + + return CommandApdu(CommandApdu::CLA, INS, char(mP1), char(mP2), data); +} diff --git a/src/card/base/PSOBuilder.h b/src/card/base/PSOBuilder.h new file mode 100644 index 0000000..fc628fa --- /dev/null +++ b/src/card/base/PSOBuilder.h @@ -0,0 +1,41 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" + +class test_Commands; + +namespace governikus +{ + +class PSOBuilder + : public CommandApduBuilder +{ + public: + enum class P1 : int + { + DECRYPT = 0x80, ENCRYPT = 0x86, SIGN_HASH = 0x9e, VERIFY = 0x00, + }; + + enum class P2 : int + { + UNCRYPTED_DATA = 0x80, ENCRYPTED_DATA = 0x86, HASH_VALUE = 0x9a, CERTIFICATE = 0xbe, + }; + + explicit PSOBuilder(P1 p1, P2 p2); + void setCertificateBody(const QByteArray& pData); + void setSignature(const QByteArray& pData); + CommandApdu build() override; + + private: + friend class ::test_Commands; + P1 mP1; + P2 mP2; + QByteArray mCertificateBody; + QByteArray mSignature; +}; + +} // namespace governikus diff --git a/src/card/base/PersoSimWorkaround.h b/src/card/base/PersoSimWorkaround.h index b784935..ad626fc 100644 --- a/src/card/base/PersoSimWorkaround.h +++ b/src/card/base/PersoSimWorkaround.h @@ -7,7 +7,7 @@ #pragma once #include "CardConnectionWorker.h" -#include "Commands.h" +#include "SelectBuilder.h" #include diff --git a/src/card/base/PinModify.h b/src/card/base/PinModify.h index 51a17b3..3eb9e9a 100644 --- a/src/card/base/PinModify.h +++ b/src/card/base/PinModify.h @@ -26,8 +26,8 @@ class PinModify QByteArray createPinModificationDataStructure(ProtocolType pType) const; public: - PinModify(quint8 pTimeoutSeconds); - PinModify(const QByteArray& pRemoteInputData); + explicit PinModify(quint8 pTimeoutSeconds); + explicit PinModify(const QByteArray& pRemoteInputData); quint8 getTimeoutSeconds() const; diff --git a/src/card/base/PinModifyOutput.cpp b/src/card/base/PinModifyOutput.cpp index 28d8c3f..459076b 100644 --- a/src/card/base/PinModifyOutput.cpp +++ b/src/card/base/PinModifyOutput.cpp @@ -33,7 +33,7 @@ CardReturnCode PinModifyOutput::statusCodeToCardReturnCode(const QByteArray& pDa return CardReturnCode::UNKNOWN; } - const quint16 statusCode = qFromBigEndian(pData.data()); + const auto statusCode = qFromBigEndian(pData.data()); const StatusCode errorCode = Enum::isValue(statusCode) ? StatusCode(statusCode) : StatusCode::INVALID; switch (errorCode) { diff --git a/src/card/base/PinModifyOutput.h b/src/card/base/PinModifyOutput.h index bb2c5be..d83b104 100644 --- a/src/card/base/PinModifyOutput.h +++ b/src/card/base/PinModifyOutput.h @@ -22,7 +22,7 @@ class PinModifyOutput public: PinModifyOutput(); - PinModifyOutput(const ResponseApdu& pResponseApdu); + explicit PinModifyOutput(const ResponseApdu& pResponseApdu); CardReturnCode getReturnCode() const; const ResponseApdu& getResponseApdu() const; diff --git a/src/card/base/ReadBinaryBuilder.cpp b/src/card/base/ReadBinaryBuilder.cpp new file mode 100644 index 0000000..6065685 --- /dev/null +++ b/src/card/base/ReadBinaryBuilder.cpp @@ -0,0 +1,25 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ReadBinaryBuilder.h" + +#include + +using namespace governikus; + +Q_DECLARE_LOGGING_CATEGORY(card) + +ReadBinaryBuilder::ReadBinaryBuilder(uint pOffset, int pLe) + : CommandApduBuilder() + , mOffset(pOffset) + , mLe(pLe) +{ +} + + +CommandApdu ReadBinaryBuilder::build() +{ + static const char INS = char(0xB0); + return CommandApdu(CommandApdu::CLA, INS, static_cast((mOffset & 0xff00) >> 8), static_cast(mOffset & 0xff), QByteArray(), mLe); +} diff --git a/src/card/base/ReadBinaryBuilder.h b/src/card/base/ReadBinaryBuilder.h new file mode 100644 index 0000000..b3a4a1a --- /dev/null +++ b/src/card/base/ReadBinaryBuilder.h @@ -0,0 +1,26 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" + +class test_Commands; + +namespace governikus +{ + +class ReadBinaryBuilder + : public CommandApduBuilder +{ + private: + uint mOffset; + int mLe; + + public: + explicit ReadBinaryBuilder(uint pOffset, int pLe); + CommandApdu build() override; +}; + +} // namespace governikus diff --git a/src/card/base/Reader.cpp b/src/card/base/Reader.cpp index 16f09fd..aa87303 100644 --- a/src/card/base/Reader.cpp +++ b/src/card/base/Reader.cpp @@ -2,10 +2,11 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ +#include "Reader.h" #include "asn1/PaceInfo.h" #include "CardConnectionWorker.h" -#include "Reader.h" +#include "MSEBuilder.h" #include @@ -74,10 +75,7 @@ void Reader::update() CardReturnCode Reader::updateRetryCounter(QSharedPointer pCardConnectionWorker) { - int newRetryCounter = -1; - bool newPinDeactivated = false; - - CardReturnCode returnCode = getRetryCounter(pCardConnectionWorker, newRetryCounter, newPinDeactivated); + auto [returnCode, newRetryCounter, newPinDeactivated] = getRetryCounter(pCardConnectionWorker); if (returnCode == CardReturnCode::OK) { bool emitSignal = mReaderInfo.isRetryCounterDetermined() && ((newRetryCounter != mReaderInfo.getRetryCounter()) || (newPinDeactivated != mReaderInfo.isPinDeactivated())); @@ -96,12 +94,12 @@ CardReturnCode Reader::updateRetryCounter(QSharedPointer p } -CardReturnCode Reader::getRetryCounter(QSharedPointer pCardConnectionWorker, int& pRetryCounter, bool& pPinDeactivated) +Reader::RetryCounterResult Reader::getRetryCounter(QSharedPointer pCardConnectionWorker) { if (!mReaderInfo.getCardInfo().getEfCardAccess()) { qCCritical(card) << "Cannot get EF.CardAccess"; - return CardReturnCode::COMMAND_FAILED; + return {CardReturnCode::COMMAND_FAILED}; } // we don't need to establish PACE with this protocol (i.e. we don't need to support it), so we just take the fist one @@ -119,20 +117,19 @@ CardReturnCode Reader::getRetryCounter(QSharedPointer pCar CardReturnCode returnCode = pCardConnectionWorker->transmit(mseBuilder.build(), mseSetAtResponse); if (returnCode != CardReturnCode::OK) { - return returnCode; + return {returnCode}; } const StatusCode statusCode = mseSetAtResponse.getReturnCode(); qCDebug(card) << "StatusCode:" << statusCode; if (statusCode == StatusCode::INVALID) { - return CardReturnCode::COMMAND_FAILED; + return {CardReturnCode::COMMAND_FAILED}; } - pRetryCounter = mseSetAtResponse.getRetryCounter(); - pPinDeactivated = statusCode == StatusCode::PIN_DEACTIVATED; - - return CardReturnCode::OK; + const int retryCounter = mseSetAtResponse.getRetryCounter(); + const bool pinDeactivated = statusCode == StatusCode::PIN_DEACTIVATED; + return {CardReturnCode::OK, retryCounter, pinDeactivated}; } diff --git a/src/card/base/Reader.h b/src/card/base/Reader.h index 1352aa0..76fcbf4 100644 --- a/src/card/base/Reader.h +++ b/src/card/base/Reader.h @@ -11,8 +11,6 @@ #include #include -class test_Reader; - namespace governikus { @@ -21,22 +19,28 @@ class Reader { Q_OBJECT - protected: + public: enum class CardEvent { NONE, CARD_INSERTED, CARD_REMOVED, }; + protected: ReaderInfo mReaderInfo; int mTimerId; void timerEvent(QTimerEvent* pEvent) override; private: - friend class ::test_Reader; virtual CardEvent updateCard() = 0; - CardReturnCode getRetryCounter(QSharedPointer pCardConnectionWorker, int& pRetryCounter, bool& pPinDeactivated); + struct RetryCounterResult + { + CardReturnCode cardReturnCode = CardReturnCode::COMMAND_FAILED; + int retryCounter = -1; + bool pinDeactivated = false; + }; + RetryCounterResult getRetryCounter(QSharedPointer pCardConnectionWorker); void fireUpdateSignal(CardEvent pCardEvent); @@ -94,7 +98,10 @@ class ConnectableReader virtual ~ConnectableReader() override = default; virtual void connectReader() = 0; - virtual void disconnectReader() = 0; + virtual void disconnectReader(const QString& pError = QString()) = 0; + + Q_SIGNALS: + void fireReaderDisconnected(); }; } // namespace governikus diff --git a/src/card/base/ReaderFilter.h b/src/card/base/ReaderFilter.h index a6f344a..39d3bb4 100644 --- a/src/card/base/ReaderFilter.h +++ b/src/card/base/ReaderFilter.h @@ -29,13 +29,13 @@ class ReaderFilter Q_DECLARE_FLAGS(FilterTypes, FilterType) private: - ReaderFilter::FilterTypes mFilterType; + const ReaderFilter::FilterTypes mFilterType; const QVector mPluginTypes; public: ReaderFilter(); - ReaderFilter(const QVector& pPluginTypes); ReaderFilter(const ReaderFilter::FilterType pFilterType); + explicit ReaderFilter(const QVector& pPluginTypes); QVector apply(const QVector& pPluginType) const; QVector apply(const QVector& pInputList) const; diff --git a/src/card/base/ReaderInfo.h b/src/card/base/ReaderInfo.h index 82a7adf..756d012 100644 --- a/src/card/base/ReaderInfo.h +++ b/src/card/base/ReaderInfo.h @@ -62,6 +62,12 @@ class ReaderInfo } + bool hasPassport() const + { + return mCardInfo.isPassport(); + } + + int getRetryCounter() const { return mCardInfo.getRetryCounter(); diff --git a/src/card/base/ReaderManager.cpp b/src/card/base/ReaderManager.cpp index a803e8f..9f17320 100644 --- a/src/card/base/ReaderManager.cpp +++ b/src/card/base/ReaderManager.cpp @@ -119,14 +119,15 @@ void ReaderManager::startScan(ReaderManagerPlugInType pType, bool pAutoConnect) void ReaderManager::startScanAll(bool pAutoConnect) { - for (const auto& plugInType : Enum::getList()) + const auto list = Enum::getList(); + for (const auto& plugInType : list) { startScan(plugInType, pAutoConnect); } } -void ReaderManager::stopScan(ReaderManagerPlugInType pType) +void ReaderManager::stopScan(ReaderManagerPlugInType pType, const QString& pError) { const QMutexLocker mutexLocker(&mMutex); @@ -137,24 +138,35 @@ void ReaderManager::stopScan(ReaderManagerPlugInType pType) } QMetaObject::invokeMethod(mWorker.data(), [ = ] { - mWorker->stopScan(pType); + mWorker->stopScan(pType, pError); }, Qt::QueuedConnection); } void ReaderManager::stopScanAll() { - for (const auto& plugInType : Enum::getList()) + const auto list = Enum::getList(); + for (const auto& plugInType : list) { stopScan(plugInType); } } -bool ReaderManager::isScanRunning() +bool ReaderManager::isScanRunning() const { bool running = false; - QMetaObject::invokeMethod(mWorker.data(), &ReaderManagerWorker::isScanRunning, Qt::BlockingQueuedConnection, &running); + QMetaObject::invokeMethod(mWorker.data(), qOverload<>(&ReaderManagerWorker::isScanRunning), Qt::BlockingQueuedConnection, &running); + return running; +} + + +bool ReaderManager::isScanRunning(ReaderManagerPlugInType pType) const +{ + bool running = false; + QMetaObject::invokeMethod(mWorker.data(), [ = ] { + return mWorker->isScanRunning(pType); + }, Qt::BlockingQueuedConnection, &running); return running; } @@ -171,7 +183,7 @@ QVector ReaderManager::getPlugInInfos() const QVector ReaderManager::getReaderInfos(ReaderManagerPlugInType pType) const { - return getReaderInfos(QVector {pType}); + return getReaderInfos(ReaderFilter({pType})); } @@ -207,34 +219,6 @@ void ReaderManager::updateReaderInfo(const QString& pReaderName) } -void ReaderManager::connectReader(const QString& pReaderName) -{ - const QMutexLocker mutexLocker(&mMutex); - - QMetaObject::invokeMethod(mWorker.data(), [ = ] { - mWorker->connectReader(pReaderName); - }, Qt::QueuedConnection); -} - - -void ReaderManager::disconnectReader(const QString& pReaderName) -{ - const QMutexLocker mutexLocker(&mMutex); - - QMetaObject::invokeMethod(mWorker.data(), [ = ] { - mWorker->disconnectReader(pReaderName); - }, Qt::QueuedConnection); -} - - -void ReaderManager::disconnectAllReaders() -{ - const QMutexLocker mutexLocker(&mMutex); - - QMetaObject::invokeMethod(mWorker.data(), &ReaderManagerWorker::disconnectAllReaders, Qt::QueuedConnection); -} - - void ReaderManager::updateRetryCounters() { const QMutexLocker mutexLocker(&mMutex); diff --git a/src/card/base/ReaderManager.h b/src/card/base/ReaderManager.h index 314dc26..3a64e28 100644 --- a/src/card/base/ReaderManager.h +++ b/src/card/base/ReaderManager.h @@ -58,14 +58,19 @@ class ReaderManager /*! * Queries if any plugin is currently scanning */ - bool isScanRunning(); + bool isScanRunning() const; + + /*! + * Queries if a plugin with the requested type is currently scanning + */ + bool isScanRunning(ReaderManagerPlugInType pType) const; /*! * Stops started scan for devices. * Be aware that some plugins don't finish the whole scan if you * abort it with stopScan! */ - void stopScan(ReaderManagerPlugInType pType); + void stopScan(ReaderManagerPlugInType pType, const QString& pError = QString()); QVector getPlugInInfos() const; QVector getReaderInfos(ReaderManagerPlugInType pType) const; @@ -82,7 +87,7 @@ class ReaderManager template QMetaObject::Connection callCreateCardConnectionCommand(const QString& pReaderName, const typename QtPrivate::FunctionPointer::Object* pReceiver, T pSlot) { - CreateCardConnectionCommand* command = new CreateCardConnectionCommand(pReaderName, mWorker); + auto* command = new CreateCardConnectionCommand(pReaderName, mWorker); QMetaObject::Connection connection = connect(command, &CreateCardConnectionCommand::fireCommandDone, pReceiver, pSlot, Qt::UniqueConnection); if (connection) { @@ -90,7 +95,7 @@ class ReaderManager } else { - qCritical() << "Cannot invoke CreateCardConnectionCommand command"; + qCCritical(card) << "Cannot invoke CreateCardConnectionCommand command"; command->deleteLater(); } @@ -98,9 +103,6 @@ class ReaderManager } - void connectReader(const QString& pReaderName); - void disconnectReader(const QString& pReaderName); - void disconnectAllReaders(); void updateRetryCounters(); Q_SIGNALS: diff --git a/src/card/base/ReaderManagerPlugIn.cpp b/src/card/base/ReaderManagerPlugIn.cpp index 47508bd..c493e99 100644 --- a/src/card/base/ReaderManagerPlugIn.cpp +++ b/src/card/base/ReaderManagerPlugIn.cpp @@ -18,11 +18,21 @@ ReaderManagerPlugIn::ReaderManagerPlugIn(ReaderManagerPlugInType pPlugInType, void ReaderManagerPlugIn::startScan(bool /*pAutoConnect*/) { - mScanRunning = true; + if (!mScanRunning) + { + mScanRunning = true; + Q_EMIT fireStatusChanged(mInfo); + } } -void ReaderManagerPlugIn::stopScan() +void ReaderManagerPlugIn::stopScan(const QString& pError) { - mScanRunning = false; + Q_UNUSED(pError); + + if (mScanRunning) + { + mScanRunning = false; + Q_EMIT fireStatusChanged(mInfo); + } } diff --git a/src/card/base/ReaderManagerPlugIn.h b/src/card/base/ReaderManagerPlugIn.h index acc6d10..659d1f1 100644 --- a/src/card/base/ReaderManagerPlugIn.h +++ b/src/card/base/ReaderManagerPlugIn.h @@ -28,7 +28,7 @@ class ReaderManagerPlugIn bool mScanRunning; protected: - void setReaderInfoEnabled(bool pEnabled) + void setPlugInEnabled(bool pEnabled) { if (mInfo.isEnabled() != pEnabled) { @@ -38,13 +38,13 @@ class ReaderManagerPlugIn } - void setReaderInfoAvailable(bool pAvailable) + void setPlugInAvailable(bool pAvailable) { mInfo.setAvailable(pAvailable); } - void setReaderInfoResponding(bool pResponding) + void setPlugInResponding(bool pResponding) { if (mInfo.isResponding() != pResponding) { @@ -54,7 +54,7 @@ class ReaderManagerPlugIn } - void setReaderInfoValue(ReaderManagerPlugInInfo::Key pKey, const QVariant& pValue) + void setPlugInValue(ReaderManagerPlugInInfo::Key pKey, const QVariant& pValue) { mInfo.setValue(pKey, pValue); } @@ -93,7 +93,7 @@ class ReaderManagerPlugIn virtual void startScan(bool pAutoConnect); - virtual void stopScan(); + virtual void stopScan(const QString& pError = QString()); Q_SIGNALS: void fireStatusChanged(const ReaderManagerPlugInInfo& pInfo); diff --git a/src/card/base/ReaderManagerWorker.cpp b/src/card/base/ReaderManagerWorker.cpp index 1f06af5..37184f4 100644 --- a/src/card/base/ReaderManagerWorker.cpp +++ b/src/card/base/ReaderManagerWorker.cpp @@ -115,7 +115,7 @@ void ReaderManagerWorker::startScan(ReaderManagerPlugInType pType, bool pAutoCon } -void ReaderManagerWorker::stopScan(ReaderManagerPlugInType pType) +void ReaderManagerWorker::stopScan(ReaderManagerPlugInType pType, const QString& pError) { Q_ASSERT(QObject::thread() == QThread::currentThread()); @@ -124,7 +124,7 @@ void ReaderManagerWorker::stopScan(ReaderManagerPlugInType pType) if (plugin->getInfo().getPlugInType() == pType) { qCDebug(card) << "Stop scan on plugin:" << plugin->metaObject()->className(); - plugin->stopScan(); + plugin->stopScan(pError); } } } @@ -145,13 +145,28 @@ bool ReaderManagerWorker::isScanRunning() const } +bool ReaderManagerWorker::isScanRunning(ReaderManagerPlugInType pType) const +{ + Q_ASSERT(QObject::thread() == QThread::currentThread()); + + for (const auto& plugin : qAsConst(mPlugIns)) + { + if (plugin->getInfo().getPlugInType() == pType && plugin->isScanRunning()) + { + return true; + } + } + return false; +} + + QVector ReaderManagerWorker::getPlugInInfos() const { Q_ASSERT(QObject::thread() == QThread::currentThread()); QVector infos; infos.reserve(mPlugIns.size()); - for (const ReaderManagerPlugIn* plugIn : mPlugIns) + for (const ReaderManagerPlugIn* const plugIn : qAsConst(mPlugIns)) { infos += plugIn->getInfo(); } @@ -169,7 +184,7 @@ QVector ReaderManagerWorker::getReaderInfos(const ReaderFilter& pFil for (const auto& plugIn : plugIns) { const auto& readerList = plugIn->getReaders(); - for (const Reader* reader : readerList) + for (const Reader* const reader : readerList) { list += reader->getReaderInfo(); } @@ -182,7 +197,7 @@ ReaderInfo ReaderManagerWorker::getReaderInfo(const QString& pReaderName) const { Q_ASSERT(QObject::thread() == QThread::currentThread()); - const Reader* reader = getReader(pReaderName); + const Reader* const reader = getReader(pReaderName); return reader ? reader->getReaderInfo() : ReaderInfo(pReaderName); } @@ -192,7 +207,7 @@ void ReaderManagerWorker::updateReaderInfo(const QString& pReaderName) Q_ASSERT(QObject::thread() == QThread::currentThread()); Reader* reader = getReader(pReaderName); - if (!reader) + if (reader == nullptr) { qCWarning(card) << "Requested reader does not exist:" << pReaderName; return; @@ -235,39 +250,6 @@ void ReaderManagerWorker::createCardConnectionWorker(const QString& pReaderName) } -void ReaderManagerWorker::connectReader(const QString& pReaderName) -{ - Q_ASSERT(QObject::thread() == QThread::currentThread()); - - if (ConnectableReader* reader = qobject_cast(getReader(pReaderName))) - { - reader->connectReader(); - } -} - - -void ReaderManagerWorker::disconnectReader(const QString& pReaderName) -{ - Q_ASSERT(QObject::thread() == QThread::currentThread()); - - if (ConnectableReader* reader = qobject_cast(getReader(pReaderName))) - { - reader->disconnectReader(); - } -} - - -void ReaderManagerWorker::disconnectAllReaders() -{ - Q_ASSERT(QObject::thread() == QThread::currentThread()); - - for (auto& info : getReaderInfos()) - { - disconnectReader(info.getName()); - } -} - - void ReaderManagerWorker::updateRetryCounters() { Q_ASSERT(QObject::thread() == QThread::currentThread()); diff --git a/src/card/base/ReaderManagerWorker.h b/src/card/base/ReaderManagerWorker.h index e3fc007..458d4ac 100644 --- a/src/card/base/ReaderManagerWorker.h +++ b/src/card/base/ReaderManagerWorker.h @@ -34,18 +34,16 @@ class ReaderManagerWorker ~ReaderManagerWorker(); Q_INVOKABLE void startScan(ReaderManagerPlugInType pType, bool pAutoConnect); - Q_INVOKABLE void stopScan(ReaderManagerPlugInType pType); + Q_INVOKABLE void stopScan(ReaderManagerPlugInType pType, const QString& pError); Q_INVOKABLE bool isScanRunning() const; + Q_INVOKABLE bool isScanRunning(ReaderManagerPlugInType pType) const; Q_INVOKABLE QVector getPlugInInfos() const; Q_INVOKABLE QVector getReaderInfos(const ReaderFilter& pFilter = ReaderFilter()) const; Q_INVOKABLE ReaderInfo getReaderInfo(const QString& pReaderName) const; Q_INVOKABLE void updateReaderInfo(const QString& pReaderName); Q_INVOKABLE void createCardConnectionWorker(const QString& pReaderName); - Q_INVOKABLE void connectReader(const QString& pReaderName); - Q_INVOKABLE void disconnectReader(const QString& pReaderName); Q_INVOKABLE void updateRetryCounters(); - Q_INVOKABLE void disconnectAllReaders(); Q_SIGNALS: void firePluginAdded(const ReaderManagerPlugInInfo& pInfo); diff --git a/src/card/base/ResetRetryCounterBuilder.cpp b/src/card/base/ResetRetryCounterBuilder.cpp new file mode 100644 index 0000000..e477f4c --- /dev/null +++ b/src/card/base/ResetRetryCounterBuilder.cpp @@ -0,0 +1,29 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ResetRetryCounterBuilder.h" + +#include + +using namespace governikus; + +Q_DECLARE_LOGGING_CATEGORY(card) + + +ResetRetryCounterBuilder::ResetRetryCounterBuilder(const QByteArray& pPin) + : CommandApduBuilder() + , mPin(pPin) +{ +} + + +CommandApdu ResetRetryCounterBuilder::build() +{ + static const char INS = 0x2c; + // P1: 2 (change), 3 (unblock) + const char p1 = mPin.isNull() ? char(3) : char(2); + // P2: 3 (PIN) (2 (CAN) -- not used) + // data: new PIN, when changing + return CommandApdu(CommandApdu::CLA, INS, p1, 3, mPin); +} diff --git a/src/card/base/ResetRetryCounterBuilder.h b/src/card/base/ResetRetryCounterBuilder.h new file mode 100644 index 0000000..a7e9059 --- /dev/null +++ b/src/card/base/ResetRetryCounterBuilder.h @@ -0,0 +1,25 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" + +class test_Commands; + +namespace governikus +{ + +class ResetRetryCounterBuilder + : public CommandApduBuilder +{ + public: + explicit ResetRetryCounterBuilder(const QByteArray& pPin = QByteArray()); + CommandApdu build() override; + + private: + QByteArray mPin; +}; + +} // namespace governikus diff --git a/src/card/base/ResponseApdu.cpp b/src/card/base/ResponseApdu.cpp index 465d9d7..d2f12fe 100644 --- a/src/card/base/ResponseApdu.cpp +++ b/src/card/base/ResponseApdu.cpp @@ -16,7 +16,7 @@ ResponseApdu::ResponseApdu(StatusCode pStatusCode) { char buffer[2]; qToBigEndian(Enum::getValue(pStatusCode), buffer); - setBuffer(QByteArray(buffer, 2)); + ResponseApdu::setBuffer(QByteArray(buffer, 2)); } @@ -26,11 +26,6 @@ ResponseApdu::ResponseApdu(const QByteArray& pBuffer) } -ResponseApdu::~ResponseApdu() -{ -} - - void ResponseApdu::setBuffer(const QByteArray& pBuffer) { mBuffer = pBuffer; @@ -151,6 +146,7 @@ CardReturnCode ResponseApdu::getCardReturnCode() const } Q_UNREACHABLE(); + return CardReturnCode::UNDEFINED; } diff --git a/src/card/base/ResponseApdu.h b/src/card/base/ResponseApdu.h index 1ce1613..d13f80e 100644 --- a/src/card/base/ResponseApdu.h +++ b/src/card/base/ResponseApdu.h @@ -86,9 +86,9 @@ class ResponseApdu static const int RETURN_CODE_LENGTH = 2; public: - ResponseApdu(StatusCode pStatusCode); - ResponseApdu(const QByteArray& pBuffer = QByteArray()); - virtual ~ResponseApdu(); + explicit ResponseApdu(StatusCode pStatusCode); + explicit ResponseApdu(const QByteArray& pBuffer = QByteArray()); + virtual ~ResponseApdu() = default; virtual void setBuffer(const QByteArray& pBuffer); QByteArray getData() const; diff --git a/src/card/base/SecureMessagingResponse.h b/src/card/base/SecureMessagingResponse.h index 8161609..667bc08 100644 --- a/src/card/base/SecureMessagingResponse.h +++ b/src/card/base/SecureMessagingResponse.h @@ -7,8 +7,7 @@ #pragma once #include "asn1/ASN1TemplateUtil.h" -#include "Commands.h" - +#include "ResponseApdu.h" namespace governikus { @@ -56,7 +55,7 @@ class SecureMessagingResponse Q_DISABLE_COPY(SecureMessagingResponse) public: - SecureMessagingResponse(const QByteArray& pBuffer); + explicit SecureMessagingResponse(const QByteArray& pBuffer); virtual ~SecureMessagingResponse(); /*! diff --git a/src/card/base/SelectBuilder.cpp b/src/card/base/SelectBuilder.cpp new file mode 100644 index 0000000..f268c69 --- /dev/null +++ b/src/card/base/SelectBuilder.cpp @@ -0,0 +1,27 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "SelectBuilder.h" + +#include + +Q_DECLARE_LOGGING_CATEGORY(card) + +using namespace governikus; + +/* + * SelectBuilder + */ +SelectBuilder::SelectBuilder(const FileRef& pFileRef) + : CommandApduBuilder() + , mFileRef(pFileRef) +{ +} + + +CommandApdu SelectBuilder::build() +{ + static const char INS = char(0xA4); + return CommandApdu(CommandApdu::CLA, INS, mFileRef.type, static_cast(P2::NONE), mFileRef.path); +} diff --git a/src/card/base/SelectBuilder.h b/src/card/base/SelectBuilder.h new file mode 100644 index 0000000..01a2e27 --- /dev/null +++ b/src/card/base/SelectBuilder.h @@ -0,0 +1,34 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "CommandApduBuilder.h" +#include "FileRef.h" + +namespace governikus +{ + +class SelectBuilder + : public CommandApduBuilder +{ + private: + const FileRef mFileRef; + + public: + enum class P1 : char + { + SELECT_MF = 0x00, CHILD_DF = 0x01, CHILD_EF = 0x02, PARENT_DF = 0x03, APPLICATION_ID = 0x04, ABS_PATH = 0x08, REL_PATH = 0x09, + }; + + enum class P2 : char + { + FCI = 0x00, FCP = 0x04, FMD = 0x08, NONE = 0x0c, + }; + + explicit SelectBuilder(const FileRef& pFileRef); + CommandApdu build() override; +}; + +} // namespace governikus diff --git a/src/card/base/SmartCardDefinitions.h b/src/card/base/SmartCardDefinitions.h index a80f5c2..98121d9 100644 --- a/src/card/base/SmartCardDefinitions.h +++ b/src/card/base/SmartCardDefinitions.h @@ -11,6 +11,7 @@ namespace governikus defineEnumType(CardType, NONE, UNKNOWN, + PASSPORT, EID_CARD) defineTypedEnumType(PacePasswordId, char, diff --git a/src/card/base/asn1/ASN1TemplateUtil.h b/src/card/base/asn1/ASN1TemplateUtil.h index 7dbf69f..4eee637 100644 --- a/src/card/base/asn1/ASN1TemplateUtil.h +++ b/src/card/base/asn1/ASN1TemplateUtil.h @@ -104,7 +104,7 @@ QSharedPointer decodeObject(const QByteArray& pData, bool pLogging = true) { ERR_clear_error(); const char* tmp = pData.constData(); - const unsigned char** dataPointer = reinterpret_cast(&tmp); + const auto** dataPointer = reinterpret_cast(&tmp); T* object = nullptr; if (!decodeAsn1Object(&object, dataPointer, pData.length()) && pLogging) diff --git a/src/card/base/asn1/ASN1Util.cpp b/src/card/base/asn1/ASN1Util.cpp index 0b14cd2..bac4c30 100644 --- a/src/card/base/asn1/ASN1Util.cpp +++ b/src/card/base/asn1/ASN1Util.cpp @@ -8,7 +8,9 @@ #include #include -#include +#include + +Q_DECLARE_LOGGING_CATEGORY(card) using namespace governikus; @@ -33,7 +35,7 @@ QByteArray Asn1ObjectUtil::convertTo(const ASN1_OBJECT* pAsn1Object) char buf[80] = {}; if (OBJ_obj2txt(buf, sizeof(buf), pAsn1Object, 1) == sizeof(buf)) { - qCritical() << "The OID may not fit into the given array, just return an empty string"; + qCCritical(card) << "The OID may not fit into the given array, just return an empty string"; return QByteArray(); } return QByteArray(buf); @@ -43,11 +45,11 @@ QByteArray Asn1ObjectUtil::convertTo(const ASN1_OBJECT* pAsn1Object) QByteArray Asn1ObjectUtil::getValue(const ASN1_OBJECT* pAsn1Object) { #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) - return QByteArray(reinterpret_cast(pAsn1Object->data), pAsn1Object->length); + return QByteArray(reinterpret_cast(pAsn1Object->data), pAsn1Object->length); #else const size_t len = OBJ_length(pAsn1Object); - const unsigned char* data = OBJ_get0_data(pAsn1Object); + const unsigned char* const data = OBJ_get0_data(pAsn1Object); return QByteArray(reinterpret_cast(data), static_cast(len)); #endif @@ -136,7 +138,7 @@ QByteArray Asn1BCDDateUtil::convertFromQDateToUnpackedBCD(QDate pDate) if (aBCD.length() != 6) { - qCritical() << "Invalid date length."; + qCCritical(card) << "Invalid date length."; return QByteArray(); } @@ -154,13 +156,13 @@ QDate Asn1BCDDateUtil::convertFromUnpackedBCDToQDate(ASN1_OCTET_STRING* pDateBCD { if (pDateBCD == nullptr) { - qCritical() << "Date pointer null."; + qCCritical(card) << "Date pointer null."; return QDate(); } if (pDateBCD->length != 6) { - qCritical() << "Invalid date length."; + qCCritical(card) << "Invalid date length."; return QDate(); } diff --git a/src/card/base/asn1/AccessRoleAndRight.cpp b/src/card/base/asn1/AccessRoleAndRight.cpp index 933c207..4bd9787 100644 --- a/src/card/base/asn1/AccessRoleAndRight.cpp +++ b/src/card/base/asn1/AccessRoleAndRight.cpp @@ -4,7 +4,10 @@ #include "AccessRoleAndRight.h" -#include +#include + +Q_DECLARE_LOGGING_CATEGORY(card) + using namespace governikus; @@ -99,116 +102,152 @@ QString AccessRoleAndRightsUtil::toDisplayText(AccessRight pRight) switch (pRight) { case AccessRight::WRITE_DG17: + //: LABEL ALL_PLATFORMS return tr("WRITE_DG17"); case AccessRight::WRITE_DG18: + //: LABEL ALL_PLATFORMS return tr("WRITE_DG18"); case AccessRight::WRITE_DG19: + //: LABEL ALL_PLATFORMS return tr("WRITE_DG19"); case AccessRight::WRITE_DG20: + //: LABEL ALL_PLATFORMS return tr("WRITE_DG20"); case AccessRight::WRITE_DG21: + //: LABEL ALL_PLATFORMS return tr("WRITE_DG21"); /* 32-29: reserved for future use */ case AccessRight::READ_DG21: + //: LABEL ALL_PLATFORMS return tr("Optional data"); case AccessRight::READ_DG20: + //: LABEL ALL_PLATFORMS return tr("Residence permit II"); case AccessRight::READ_DG19: // "Auxiliary conditions" are replaced with "Residence permit I" in agreement with the BMI + //: LABEL ALL_PLATFORMS return tr("Residence permit I"); case AccessRight::READ_DG18: + //: LABEL ALL_PLATFORMS return tr("Community-ID"); case AccessRight::READ_DG17: + //: LABEL ALL_PLATFORMS return tr("Address"); case AccessRight::READ_DG16: + //: LABEL ALL_PLATFORMS return tr("RFU"); case AccessRight::READ_DG15: + //: LABEL ALL_PLATFORMS return tr("RFU"); case AccessRight::READ_DG14: + //: LABEL ALL_PLATFORMS return tr("RFU"); case AccessRight::READ_DG13: + //: LABEL ALL_PLATFORMS return tr("Birth name"); case AccessRight::READ_DG12: + //: LABEL ALL_PLATFORMS return tr("Optional data"); case AccessRight::READ_DG11: + //: LABEL ALL_PLATFORMS return tr("Gender"); case AccessRight::READ_DG10: + //: LABEL ALL_PLATFORMS return tr("Nationality"); case AccessRight::READ_DG09: + //: LABEL ALL_PLATFORMS return tr("Place of birth"); case AccessRight::READ_DG08: + //: LABEL ALL_PLATFORMS return tr("Date of birth"); case AccessRight::READ_DG07: + //: LABEL ALL_PLATFORMS return tr("Doctoral degree"); case AccessRight::READ_DG06: + //: LABEL ALL_PLATFORMS return tr("Religious / artistic name"); case AccessRight::READ_DG05: + //: LABEL ALL_PLATFORMS return tr("Family name"); case AccessRight::READ_DG04: + //: LABEL ALL_PLATFORMS return tr("Given name(s)"); case AccessRight::READ_DG03: + //: LABEL ALL_PLATFORMS return tr("Valid until"); case AccessRight::READ_DG02: + //: LABEL ALL_PLATFORMS return tr("Issuing country"); case AccessRight::READ_DG01: + //: LABEL ALL_PLATFORMS return tr("Document type"); case AccessRight::INSTALL_QUAL_CERT: + //: LABEL ALL_PLATFORMS return tr("Installation of qualified signature certificates"); case AccessRight::INSTALL_CERT: + //: LABEL ALL_PLATFORMS return tr("Installation of signature certificates"); case AccessRight::PIN_MANAGEMENT: + //: LABEL ALL_PLATFORMS return tr("PIN Management"); case AccessRight::CAN_ALLOWED: + //: LABEL ALL_PLATFORMS return tr("CAN allowed"); case AccessRight::PRIVILEGED_TERMINAL: + //: LABEL ALL_PLATFORMS return tr("Privileged terminal"); case AccessRight::RESTRICTED_IDENTIFICATION: + //: LABEL ALL_PLATFORMS return tr("Pseudonym"); case AccessRight::COMMUNITY_ID_VERIFICATION: + //: LABEL ALL_PLATFORMS return tr("Address verification"); case AccessRight::AGE_VERIFICATION: + //: LABEL ALL_PLATFORMS return tr("Age verification"); case AccessRight::RFU_29: case AccessRight::RFU_30: case AccessRight::RFU_31: case AccessRight::RFU_32: + //: LABEL ALL_PLATFORMS return tr("Unknown (reserved)"); } + //: LABEL ALL_PLATFORMS return tr("Unknown"); } @@ -218,7 +257,7 @@ QLatin1String AccessRoleAndRightsUtil::toTechnicalName(AccessRight pRight) const auto name = getEnumName(static_cast(pRight)); if (name.isEmpty()) { - qCritical() << "Requested AccessRight without mapping:" << pRight; + qCCritical(card) << "Requested AccessRight without mapping:" << pRight; } return name; } @@ -250,9 +289,9 @@ bool AccessRoleAndRightsUtil::fromTechnicalName(const QString& pStr, const std:: } -bool AccessRoleAndRightsUtil::fromTechnicalName(const char* pStr, const std::function& pFunc) +bool AccessRoleAndRightsUtil::fromTechnicalName(const char* const pStr, const std::function& pFunc) { - const AccessRightNames undefined = static_cast(UINT_MAX); + const auto undefined = static_cast(UINT_MAX); auto entry = Enum::fromString(pStr, undefined); if (entry != undefined) diff --git a/src/card/base/asn1/AccessRoleAndRight.h b/src/card/base/asn1/AccessRoleAndRight.h index 5373a54..dbf9ab1 100644 --- a/src/card/base/asn1/AccessRoleAndRight.h +++ b/src/card/base/asn1/AccessRoleAndRight.h @@ -107,7 +107,7 @@ class AccessRoleAndRightsUtil static QList mAllRights; static QList mAllDisplayedOrderedRights; AccessRoleAndRightsUtil() = delete; - static bool fromTechnicalName(const char* pStr, const std::function& pFunc); + static bool fromTechnicalName(const char* const pStr, const std::function& pFunc); static QStringList fromTechnicalName(const QStringList& pStr); public: diff --git a/src/card/base/asn1/AuthenticatedAuxiliaryData.h b/src/card/base/asn1/AuthenticatedAuxiliaryData.h index a4134fe..da0e528 100644 --- a/src/card/base/asn1/AuthenticatedAuxiliaryData.h +++ b/src/card/base/asn1/AuthenticatedAuxiliaryData.h @@ -42,12 +42,11 @@ namespace governikus */ -typedef struct auxdatatemplate_st +using AuxDataTemplate = struct auxdatatemplate_st { ASN1_OBJECT* mAuxId; ASN1_TYPE* mExtInfo; - -} AuxDataTemplate; +}; #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) DECLARE_STACK_OF(AuxDataTemplate) @@ -63,7 +62,7 @@ class AuthenticatedAuxiliaryData friend class QSharedPointer; QSharedPointer mData; - AuthenticatedAuxiliaryData(const QSharedPointer& pData); + explicit AuthenticatedAuxiliaryData(const QSharedPointer& pData); AuxDataTemplate* getAuxDataTemplateFor(KnownOIDs::AuxilaryData pData) const; QString getRequiredAge(const QDate& pEffectiveDate) const; diff --git a/src/card/base/asn1/CVCertificate.cpp b/src/card/base/asn1/CVCertificate.cpp index 735cb30..6ee6002 100644 --- a/src/card/base/asn1/CVCertificate.cpp +++ b/src/card/base/asn1/CVCertificate.cpp @@ -50,8 +50,8 @@ IMPLEMENT_ASN1_OBJECT(CVCertificate) int CVCertificate::decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg) { - Q_UNUSED(pIt); - Q_UNUSED(pExarg); + Q_UNUSED(pIt) + Q_UNUSED(pExarg) if (pOperation == ASN1_OP_D2I_POST) { if (auto cvc = reinterpret_cast(*pVal)) @@ -59,11 +59,11 @@ int CVCertificate::decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ cvc->mEcdsaSignature = EcUtil::create(ECDSA_SIG_new()); QByteArray sigValue = Asn1OctetStringUtil::getValue(cvc->mSignature); - const unsigned char* sig = reinterpret_cast(sigValue.data()); + const auto* const sig = reinterpret_cast(sigValue.data()); int siglen = sigValue.size(); - BIGNUM* r = BN_bin2bn(sig, siglen / 2, 0); - BIGNUM* s = BN_bin2bn(sig + (siglen / 2), siglen / 2, 0); + BIGNUM* r = BN_bin2bn(sig, siglen / 2, nullptr); + BIGNUM* s = BN_bin2bn(sig + (siglen / 2), siglen / 2, nullptr); #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) cvc->mEcdsaSignature.data()->r = r; diff --git a/src/card/base/asn1/CVCertificate.h b/src/card/base/asn1/CVCertificate.h index 9d6dbc0..049728d 100644 --- a/src/card/base/asn1/CVCertificate.h +++ b/src/card/base/asn1/CVCertificate.h @@ -43,7 +43,7 @@ struct SIGNATURE }; -typedef struct cvcertificate_st +using CVCertificate = struct cvcertificate_st { CVCertificateBody* mBody; SIGNATURE* mSignature; @@ -62,8 +62,7 @@ typedef struct cvcertificate_st bool isIssuedBy(const cvcertificate_st& pIssuer) const; static int decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg); - -} CVCertificate; +}; DECLARE_ASN1_FUNCTIONS(CVCertificate) diff --git a/src/card/base/asn1/CVCertificateBody.h b/src/card/base/asn1/CVCertificateBody.h index 7f747a8..87ca4cf 100644 --- a/src/card/base/asn1/CVCertificateBody.h +++ b/src/card/base/asn1/CVCertificateBody.h @@ -21,7 +21,7 @@ namespace governikus { -typedef struct CERTIFICATEEXTENSION_st +using CERTIFICATEEXTENSION = struct CERTIFICATEEXTENSION_st { ASN1_OBJECT* mOid; ASN1_OCTET_STRING* mObject1; @@ -32,7 +32,7 @@ typedef struct CERTIFICATEEXTENSION_st ASN1_OCTET_STRING* mObject6; ASN1_OCTET_STRING* mObject7; ASN1_OCTET_STRING* mObject8; -} CERTIFICATEEXTENSION; +}; DECLARE_ASN1_FUNCTIONS(CERTIFICATEEXTENSION) #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) @@ -41,7 +41,7 @@ DECLARE_STACK_OF(CERTIFICATEEXTENSION) DEFINE_STACK_OF(CERTIFICATEEXTENSION) #endif -typedef struct certificateprofilebody_st +using CVCertificateBody = struct certificateprofilebody_st { ASN1_OCTET_STRING* mCertificateProfileIdentifier; ASN1_STRING* mCertificationAuthorityReference; @@ -72,8 +72,7 @@ typedef struct certificateprofilebody_st QCryptographicHash::Algorithm getHashAlgorithm() const; QMap getExtensions() const; - -} CVCertificateBody; +}; DECLARE_ASN1_FUNCTIONS(CVCertificateBody) DECLARE_ASN1_OBJECT(CVCertificateBody) diff --git a/src/card/base/asn1/CVCertificateChain.h b/src/card/base/asn1/CVCertificateChain.h index 32a2668..444cd0e 100644 --- a/src/card/base/asn1/CVCertificateChain.h +++ b/src/card/base/asn1/CVCertificateChain.h @@ -10,7 +10,6 @@ #pragma once -#include "Commands.h" #include "CVCertificate.h" #include @@ -25,9 +24,8 @@ class CVCertificateChain bool mProductive; public: - CVCertificateChain(bool pProductive = true); - - CVCertificateChain(const QVector >& pCvcs, bool pProductive); + explicit CVCertificateChain(bool pProductive = true); + explicit CVCertificateChain(const QVector >& pCvcs, bool pProductive); /*! * Return the document verifier certificate. diff --git a/src/card/base/asn1/CVCertificateChainBuilder.h b/src/card/base/asn1/CVCertificateChainBuilder.h index e9ce8d5..3bb9546 100644 --- a/src/card/base/asn1/CVCertificateChainBuilder.h +++ b/src/card/base/asn1/CVCertificateChainBuilder.h @@ -28,12 +28,12 @@ class CVCertificateChainBuilder CVCertificateChain getChainForCertificationAuthority(const QByteArray& pCar) const; public: - CVCertificateChainBuilder(bool pProductive = true); + explicit CVCertificateChainBuilder(bool pProductive = true); /*! * Creates a new instance. All chains are build using the CVCs passed in as parameter. */ - CVCertificateChainBuilder(const QVector >& pCvcPool, bool pProductive); + explicit CVCertificateChainBuilder(const QVector >& pCvcPool, bool pProductive); /*! diff --git a/src/card/base/asn1/Chat.cpp b/src/card/base/asn1/Chat.cpp index f1c89f1..41e4a52 100644 --- a/src/card/base/asn1/Chat.cpp +++ b/src/card/base/asn1/Chat.cpp @@ -7,9 +7,9 @@ #include "Chat.h" #include "KnownOIDs.h" +#include -#include - +Q_DECLARE_LOGGING_CATEGORY(card) using namespace governikus; @@ -45,8 +45,8 @@ IMPLEMENT_ASN1_OBJECT(CHAT) int CHAT::decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg) { - Q_UNUSED(pIt); - Q_UNUSED(pExarg); + Q_UNUSED(pIt) + Q_UNUSED(pExarg) if (pOperation == ASN1_OP_D2I_POST) { if (auto chat = reinterpret_cast(*pVal)) @@ -54,7 +54,7 @@ int CHAT::decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt if (chat->getTemplate().size() != 5) { // per definition it's an OCTET STRING of fixed SIZE(5) - qDebug() << "CHAT Template has wrong size" << chat->getTemplate().size(); + qCDebug(card) << "CHAT Template has wrong size" << chat->getTemplate().size(); CHAT_free(chat); *pVal = nullptr; return CB_ERROR; @@ -62,7 +62,7 @@ int CHAT::decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt else if (chat->getType() != KnownOIDs::CHATType::ID_AT) { // currently we only support Authentication Terminals - qDebug() << "CHAT type is unsupported" << chat->getType(); + qCDebug(card) << "CHAT type is unsupported" << chat->getType(); CHAT_free(chat); *pVal = nullptr; return CB_ERROR; @@ -145,7 +145,7 @@ void CHAT::setAccessRole(AccessRole pRole) { if (pRole == AccessRole::UNKNOWN) { - qCritical() << "Cannot set" << pRole; + qCCritical(card) << "Cannot set" << pRole; return; } @@ -230,7 +230,7 @@ void chat_st::setTemplateBit(uint pBitIndex, bool pOn) { if (pBitIndex > 39) { - qCritical() << "Setting template bit > 39 not supported"; + qCCritical(card) << "Setting template bit > 39 not supported"; return; } if (mTemplate->length == 0) @@ -242,7 +242,7 @@ void chat_st::setTemplateBit(uint pBitIndex, bool pOn) } // because pBitIndex < 40, it follows that pBitIndex / 8 <= 4, so byteNumber has no underflow - quint8 byteNumber = static_cast(4 - (pBitIndex / 8)); + auto byteNumber = static_cast(4 - (pBitIndex / 8)); quint8 bitNumberInByte = pBitIndex % 8; if (pOn) { diff --git a/src/card/base/asn1/Chat.h b/src/card/base/asn1/Chat.h index 9a8adb1..70cab5a 100644 --- a/src/card/base/asn1/Chat.h +++ b/src/card/base/asn1/Chat.h @@ -62,7 +62,7 @@ namespace governikus */ -typedef struct chat_st +using CHAT = struct chat_st { ASN1_OBJECT* mType; ASN1_OCTET_STRING* mTemplate; @@ -96,9 +96,7 @@ typedef struct chat_st public: static int decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg); - - -} CHAT; +}; DECLARE_ASN1_FUNCTIONS(CHAT) DECLARE_ASN1_OBJECT(CHAT) diff --git a/src/card/base/asn1/EFCardSecurity.h b/src/card/base/asn1/EFCardSecurity.h index 18482a5..1be62ad 100644 --- a/src/card/base/asn1/EFCardSecurity.h +++ b/src/card/base/asn1/EFCardSecurity.h @@ -89,7 +89,7 @@ class EFCardSecurity friend class QSharedPointer; const QSharedPointer mSecurityInfos; - EFCardSecurity(const QSharedPointer& pSecurityInfos); + explicit EFCardSecurity(const QSharedPointer& pSecurityInfos); Q_DISABLE_COPY(EFCardSecurity) public: diff --git a/src/card/base/asn1/EcdsaPublicKey.cpp b/src/card/base/asn1/EcdsaPublicKey.cpp index 2f2caa0..b413002 100644 --- a/src/card/base/asn1/EcdsaPublicKey.cpp +++ b/src/card/base/asn1/EcdsaPublicKey.cpp @@ -22,14 +22,14 @@ namespace governikus int EcdsaPublicKey::decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg) { - Q_UNUSED(pIt); - Q_UNUSED(pExarg); + Q_UNUSED(pIt) + Q_UNUSED(pExarg) if (pOperation == ASN1_OP_D2I_POST) { if (auto ecdsaPublicKey = reinterpret_cast(*pVal)) { // According to TR-03110-3, chapter D.3.3: - // CONDITIONAL domain parameters MUST be either all present, except the cofactor, or all absent or all absent + // CONDITIONAL domain parameters MUST be either all present, except the cofactor, or all absent if ((ecdsaPublicKey->mPrimeModulus && ecdsaPublicKey->mFirstCoefficient && ecdsaPublicKey->mSecondCoefficient && ecdsaPublicKey->mBasePoint && ecdsaPublicKey->mOrderOfTheBasePoint) || (!ecdsaPublicKey->mPrimeModulus && !ecdsaPublicKey->mFirstCoefficient && !ecdsaPublicKey->mSecondCoefficient && !ecdsaPublicKey->mBasePoint && !ecdsaPublicKey->mOrderOfTheBasePoint)) { @@ -121,7 +121,7 @@ QSharedPointer EcdsaPublicKey::getEcKey() const void EcdsaPublicKey::initEcKey() { - if (!mPrimeModulus) + if (mPrimeModulus == nullptr) { return; } diff --git a/src/card/base/asn1/EcdsaPublicKey.h b/src/card/base/asn1/EcdsaPublicKey.h index db9c157..5c7b464 100644 --- a/src/card/base/asn1/EcdsaPublicKey.h +++ b/src/card/base/asn1/EcdsaPublicKey.h @@ -36,7 +36,7 @@ namespace governikus * UnsignedInteger -- see TR-03110 D.2.1.1 * */ -typedef struct ecdsapublickey_st +using EcdsaPublicKey = struct ecdsapublickey_st { ASN1_OBJECT* mObjectIdentifier; ASN1_OCTET_STRING* mPrimeModulus; @@ -66,8 +66,7 @@ typedef struct ecdsapublickey_st public: static int decodeCallback(int pOperation, ASN1_VALUE** pVal, const ASN1_ITEM* pIt, void* pExarg); - -} EcdsaPublicKey; +}; DECLARE_ASN1_FUNCTIONS(EcdsaPublicKey) diff --git a/src/card/base/asn1/KnownOIDs.cpp b/src/card/base/asn1/KnownOIDs.cpp index 2610819..efeaeba 100644 --- a/src/card/base/asn1/KnownOIDs.cpp +++ b/src/card/base/asn1/KnownOIDs.cpp @@ -25,6 +25,7 @@ QByteArray governikus::toByteArray(Base pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -40,6 +41,7 @@ QByteArray governikus::toByteArray(CertificateExtensions pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -58,6 +60,7 @@ QByteArray governikus::toByteArray(TermsOfUsageType pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -79,6 +82,7 @@ QByteArray governikus::toByteArray(CHATType pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -97,6 +101,7 @@ QByteArray governikus::toByteArray(AuxilaryData pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -118,6 +123,7 @@ QByteArray governikus::toByteArray(SecurityProtocol pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -159,6 +165,7 @@ QByteArray governikus::toByteArray(id_ca pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -183,6 +190,7 @@ QByteArray governikus::toByteArray(id_ta pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -198,6 +206,7 @@ QByteArray governikus::toByteArray(id_pk pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -239,6 +248,7 @@ QByteArray governikus::toByteArray(id_PACE::DH pValue) } Q_UNREACHABLE(); + return QByteArray(); } @@ -280,4 +290,5 @@ QByteArray governikus::toByteArray(id_PACE::ECDH pValue) } Q_UNREACHABLE(); + return QByteArray(); } diff --git a/src/card/base/asn1/PaceInfo.h b/src/card/base/asn1/PaceInfo.h index 5f7a570..496bfdf 100644 --- a/src/card/base/asn1/PaceInfo.h +++ b/src/card/base/asn1/PaceInfo.h @@ -63,7 +63,7 @@ class PaceInfo friend class QSharedPointer; const QSharedPointer mDelegate; - PaceInfo(const QSharedPointer& pDelegate); + explicit PaceInfo(const QSharedPointer& pDelegate); ASN1_OBJECT* getProtocolObjectIdentifier() const override; static bool acceptsProtocol(const ASN1_OBJECT* pObjectIdentifier); diff --git a/src/card/base/asn1/SecurityInfo.h b/src/card/base/asn1/SecurityInfo.h index 81e3129..2b5230a 100644 --- a/src/card/base/asn1/SecurityInfo.h +++ b/src/card/base/asn1/SecurityInfo.h @@ -48,7 +48,7 @@ class SecurityInfo friend class QSharedPointer; const QSharedPointer mDelegate; - SecurityInfo(const QSharedPointer& pDelegate); + explicit SecurityInfo(const QSharedPointer& pDelegate); /* * Sub classes must override this method to allow the base class to access diff --git a/src/card/base/asn1/SecurityInfos.h b/src/card/base/asn1/SecurityInfos.h index 55f8969..93531c0 100644 --- a/src/card/base/asn1/SecurityInfos.h +++ b/src/card/base/asn1/SecurityInfos.h @@ -17,7 +17,7 @@ namespace governikus { -typedef struct stack_st_securityinfo_st securityinfos_st; +using securityinfos_st = struct stack_st_securityinfo_st; DECLARE_ASN1_FUNCTIONS(securityinfos_st) DECLARE_ASN1_OBJECT(securityinfos_st) @@ -58,7 +58,7 @@ class SecurityInfos * * defined in TR 3110 Part 3 */ -typedef SecurityInfos EFCardAccess; +using EFCardAccess = SecurityInfos; } // namespace governikus diff --git a/src/card/base/asn1/SignatureChecker.cpp b/src/card/base/asn1/SignatureChecker.cpp index 89aead0..d70d399 100644 --- a/src/card/base/asn1/SignatureChecker.cpp +++ b/src/card/base/asn1/SignatureChecker.cpp @@ -66,7 +66,7 @@ bool SignatureChecker::checkSignature(const QSharedPointer& const QSharedPointer signingKey = EcUtil::create(EC_KEY_dup(pKey)); const QByteArray uncompPublicPoint = pSigningCert->getBody().getPublicKey().getUncompressedPublicPoint(); - const unsigned char* uncompPublicPointData = reinterpret_cast(uncompPublicPoint.constData()); + const auto* const uncompPublicPointData = reinterpret_cast(uncompPublicPoint.constData()); const auto uncompPublicPointLen = static_cast(uncompPublicPoint.size()); EC_POINT* publicPoint = EC_POINT_new(EC_KEY_get0_group(signingKey.data())); @@ -79,7 +79,7 @@ bool SignatureChecker::checkSignature(const QSharedPointer& EC_KEY_set_public_key(signingKey.data(), publicPoint); const QByteArray bodyHash = QCryptographicHash::hash(pCert->getRawBody(), pSigningCert->getBody().getHashAlgorithm()); - const unsigned char* dgst = reinterpret_cast(bodyHash.constData()); + const auto* const dgst = reinterpret_cast(bodyHash.constData()); const int dgstlen = bodyHash.size(); const int result = ECDSA_do_verify(dgst, dgstlen, pCert->getEcdsaSignature().data(), signingKey.data()); diff --git a/src/card/base/asn1/SignatureChecker.h b/src/card/base/asn1/SignatureChecker.h index 098310e..3e6b35b 100644 --- a/src/card/base/asn1/SignatureChecker.h +++ b/src/card/base/asn1/SignatureChecker.h @@ -20,7 +20,7 @@ class SignatureChecker bool checkSignature(const QSharedPointer& pCert, const QSharedPointer& pSigningCert, const EC_KEY* pKey); public: - SignatureChecker(const QVector >& pCertificateChain); + explicit SignatureChecker(const QVector >& pCertificateChain); ~SignatureChecker() = default; bool check(); diff --git a/src/card/base/command/BaseCardCommand.h b/src/card/base/command/BaseCardCommand.h index 101049a..c76ec14 100644 --- a/src/card/base/command/BaseCardCommand.h +++ b/src/card/base/command/BaseCardCommand.h @@ -11,7 +11,6 @@ #include -class test_BaseCardCommand; class test_CardConnection; namespace governikus @@ -23,7 +22,6 @@ class BaseCardCommand Q_OBJECT private: - friend class ::test_BaseCardCommand; friend class ::test_CardConnection; Q_INVOKABLE void execute(); @@ -31,7 +29,7 @@ class BaseCardCommand QSharedPointer mCardConnectionWorker; CardReturnCode mReturnCode; - BaseCardCommand(QSharedPointer pCardConnectionWorker); + explicit BaseCardCommand(QSharedPointer pCardConnectionWorker); virtual void internalExecute() = 0; virtual ~BaseCardCommand(); diff --git a/src/card/base/command/CreateCardConnectionCommand.cpp b/src/card/base/command/CreateCardConnectionCommand.cpp index 232f3b3..0de85b1 100644 --- a/src/card/base/command/CreateCardConnectionCommand.cpp +++ b/src/card/base/command/CreateCardConnectionCommand.cpp @@ -7,10 +7,14 @@ #include "Initializer.h" #include "ReaderManagerWorker.h" +#include #include +Q_DECLARE_LOGGING_CATEGORY(card) + using namespace governikus; + static Initializer::Entry X([] { qRegisterMetaType >("QSharedPointer"); }); @@ -45,7 +49,7 @@ void CreateCardConnectionCommand::execute() } else { - qCritical() << "Cannot invoke ReaderManagerWorker to create CardConnectionWorker"; + qCCritical(card) << "Cannot invoke ReaderManagerWorker to create CardConnectionWorker"; QSharedPointer command(this, &QObject::deleteLater); Q_EMIT fireCommandDone(command); } diff --git a/src/card/base/command/CreateCardConnectionCommand.h b/src/card/base/command/CreateCardConnectionCommand.h index 9940089..6f6bca0 100644 --- a/src/card/base/command/CreateCardConnectionCommand.h +++ b/src/card/base/command/CreateCardConnectionCommand.h @@ -33,7 +33,7 @@ class CreateCardConnectionCommand Q_INVOKABLE void execute(); public: - CreateCardConnectionCommand(const QString& pReaderName, const QPointer& pReaderManagerWorker); + explicit CreateCardConnectionCommand(const QString& pReaderName, const QPointer& pReaderManagerWorker); void run(); QSharedPointer getCardConnection() const; diff --git a/src/card/base/command/DestroyPaceChannelCommand.h b/src/card/base/command/DestroyPaceChannelCommand.h index a4cbb5e..b3610c8 100644 --- a/src/card/base/command/DestroyPaceChannelCommand.h +++ b/src/card/base/command/DestroyPaceChannelCommand.h @@ -26,7 +26,7 @@ class DestroyPaceChannelCommand virtual ~DestroyPaceChannelCommand() override = default; public: - DestroyPaceChannelCommand(QSharedPointer pCardConnectionWorker); + explicit DestroyPaceChannelCommand(QSharedPointer pCardConnectionWorker); }; } // namespace governikus diff --git a/src/card/base/command/DidAuthenticateEAC1Command.cpp b/src/card/base/command/DidAuthenticateEAC1Command.cpp index 8c4be37..d8c6879 100644 --- a/src/card/base/command/DidAuthenticateEAC1Command.cpp +++ b/src/card/base/command/DidAuthenticateEAC1Command.cpp @@ -2,9 +2,11 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ +#include "DidAuthenticateEAC1Command.h" + #include "BaseCardCommand.h" #include "CardConnection.h" -#include "DidAuthenticateEAC1Command.h" +#include "GetChallengeBuilder.h" #include @@ -24,12 +26,18 @@ DidAuthenticateEAC1Command::DidAuthenticateEAC1Command(QSharedPointertransmit(GetChallengeBuilder().build(), response); if (mReturnCode != CardReturnCode::OK || response.getReturnCode() != StatusCode::SUCCESS) { qCWarning(card) << "GetChallenge failed"; return; } - mChallenge = response.getChallenge(); + + if (response.getDataLength() != 8) + { + qCCritical(card) << "Challenge has wrong size. Expect 8 bytes, got" << response.getDataLength(); + } + + mChallenge = response.getData(); } diff --git a/src/card/base/command/DidAuthenticateEAC1Command.h b/src/card/base/command/DidAuthenticateEAC1Command.h index 934273e..1062a49 100644 --- a/src/card/base/command/DidAuthenticateEAC1Command.h +++ b/src/card/base/command/DidAuthenticateEAC1Command.h @@ -8,7 +8,6 @@ #include "asn1/Chat.h" #include "BaseCardCommand.h" -#include "Commands.h" class test_DidAuthenticateEAC1Command; class test_StateDidAuthenticateEac1; @@ -31,7 +30,7 @@ class DidAuthenticateEAC1Command virtual ~DidAuthenticateEAC1Command() override = default; public: - DidAuthenticateEAC1Command(QSharedPointer pCardConnectionWorker); + explicit DidAuthenticateEAC1Command(QSharedPointer pCardConnectionWorker); const QByteArray& getChallenge() const { diff --git a/src/card/base/command/DidAuthenticateEAC2Command.cpp b/src/card/base/command/DidAuthenticateEAC2Command.cpp index f53f578..ab30c38 100644 --- a/src/card/base/command/DidAuthenticateEAC2Command.cpp +++ b/src/card/base/command/DidAuthenticateEAC2Command.cpp @@ -7,8 +7,12 @@ #include "asn1/ChipAuthenticationInfo.h" #include "asn1/EFCardSecurity.h" #include "CardConnection.h" +#include "EABuilder.h" +#include "GABuilder.h" #include "GeneralAuthenticateResponse.h" #include "GlobalStatus.h" +#include "MSEBuilder.h" +#include "PSOBuilder.h" #include @@ -223,21 +227,24 @@ CardReturnCode DidAuthenticateEAC2Command::performChipAuthentication(QSharedPoin return CardReturnCode::PROTOCOL_ERROR; } - GAChipAuthenticationResponse gaResponse; GABuilder gaBuilder; gaBuilder.setCaEphemeralPublicKey(ephemeralPublicKey); qCDebug(card) << "Performing CA General Authenticate"; - returnCode = mCardConnectionWorker->transmit(gaBuilder.build(), gaResponse); + ResponseApdu responseApdu; + returnCode = mCardConnectionWorker->transmit(gaBuilder.build(), responseApdu); if (returnCode != CardReturnCode::OK) { return returnCode; } - if (gaResponse.getReturnCode() != StatusCode::SUCCESS) + + if (responseApdu.getReturnCode() != StatusCode::SUCCESS) { - qCWarning(card) << "CA General Authenticate failed:" << gaResponse.getReturnCode(); + qCWarning(card) << "CA General Authenticate failed:" << responseApdu.getReturnCode(); return CardReturnCode::PROTOCOL_ERROR; } + + GAChipAuthenticationResponse gaResponse(responseApdu); pNonceAsHex += gaResponse.getNonce().toHex(); pAuthTokenAsHex += gaResponse.getAuthenticationToken().toHex(); diff --git a/src/card/base/command/DidAuthenticateEAC2Command.h b/src/card/base/command/DidAuthenticateEAC2Command.h index ff36d33..1a81ca2 100644 --- a/src/card/base/command/DidAuthenticateEAC2Command.h +++ b/src/card/base/command/DidAuthenticateEAC2Command.h @@ -10,6 +10,7 @@ #include "BaseCardCommand.h" class test_CardConnection; +class test_DidAuthenticateEAC2Command; namespace governikus { @@ -21,6 +22,7 @@ class DidAuthenticateEAC2Command private: friend class ::test_CardConnection; + friend class ::test_DidAuthenticateEAC2Command; CVCertificateChain mCvcChain; QString mEphemeralPublicKeyAsHex; QString mSignatureAsHex; @@ -45,7 +47,7 @@ class DidAuthenticateEAC2Command virtual ~DidAuthenticateEAC2Command() override = default; public: - DidAuthenticateEAC2Command(QSharedPointer pCardConnectionWorker, + explicit DidAuthenticateEAC2Command(QSharedPointer pCardConnectionWorker, const CVCertificateChain& pCvcChain, const QString& pEphemeralPublicKeyAsHex, const QString& pSignatureAsHex, const QByteArray& pAuthenticatedAuxiliaryDataAsBinary); diff --git a/src/card/base/command/EstablishPaceChannelCommand.cpp b/src/card/base/command/EstablishPaceChannelCommand.cpp index 67eca9e..2cbe975 100644 --- a/src/card/base/command/EstablishPaceChannelCommand.cpp +++ b/src/card/base/command/EstablishPaceChannelCommand.cpp @@ -30,5 +30,6 @@ const EstablishPaceChannelOutput& EstablishPaceChannelCommand::getPaceOutput() c void EstablishPaceChannelCommand::internalExecute() { - mReturnCode = mCardConnectionWorker->establishPaceChannel(mPacePasswordId, mPacePassword, mEffectiveChat, mCertificateDescription, mPaceOutput); + mPaceOutput = mCardConnectionWorker->establishPaceChannel(mPacePasswordId, mPacePassword, mEffectiveChat, mCertificateDescription); + mReturnCode = mPaceOutput.getPaceReturnCode(); } diff --git a/src/card/base/command/EstablishPaceChannelCommand.h b/src/card/base/command/EstablishPaceChannelCommand.h index ad86568..cfccb58 100644 --- a/src/card/base/command/EstablishPaceChannelCommand.h +++ b/src/card/base/command/EstablishPaceChannelCommand.h @@ -9,6 +9,7 @@ #include "BaseCardCommand.h" class test_EstablishPaceChannelCommand; +class MockEstablishPaceChannelCommand; namespace governikus { @@ -20,6 +21,7 @@ class EstablishPaceChannelCommand private: friend class ::test_EstablishPaceChannelCommand; + friend class ::MockEstablishPaceChannelCommand; const PacePasswordId mPacePasswordId; const QString mPacePassword; @@ -32,7 +34,7 @@ class EstablishPaceChannelCommand virtual ~EstablishPaceChannelCommand() override = default; public: - EstablishPaceChannelCommand(QSharedPointer pCardConnectionWorker, + explicit EstablishPaceChannelCommand(QSharedPointer pCardConnectionWorker, PacePasswordId pPacePasswordId, const QString& pPacePassword, const QByteArray& pEffectiveChat, const QByteArray& pCertificateDescription); const EstablishPaceChannelOutput& getPaceOutput() const; diff --git a/src/card/base/command/SetEidPinCommand.h b/src/card/base/command/SetEidPinCommand.h index 7ab7cd8..85745a7 100644 --- a/src/card/base/command/SetEidPinCommand.h +++ b/src/card/base/command/SetEidPinCommand.h @@ -9,6 +9,7 @@ #include "BaseCardCommand.h" class test_SetEidPinCommand; +class MockSetEidPinCommand; namespace governikus { @@ -20,6 +21,7 @@ class SetEidPinCommand private: friend class ::test_SetEidPinCommand; + friend class ::MockSetEidPinCommand; QString mNewPin; quint8 mTimeoutSeconds; @@ -30,7 +32,7 @@ class SetEidPinCommand virtual ~SetEidPinCommand() override = default; public: - SetEidPinCommand(QSharedPointer pCardConnectionWorker, + explicit SetEidPinCommand(QSharedPointer pCardConnectionWorker, const QString& pNewPin, quint8 pTimeoutSeconds); const ResponseApdu& getResponseApdu() const; diff --git a/src/card/base/command/TransmitCommand.cpp b/src/card/base/command/TransmitCommand.cpp index 459a10c..e804767 100644 --- a/src/card/base/command/TransmitCommand.cpp +++ b/src/card/base/command/TransmitCommand.cpp @@ -18,7 +18,7 @@ using namespace governikus; TransmitCommand::TransmitCommand(QSharedPointer pCardConnectionWorker, const QVector& pInputApduInfos, - const QString pSlotHandle) + const QString& pSlotHandle) : BaseCardCommand(pCardConnectionWorker) , mInputApduInfos(pInputApduInfos) , mSlotHandle(pSlotHandle) diff --git a/src/card/base/command/TransmitCommand.h b/src/card/base/command/TransmitCommand.h index bd36101..9b572de 100644 --- a/src/card/base/command/TransmitCommand.h +++ b/src/card/base/command/TransmitCommand.h @@ -35,9 +35,9 @@ class TransmitCommand virtual ~TransmitCommand() override = default; public: - TransmitCommand(QSharedPointer pCardConnectionWorker, + explicit TransmitCommand(QSharedPointer pCardConnectionWorker, const QVector& pInputApduInfos, - const QString pSlotHandle); + const QString& pSlotHandle); const QByteArrayList& getOutputApduAsHex() const { diff --git a/src/card/base/command/UnblockPinCommand.cpp b/src/card/base/command/UnblockPinCommand.cpp index e3962e0..4f60bdd 100644 --- a/src/card/base/command/UnblockPinCommand.cpp +++ b/src/card/base/command/UnblockPinCommand.cpp @@ -4,6 +4,8 @@ #include "UnblockPinCommand.h" +#include "ResetRetryCounterBuilder.h" + using namespace governikus; @@ -29,8 +31,7 @@ void UnblockPinCommand::internalExecute() return; } - EstablishPaceChannelOutput output; - mReturnCode = mCardConnectionWorker->establishPaceChannel(PacePasswordId::PACE_PUK, mPuk, output); + mReturnCode = mCardConnectionWorker->establishPaceChannel(PacePasswordId::PACE_PUK, mPuk).getPaceReturnCode(); if (mReturnCode != CardReturnCode::OK) { return; diff --git a/src/card/base/command/UnblockPinCommand.h b/src/card/base/command/UnblockPinCommand.h index 318da12..264f565 100644 --- a/src/card/base/command/UnblockPinCommand.h +++ b/src/card/base/command/UnblockPinCommand.h @@ -27,7 +27,7 @@ class UnblockPinCommand virtual ~UnblockPinCommand() override = default; public: - UnblockPinCommand(QSharedPointer pCardConnectionWorker, const QString& pPuk); + explicit UnblockPinCommand(QSharedPointer pCardConnectionWorker, const QString& pPuk); }; diff --git a/src/card/base/command/UpdateRetryCounterCommand.h b/src/card/base/command/UpdateRetryCounterCommand.h index ae25ecb..b331309 100644 --- a/src/card/base/command/UpdateRetryCounterCommand.h +++ b/src/card/base/command/UpdateRetryCounterCommand.h @@ -26,7 +26,7 @@ class UpdateRetryCounterCommand virtual ~UpdateRetryCounterCommand() override = default; public: - UpdateRetryCounterCommand(QSharedPointer pCardConnectionWorker); + explicit UpdateRetryCounterCommand(QSharedPointer pCardConnectionWorker); }; diff --git a/src/card/base/pace/KeyAgreement.cpp b/src/card/base/pace/KeyAgreement.cpp index 8518faf..55d0c4b 100644 --- a/src/card/base/pace/KeyAgreement.cpp +++ b/src/card/base/pace/KeyAgreement.cpp @@ -6,7 +6,7 @@ #include "KeyAgreement.h" #include "asn1/PaceInfo.h" -#include "Commands.h" +#include "GABuilder.h" #include "GlobalStatus.h" #include "pace/CipherMac.h" #include "pace/ec/EcdhKeyAgreement.h" @@ -28,14 +28,14 @@ static QString getResponseErrorString(CardReturnCode pReturnCode, StatusCode pRe } -static CardOperationResult makeTransmitResult(CardReturnCode pReturnCode, +KeyAgreement::CardResult KeyAgreement::createTransmitResult(CardReturnCode pReturnCode, StatusCode pResponseReturnCode, const QByteArray& pResultData, - const QString& pLogMessage) + const char* pLogMessage) { if (pReturnCode == CardReturnCode::OK && pResponseReturnCode == StatusCode::SUCCESS) { - return CardOperationResult(pReturnCode, pResultData); + return {pReturnCode, pResultData}; } CardReturnCode newReturnCode = CardReturnCode::COMMAND_FAILED; @@ -49,7 +49,7 @@ static CardOperationResult makeTransmitResult(CardReturnCode pReturn } qCCritical(card).noquote() << pLogMessage << getResponseErrorString(newReturnCode, pResponseReturnCode); - return CardOperationResult(newReturnCode, QByteArray()); + return {newReturnCode}; } @@ -87,8 +87,8 @@ KeyAgreement::~KeyAgreement() KeyAgreementStatus KeyAgreement::perform(const QString& pPin) { - CardOperationResult nonceResult = determineNonce(pPin); - switch (nonceResult.getReturnCode()) + auto [returnCode, nonce] = determineNonce(pPin); + switch (returnCode) { case CardReturnCode::PROTOCOL_ERROR: return KeyAgreementStatus::PROTOCOL_ERROR; @@ -103,9 +103,8 @@ KeyAgreementStatus KeyAgreement::perform(const QString& pPin) {} } - QByteArray nonce = nonceResult.getPayload(); - CardOperationResult sharedSecretResult = determineSharedSecret(nonce); - switch (sharedSecretResult.getReturnCode()) + auto [sharedSecretReturnCode, sharedSecret] = determineSharedSecret(nonce); + switch (sharedSecretReturnCode) { case CardReturnCode::COMMAND_FAILED: return KeyAgreementStatus::COMMUNICATION_ERROR; @@ -120,7 +119,6 @@ KeyAgreementStatus KeyAgreement::perform(const QString& pPin) {} } - QByteArray sharedSecret = sharedSecretResult.getPayload(); mEncryptionKey = mKeyDerivationFunction.enc(sharedSecret); mMacKey = mKeyDerivationFunction.mac(sharedSecret); @@ -128,19 +126,18 @@ KeyAgreementStatus KeyAgreement::perform(const QString& pPin) } -CardOperationResult KeyAgreement::determineNonce(const QString& pPin) +KeyAgreement::CardResult KeyAgreement::determineNonce(const QString& pPin) { - CardOperationResult result = transmitGAEncryptedNonce(); - if (result.getReturnCode() != CardReturnCode::OK) + const auto result = transmitGAEncryptedNonce(); + if (result.mReturnCode != CardReturnCode::OK) { return result; } - QByteArray encryptedNonce = result.getPayload(); QByteArray symmetricKey = mKeyDerivationFunction.pi(pPin); SymmetricCipher nonceDecrypter(mPaceInfo->getProtocol(), symmetricKey); - return CardOperationResult(CardReturnCode::OK, nonceDecrypter.decrypt(encryptedNonce)); + return {CardReturnCode::OK, nonceDecrypter.decrypt(result.mData)}; } @@ -151,19 +148,21 @@ KeyAgreementStatus KeyAgreement::performMutualAuthenticate() QByteArray uncompressedCardPublicKey = getUncompressedCardPublicKey(); QByteArray mutualAuthenticationCardData = cmac.generate(uncompressedCardPublicKey); - QSharedPointer response = transmitGAMutualAuthentication(mutualAuthenticationCardData); - if (response->getReturnCode() == StatusCode::EMPTY) + const GAMutualAuthenticationResponse response = transmitGAMutualAuthentication(mutualAuthenticationCardData); + if (response.getReturnCode() == StatusCode::EMPTY) { return KeyAgreementStatus::RETRY_ALLOWED; } - else if (response->getReturnCode() == StatusCode::VERIFICATION_FAILED || - response->getReturnCode() == StatusCode::PIN_BLOCKED || - response->getReturnCode() == StatusCode::PIN_SUSPENDED || - response->getReturnCode() == StatusCode::PIN_RETRY_COUNT_2) + + if (response.getReturnCode() == StatusCode::VERIFICATION_FAILED || + response.getReturnCode() == StatusCode::PIN_BLOCKED || + response.getReturnCode() == StatusCode::PIN_SUSPENDED || + response.getReturnCode() == StatusCode::PIN_RETRY_COUNT_2) { return KeyAgreementStatus::FAILED; } - else if (response->getReturnCode() != StatusCode::SUCCESS) + + if (response.getReturnCode() != StatusCode::SUCCESS) { return KeyAgreementStatus::PROTOCOL_ERROR; } @@ -171,64 +170,67 @@ KeyAgreementStatus KeyAgreement::performMutualAuthenticate() QByteArray uncompressedTerminalPublicKey = getUncompressedTerminalPublicKey(); QByteArray mutualAuthenticationTerminalData = cmac.generate(uncompressedTerminalPublicKey); - if (mutualAuthenticationTerminalData != response->getAuthenticationToken()) + if (mutualAuthenticationTerminalData != response.getAuthenticationToken()) { qCCritical(card) << "Error on mutual authentication"; return KeyAgreementStatus::PROTOCOL_ERROR; } - mCarCurr = response->getCarCurr(); - mCarPrev = response->getCarPrev(); + mCarCurr = response.getCarCurr(); + mCarPrev = response.getCarPrev(); qCDebug(card) << "Successfully authenticated"; return KeyAgreementStatus::SUCCESS; } -CardOperationResult KeyAgreement::transmitGAEncryptedNonce() +KeyAgreement::CardResult KeyAgreement::transmitGAEncryptedNonce() { GABuilder builder(CommandApdu::CLA_COMMAND_CHAINING); - GAEncryptedNonceResponse response; + ResponseApdu responseApdu; - const CardReturnCode returnCode = mCardConnectionWorker->transmit(builder.build(), response); - return makeTransmitResult(returnCode, response.getReturnCode(), response.getEncryptedNonce(), QStringLiteral("Error on GA (Encrypted Nonce):")); + const CardReturnCode returnCode = mCardConnectionWorker->transmit(builder.build(), responseApdu); + GAEncryptedNonceResponse response(responseApdu); + return createTransmitResult(returnCode, response.getReturnCode(), response.getEncryptedNonce(), "Error on GA (Encrypted Nonce):"); } -CardOperationResult KeyAgreement::transmitGAEphemeralPublicKey(const QByteArray& pEphemeralPublicKey) +KeyAgreement::CardResult KeyAgreement::transmitGAEphemeralPublicKey(const QByteArray& pEphemeralPublicKey) { GABuilder commandBuilder(CommandApdu::CLA_COMMAND_CHAINING); commandBuilder.setPaceEphemeralPublicKey(pEphemeralPublicKey); - GAPerformKeyAgreementResponse response; + ResponseApdu responseApdu; - const CardReturnCode returnCode = mCardConnectionWorker->transmit(commandBuilder.build(), response); - return makeTransmitResult(returnCode, response.getReturnCode(), response.getEphemeralPublicKey(), QStringLiteral("Error on GA(Perform Key Agreement):")); + const CardReturnCode returnCode = mCardConnectionWorker->transmit(commandBuilder.build(), responseApdu); + const GAPerformKeyAgreementResponse response(responseApdu); + return createTransmitResult(returnCode, response.getReturnCode(), response.getEphemeralPublicKey(), "Error on GA(Perform Key Agreement):"); } -CardOperationResult KeyAgreement::transmitGAMappingData(const QByteArray& pMappingData) +KeyAgreement::CardResult KeyAgreement::transmitGAMappingData(const QByteArray& pMappingData) { // sende den PublicKey (D.3.4.) GABuilder commandBuilder(CommandApdu::CLA_COMMAND_CHAINING); commandBuilder.setPaceMappingData(pMappingData); - GAMapNonceResponse response; + ResponseApdu responseApdu; - const CardReturnCode returnCode = mCardConnectionWorker->transmit(commandBuilder.build(), response); - return makeTransmitResult(returnCode, response.getReturnCode(), response.getMappingData(), QStringLiteral("Error on GA(Mapping Data):")); + const CardReturnCode returnCode = mCardConnectionWorker->transmit(commandBuilder.build(), responseApdu); + const GAMapNonceResponse response(responseApdu); + return createTransmitResult(returnCode, response.getReturnCode(), response.getMappingData(), "Error on GA(Mapping Data):"); } -QSharedPointer KeyAgreement::transmitGAMutualAuthentication(const QByteArray& pMutualAuthenticationData) +GAMutualAuthenticationResponse KeyAgreement::transmitGAMutualAuthentication(const QByteArray& pMutualAuthenticationData) { GABuilder commandBuilder(CommandApdu::CLA); commandBuilder.setPaceAuthenticationToken(pMutualAuthenticationData); - auto response = QSharedPointer::create(); + ResponseApdu response; - CardReturnCode returnCode = mCardConnectionWorker->transmit(commandBuilder.build(), *response); - if (returnCode != CardReturnCode::OK || response->getReturnCode() != StatusCode::SUCCESS) + const CardReturnCode returnCode = mCardConnectionWorker->transmit(commandBuilder.build(), response); + if (returnCode != CardReturnCode::OK || response.getReturnCode() != StatusCode::SUCCESS) { - qCCritical(card) << "Error on GA(Mutual Authentication):" << getResponseErrorString(returnCode, response->getReturnCode()); + qCCritical(card) << "Error on GA(Mutual Authentication):" << getResponseErrorString(returnCode, response.getReturnCode()); } - return response; + return GAMutualAuthenticationResponse(response); } diff --git a/src/card/base/pace/KeyAgreement.h b/src/card/base/pace/KeyAgreement.h index d8aebc3..3ff1a45 100644 --- a/src/card/base/pace/KeyAgreement.h +++ b/src/card/base/pace/KeyAgreement.h @@ -7,7 +7,6 @@ #pragma once #include "CardConnectionWorker.h" -#include "CardOperationResult.h" #include "GeneralAuthenticateResponse.h" #include "pace/KeyDerivationFunction.h" @@ -27,19 +26,32 @@ enum class KeyAgreementStatus class KeyAgreement { + protected: + struct CardResult + { + CardReturnCode mReturnCode = CardReturnCode::UNDEFINED; + QByteArray mData = QByteArray(); + }; + private: const QSharedPointer mCardConnectionWorker; QByteArray mEncryptionKey; QByteArray mMacKey; QByteArray mCarCurr, mCarPrev; + + CardResult createTransmitResult(CardReturnCode pReturnCode, + StatusCode pResponseReturnCode, + const QByteArray& pResultData, + const char* pLogMessage); + /*! * \brief Determine the card's nonce. The encrypted nonce will be decrypted using the supplied PIN. * This represents the first step "General Authenticate" of TR-03110 Part 3, page 47. * \param pPin PIN for decryption of the nonce * \return the decrypted nonce */ - CardOperationResult determineNonce(const QString& pPin); + CardResult determineNonce(const QString& pPin); /*! * \brief Determines the shared secret by performing the key agreement. @@ -47,7 +59,7 @@ class KeyAgreement * \param pNonce the nonce needed for key agreement. * \return the shared secret between terminal and card */ - virtual CardOperationResult determineSharedSecret(const QByteArray& pNonce) = 0; + virtual CardResult determineSharedSecret(const QByteArray& pNonce) = 0; /*! * \brief Returns the uncompressed terminal's ephemeral public key calculated during key agreement. @@ -60,7 +72,7 @@ class KeyAgreement * \brief Transmit the General Authenticate (Encrypted Nonce) command to the card. * \return the encrypted nonce */ - CardOperationResult transmitGAEncryptedNonce(); + CardResult transmitGAEncryptedNonce(); /*! * \brief Performs the mutual authentication of terminal and card using the determined shared secret. @@ -80,21 +92,21 @@ class KeyAgreement * \param pMappingData the terminal's mapping data. * \return the card's mapping data */ - CardOperationResult transmitGAMappingData(const QByteArray& pMappingData); + CardResult transmitGAMappingData(const QByteArray& pMappingData); /*! * \brief Transmit the General Authenticate (Ephemeral Public Key) command to the card. * \param pEphemeralPublicKey the terminal's ephemeral public key * \return the card's ephemeral public key */ - CardOperationResult transmitGAEphemeralPublicKey(const QByteArray& pEphemeralPublicKey); + CardResult transmitGAEphemeralPublicKey(const QByteArray& pEphemeralPublicKey); /*! * \brief Transmit the General Authenticate (Mutual Authentication) command to the card. * \param pMutualAuthenticationData the terminal's authentication token * \return the complete response APDU */ - QSharedPointer transmitGAMutualAuthentication(const QByteArray& pMutualAuthenticationData); + GAMutualAuthenticationResponse transmitGAMutualAuthentication(const QByteArray& pMutualAuthenticationData); public: /*! diff --git a/src/card/base/pace/KeyDerivationFunction.h b/src/card/base/pace/KeyDerivationFunction.h index a6d2039..6e60456 100644 --- a/src/card/base/pace/KeyDerivationFunction.h +++ b/src/card/base/pace/KeyDerivationFunction.h @@ -26,7 +26,7 @@ class KeyDerivationFunction final * \param pPaceAlgorithm algorithm of PACE protocol. This will determine the key derivation algorithm to use. E.g. a * PACE protocol of id_PACE::DH::GM_AES_CBC_CMAC_128 will result in SHA256 to be used internally to derive keys. */ - KeyDerivationFunction(const QByteArray& pPaceAlgorithm); + explicit KeyDerivationFunction(const QByteArray& pPaceAlgorithm); ~KeyDerivationFunction() = default; /*! diff --git a/src/card/base/pace/PaceHandler.cpp b/src/card/base/pace/PaceHandler.cpp index 8e5c77d..1cccf6b 100644 --- a/src/card/base/pace/PaceHandler.cpp +++ b/src/card/base/pace/PaceHandler.cpp @@ -6,7 +6,7 @@ #include "asn1/KnownOIDs.h" #include "asn1/PaceInfo.h" -#include "Commands.h" +#include "MSEBuilder.h" #include "pace/ec/EllipticCurveFactory.h" #include "pace/KeyAgreement.h" #include "PersoSimWorkaround.h" @@ -105,7 +105,9 @@ CardReturnCode PaceHandler::establishPaceChannel(PacePasswordId pPasswordId, con qCDebug(card) << "Pace channel established"; return CardReturnCode::OK; } + Q_UNREACHABLE(); + return CardReturnCode::UNDEFINED; } diff --git a/src/card/base/pace/PaceHandler.h b/src/card/base/pace/PaceHandler.h index 1b55727..64f5ea2 100644 --- a/src/card/base/pace/PaceHandler.h +++ b/src/card/base/pace/PaceHandler.h @@ -55,7 +55,7 @@ class PaceHandler final Q_DISABLE_COPY(PaceHandler) public: - PaceHandler(const QSharedPointer& pCardConnectionWorker); + explicit PaceHandler(const QSharedPointer& pCardConnectionWorker); /*! * \brief Performs the PACE protocol and establishes a PACE channel. diff --git a/src/card/base/pace/SecureMessaging.cpp b/src/card/base/pace/SecureMessaging.cpp index f8b4c47..544dc5d 100644 --- a/src/card/base/pace/SecureMessaging.cpp +++ b/src/card/base/pace/SecureMessaging.cpp @@ -91,7 +91,7 @@ CommandApdu SecureMessaging::encrypt(const CommandApdu& pCommandApdu) if (!isInitialized()) { qCCritical(card) << "SecureMessaging not successfully initialized"; - return QByteArray(); + return CommandApdu(QByteArray()); } ++mSendSequenceCounter; @@ -199,12 +199,12 @@ QByteArray SecureMessaging::getEncryptedIv() } -bool SecureMessaging::decrypt(const ResponseApdu& pEncryptedResponseApdu, ResponseApdu& pDecryptedResponseApdu) +ResponseApdu SecureMessaging::decrypt(const ResponseApdu& pEncryptedResponseApdu) { if (!isInitialized()) { qCCritical(card) << "SecureMessaging not successfully initialized"; - return false; + return ResponseApdu(); } ++mSendSequenceCounter; @@ -212,12 +212,12 @@ bool SecureMessaging::decrypt(const ResponseApdu& pEncryptedResponseApdu, Respon SecureMessagingResponse secureResponse(pEncryptedResponseApdu.getBuffer()); if (secureResponse.isInvalid()) { - return false; + return ResponseApdu(); } if (secureResponse.getSecuredStatusCode() != secureResponse.getReturnCode()) { qCCritical(card) << "SW1SW2 on secured ResponseApdu does not match"; - return false; + return ResponseApdu(); } QByteArray dataToMac; @@ -231,7 +231,7 @@ bool SecureMessaging::decrypt(const ResponseApdu& pEncryptedResponseApdu, Respon if (mCipherMac.generate(dataToMac) != secureResponse.getMac()) { qCCritical(card) << "MAC on secured ResponseApdu does not match"; - return false; + return ResponseApdu(); } QByteArray decryptedData; @@ -242,9 +242,7 @@ bool SecureMessaging::decrypt(const ResponseApdu& pEncryptedResponseApdu, Respon decryptedData = unpadFromCipherBlockSize(paddedDecryptedData); } - pDecryptedResponseApdu.setBuffer(decryptedData + secureResponse.getSecuredStatusCodeBytes()); - - qCDebug(secure) << "Plain ResponseApdu:" << pDecryptedResponseApdu.getBuffer().toHex(); - - return true; + const ResponseApdu response(decryptedData + secureResponse.getSecuredStatusCodeBytes()); + qCDebug(secure) << "Plain ResponseApdu:" << response.getBuffer().toHex(); + return response; } diff --git a/src/card/base/pace/SecureMessaging.h b/src/card/base/pace/SecureMessaging.h index b61b4a7..affc28b 100644 --- a/src/card/base/pace/SecureMessaging.h +++ b/src/card/base/pace/SecureMessaging.h @@ -54,7 +54,13 @@ class SecureMessaging final bool isInitialized(); CommandApdu encrypt(const CommandApdu& pCommandApdu); - bool decrypt(const ResponseApdu& pEncryptedResponseApdu, ResponseApdu& pDecryptedResponseApdu); + + /*! + * \brief Decrypt given ResponseApdu. + * + * \return Decrypted ResponseApdu or an empty ResponseApdu if decryption fails. + */ + ResponseApdu decrypt(const ResponseApdu& pEncryptedResponseApdu); }; } // namespace governikus diff --git a/src/card/base/pace/ec/EcdhGenericMapping.h b/src/card/base/pace/ec/EcdhGenericMapping.h index 8ed1968..bff92ad 100644 --- a/src/card/base/pace/ec/EcdhGenericMapping.h +++ b/src/card/base/pace/ec/EcdhGenericMapping.h @@ -28,7 +28,7 @@ class EcdhGenericMapping void setGenerator(const QSharedPointer& pNewGenerator); public: - EcdhGenericMapping(const QSharedPointer& pCurve); + explicit EcdhGenericMapping(const QSharedPointer& pCurve); virtual ~EcdhGenericMapping() override = default; QByteArray generateTerminalMappingData() override; diff --git a/src/card/base/pace/ec/EcdhKeyAgreement.cpp b/src/card/base/pace/ec/EcdhKeyAgreement.cpp index 861e677..943c111 100644 --- a/src/card/base/pace/ec/EcdhKeyAgreement.cpp +++ b/src/card/base/pace/ec/EcdhKeyAgreement.cpp @@ -2,17 +2,16 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ +#include "pace/ec/EcdhKeyAgreement.h" + #include "asn1/KnownOIDs.h" #include "asn1/PaceInfo.h" -#include "Commands.h" #include "pace/ec/EcdhGenericMapping.h" -#include "pace/ec/EcdhKeyAgreement.h" #include "pace/ec/EcUtil.h" #include "pace/ec/EllipticCurveFactory.h" #include - using namespace governikus; @@ -51,7 +50,7 @@ EcdhKeyAgreement::EcdhKeyAgreement(const QSharedPointer& pPaceIn } -QSharedPointer EcdhKeyAgreement::create(const QSharedPointer& pPaceInfo, +QSharedPointer EcdhKeyAgreement::create(const QSharedPointer& pPaceInfo, const QSharedPointer& pCardConnectionWorker) { QSharedPointer keyAgreement(new EcdhKeyAgreement(pPaceInfo, pCardConnectionWorker)); @@ -74,93 +73,87 @@ QSharedPointer EcdhKeyAgreement::create(const QSharedPointer EcdhKeyAgreement::determineSharedSecret(const QByteArray& pNonce) +KeyAgreement::CardResult EcdhKeyAgreement::determineSharedSecret(const QByteArray& pNonce) { - CardOperationResult > ephemeralCurveResult = determineEphemeralDomainParameters(pNonce); - CardReturnCode ephemeralCurveResultCode = ephemeralCurveResult.getReturnCode(); - mEphemeralCurve = ephemeralCurveResult.getPayload(); + auto [ephemeralCurveResultCode, ephemeralCurve] = determineEphemeralDomainParameters(pNonce); + mEphemeralCurve = ephemeralCurve; if (ephemeralCurveResultCode != CardReturnCode::OK) { - return CardOperationResult(ephemeralCurveResultCode, QByteArray()); + return {ephemeralCurveResultCode}; } - CardOperationResult > mutualPointResult = performKeyExchange(mEphemeralCurve); - CardReturnCode mutualPointResultCode = mutualPointResult.getReturnCode(); - QSharedPointer mutualPoint = mutualPointResult.getPayload(); + auto [mutualPointResultCode, mutualPoint] = performKeyExchange(mEphemeralCurve); if (mutualPointResultCode != CardReturnCode::OK) { - return CardOperationResult(mutualPointResultCode, QByteArray()); + return {mutualPointResultCode}; } QByteArray sharedSecret = EcUtil::point2oct(mEphemeralCurve, mutualPoint.data()); sharedSecret = sharedSecret.mid(1, (sharedSecret.size() - 1) / 2); - return CardOperationResult(CardReturnCode::OK, sharedSecret); + return {CardReturnCode::OK, sharedSecret}; } -CardOperationResult > EcdhKeyAgreement::determineEphemeralDomainParameters(const QByteArray& pNonce) +QPair > EcdhKeyAgreement::determineEphemeralDomainParameters(const QByteArray& pNonce) { QByteArray terminalMappingData = mMapping->generateTerminalMappingData(); - CardOperationResult result = transmitGAMappingData(terminalMappingData); - CardReturnCode resultCode = result.getReturnCode(); + auto [resultCode, cardMappingData] = transmitGAMappingData(terminalMappingData); if (resultCode != CardReturnCode::OK) { - return CardOperationResult >(resultCode, QSharedPointer()); + return qMakePair(resultCode, QSharedPointer()); } - QByteArray cardMappingData = result.getPayload(); - return CardOperationResult >(CardReturnCode::OK, mMapping->generateEphemeralDomainParameters(cardMappingData, pNonce)); + return qMakePair(CardReturnCode::OK, mMapping->generateEphemeralDomainParameters(cardMappingData, pNonce)); } -CardOperationResult > EcdhKeyAgreement::performKeyExchange(const QSharedPointer& pCurve) +QPair > EcdhKeyAgreement::performKeyExchange(const QSharedPointer& pCurve) { QSharedPointer terminalEphemeralKey = EcUtil::create(EC_KEY_new()); if (!EC_KEY_set_group(terminalEphemeralKey.data(), pCurve.data())) { qCCritical(card) << "Error EC_KEY_set_group"; - return CardOperationResult >(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); + return qMakePair(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); } if (!EC_KEY_generate_key(terminalEphemeralKey.data())) { qCCritical(card) << "Error EC_KEY_generate_key"; - return CardOperationResult >(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); + return qMakePair(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); } // Make a copy of the terminal public key for later mutual authentication. mTerminalPublicKey = EcUtil::create(EC_POINT_dup(EC_KEY_get0_public_key(terminalEphemeralKey.data()), pCurve.data())); QByteArray terminalEphemeralPublicKeyBytes = EcUtil::point2oct(pCurve, mTerminalPublicKey.data()); - const BIGNUM* terminalPrivateKey = EC_KEY_get0_private_key(terminalEphemeralKey.data()); + const BIGNUM* const terminalPrivateKey = EC_KEY_get0_private_key(terminalEphemeralKey.data()); - CardOperationResult result = transmitGAEphemeralPublicKey(terminalEphemeralPublicKeyBytes); - CardReturnCode resultCode = result.getReturnCode(); + auto [resultCode, cardEphemeralPublicKeyBytes] = transmitGAEphemeralPublicKey(terminalEphemeralPublicKeyBytes); if (resultCode != CardReturnCode::OK) { - return CardOperationResult >(resultCode, QSharedPointer()); + return qMakePair(resultCode, QSharedPointer()); } - QByteArray cardEphemeralPublicKeyBytes = result.getPayload(); qCDebug(secure) << "uncompressedCardEphemeralPublicKey:" << cardEphemeralPublicKeyBytes.toHex(); mCardPublicKey = EcUtil::oct2point(pCurve, cardEphemeralPublicKeyBytes); if (!mCardPublicKey) { qCCritical(card) << "Cannot encode card ephemeral public key"; - return CardOperationResult >(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); + return qMakePair(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); } if (!EC_POINT_cmp(pCurve.data(), mTerminalPublicKey.data(), mCardPublicKey.data(), nullptr)) { qCCritical(card) << "The exchanged public keys are equal"; - return CardOperationResult >(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); + return qMakePair(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); } QSharedPointer mutualPoint = EcUtil::create(EC_POINT_new(pCurve.data())); if (!EC_POINT_mul(pCurve.data(), mutualPoint.data(), nullptr, mCardPublicKey.data(), terminalPrivateKey, nullptr)) { qCCritical(card) << "Calculation of elliptic curve point H failed"; - return CardOperationResult >(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); + return qMakePair(CardReturnCode::PROTOCOL_ERROR, QSharedPointer()); } - return CardOperationResult >(CardReturnCode::OK, mutualPoint); + + return qMakePair(CardReturnCode::OK, mutualPoint); } diff --git a/src/card/base/pace/ec/EcdhKeyAgreement.h b/src/card/base/pace/ec/EcdhKeyAgreement.h index 533f8f6..23d289c 100644 --- a/src/card/base/pace/ec/EcdhKeyAgreement.h +++ b/src/card/base/pace/ec/EcdhKeyAgreement.h @@ -10,6 +10,7 @@ #include "pace/KeyAgreement.h" #include +#include #include class test_EcdhKeyAgreement; @@ -28,13 +29,13 @@ class EcdhKeyAgreement QSharedPointer mTerminalPublicKey; QSharedPointer mCardPublicKey; - CardOperationResult > determineEphemeralDomainParameters(const QByteArray& pNonce); - CardOperationResult > performKeyExchange(const QSharedPointer& pCurve); + QPair > determineEphemeralDomainParameters(const QByteArray& pNonce); + QPair > performKeyExchange(const QSharedPointer& pCurve); static QByteArray encodeUncompressedPublicKey(const QSharedPointer& pPaceInfo, const QSharedPointer& pCurve, const QSharedPointer& pPoint); static QByteArray encodeCompressedPublicKey(const QSharedPointer& pCurve, const QSharedPointer& pPoint); - CardOperationResult determineSharedSecret(const QByteArray& pNonce) override; + KeyAgreement::CardResult determineSharedSecret(const QByteArray& pNonce) override; QByteArray getUncompressedTerminalPublicKey() override; QByteArray getUncompressedCardPublicKey() override; QByteArray getCompressedCardPublicKey() override; @@ -42,7 +43,7 @@ class EcdhKeyAgreement EcdhKeyAgreement(const QSharedPointer& pPaceInfo, const QSharedPointer& pCardConnectionWorker); public: - static QSharedPointer create(const QSharedPointer& pPaceInfo, + static QSharedPointer create(const QSharedPointer& pPaceInfo, const QSharedPointer& pCardConnectionWorker); virtual ~EcdhKeyAgreement() override = default; diff --git a/src/card/bluetooth/BluetoothCard.cpp b/src/card/bluetooth/BluetoothCard.cpp index 778ef61..0adf99f 100644 --- a/src/card/bluetooth/BluetoothCard.cpp +++ b/src/card/bluetooth/BluetoothCard.cpp @@ -121,10 +121,9 @@ CardReturnCode BluetoothCard::transmit(const CommandApdu& pCmd, ResponseApdu& pR } -CardReturnCode BluetoothCard::establishPaceChannel(PacePasswordId pPasswordId, +EstablishPaceChannelOutput BluetoothCard::establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, - EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds) { EstablishPaceChannel builder; @@ -140,8 +139,9 @@ CardReturnCode BluetoothCard::establishPaceChannel(PacePasswordId pPasswordId, return returnCode; } - pChannelOutput.parseFromCcid(response.getBuffer(), pPasswordId); - return pChannelOutput.getPaceReturnCode(); + EstablishPaceChannelOutput output; + output.parseFromCcid(response.getBuffer(), pPasswordId); + return output; } diff --git a/src/card/bluetooth/BluetoothCard.h b/src/card/bluetooth/BluetoothCard.h index 8be668c..1107c1c 100644 --- a/src/card/bluetooth/BluetoothCard.h +++ b/src/card/bluetooth/BluetoothCard.h @@ -26,7 +26,7 @@ class BluetoothCard CardReturnCode transmit(const CommandApdu& pCmd, ResponseApdu& pRes, quint8 pTimeoutSeconds); public: - BluetoothCard(QSharedPointer pDevice); + explicit BluetoothCard(QSharedPointer pDevice); CardReturnCode connect() override; CardReturnCode disconnect() override; @@ -34,7 +34,7 @@ class BluetoothCard CardReturnCode transmit(const CommandApdu& pCmd, ResponseApdu& pRes) override; - CardReturnCode establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds) override; + EstablishPaceChannelOutput establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, quint8 pTimeoutSeconds) override; CardReturnCode destroyPaceChannel() override; diff --git a/src/card/bluetooth/BluetoothReader.cpp b/src/card/bluetooth/BluetoothReader.cpp index 6bf48cd..445d331 100644 --- a/src/card/bluetooth/BluetoothReader.cpp +++ b/src/card/bluetooth/BluetoothReader.cpp @@ -39,7 +39,12 @@ BluetoothReader::BluetoothReader(const QSharedPointer& pDev Card* BluetoothReader::getCard() const { - return mCard.data(); + if (mCard) + { + return mCard.data(); + } + + return nullptr; } @@ -83,8 +88,9 @@ void BluetoothReader::onInitialized(const QBluetoothDeviceInfo&) } -void BluetoothReader::disconnectReader() +void BluetoothReader::disconnectReader(const QString& pError) { + Q_UNUSED(pError); mDevice->disconnectFromDevice(); } @@ -110,7 +116,7 @@ void BluetoothReader::onError(QLowEnergyController::Error pError) { if (pError == QLowEnergyController::ConnectionError) { - Q_EMIT fireReaderDeviceError(GlobalStatus::Code::Workflow_Reader_Device_Connection_Error); + Q_EMIT fireReaderDeviceError(GlobalStatus::Code::Workflow_Bluetooth_Reader_Connection_Error); } } @@ -128,14 +134,14 @@ void BluetoothReader::onStatusCharacteristicChanged(const QByteArray& pValue) auto messages = BluetoothMessageParser(pValue).getMessages(); if (messages.size() != 1 || messages.at(0)->getBluetoothMsgId() != BluetoothMsgId::StatusInd) { - qCCritical(card) << "Cannot handle Bluetooth message"; + qCCritical(bluetooth) << "Cannot handle Bluetooth message"; return; } auto statusChange = messages.at(0).staticCast()->getStatusChange(); if (mCard.isNull() && (statusChange == BluetoothStatusChange::CardInserted || statusChange == BluetoothStatusChange::CardReset)) { - qCDebug(card) << "Card inserted" << getName(); + qCDebug(bluetooth) << "Card inserted" << getName(); mCard.reset(new BluetoothCard(mDevice)); QSharedPointer cardConnection = createCardConnectionWorker(); CardInfoFactory::create(cardConnection, mReaderInfo); @@ -147,15 +153,15 @@ void BluetoothReader::onStatusCharacteristicChanged(const QByteArray& pValue) } else { - qCWarning(card) << "Got unhandled card reader status" << statusChange; + qCWarning(bluetooth) << "Got unhandled card reader status" << statusChange; } } void BluetoothReader::onCardRemoved() { - qCDebug(card) << "Card removed" << getName(); + qCDebug(bluetooth) << "Card removed" << getName(); mLastCardEvent = CardEvent::CARD_REMOVED; - mReaderInfo.setCardInfo(CardInfo(CardType::NONE)); mCard.reset(); + mReaderInfo.setCardInfo(CardInfo(CardType::NONE)); } diff --git a/src/card/bluetooth/BluetoothReader.h b/src/card/bluetooth/BluetoothReader.h index 9deba58..a6c34d6 100644 --- a/src/card/bluetooth/BluetoothReader.h +++ b/src/card/bluetooth/BluetoothReader.h @@ -41,12 +41,12 @@ class BluetoothReader void fireReaderConnectionFailed(const QString& pReaderName); public: - BluetoothReader(const QSharedPointer& pDevice); + explicit BluetoothReader(const QSharedPointer& pDevice); Card* getCard() const override; void connectReader() override; - void disconnectReader() override; + void disconnectReader(const QString& pError = QString()) override; }; } // namespace governikus diff --git a/src/card/bluetooth/BluetoothReaderManagerPlugIn.cpp b/src/card/bluetooth/BluetoothReaderManagerPlugIn.cpp index 2bf5f1b..cbee29a 100644 --- a/src/card/bluetooth/BluetoothReaderManagerPlugIn.cpp +++ b/src/card/bluetooth/BluetoothReaderManagerPlugIn.cpp @@ -10,7 +10,12 @@ #include "BluetoothReader.h" #include "BluetoothReaderManagerPlugIn_p.h" #include "GlobalStatus.h" + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) +#include +#else #include "ScopeGuard.h" +#endif #include #include @@ -86,7 +91,7 @@ void BluetoothReaderManagerPlugIn::startScan(bool /*pAutoConnect*/) void BluetoothReaderManagerPlugIn::setBluetoothStatus(bool pEnabled) { - setReaderInfoEnabled(pEnabled); + setPlugInEnabled(pEnabled); if (!pEnabled) { while (!mReaders.isEmpty()) @@ -97,8 +102,10 @@ void BluetoothReaderManagerPlugIn::setBluetoothStatus(bool pEnabled) } -void BluetoothReaderManagerPlugIn::stopScan() +void BluetoothReaderManagerPlugIn::stopScan(const QString& pError) { + Q_UNUSED(pError); + if (mDeviceDiscoveryAgent.isActive()) { qCDebug(bluetooth) << "Stopping Bluetooth device discovery"; @@ -167,7 +174,7 @@ QVector BluetoothReaderManagerPlugIn::deviceIdsForReaderName(const QStr for (QMap::const_iterator it = mReaders.constBegin(); it != mReaders.constEnd(); ++it) { const QString& deviceId = it.key(); - const Reader* reader = it.value(); + const Reader* const reader = it.value(); if (reader->getName() == pReaderName) { result += deviceId; @@ -180,7 +187,7 @@ QVector BluetoothReaderManagerPlugIn::deviceIdsForReaderName(const QStr void BluetoothReaderManagerPlugIn::onDeviceDiscovered(const QBluetoothDeviceInfo& pInfo) { - setReaderInfoResponding(true); + setPlugInResponding(true); QString deviceId = BluetoothDeviceUtil::getDeviceId(pInfo); if (mReaders.contains(deviceId)) { @@ -218,7 +225,7 @@ void BluetoothReaderManagerPlugIn::onDeviceInitialized(const QBluetoothDeviceInf } disconnect(device.data(), &CyberJackWaveDevice::fireInitialized, this, &BluetoothReaderManagerPlugIn::onDeviceInitialized); - const ScopeGuard disconnector([device] { + const auto disconnector = qScopeGuard([device] { device->disconnectFromDevice(); }); @@ -229,7 +236,7 @@ void BluetoothReaderManagerPlugIn::onDeviceInitialized(const QBluetoothDeviceInf Q_ASSERT_X(!mReaders.contains(deviceId), "BluetoothReaderManagerPlugIn", "Device is already determined as reader"); - BluetoothReader* reader = new BluetoothReader(device); + auto* reader = new BluetoothReader(device); qCDebug(bluetooth) << "Device is successfully initialized, create reader" << reader->getName(); connect(reader, &BluetoothReader::fireReaderConnected, this, &BluetoothReaderManagerPlugIn::onReaderConnected); @@ -299,7 +306,7 @@ void BluetoothReaderManagerPlugIn::onDeviceDiscoveryError(QBluetoothDeviceDiscov if (pError == QBluetoothDeviceDiscoveryAgent::InputOutputError) { - setReaderInfoResponding(false); + setPlugInResponding(false); } Q_EMIT fireReaderDeviceError(pError == QBluetoothDeviceDiscoveryAgent::PoweredOffError ? GlobalStatus::Code::No_Error : GlobalStatus::Code::Workflow_Reader_Device_Scan_Error); diff --git a/src/card/bluetooth/BluetoothReaderManagerPlugIn.h b/src/card/bluetooth/BluetoothReaderManagerPlugIn.h index 3f8256d..d643cc3 100644 --- a/src/card/bluetooth/BluetoothReaderManagerPlugIn.h +++ b/src/card/bluetooth/BluetoothReaderManagerPlugIn.h @@ -63,7 +63,7 @@ class BluetoothReaderManagerPlugIn QList getReaders() const override; virtual void startScan(bool pAutoConnect) override; - virtual void stopScan() override; + virtual void stopScan(const QString& pError = QString()) override; }; } // namespace governikus diff --git a/src/card/bluetooth/BluetoothReaderManagerPlugIn_p.h b/src/card/bluetooth/BluetoothReaderManagerPlugIn_p.h index ec6c011..94252a8 100644 --- a/src/card/bluetooth/BluetoothReaderManagerPlugIn_p.h +++ b/src/card/bluetooth/BluetoothReaderManagerPlugIn_p.h @@ -18,7 +18,7 @@ class BluetoothReaderManagerPlugInPrivate Q_DECLARE_PUBLIC(BluetoothReaderManagerPlugIn) BluetoothReaderManagerPlugIn* const q_ptr; - BluetoothReaderManagerPlugInPrivate(BluetoothReaderManagerPlugIn* pPublic); + explicit BluetoothReaderManagerPlugInPrivate(BluetoothReaderManagerPlugIn* pPublic); public Q_SLOTS: void onBluetoothStatusChanged(bool pEnabled); diff --git a/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_android.cpp b/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_android.cpp index 32abbcd..f41b3be 100644 --- a/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_android.cpp +++ b/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_android.cpp @@ -67,7 +67,7 @@ void BluetoothReaderManagerPlugInPrivate::init() { Q_Q(BluetoothReaderManagerPlugIn); const auto& adapter = AndroidBluetoothAdapter::getDefaultAdapter(); - q->setReaderInfoAvailable(adapter.isAvailable()); + q->setPlugInAvailable(adapter.isAvailable()); q->setBluetoothStatus(adapter.isStateOn()); } diff --git a/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_ios.mm b/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_ios.mm index 556ba59..1cd83d6 100644 --- a/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_ios.mm +++ b/src/card/bluetooth/BluetoothReaderManagerPlugIn_p_ios.mm @@ -22,7 +22,7 @@ BluetoothReaderManagerPlugInPrivate::BluetoothReaderManagerPlugInPrivate(Bluetoo void BluetoothReaderManagerPlugInPrivate::init() { Q_Q(BluetoothReaderManagerPlugIn); - q->setReaderInfoAvailable(true); + q->setPlugInAvailable(true); q->setBluetoothStatus(true); } @@ -35,7 +35,7 @@ void BluetoothReaderManagerPlugInPrivate::onBluetoothStatusChanged(bool) void BluetoothReaderManagerPlugInPrivate::onScanStart() { NSMutableDictionary* options = [[[NSMutableDictionary alloc] init] autorelease]; - [options setObject:[NSNumber numberWithBool:YES] forKey:CBCentralManagerOptionShowPowerAlertKey]; + options[CBCentralManagerOptionShowPowerAlertKey] = @YES; // Display a dialog to the user if Bluetooth is off [[[CBCentralManager alloc] initWithDelegate:nil queue:nil options:options] autorelease]; } diff --git a/src/card/bluetooth/CyberJackWaveDevice.cpp b/src/card/bluetooth/CyberJackWaveDevice.cpp index 8af5bb5..adcfe9e 100644 --- a/src/card/bluetooth/CyberJackWaveDevice.cpp +++ b/src/card/bluetooth/CyberJackWaveDevice.cpp @@ -248,7 +248,7 @@ QLowEnergyService::WriteMode CyberJackWaveDevice::determineWriteMode(int pBlockI return (pBlockIndex % IOS_CONFIRMATION_BLOCK_NUMBER) ? QLowEnergyService::WriteWithoutResponse : QLowEnergyService::WriteWithResponse; #else - Q_UNUSED(pBlockIndex); + Q_UNUSED(pBlockIndex) /* * According to Reiner SCT on Android the behaviour is too device specific, diff --git a/src/card/bluetooth/messages/BluetoothMessageParser.cpp b/src/card/bluetooth/messages/BluetoothMessageParser.cpp index 3b97dff..15283fe 100644 --- a/src/card/bluetooth/messages/BluetoothMessageParser.cpp +++ b/src/card/bluetooth/messages/BluetoothMessageParser.cpp @@ -20,15 +20,10 @@ #include "parameter/BluetoothMessageParameterResultCode.h" #include "parameter/BluetoothMessageParameterStatusChange.h" -#include - using namespace governikus; -Q_DECLARE_LOGGING_CATEGORY(card) - - BluetoothMessageParser::BluetoothMessageParser(const QByteArray& pData) : mMessages() , mRemainingBytes(pData) @@ -46,7 +41,7 @@ void BluetoothMessageParser::parse() { while (mRemainingBytes.size() >= 4) { - BluetoothMsgId msgId = static_cast(mRemainingBytes.at(0)); + auto msgId = static_cast(mRemainingBytes.at(0)); int parameterCount = mRemainingBytes.at(1); auto message = createMessage(msgId); @@ -70,7 +65,7 @@ bool BluetoothMessageParser::parseParameter(QSharedPointer pMe { if (data.size() >= 4) { - BluetoothParamId paramId = static_cast(data.at(0)); + auto paramId = static_cast(data.at(0)); ushort paramLength = getParamLength(static_cast(data.at(2)), static_cast(data.at(3))); data = data.mid(4); diff --git a/src/card/bluetooth/messages/BluetoothUtils.cpp b/src/card/bluetooth/messages/BluetoothUtils.cpp index d695afb..104f726 100644 --- a/src/card/bluetooth/messages/BluetoothUtils.cpp +++ b/src/card/bluetooth/messages/BluetoothUtils.cpp @@ -14,7 +14,7 @@ Q_DECLARE_LOGGING_CATEGORY(bluetooth) ushort BluetoothUtils::getPaddingLength(ushort pParamLen, ushort pPaddingLen) { - ushort needsPaddingLen = static_cast(pPaddingLen - (pParamLen % pPaddingLen)); + auto needsPaddingLen = static_cast(pPaddingLen - (pParamLen % pPaddingLen)); return needsPaddingLen == pPaddingLen ? 0 : needsPaddingLen; } diff --git a/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.cpp b/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.cpp index 99c2111..26a142a 100644 --- a/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.cpp +++ b/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.cpp @@ -3,13 +3,11 @@ */ #include "BluetoothMessageParameter.h" -#include "messages/BluetoothUtils.h" -#include +#include "messages/BluetoothUtils.h" using namespace governikus; -Q_DECLARE_LOGGING_CATEGORY(bluetooth) QDebug operator<<(QDebug pDbg, const BluetoothMessageParameter& pMsg) { diff --git a/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.h b/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.h index 531690c..cdf48d3 100644 --- a/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.h +++ b/src/card/bluetooth/messages/parameter/BluetoothMessageParameter.h @@ -7,9 +7,11 @@ #pragma once #include "messages/BluetoothIDs.h" + #include -Q_DECLARE_LOGGING_CATEGORY(card) +Q_DECLARE_LOGGING_CATEGORY(bluetooth) + namespace governikus { @@ -36,13 +38,13 @@ class BluetoothMessageParameter pDest = static_cast(pValue.at(0)); if (!Enum::isValue(pValue.at(0))) { - qCWarning(card) << "Value is unknown:" << pDest; + qCWarning(bluetooth) << "Value is unknown:" << pDest; } return true; } else { - qCWarning(card) << "Content has wrong size:" << pValue.toHex(); + qCWarning(bluetooth) << "Content has wrong size:" << pValue.toHex(); } return false; diff --git a/src/card/bluetooth/messages/parameter/BluetoothMessageParameterMaxMsgSize.cpp b/src/card/bluetooth/messages/parameter/BluetoothMessageParameterMaxMsgSize.cpp index d67fd9f..b155ff7 100644 --- a/src/card/bluetooth/messages/parameter/BluetoothMessageParameterMaxMsgSize.cpp +++ b/src/card/bluetooth/messages/parameter/BluetoothMessageParameterMaxMsgSize.cpp @@ -12,7 +12,7 @@ BluetoothMessageParameterMaxMsgSize::BluetoothMessageParameterMaxMsgSize(const Q { if (pValue.size() != 2) { - qCWarning(card) << "Content has wrong length"; + qCWarning(bluetooth) << "Content has wrong length"; mValue.clear(); mValid = false; return; @@ -27,7 +27,7 @@ BluetoothMessageParameterMaxMsgSize::BluetoothMessageParameterMaxMsgSize(uint pM { if (pMaxMsgSize >> 16) { - qCWarning(card) << "MaxMsgSize has wrong length"; + qCWarning(bluetooth) << "MaxMsgSize has wrong length"; mValid = false; return; } diff --git a/src/card/drivers/ReaderDetector.h b/src/card/drivers/ReaderDetector.h index 2795d00..c91de23 100644 --- a/src/card/drivers/ReaderDetector.h +++ b/src/card/drivers/ReaderDetector.h @@ -55,7 +55,7 @@ class ReaderDetector protected: ReaderDetector(); - virtual ~ReaderDetector(); + ~ReaderDetector() override; static ReaderDetector& getInstance(); public: diff --git a/src/card/drivers/ReaderDetector_linux.cpp b/src/card/drivers/ReaderDetector_linux.cpp index 9f85f0e..9436378 100644 --- a/src/card/drivers/ReaderDetector_linux.cpp +++ b/src/card/drivers/ReaderDetector_linux.cpp @@ -152,7 +152,7 @@ QVector ReaderDetector::attachedDevIds() const /* Create the udev object */ udev = udev_new(); - if (!udev) + if (udev == nullptr) { qCDebug(card_drivers) << "Can't create udev"; return result; @@ -173,7 +173,7 @@ QVector ReaderDetector::attachedDevIds() const { /* Get the filename of the /sys entry for the device and create a udev_device object (dev) representing it */ - const char* path = udev_list_entry_get_name(dev_list_entry); + const char* const path = udev_list_entry_get_name(dev_list_entry); struct udev_device* dev = udev_device_new_from_syspath(udev, path); /* The device pointed to by dev contains information about @@ -183,7 +183,7 @@ QVector ReaderDetector::attachedDevIds() const be several levels up the tree, but the function will find it.*/ dev = udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device"); - if (!dev) + if (dev == nullptr) { continue; } diff --git a/src/card/drivers/ReaderDetector_osx.cpp b/src/card/drivers/ReaderDetector_osx.cpp index d5908bb..213c16f 100644 --- a/src/card/drivers/ReaderDetector_osx.cpp +++ b/src/card/drivers/ReaderDetector_osx.cpp @@ -11,12 +11,11 @@ #include +Q_DECLARE_LOGGING_CATEGORY(card_drivers) using namespace governikus; -Q_DECLARE_LOGGING_CATEGORY(card_drivers) - #define VENDOR_ID "idVendor" #define PRODUCT_ID "idProduct" @@ -28,7 +27,7 @@ static void deviceChanged(void* refCon, io_iterator_t iterator) // Clear the recognized changes } - qDebug() << "System information: device changed"; + qCDebug(card_drivers) << "System information: device changed"; ReaderDetector* readerDetector = static_cast(refCon); Q_EMIT readerDetector->fireReaderChangeDetected(); @@ -53,7 +52,7 @@ static bool listenTo(const io_name_t notificationType, ReaderDetector* readerDet if (kr != KERN_SUCCESS) { - qDebug() << "IOServiceAddMatchingNotification returned" << kr; + qCDebug(card_drivers) << "IOServiceAddMatchingNotification returned" << kr; return false; } diff --git a/src/card/drivers/ReaderDetector_win.cpp b/src/card/drivers/ReaderDetector_win.cpp index dd47b57..a2577c3 100644 --- a/src/card/drivers/ReaderDetector_win.cpp +++ b/src/card/drivers/ReaderDetector_win.cpp @@ -17,11 +17,9 @@ #include -using namespace governikus; - - Q_DECLARE_LOGGING_CATEGORY(card_drivers) +using namespace governikus; bool ReaderDetector::initNativeEvents() { @@ -131,7 +129,7 @@ QVector ReaderDetector::attachedDevIds() const bool ReaderDetector::nativeEventFilter(const QByteArray& pEventType, void* pMessage, long* pResult) { - Q_UNUSED(pResult); + Q_UNUSED(pResult) if (pEventType == "windows_generic_MSG") { @@ -140,7 +138,7 @@ bool ReaderDetector::nativeEventFilter(const QByteArray& pEventType, void* pMess { if (msg->wParam == DBT_DEVNODES_CHANGED) { - qDebug() << "System information: device changed"; + qCDebug(card_drivers) << "System information: device changed"; Q_EMIT fireReaderChangeDetected(); } } diff --git a/src/card/ios/CMakeLists.txt b/src/card/ios/CMakeLists.txt new file mode 100644 index 0000000..821afcb --- /dev/null +++ b/src/card/ios/CMakeLists.txt @@ -0,0 +1,8 @@ +##################################################################### +# The ReaderManagerPlugin for iOS Nfc. +##################################################################### + +ADD_PLATFORM_LIBRARY(AusweisAppCardIos) + +TARGET_LINK_LIBRARIES(AusweisAppCardIos Qt5::Core AusweisAppGlobal AusweisAppCard) +TARGET_COMPILE_DEFINITIONS(AusweisAppCardIos PRIVATE QT_STATICPLUGIN) diff --git a/src/card/ios/IosCard.h b/src/card/ios/IosCard.h new file mode 100644 index 0000000..7390030 --- /dev/null +++ b/src/card/ios/IosCard.h @@ -0,0 +1,49 @@ +/*! + * \brief Implementation of \ref Card for iOS. + * + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "Card.h" + +#include +#include + + +namespace governikus +{ +struct IosCardPointer; + +class IosCard + : public Card +{ + Q_OBJECT + + private: + IosCardPointer* const mCard; + bool mConnected; + QWaitCondition mWaitCondition; + QMutex mCallbackDone; + + public: + explicit IosCard(IosCardPointer* pTag); + virtual ~IosCard() override; + + bool isValid() const; + bool invalidateTarget(); + + virtual CardReturnCode connect() override; + virtual CardReturnCode disconnect() override; + virtual bool isConnected() override; + virtual void setProgressMessage(const QString& pMessage) override; + + virtual CardReturnCode transmit(const CommandApdu& pCmd, ResponseApdu& pRes) override; + + Q_SIGNALS: + void fireConnectFailed(); + void fireTransmitFailed(); +}; + +} // namespace governikus diff --git a/src/card/ios/IosCard.mm b/src/card/ios/IosCard.mm new file mode 100644 index 0000000..bae283c --- /dev/null +++ b/src/card/ios/IosCard.mm @@ -0,0 +1,182 @@ +/*! + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "IosCard.h" + +#include "IosCardPointer.h" + +#include + +#import +#import +#import + + +using namespace governikus; + + +Q_DECLARE_LOGGING_CATEGORY(card_nfc) + + +IosCard::IosCard(IosCardPointer* const pCard) + : Card() + , mCard(pCard) + , mConnected(false) + , mWaitCondition() + , mCallbackDone() +{ + qCDebug(card_nfc) << "Card created"; + + [mCard->mNfcTag retain]; + mCallbackDone.lock(); +} + + +IosCard::~IosCard() +{ + [mCard->mNfcTag release]; + delete mCard; +} + + +bool IosCard::isValid() const +{ + return mCard->mNfcTag && (!mConnected || [mCard->mNfcTag isAvailable]); +} + + +bool IosCard::invalidateTarget() +{ + if (isValid()) + { + [mCard->mNfcTag release]; + mCard->mNfcTag = nil; + return true; + } + + return false; +} + + +CardReturnCode IosCard::connect() +{ + if (!isValid()) + { + qCWarning(card_nfc) << "NearFieldTarget is no longer valid"; + return CardReturnCode::COMMAND_FAILED; + } + + if (isConnected()) + { + qCCritical(card_nfc) << "Card is already connected"; + return CardReturnCode::OK; + } + + NFCTagReaderSession* session = [mCard->mNfcTag session]; + [session connectToTag: mCard->mNfcTag completionHandler: ^(NSError* error){ + if (error != nil) + { + qCDebug(card_nfc) << "Error during connect:" << error; + } + else + { + mConnected = true; + } + + mWaitCondition.wakeOne(); + }]; + + mWaitCondition.wait(&mCallbackDone, 500); + if (!mConnected) + { + Q_EMIT fireTransmitFailed(); + return CardReturnCode::COMMAND_FAILED; + } + + return CardReturnCode::OK; +} + + +CardReturnCode IosCard::disconnect() +{ + if (!isValid()) + { + qCWarning(card_nfc) << "NearFieldTarget is no longer valid"; + return CardReturnCode::COMMAND_FAILED; + } + + if (!isConnected()) + { + qCCritical(card_nfc) << "Card is already disconnected"; + return CardReturnCode::COMMAND_FAILED; + } + + mConnected = false; + return CardReturnCode::OK; +} + + +bool IosCard::isConnected() +{ + return mConnected; +} + + +void IosCard::setProgressMessage(const QString& pMessage) +{ + NFCTagReaderSession* session = [mCard->mNfcTag session]; + [session setAlertMessage: pMessage.toNSString()]; +} + + +CardReturnCode IosCard::transmit(const CommandApdu& pCmd, ResponseApdu& pRes) +{ + if (!isValid()) + { + qCWarning(card_nfc) << "NearFieldTarget is no longer valid"; + return CardReturnCode::COMMAND_FAILED; + } + + qCDebug(card_nfc) << "Transmit command APDU:" << pCmd.getBuffer().toHex(); + + const auto resultBuffer = QSharedPointer::create(); // Don't use this inside of the Block + const QWeakPointer weakBuffer = resultBuffer; + + Q_ASSERT([mCard->mNfcTag conformsToProtocol:@protocol(NFCISO7816Tag)]); + const auto tag = static_cast >(mCard->mNfcTag); + auto* apdu = [[NFCISO7816APDU alloc] initWithData: pCmd.getBuffer().toNSData()]; + [tag sendCommandAPDU: apdu completionHandler: ^(NSData* responseData, uint8_t sw1, uint8_t sw2, NSError* error){ + // By referencing weakBuffer here, it will be copied into the Block. If the handler outlives the caller, resultBuffer won't exist anymore. + if (const auto recvBuffer = weakBuffer.lock()) + { + if (error == nil) + { + *recvBuffer = QByteArray::fromNSData(responseData); + *recvBuffer += static_cast(sw1); + *recvBuffer += static_cast(sw2); + qCDebug(card_nfc) << "Transmit response APDU:" << recvBuffer->toHex(); + } + else + { + qCDebug(card_nfc) << "Error during transmit:" << error; + } + + mWaitCondition.wakeOne(); + } + else + { + qCDebug(card_nfc) << "Caller doesn't exist anymore."; + } + }]; + + mWaitCondition.wait(&mCallbackDone, 500); + if (resultBuffer->isEmpty()) + { + Q_EMIT fireTransmitFailed(); + return CardReturnCode::COMMAND_FAILED; + } + + pRes.setBuffer(std::move(*resultBuffer)); + return CardReturnCode::OK; +} diff --git a/src/card/ios/IosCardPointer.h b/src/card/ios/IosCardPointer.h new file mode 100644 index 0000000..98c4ebe --- /dev/null +++ b/src/card/ios/IosCardPointer.h @@ -0,0 +1,16 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#import + +namespace governikus +{ + +/// Implementation detail which can only be used by Object-C++ since it stores a pointer to an Objective-C protocol. +struct IosCardPointer +{ + id mNfcTag; +}; + +} // namespace governikus diff --git a/src/card/ios/IosReader.h b/src/card/ios/IosReader.h new file mode 100644 index 0000000..9d9091d --- /dev/null +++ b/src/card/ios/IosReader.h @@ -0,0 +1,52 @@ +/*! + * \brief Implementation of \ref Reader for iOS. + * + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "IosCard.h" +#include "IosReaderDelegate.h" +#include "Reader.h" + +#include +#include + + +namespace governikus +{ + +class IosReader + : public ConnectableReader +{ + Q_OBJECT + + private: + IosReaderDelegate mDelegate; + QScopedPointer mCard; + bool mConnected; + qint64 mLastRestart; + + virtual CardEvent updateCard() override; + + void removeCard(); + void stopSession(const QString& pError = QString()); + + public: + IosReader(); + virtual ~IosReader() override; + + virtual Card* getCard() const override; + + virtual void connectReader() override; + virtual void disconnectReader(const QString& pError = QString()) override; + + private Q_SLOTS: + void onDiscoveredTag(IosCard* pCard); + void onDidInvalidateWithError(const QString& pError, bool pDoRestart); + void onConnectFailed(); + void onTransmitFailed(); +}; + +} // namespace governikus diff --git a/src/card/ios/IosReader.mm b/src/card/ios/IosReader.mm new file mode 100644 index 0000000..a99a97d --- /dev/null +++ b/src/card/ios/IosReader.mm @@ -0,0 +1,166 @@ +/*! + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "CardConnectionWorker.h" +#include "IosReader.h" + +#include +#include +#include +#include + + +using namespace governikus; + + +Q_DECLARE_LOGGING_CATEGORY(card_nfc) + + +Reader::CardEvent IosReader::updateCard() +{ + if (mCard && !mCard->isValid()) + { + removeCard(); + mDelegate.startSession(); + return CardEvent::CARD_REMOVED; + } + + return CardEvent::NONE; +} + + +IosReader::IosReader() + : ConnectableReader(ReaderManagerPlugInType::NFC, QStringLiteral("NFC")) + , mDelegate() + , mCard() + , mConnected(false) + , mLastRestart(0) +{ + mReaderInfo.setBasicReader(true); + mReaderInfo.setConnected(true); + + connect(&mDelegate, &IosReaderDelegate::fireDiscoveredTag, this, &IosReader::onDiscoveredTag); + connect(&mDelegate, &IosReaderDelegate::fireDidInvalidateWithError, this, &IosReader::onDidInvalidateWithError); + + mTimerId = startTimer(500); +} + + +void IosReader::removeCard() +{ + Q_ASSERT(mCard); + mCard->invalidateTarget(); + mCard.reset(); + mReaderInfo.setCardInfo(CardInfo(CardType::NONE)); +} + + +void IosReader::stopSession(const QString& pError) +{ + qCDebug(card_nfc) << pError; + + if (pError.isEmpty()) + { + //: INFO IOS The current session was stopped without errors. + mDelegate.stopSession(tr("Scanning process has been finished successfully.")); + } + else + { + mDelegate.stopSession(pError, true); + } + + if (mCard) + { + removeCard(); + Q_EMIT fireCardRemoved(getName()); + } +} + + +IosReader::~IosReader() +{ +} + + +Card* IosReader::getCard() const +{ + if (mCard && mCard->isValid()) + { + return mCard.data(); + } + + return nullptr; +} + + +void IosReader::connectReader() +{ + mConnected = true; + mDelegate.startSession(); +} + + +void IosReader::disconnectReader(const QString& pError) +{ + stopSession(pError); + mConnected = false; +} + + +void IosReader::onDiscoveredTag(IosCard* pCard) +{ + mCard.reset(pCard); + connect(pCard, &IosCard::fireTransmitFailed, this, &IosReader::onTransmitFailed); + QSharedPointer cardConnection = createCardConnectionWorker(); + CardInfoFactory::create(cardConnection, mReaderInfo); + Q_EMIT fireCardInserted(getName()); +} + + +void IosReader::onDidInvalidateWithError(const QString& pError, bool pDoRestart) +{ + stopSession(pError); + + if (pDoRestart && mConnected) + { + const qint64 now = QDateTime::currentSecsSinceEpoch(); + if (now - mLastRestart <= 1) // Don't restart more than once per second to avoid spamming the log + { + using namespace std::chrono_literals; + QTimer::singleShot(1s, this, [this](){ + if (mConnected) + { + mDelegate.startSession(); + } + }); + } + else + { + mDelegate.startSession(); + } + mLastRestart = now; + return; + } + + mConnected = false; + Q_EMIT fireReaderDisconnected(); +} + + +void IosReader::onConnectFailed() +{ + //: ERROR IOS The connection to the card could not be established. + stopSession(tr("The connection could not be established. The process was aborted.")); + mConnected = false; + Q_EMIT fireReaderDisconnected(); +} + + +void IosReader::onTransmitFailed() +{ + //: ERROR IOS The card was removed during the communication. + stopSession(tr("The connection to the ID card has been lost. The process was aborted.")); + mConnected = false; + Q_EMIT fireReaderDisconnected(); +} diff --git a/src/card/ios/IosReaderDelegate.h b/src/card/ios/IosReaderDelegate.h new file mode 100644 index 0000000..fef2722 --- /dev/null +++ b/src/card/ios/IosReaderDelegate.h @@ -0,0 +1,42 @@ +/*! + * \brief Implementation of \ref IosReaderDelegate for iOS. + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "IosCard.h" + +#include + + +namespace governikus +{ + +class IosReaderDelegate + : public QObject +{ + Q_OBJECT + class Private; + + IosReaderDelegate::Private* mPrivate; + + public: + IosReaderDelegate(); + virtual ~IosReaderDelegate() override; + + void startSession(); + void stopSession(const QString& pMessage, bool pIsError = false); + + void onTagDiscovered(IosCard* pCard); + void onDidInvalidateWithError(const QString& pError, bool pDoRestart); + + Q_SIGNALS: + void fireDiscoveredTag(IosCard* pCard); + void fireDidInvalidateWithError(const QString& pError, bool pDoRestart); + + +}; + +} // namespace governikus diff --git a/src/card/ios/IosReaderDelegate.mm b/src/card/ios/IosReaderDelegate.mm new file mode 100644 index 0000000..5267e2f --- /dev/null +++ b/src/card/ios/IosReaderDelegate.mm @@ -0,0 +1,62 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "IosReaderDelegate.h" + +#include "IosReaderDelegateImpl.h" + + +using namespace governikus; + + +namespace governikus +{ + +class IosReaderDelegate::Private +{ + public: + IosReaderDelegateImpl* mIosReaderDelegateImpl; +}; + +} // namespace governikus + + +IosReaderDelegate::IosReaderDelegate() + : mPrivate(new IosReaderDelegate::Private()) +{ + IosReaderDelegateImpl* dlgt = [IosReaderDelegateImpl initWithDelegate: this]; + mPrivate->mIosReaderDelegateImpl = [dlgt retain]; +} + + +IosReaderDelegate::~IosReaderDelegate() +{ + [mPrivate->mIosReaderDelegateImpl release]; + delete mPrivate; +} + + +void IosReaderDelegate::startSession() +{ + //: INFO IOS The id card may be inserted, the authentication process may be started. + [mPrivate->mIosReaderDelegateImpl startSession: tr("Please place your device on your ID card.")]; +} + + +void IosReaderDelegate::stopSession(const QString& pMessage, bool pIsError) +{ + [mPrivate->mIosReaderDelegateImpl stopSession: pMessage isError: pIsError]; +} + + +void IosReaderDelegate::onTagDiscovered(IosCard* pCard) +{ + Q_EMIT fireDiscoveredTag(pCard); +} + + +void IosReaderDelegate::onDidInvalidateWithError(const QString& pError, bool pDoRestart) +{ + Q_EMIT fireDidInvalidateWithError(pError, pDoRestart); +} diff --git a/src/card/ios/IosReaderDelegateImpl.h b/src/card/ios/IosReaderDelegateImpl.h new file mode 100644 index 0000000..cb97aa8 --- /dev/null +++ b/src/card/ios/IosReaderDelegateImpl.h @@ -0,0 +1,27 @@ +/*! + * \brief Implementation of \ref IosReaderDelegateImpl for iOS. + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "IosReaderDelegate.h" + +#import + + +@interface IosReaderDelegateImpl + : NSObject + +@property governikus::IosReaderDelegate* mDelegate; +@property (retain) NFCTagReaderSession* mSession; + ++ (IosReaderDelegateImpl*) initWithDelegate: (governikus::IosReaderDelegate*) pDelegate; + +- (void) startSession: (QString)pMessage; + +- (void) stopSession: (QString)pMessage isError:(bool) pIsError; + + +@end diff --git a/src/card/ios/IosReaderDelegateImpl.mm b/src/card/ios/IosReaderDelegateImpl.mm new file mode 100644 index 0000000..5f6b01d --- /dev/null +++ b/src/card/ios/IosReaderDelegateImpl.mm @@ -0,0 +1,125 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "IosReaderDelegateImpl.h" + +#include "IosCard.h" +#include "IosCardPointer.h" + +#include + +#import + + +Q_DECLARE_LOGGING_CATEGORY(card_nfc) + + +@implementation IosReaderDelegateImpl + ++ (IosReaderDelegateImpl*) initWithDelegate:(governikus::IosReaderDelegate*)pDelegate { + IosReaderDelegateImpl* dlgt = [[IosReaderDelegateImpl alloc] init]; + dlgt.mDelegate = pDelegate; + return dlgt; + +} + + +- (id) init { + self = [super init]; + return self; +} + + +- (void) startSession: (QString)pMessage { + qCDebug(card_nfc) << "Start session"; + + if (self.mSession) + { + [self.mSession restartPolling]; + } + else + { + self.mSession = [[NFCTagReaderSession alloc] initWithPollingOption: NFCPollingISO14443 delegate: self queue: nil]; + if (self.mSession) + { + [self.mSession setAlertMessage: pMessage.toNSString()]; + [self.mSession beginSession]; + } + } +} + + +- (void) stopSession: (QString)pMessage isError:(bool) pIsError { + qCDebug(card_nfc) << "Stop session"; + + if (self.mSession) + { + if (pIsError) + { + [self.mSession invalidateSessionWithErrorMessage: pMessage.toNSString()]; + } + else + { + [self.mSession setAlertMessage: pMessage.toNSString()]; + [self.mSession invalidateSession]; + } + self.mSession = nil; + } +} + + +- (void) tagReaderSessionDidBecomeActive: (NFCTagReaderSession*)session { + qCDebug(card_nfc) << "Session activated"; + + if (session != self.mSession) + { + qCWarning(card_nfc) << "An unexpected session became active"; + return; + } +} + + +- (void) tagReaderSession: (NFCTagReaderSession*)session didInvalidateWithError:(NSError*)error { + qCDebug(card_nfc) << "Session did invalidate with error:" << error; + + if (session != self.mSession) + { + qCWarning(card_nfc) << "An unexpected session was invalidated"; + return; + } + + const bool doRestart = !(error.code == NFCReaderError::NFCReaderSessionInvalidationErrorUserCanceled || + error.code == NFCReaderError::NFCReaderErrorUnsupportedFeature); + self.mDelegate->onDidInvalidateWithError(QString::fromNSString(error.localizedDescription), doRestart); +} + + +- (void) tagReaderSession: (NFCTagReaderSession*)session didDetectTags:(NSArray<__kindof id >*)tags { + qCDebug(card_nfc) << "New tag detected"; + + if (session != self.mSession) + { + qCWarning(card_nfc) << "Detected a new tag from an unexpected session"; + return; + } + + if (tags.count > 1) + { + qCWarning(card_nfc) << "Detected more than one tag. Restarting scan"; + [session restartPolling]; + return; + } + + if (tags[0].type != NFCTagTypeISO7816Compatible) + { + qCWarning(card_nfc) << "Detected a new tag with an unexpected type:" << tags[0].type << "Restarting scan"; + [session restartPolling]; + return; + } + + self.mDelegate->onTagDiscovered(new governikus::IosCard(new governikus::IosCardPointer {tags[0]})); +} + + +@end diff --git a/src/card/ios/IosReaderManagerPlugIn.h b/src/card/ios/IosReaderManagerPlugIn.h new file mode 100644 index 0000000..c916027 --- /dev/null +++ b/src/card/ios/IosReaderManagerPlugIn.h @@ -0,0 +1,44 @@ +/*! + * \brief Implementation of \ref ReaderManagerPlugIn for NFC on iOS. + * + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "Reader.h" +#include "ReaderManagerPlugIn.h" + +#include + + +namespace governikus +{ + +class IosReaderManagerPlugIn + : public ReaderManagerPlugIn +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "governikus.ReaderManagerPlugIn" FILE "metadata.json") + Q_INTERFACES(governikus::ReaderManagerPlugIn) + + private: + QScopedPointer mIosReader; + + private Q_SLOTS: + void onReaderDisconncted(); + + public: + IosReaderManagerPlugIn(); + virtual ~IosReaderManagerPlugIn() override; + + virtual QList getReaders() const override; + + virtual void init() override; + virtual void shutdown() override; + + virtual void startScan(bool pAutoConnect) override; + virtual void stopScan(const QString& pError = QString()) override; +}; + +} // namespace governikus diff --git a/src/card/ios/IosReaderManagerPlugIn.mm b/src/card/ios/IosReaderManagerPlugIn.mm new file mode 100644 index 0000000..25aef76 --- /dev/null +++ b/src/card/ios/IosReaderManagerPlugIn.mm @@ -0,0 +1,106 @@ +/*! + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "IosReader.h" +#include "IosReaderManagerPlugIn.h" + +#include + +#import +#import + + +using namespace governikus; + + +Q_DECLARE_LOGGING_CATEGORY(card_nfc) + + +void IosReaderManagerPlugIn::onReaderDisconncted() +{ + ReaderManagerPlugIn::stopScan(); +} + + +IosReaderManagerPlugIn::IosReaderManagerPlugIn() + : ReaderManagerPlugIn(ReaderManagerPlugInType::NFC, NFCTagReaderSession.readingAvailable, NFCTagReaderSession.readingAvailable) + , mIosReader(nullptr) +{ +} + + +IosReaderManagerPlugIn::~IosReaderManagerPlugIn() +{ +} + + +QList IosReaderManagerPlugIn::getReaders() const +{ + if (getInfo().isEnabled()) + { + return QList({mIosReader.data()}); + } + + return QList(); +} + + +void IosReaderManagerPlugIn::init() +{ + ReaderManagerPlugIn::init(); + + if (mIosReader) + { + return; + } + + mIosReader.reset(new IosReader()); + connect(mIosReader.data(), &IosReader::fireCardInserted, this, &IosReaderManagerPlugIn::fireCardInserted); + connect(mIosReader.data(), &IosReader::fireCardRemoved, this, &IosReaderManagerPlugIn::fireCardRemoved); + connect(mIosReader.data(), &IosReader::fireCardRetryCounterChanged, this, &IosReaderManagerPlugIn::fireCardRetryCounterChanged); + connect(mIosReader.data(), &IosReader::fireReaderPropertiesUpdated, this, &IosReaderManagerPlugIn::fireReaderPropertiesUpdated); + connect(mIosReader.data(), &IosReader::fireReaderDisconnected, this, &IosReaderManagerPlugIn::onReaderDisconncted); + qCDebug(card_nfc) << "Add reader" << mIosReader->getName(); + + if (getInfo().isEnabled()) + { + Q_EMIT fireReaderAdded(mIosReader->getName()); + } +} + + +void IosReaderManagerPlugIn::shutdown() +{ + mIosReader.reset(); +} + + +void IosReaderManagerPlugIn::startScan(bool pAutoConnect) +{ + if (isScanRunning()) + { + return; + } + + if (mIosReader) + { + mIosReader->connectReader(); + } + ReaderManagerPlugIn::startScan(pAutoConnect); +} + + +void IosReaderManagerPlugIn::stopScan(const QString& pError) +{ + if (!isScanRunning()) + { + return; + } + + if (mIosReader) + { + mIosReader->disconnectReader(pError); + } + ReaderManagerPlugIn::stopScan(); +} diff --git a/src/card/ios/metadata.json b/src/card/ios/metadata.json new file mode 100644 index 0000000..3521a09 --- /dev/null +++ b/src/card/ios/metadata.json @@ -0,0 +1,4 @@ +{ + "name" : "IosReaderManagerPlugIn", + "dependencies" : [] +} diff --git a/src/card/nfc/NfcCard.cpp b/src/card/nfc/NfcCard.cpp index e71e8cc..06ab1e0 100644 --- a/src/card/nfc/NfcCard.cpp +++ b/src/card/nfc/NfcCard.cpp @@ -16,7 +16,7 @@ Q_DECLARE_LOGGING_CATEGORY(card_nfc) void NfcCard::onError(QNearFieldTarget::Error pError, const QNearFieldTarget::RequestId& pId) { - Q_UNUSED(pId); + Q_UNUSED(pId) qCWarning(card_nfc) << "Error:" << pError; } @@ -75,7 +75,7 @@ CardReturnCode NfcCard::connect() CardReturnCode NfcCard::disconnect() { - if (!mIsValid || !mNearFieldTarget) + if (!mIsValid || mNearFieldTarget == nullptr) { qCWarning(card_nfc) << "NearFieldTarget is no longer valid"; return CardReturnCode::COMMAND_FAILED; @@ -101,7 +101,7 @@ bool NfcCard::isConnected() CardReturnCode NfcCard::transmit(const CommandApdu& pCmd, ResponseApdu& pRes) { - if (!mIsValid || !mNearFieldTarget) + if (!mIsValid || mNearFieldTarget == nullptr) { qCWarning(card_nfc) << "NearFieldTarget is no longer valid"; return CardReturnCode::COMMAND_FAILED; diff --git a/src/card/nfc/NfcCard.h b/src/card/nfc/NfcCard.h index db2ae42..f14d3cd 100644 --- a/src/card/nfc/NfcCard.h +++ b/src/card/nfc/NfcCard.h @@ -27,7 +27,7 @@ class NfcCard void onError(QNearFieldTarget::Error pError, const QNearFieldTarget::RequestId& pId); public: - NfcCard(QNearFieldTarget* pNearFieldTarget); + explicit NfcCard(QNearFieldTarget* pNearFieldTarget); virtual ~NfcCard() override; bool isValid() const; diff --git a/src/card/nfc/NfcReader.cpp b/src/card/nfc/NfcReader.cpp index 09b4a09..cf0d2b1 100644 --- a/src/card/nfc/NfcReader.cpp +++ b/src/card/nfc/NfcReader.cpp @@ -25,7 +25,7 @@ Reader::CardEvent NfcReader::updateCard() void NfcReader::targetDetected(QNearFieldTarget* pTarget) { - if (!pTarget) + if (pTarget == nullptr) { return; } @@ -55,8 +55,9 @@ void NfcReader::targetDetected(QNearFieldTarget* pTarget) void NfcReader::targetLost(QNearFieldTarget* pTarget) { qCDebug(card_nfc) << "targetLost"; - if (pTarget && mCard && mCard->invalidateTarget(pTarget)) + if (pTarget != nullptr && mCard && mCard->invalidateTarget(pTarget)) { + mCard.reset(); mReaderInfo.setCardInfo(CardInfo(CardType::NONE)); Q_EMIT fireCardRemoved(getName()); } diff --git a/src/card/nfc/NfcReaderManagerPlugIn.cpp b/src/card/nfc/NfcReaderManagerPlugIn.cpp index bf65015..4d7eadd 100644 --- a/src/card/nfc/NfcReaderManagerPlugIn.cpp +++ b/src/card/nfc/NfcReaderManagerPlugIn.cpp @@ -23,6 +23,12 @@ namespace bool isAvailable() { #ifdef Q_OS_ANDROID + #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) + QNearFieldManager manager; + return manager.isSupported(); + + #else + QAndroidJniObject context = QtAndroid::androidContext(); if (context == nullptr) { @@ -32,6 +38,8 @@ bool isAvailable() return QAndroidJniObject::callStaticObjectMethod("android/nfc/NfcAdapter", "getDefaultAdapter", "(Landroid/content/Context;)Landroid/nfc/NfcAdapter;", context.object()) != nullptr; + #endif + #else QNearFieldManager manager; return manager.isAvailable(); @@ -45,14 +53,13 @@ bool isAvailable() void NfcReaderManagerPlugIn::onNfcAdapterStateChanged(bool pEnabled) { - if (mEnabled == pEnabled) + if (getInfo().isEnabled() == pEnabled) { return; } qCDebug(card_nfc) << "NfcAdapterStateChanged:" << pEnabled; - mEnabled = pEnabled; - setReaderInfoEnabled(pEnabled); + setPlugInEnabled(pEnabled); if (pEnabled) { Q_EMIT fireReaderAdded(mNfcReader->getName()); @@ -66,7 +73,6 @@ void NfcReaderManagerPlugIn::onNfcAdapterStateChanged(bool pEnabled) NfcReaderManagerPlugIn::NfcReaderManagerPlugIn() : ReaderManagerPlugIn(ReaderManagerPlugInType::NFC, isAvailable()) - , mEnabled(false) , mNfcReader(nullptr) { } @@ -79,7 +85,7 @@ NfcReaderManagerPlugIn::~NfcReaderManagerPlugIn() QList NfcReaderManagerPlugIn::getReaders() const { - if (mEnabled) + if (getInfo().isEnabled()) { return QList({mNfcReader.data()}); } @@ -105,7 +111,7 @@ void NfcReaderManagerPlugIn::init() connect(mNfcReader.data(), &NfcReader::fireNfcAdapterStateChanged, this, &NfcReaderManagerPlugIn::onNfcAdapterStateChanged); qCDebug(card_nfc) << "Add reader" << mNfcReader->getName(); - if (mEnabled) + if (getInfo().isEnabled()) { Q_EMIT fireReaderAdded(mNfcReader->getName()); } diff --git a/src/card/nfc/NfcReaderManagerPlugIn.h b/src/card/nfc/NfcReaderManagerPlugIn.h index 16ac62b..df2c51c 100644 --- a/src/card/nfc/NfcReaderManagerPlugIn.h +++ b/src/card/nfc/NfcReaderManagerPlugIn.h @@ -24,7 +24,6 @@ class NfcReaderManagerPlugIn Q_INTERFACES(governikus::ReaderManagerPlugIn) private: - bool mEnabled; QScopedPointer mNfcReader; private Q_SLOTS: diff --git a/src/card/pcsc/PcscCard.cpp b/src/card/pcsc/PcscCard.cpp index add8b08..cd0ab01 100644 --- a/src/card/pcsc/PcscCard.cpp +++ b/src/card/pcsc/PcscCard.cpp @@ -233,13 +233,8 @@ PCSC_RETURNCODE PcscCard::transmit(const QByteArray& pSendBuffer, QByteArray& pR return PcscUtils::Scard_E_Proto_Mismatch; } - SCARD_IO_REQUEST recvPci; - recvPci.dwProtocol = mProtocol; - recvPci.cbPciLength = sizeof(SCARD_IO_REQUEST); - - pReceiveBuffer.fill(0x00, 8192); - PCSC_INT bytesReceived = static_cast(pReceiveBuffer.size()); - PCSC_RETURNCODE returnCode = transmit(pSendBuffer, pReceiveBuffer, sendPci, recvPci, bytesReceived); + auto [returnCode, buffer] = transmit(pSendBuffer, sendPci); + pReceiveBuffer = buffer; /* * Reconnecting makes only sense, when no secure messaging channel is active. @@ -258,51 +253,62 @@ PCSC_RETURNCODE PcscCard::transmit(const QByteArray& pSendBuffer, QByteArray& pR returnCode = SCardBeginTransaction(mCardHandle); qCDebug(card_pcsc) << "SCardBeginTransaction:" << PcscUtils::toString(returnCode); - bytesReceived = static_cast(pReceiveBuffer.size()); - returnCode = transmit(pSendBuffer, pReceiveBuffer, sendPci, recvPci, bytesReceived); + auto [retryReturnCode, retryBuffer] = transmit(pSendBuffer, sendPci); + returnCode = retryReturnCode; + pReceiveBuffer = retryBuffer; } - if (returnCode != PcscUtils::Scard_S_Success) - { - return returnCode; - } - if (bytesReceived > INT_MAX) - { - qCCritical(card_pcsc) << "Max allowed receive buffer size exceeded"; - Q_ASSERT(bytesReceived <= INT_MAX); - return PcscUtils::Scard_F_Unknown_Error; - } - pReceiveBuffer.resize(static_cast(bytesReceived)); - qCDebug(card_pcsc) << "SCardTransmit resBuffer:" << pReceiveBuffer.toHex(); - if (pReceiveBuffer.size() < 2) - { - qCCritical(card_pcsc) << "Response buffer smaller than 2"; - return PcscUtils::Scard_F_Unknown_Error; - } - return PcscUtils::Scard_S_Success; -} - - -PCSC_RETURNCODE PcscCard::transmit(const QByteArray& pSendBuffer, - QByteArray& pReceiveBuffer, - const SCARD_IO_REQUEST* pSendPci, - SCARD_IO_REQUEST& pRecvPci, - PCSC_INT& pBytesReceived) -{ - qCDebug(card_pcsc) << "SCardTransmit cmdBuffer:" << pSendBuffer.toHex(); - PCSC_RETURNCODE returnCode = SCardTransmit(mCardHandle, pSendPci, reinterpret_cast(pSendBuffer.data()), static_cast(pSendBuffer.size()), &pRecvPci, reinterpret_cast(pReceiveBuffer.data()), &pBytesReceived); - qCDebug(card_pcsc) << "SCardTransmit for" << mReader->getName() << ':' << PcscUtils::toString(returnCode); - return returnCode; } -CardReturnCode PcscCard::establishPaceChannel(PacePasswordId pPasswordId, +PcscCard::CardResult PcscCard::transmit(const QByteArray& pSendBuffer, + const SCARD_IO_REQUEST* pSendPci) +{ + SCARD_IO_REQUEST recvPci; + recvPci.dwProtocol = mProtocol; + recvPci.cbPciLength = sizeof(SCARD_IO_REQUEST); + + QByteArray data(8192, '\0'); + auto dataReceived = static_cast(data.size()); + + qCDebug(card_pcsc) << "SCardTransmit cmdBuffer:" << pSendBuffer.toHex(); + const PCSC_RETURNCODE returnCode = SCardTransmit(mCardHandle, + pSendPci, + reinterpret_cast(pSendBuffer.data()), + static_cast(pSendBuffer.size()), + &recvPci, + reinterpret_cast(data.data()), + &dataReceived); + + qCDebug(card_pcsc) << "SCardTransmit for" << mReader->getName() << ':' << PcscUtils::toString(returnCode); + + if (dataReceived > INT_MAX) + { + qCCritical(card_pcsc) << "Max allowed receive buffer size exceeded"; + Q_ASSERT(dataReceived <= INT_MAX); + return {PcscUtils::Scard_F_Unknown_Error}; + } + + data.resize(static_cast(dataReceived)); + qCDebug(card_pcsc) << "SCardTransmit resBuffer:" << data.toHex(); + + if (data.size() < 2) + { + qCCritical(card_pcsc) << "Response buffer smaller than 2"; + return {PcscUtils::Scard_F_Unknown_Error}; + } + + return {returnCode, data}; +} + + +EstablishPaceChannelOutput PcscCard::establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, - EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds) + quint8 pTimeoutSeconds) { - Q_UNUSED(pTimeoutSeconds); + Q_UNUSED(pTimeoutSeconds) if (!mReader->hasFeature(FeatureID::EXECUTE_PACE)) { return CardReturnCode::COMMAND_FAILED; @@ -314,16 +320,16 @@ CardReturnCode PcscCard::establishPaceChannel(PacePasswordId pPasswordId, builder.setChat(pChat); builder.setCertificateDescription(pCertificateDescription); - QByteArray controlRes; - PCSC_RETURNCODE returnCode = control(cmdID, builder.createCommandData(), controlRes); + auto [returnCode, controlRes] = control(cmdID, builder.createCommandData()); if (returnCode != PcscUtils::Scard_S_Success) { qCWarning(card_pcsc) << "Control to establish PACE channel failed"; return CardReturnCode::COMMAND_FAILED; } - pChannelOutput.parse(controlRes, pPasswordId); - return pChannelOutput.getPaceReturnCode(); + EstablishPaceChannelOutput output; + output.parse(controlRes, pPasswordId); + return output; } @@ -336,8 +342,7 @@ CardReturnCode PcscCard::destroyPaceChannel() PCSC_INT cmdID = mReader->getFeatureValue(FeatureID::EXECUTE_PACE); DestroyPaceChannelBuilder builder; - QByteArray controlRes; - PCSC_RETURNCODE returnCode = control(cmdID, builder.createCommandData(), controlRes); + auto [returnCode, controlRes] = control(cmdID, builder.createCommandData()); if (returnCode != PcscUtils::Scard_S_Success) { qCWarning(card_pcsc) << "Control to destroy PACE channel failed"; @@ -347,17 +352,17 @@ CardReturnCode PcscCard::destroyPaceChannel() } -PCSC_RETURNCODE PcscCard::control(PCSC_INT pCntrCode, const QByteArray& pCntrInput, QByteArray& pCntrOutput) +PcscCard::CardResult PcscCard::control(PCSC_INT pCntrCode, const QByteArray& pCntrInput) { - char buffer[2048]; + QByteArray buffer(2048, '\0'); PCSC_INT len = 0; qCDebug(card_pcsc) << "SCardControl cmdBuffer:" << pCntrInput.toHex(); PCSC_RETURNCODE returnCode = SCardControl(mCardHandle, pCntrCode, pCntrInput.constData(), static_cast(pCntrInput.size()), - buffer, - sizeof(buffer), + buffer.data(), + static_cast(buffer.size()), &len); if (returnCode != PcscUtils::Scard_S_Success) @@ -365,22 +370,16 @@ PCSC_RETURNCODE PcscCard::control(PCSC_INT pCntrCode, const QByteArray& pCntrInp len = 0; } - if (sizeof(buffer) < len) + if (buffer.size() < static_cast(len)) { qCCritical(card_pcsc) << "Buffer size smaller than read length"; - Q_ASSERT(sizeof(buffer) >= len); - return PcscUtils::Scard_F_Unknown_Error; + Q_ASSERT(buffer.size() >= static_cast(len)); + return {PcscUtils::Scard_F_Unknown_Error}; } - if (len > INT_MAX) - { - qCCritical(card_pcsc) << "Read length bigger than INT_MAX"; - Q_ASSERT(len <= INT_MAX); - return PcscUtils::Scard_F_Unknown_Error; - } - pCntrOutput.append(buffer, static_cast(len)); - qCDebug(card_pcsc) << "SCardControl for" << mReader->getName() << ':' << PcscUtils::toString(returnCode) << pCntrOutput.toHex(); - return returnCode; + buffer.resize(static_cast(len)); + qCDebug(card_pcsc) << "SCardControl for" << mReader->getName() << ':' << PcscUtils::toString(returnCode) << buffer.toHex(); + return {returnCode, buffer}; } @@ -393,9 +392,8 @@ CardReturnCode PcscCard::setEidPin(quint8 pTimeoutSeconds, ResponseApdu& pRespon PCSC_INT cmdID = mReader->getFeatureValue(FeatureID::MODIFY_PIN_DIRECT); PinModify pinModify(pTimeoutSeconds); - QByteArray controlRes; - PCSC_RETURNCODE pcscReturnCode = control(cmdID, pinModify.createCcidForPcsc(), controlRes); - if (pcscReturnCode != PcscUtils::Scard_S_Success) + auto [returnCode, controlRes] = control(cmdID, pinModify.createCcidForPcsc()); + if (returnCode != PcscUtils::Scard_S_Success) { qCWarning(card_pcsc) << "Modify PIN failed"; return CardReturnCode::COMMAND_FAILED; diff --git a/src/card/pcsc/PcscCard.h b/src/card/pcsc/PcscCard.h index 7b4e838..c6ed3fe 100644 --- a/src/card/pcsc/PcscCard.h +++ b/src/card/pcsc/PcscCard.h @@ -25,6 +25,12 @@ class PcscCard Q_OBJECT private: + struct CardResult + { + PCSC_RETURNCODE mReturnCode; + QByteArray mResponse = QByteArray(); + }; + QPointer mReader; PCSC_INT mProtocol; SCARDCONTEXT mContextHandle; @@ -33,19 +39,15 @@ class PcscCard PCSC_RETURNCODE transmit(const QByteArray& pSendBuffer, QByteArray& pReceiveBuffer); - PCSC_RETURNCODE transmit(const QByteArray& pSendBuffer, - QByteArray& pReceiveBuffer, - const SCARD_IO_REQUEST* pSendPci, - SCARD_IO_REQUEST& pRecvPci, - PCSC_INT& pBytesReceived); + CardResult transmit(const QByteArray& pSendBuffer, const SCARD_IO_REQUEST* pSendPci); - PCSC_RETURNCODE control(PCSC_INT pCntrCode, const QByteArray& pCntrInput, QByteArray& pCntrOutput); + CardResult control(PCSC_INT pCntrCode, const QByteArray& pCntrInput); private Q_SLOTS: void sendSCardStatus(); public: - PcscCard(PcscReader* pPcscReader); + explicit PcscCard(PcscReader* pPcscReader); virtual ~PcscCard() override; virtual CardReturnCode connect() override; @@ -54,7 +56,7 @@ class PcscCard virtual CardReturnCode transmit(const CommandApdu& pCmd, ResponseApdu& pRes) override; - virtual CardReturnCode establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds) override; + virtual EstablishPaceChannelOutput establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, quint8 pTimeoutSeconds) override; virtual CardReturnCode destroyPaceChannel() override; diff --git a/src/card/pcsc/PcscReader.cpp b/src/card/pcsc/PcscReader.cpp index b97ae1b..da2aeff 100644 --- a/src/card/pcsc/PcscReader.cpp +++ b/src/card/pcsc/PcscReader.cpp @@ -34,7 +34,7 @@ PcscReader::PcscReader(const QString& pReaderName) memset(&mReaderState, 0, sizeof(SCARD_READERSTATE)); #if defined(Q_OS_WIN) && defined(UNICODE) - wchar_t* name = new wchar_t[pReaderName.size() + 1](); + wchar_t* name = new wchar_t[static_cast(pReaderName.size()) + 1](); pReaderName.toWCharArray(name); mReaderState.szReader = name; #else @@ -211,14 +211,12 @@ Reader::CardEvent PcscReader::updateCard() CardInfoFactory::create(cardConnection, mReaderInfo); qCDebug(card_pcsc) << "Card detected:" << mReaderInfo.getCardInfo(); - if (mReaderInfo.hasCard() && !mReaderInfo.hasEidCard()) - { - qCDebug(card_pcsc) << "Unknown card detected, retrying."; - } - else + if (mReaderInfo.hasEidCard() || mReaderInfo.hasPassport()) { break; } + + qCDebug(card_pcsc) << "Unknown card detected, retrying."; } return CardEvent::CARD_INSERTED; diff --git a/src/card/pcsc/PcscReaderFeature.cpp b/src/card/pcsc/PcscReaderFeature.cpp index 05731b9..7002594 100644 --- a/src/card/pcsc/PcscReaderFeature.cpp +++ b/src/card/pcsc/PcscReaderFeature.cpp @@ -14,7 +14,7 @@ using namespace governikus; Q_DECLARE_LOGGING_CATEGORY(card_pcsc) -PcscReaderFeature::PcscReaderFeature(const char* pFeaturesTLV, PCSC_INT pLength) +PcscReaderFeature::PcscReaderFeature(const char* const pFeaturesTLV, PCSC_INT pLength) : mFeatures() { if (pFeaturesTLV == nullptr) @@ -23,8 +23,8 @@ PcscReaderFeature::PcscReaderFeature(const char* pFeaturesTLV, PCSC_INT pLength) return; } - const uchar* runner = reinterpret_cast(pFeaturesTLV); - const uchar* end = reinterpret_cast(pFeaturesTLV + pLength); + const auto* runner = reinterpret_cast(pFeaturesTLV); + const auto* const end = reinterpret_cast(pFeaturesTLV + pLength); for (; runner + 6 <= end;) { if (!Enum::isValue(*runner)) @@ -33,7 +33,7 @@ PcscReaderFeature::PcscReaderFeature(const char* pFeaturesTLV, PCSC_INT pLength) continue; } - FeatureID fid = static_cast(*runner); + auto fid = static_cast(*runner); ++runner; // skip length byte (always 1 byte : 0x04) diff --git a/src/card/pcsc/PcscReaderFeature.h b/src/card/pcsc/PcscReaderFeature.h index a9d5ec4..be4b0cc 100644 --- a/src/card/pcsc/PcscReaderFeature.h +++ b/src/card/pcsc/PcscReaderFeature.h @@ -41,7 +41,7 @@ class PcscReaderFeature friend QDebug operator<<(QDebug, const PcscReaderFeature&); public: - PcscReaderFeature(const char* pFeaturesTLV, PCSC_INT pLength = 0); + PcscReaderFeature(const char* const pFeaturesTLV, PCSC_INT pLength = 0); bool contains(FeatureID pFeatureID) const; diff --git a/src/card/pcsc/PcscReaderManagerPlugIn.cpp b/src/card/pcsc/PcscReaderManagerPlugIn.cpp index 5e15714..e31d30d 100644 --- a/src/card/pcsc/PcscReaderManagerPlugIn.cpp +++ b/src/card/pcsc/PcscReaderManagerPlugIn.cpp @@ -5,6 +5,7 @@ #include "PcscReaderManagerPlugIn.h" #include "PcscReader.h" + #include @@ -24,7 +25,7 @@ PcscReaderManagerPlugIn::PcscReaderManagerPlugIn() setObjectName(QStringLiteral("PcscReaderManager")); #ifdef PCSCLITE_VERSION_NUMBER - setReaderInfoValue(ReaderManagerPlugInInfo::Key::PCSC_LITE_VERSION, QStringLiteral(PCSCLITE_VERSION_NUMBER)); + setPlugInValue(ReaderManagerPlugInInfo::Key::PCSC_LITE_VERSION, QStringLiteral(PCSCLITE_VERSION_NUMBER)); #endif initReaderState(); @@ -51,17 +52,17 @@ QList PcscReaderManagerPlugIn::getReaders() const void PcscReaderManagerPlugIn::startScan(bool pAutoConnect) { - Q_UNUSED(pAutoConnect); + Q_UNUSED(pAutoConnect) PCSC_RETURNCODE returnCode = SCardEstablishContext(SCARD_SCOPE_USER, nullptr, nullptr, &mContextHandle); - setReaderInfoEnabled(returnCode == PcscUtils::Scard_S_Success); + setPlugInEnabled(returnCode == PcscUtils::Scard_S_Success); qCDebug(card_pcsc) << "SCardEstablishContext:" << PcscUtils::toString(returnCode); if (returnCode != PcscUtils::Scard_S_Success) { qCWarning(card_pcsc) << "Not started: Cannot establish context"; } - if (!mTimerId) + if (mTimerId == 0) { mTimerId = startTimer(500); } @@ -69,7 +70,7 @@ void PcscReaderManagerPlugIn::startScan(bool pAutoConnect) } -void PcscReaderManagerPlugIn::stopScan() +void PcscReaderManagerPlugIn::stopScan(const QString& pError) { if (mTimerId) { @@ -86,8 +87,8 @@ void PcscReaderManagerPlugIn::stopScan() qCWarning(card_pcsc) << "Error releasing context"; } } - updateReaders(); - ReaderManagerPlugIn::stopScan(); + removeReaders(mReaders.keys()); + ReaderManagerPlugIn::stopScan(pError); } @@ -113,13 +114,11 @@ void PcscReaderManagerPlugIn::initReaderState() void PcscReaderManagerPlugIn::updateReaders() { - QStringList readersToRemove(mReaders.keys()); QStringList readersToAdd; - PCSC_RETURNCODE returnCode = readReaderNames(readersToAdd); if (returnCode != PcscUtils::Scard_S_Success && returnCode != PcscUtils::Scard_E_No_Readers_Available) { - qCWarning(card_pcsc) << "Cannot update readers"; + qCWarning(card_pcsc) << "Cannot update readers, returnCode:" << returnCode; if (returnCode == PcscUtils::Scard_E_No_Service && mTimerId != 0) { @@ -151,6 +150,7 @@ void PcscReaderManagerPlugIn::updateReaders() } } + QStringList readersToRemove(mReaders.keys()); for (QMutableListIterator it(readersToAdd); it.hasNext();) { QString readerName = it.next(); @@ -161,10 +161,7 @@ void PcscReaderManagerPlugIn::updateReaders() } } - for (const auto& readerName : qAsConst(readersToRemove)) - { - removeReader(readerName); - } + removeReaders(readersToRemove); for (QMutableListIterator iterator(readersToAdd); iterator.hasNext();) { @@ -176,7 +173,7 @@ void PcscReaderManagerPlugIn::updateReaders() connect(reader, &Reader::fireCardRemoved, this, &PcscReaderManagerPlugIn::fireCardRemoved); connect(reader, &Reader::fireCardRetryCounterChanged, this, &PcscReaderManagerPlugIn::fireCardRetryCounterChanged); - qCDebug(card_pcsc) << "fireReaderAdded:" << readerName; + qCDebug(card_pcsc) << "fireReaderAdded:" << readerName << "(" << mReaders.size() << "reader in total )"; Q_EMIT fireReaderAdded(readerName); } } @@ -196,7 +193,12 @@ QString PcscReaderManagerPlugIn::extractReaderName(PCSC_CHAR_PTR pReaderPointer) void PcscReaderManagerPlugIn::removeReader(const QString& pReaderName) { - Q_ASSERT(mReaders.contains(pReaderName)); + if (!mReaders.contains(pReaderName)) + { + qCDebug(card_pcsc) << "Reader not present:" << pReaderName; + Q_ASSERT(false); + } + delete mReaders.take(pReaderName); qCDebug(card_pcsc) << "fireReaderRemoved:" << pReaderName; @@ -204,15 +206,24 @@ void PcscReaderManagerPlugIn::removeReader(const QString& pReaderName) } +void PcscReaderManagerPlugIn::removeReaders(const QStringList& pReaderNames) +{ + for (const auto& readerName : pReaderNames) + { + removeReader(readerName); + } +} + + PCSC_RETURNCODE PcscReaderManagerPlugIn::readReaderNames(QStringList& pReaderNames) { - if (!mContextHandle) + if (mContextHandle == 0) { return PcscUtils::Scard_E_Invalid_Handle; } QVarLengthArray readers; - PCSC_INT maxReadersSize = static_cast(readers.capacity()); + auto maxReadersSize = static_cast(readers.capacity()); PCSC_RETURNCODE returnCode = SCardListReaders(mContextHandle, nullptr, readers.data(), &maxReadersSize); if (returnCode != PcscUtils::Scard_S_Success) { diff --git a/src/card/pcsc/PcscReaderManagerPlugIn.h b/src/card/pcsc/PcscReaderManagerPlugIn.h index a220041..4b683f7 100644 --- a/src/card/pcsc/PcscReaderManagerPlugIn.h +++ b/src/card/pcsc/PcscReaderManagerPlugIn.h @@ -11,6 +11,7 @@ #include "ReaderManagerPlugIn.h" #include +#include namespace governikus @@ -35,6 +36,7 @@ class PcscReaderManagerPlugIn void initReaderState(); inline QString extractReaderName(PCSC_CHAR_PTR pReaderPointer); void removeReader(const QString& pReaderName); + void removeReaders(const QStringList& pReaderNames); protected: void timerEvent(QTimerEvent* pEvent) override; @@ -46,7 +48,7 @@ class PcscReaderManagerPlugIn QList getReaders() const override; virtual void startScan(bool pAutoConnect) override; - virtual void stopScan() override; + virtual void stopScan(const QString& pError = QString()) override; }; } // namespace governikus diff --git a/src/card/pcsc/PcscReaderPaceCapability.cpp b/src/card/pcsc/PcscReaderPaceCapability.cpp index b6a0c7f..589c69d 100644 --- a/src/card/pcsc/PcscReaderPaceCapability.cpp +++ b/src/card/pcsc/PcscReaderPaceCapability.cpp @@ -14,7 +14,7 @@ using namespace governikus; Q_DECLARE_LOGGING_CATEGORY(card_pcsc) -PcscReaderPaceCapability::PcscReaderPaceCapability(const char* pCapabilitiesTLV, PCSC_INT pLength) +PcscReaderPaceCapability::PcscReaderPaceCapability(const char* const pCapabilitiesTLV, PCSC_INT pLength) : mPaceCapabilities() { if (pCapabilitiesTLV == nullptr || pLength != 7) @@ -29,7 +29,8 @@ PcscReaderPaceCapability::PcscReaderPaceCapability(const char* pCapabilitiesTLV, } // in contrast to PCSC 10 Amendment 1: the output data of GetReaderPACECapabilities on Reiner SCT Konfort is of size 1! - for (PaceCapabilityId capability : Enum::getList()) + const auto list = Enum::getList(); + for (PaceCapabilityId capability : list) { if (pCapabilitiesTLV[6] & static_cast(capability)) { diff --git a/src/card/pcsc/PcscReaderPaceCapability.h b/src/card/pcsc/PcscReaderPaceCapability.h index 1bc1b8e..a1df537 100644 --- a/src/card/pcsc/PcscReaderPaceCapability.h +++ b/src/card/pcsc/PcscReaderPaceCapability.h @@ -25,7 +25,7 @@ class PcscReaderPaceCapability friend QDebug operator<<(QDebug, const PcscReaderPaceCapability&); public: - PcscReaderPaceCapability(const char* pCapabilitiesTLV, PCSC_INT pLength = 0); + PcscReaderPaceCapability(const char* const pCapabilitiesTLV, PCSC_INT pLength = 0); bool contains(PaceCapabilityId pPaceCapabilityId) const; }; diff --git a/src/card/pcsc/PcscUtils.cpp b/src/card/pcsc/PcscUtils.cpp index 18093ce..55e7816 100644 --- a/src/card/pcsc/PcscUtils.cpp +++ b/src/card/pcsc/PcscUtils.cpp @@ -10,7 +10,7 @@ using namespace governikus; QString PcscUtils::toString(PCSC_RETURNCODE pCode) { const auto& metaEnum = QMetaEnum::fromType(); - const char* name = metaEnum.valueToKey(static_cast(pCode)); + const char* const name = metaEnum.valueToKey(static_cast(pCode)); if (Q_UNLIKELY(name == nullptr)) { return QStringLiteral("UNKNOWN_STATE (%1)").arg(pCode, 8, 16, QLatin1Char('0')); diff --git a/src/card/pcsc/PcscUtils.h b/src/card/pcsc/PcscUtils.h index 8fc82c4..2e4c4a0 100644 --- a/src/card/pcsc/PcscUtils.h +++ b/src/card/pcsc/PcscUtils.h @@ -23,26 +23,26 @@ * an abstraction layer for those data types. */ #ifdef Q_OS_WIN -typedef LONG PCSC_RETURNCODE; -typedef DWORD PCSC_INT; -typedef TCHAR PCSC_CHAR; -typedef TCHAR* PCSC_CHAR_PTR; -typedef LPBYTE PCSC_UCHAR_PTR; -typedef LPCBYTE PCSC_CUCHAR_PTR; +using PCSC_RETURNCODE = LONG; +using PCSC_INT = DWORD; +using PCSC_CHAR = TCHAR; +using PCSC_CHAR_PTR = TCHAR *; +using PCSC_UCHAR_PTR = LPBYTE; +using PCSC_CUCHAR_PTR = LPCBYTE; #elif defined Q_OS_MACOS -typedef int32_t PCSC_RETURNCODE; -typedef uint32_t PCSC_INT; -typedef char PCSC_CHAR; -typedef char* PCSC_CHAR_PTR; -typedef uchar* PCSC_UCHAR_PTR; -typedef const uchar* PCSC_CUCHAR_PTR; +using PCSC_RETURNCODE = int32_t; +using PCSC_INT = uint32_t; +using PCSC_CHAR = char; +using PCSC_CHAR_PTR = char*; +using PCSC_UCHAR_PTR = uchar *; +using PCSC_CUCHAR_PTR = const uchar *; #elif defined Q_OS_UNIX -typedef LONG PCSC_RETURNCODE; -typedef DWORD PCSC_INT; -typedef char PCSC_CHAR; -typedef char* PCSC_CHAR_PTR; -typedef uchar* PCSC_UCHAR_PTR; -typedef const uchar* PCSC_CUCHAR_PTR; +using PCSC_RETURNCODE = LONG; +using PCSC_INT = DWORD; +using PCSC_CHAR = char; +using PCSC_CHAR_PTR = char*; +using PCSC_UCHAR_PTR = uchar *; +using PCSC_CUCHAR_PTR = const uchar *; #endif @@ -128,7 +128,7 @@ class PcscUtils Scard_W_Cancelled_By_User = static_cast(SCARD_W_CANCELLED_BY_USER), /**< The user pressed "Cancel" on a Smart Card Selection Dialog. */ Scard_W_Card_Not_Authenticated = static_cast(SCARD_W_CARD_NOT_AUTHENTICATED) /**< No PIN was presented to the smart card. */ }; - Q_ENUM(PcscReturnCode); + Q_ENUM(PcscReturnCode) static QString toString(PCSC_RETURNCODE pCode); }; diff --git a/src/config.h.in b/src/config.h.in index c856c91..b420c0e 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -12,20 +12,34 @@ #define VERSION_PATCH @PROJECT_VERSION_PATCH@ #define VERSION_TWEAK @PROJECT_VERSION_TWEAK@ -#ifdef __BASE_FILE__ - constexpr inline bool isComparableSep(char pFirst, char pSecond) - { - return (pFirst == '\\' && pSecond == '/') || (pFirst == '/' && pSecond == '\\'); - } +#ifndef RC_INVOKED +#if defined(__BASE_FILE__) && __has_include() +#include - constexpr inline bool isEqual(const char* pFirst, const char* pSecond) - { - return (*pFirst && *pSecond) ? ((*pFirst == *pSecond || isComparableSep(*pFirst, *pSecond)) && isEqual(pFirst + 1, pSecond + 1)) : (!*pFirst && !*pSecond); - } +constexpr bool isPathSeparator(char pChar) +{ + return pChar == '/' || pChar == '\\'; +} - static_assert(isEqual("@CMAKE_CURRENT_SOURCE_DIR@/main.cpp", __BASE_FILE__), "config.h include is allowed in main.cpp only! Provided: " __BASE_FILE__); + +constexpr const char* stripPath(const char* pPath) +{ + auto result = pPath; + for (auto iter = pPath; *iter; ++iter) + { + if (isPathSeparator(*iter) && *(iter + 1)) + { + result = iter + 1; + } + } + return result; +} + + +static_assert(std::string_view(stripPath(__BASE_FILE__)) == "main.cpp", "config.h include is allowed in main.cpp only!"); #endif +#endif // RC_INVOKED -/* DO NOT INCLUDE THIS - Use QCoreApplication or VersionNumber! -*/ + +// DO NOT INCLUDE THIS +// Use QCoreApplication or VersionNumber! diff --git a/src/configuration/CallCost.cpp b/src/configuration/CallCost.cpp index 2a6a6bf..0ba2188 100644 --- a/src/configuration/CallCost.cpp +++ b/src/configuration/CallCost.cpp @@ -12,7 +12,7 @@ using namespace governikus; namespace { -inline double getValue(const QJsonValue& pJson, const char* pSection, const char* pSubSection) +inline double getValue(const QJsonValue& pJson, const char* const pSection, const char* const pSubSection) { return pJson.toObject()[QLatin1String(pSection)].toObject()[QLatin1String(pSubSection)].toDouble(); } diff --git a/src/configuration/CallCost.h b/src/configuration/CallCost.h index 94392f1..e37f8c0 100644 --- a/src/configuration/CallCost.h +++ b/src/configuration/CallCost.h @@ -22,8 +22,8 @@ class CallCost double mMobileCentsPerMinute, mMobileCentsPerCall; public: - CallCost(int pFreeSeconds = 0, double pLandlineCentsPerMinute = 0.0, double pLandlineCentsPerCall = 0.0, double pMobileCentsPerMinute = 0.0, double pMobileCentsPerCall = 0.0); - CallCost(const QJsonValue& pJson); + explicit CallCost(int pFreeSeconds = 0, double pLandlineCentsPerMinute = 0.0, double pLandlineCentsPerCall = 0.0, double pMobileCentsPerMinute = 0.0, double pMobileCentsPerCall = 0.0); + explicit CallCost(const QJsonValue& pJson); void load(); void save(); diff --git a/src/configuration/ProviderConfiguration.h b/src/configuration/ProviderConfiguration.h index 9c41abf..0e7e5aa 100644 --- a/src/configuration/ProviderConfiguration.h +++ b/src/configuration/ProviderConfiguration.h @@ -16,6 +16,7 @@ #include #include +class test_HistoryModel; namespace governikus { @@ -25,6 +26,7 @@ class ProviderConfiguration { Q_OBJECT friend class Env; + friend class ::test_HistoryModel; private: const QSharedPointer mUpdatableFile; diff --git a/src/configuration/ProviderConfigurationInfo.cpp b/src/configuration/ProviderConfigurationInfo.cpp index a4d727d..e2f7b8f 100644 --- a/src/configuration/ProviderConfigurationInfo.cpp +++ b/src/configuration/ProviderConfigurationInfo.cpp @@ -63,6 +63,33 @@ bool ProviderConfigurationInfo::operator ==(const ProviderConfigurationInfo& pOt } +bool ProviderConfigurationInfo::matchWithSubjectUrl(const QString& pSubjectUrl) const +{ + if (pSubjectUrl.isEmpty()) + { + return false; + } + const QString subjectUrlHost = QUrl(pSubjectUrl).host(); + + // Check provider address host. + if (!getAddress().isEmpty() && QUrl(getAddress()).host() == subjectUrlHost) + { + return true; + } + + // Check subject urls. + for (const auto& subjectUrl : getSubjectUrls()) + { + if (!subjectUrl.isEmpty() && QUrl(subjectUrl).host() == subjectUrlHost) + { + return true; + } + } + + return false; +} + + const LanguageString& ProviderConfigurationInfo::getShortName() const { return d->mShortName; diff --git a/src/configuration/ProviderConfigurationInfo.h b/src/configuration/ProviderConfigurationInfo.h index 59be01b..f8f5ab8 100644 --- a/src/configuration/ProviderConfigurationInfo.h +++ b/src/configuration/ProviderConfigurationInfo.h @@ -122,6 +122,7 @@ class ProviderConfigurationInfo void setTcTokenUrl(const QString& pTcTokenUrl); bool operator ==(const ProviderConfigurationInfo& pOther) const; + bool matchWithSubjectUrl(const QString& pSubjectUrl) const; const LanguageString& getShortName() const; const LanguageString& getLongName() const; diff --git a/src/configuration/ReaderConfiguration.cpp b/src/configuration/ReaderConfiguration.cpp index 28120f8..b8f6684 100644 --- a/src/configuration/ReaderConfiguration.cpp +++ b/src/configuration/ReaderConfiguration.cpp @@ -4,7 +4,6 @@ #include "ReaderConfiguration.h" -#include "FileDestination.h" #include "FileProvider.h" #include "FuncUtils.h" #include "ReaderConfigurationParser.h" diff --git a/src/configuration/ReaderConfigurationInfo.cpp b/src/configuration/ReaderConfigurationInfo.cpp index a479812..2eaf6c8 100644 --- a/src/configuration/ReaderConfigurationInfo.cpp +++ b/src/configuration/ReaderConfigurationInfo.cpp @@ -10,6 +10,7 @@ using namespace governikus; ReaderConfigurationInfo::ReaderConfigurationInfo() +//: LABEL ALL_PLATFORMS : ReaderConfigurationInfo(tr("Unknown reader")) { } diff --git a/src/core/DiagnosisAntivirusDetection.h b/src/core/DiagnosisAntivirusDetection.h index 4842856..c702813 100644 --- a/src/core/DiagnosisAntivirusDetection.h +++ b/src/core/DiagnosisAntivirusDetection.h @@ -11,6 +11,8 @@ #include class test_DiagnosisAntivirusDetection; +class test_DiagnosisTreeModel; +class test_DiagnosisModel; namespace governikus { @@ -52,6 +54,8 @@ class DiagnosisAntivirusDetection private: friend class ::test_DiagnosisAntivirusDetection; + friend class ::test_DiagnosisTreeModel; + friend class ::test_DiagnosisModel; #if defined(Q_OS_WIN) QSharedPointer mProcess; diff --git a/src/core/DiagnosisConnectionTest.cpp b/src/core/DiagnosisConnectionTest.cpp index 9e6faa7..825af91 100644 --- a/src/core/DiagnosisConnectionTest.cpp +++ b/src/core/DiagnosisConnectionTest.cpp @@ -113,7 +113,9 @@ QString DiagnosisConnectionTest::getProxyTypeAsQString(QNetworkProxy::ProxyType case QNetworkProxy::FtpCachingProxy: return QStringLiteral("FtpCachingProxy"); } + Q_UNREACHABLE(); + return QString(); } @@ -174,7 +176,7 @@ void DiagnosisConnectionTest::startConnectionTest() mProxyCapabilities = getProxyCapabilitiesAsQString(proxy.capabilities()); } - const QUrl& testUrl = QUrl(SecureStorage::getInstance().getUpdateServerBaseUrl()); + const QUrl& testUrl = QUrl(Env::getSingleton()->getUpdateServerBaseUrl()); if (mIsProxySet) { mPingSocketToProxy.reset(); diff --git a/src/core/DiagnosisConnectionTest.h b/src/core/DiagnosisConnectionTest.h index 8bab98b..a2c89a0 100644 --- a/src/core/DiagnosisConnectionTest.h +++ b/src/core/DiagnosisConnectionTest.h @@ -13,6 +13,8 @@ #include class test_DiagnosisConnectionTest; +class test_DiagnosisModel; +class test_DiagnosisTreeModel; namespace governikus { @@ -24,6 +26,8 @@ class DiagnosisConnectionTest private: friend class ::test_DiagnosisConnectionTest; + friend class ::test_DiagnosisModel; + friend class ::test_DiagnosisTreeModel; bool mIsProxySet; QString mProxyHostName; QString mProxyPort; diff --git a/src/core/DiagnosisFirewallDetection.cpp b/src/core/DiagnosisFirewallDetection.cpp index 8049113..b3b9844 100644 --- a/src/core/DiagnosisFirewallDetection.cpp +++ b/src/core/DiagnosisFirewallDetection.cpp @@ -23,7 +23,7 @@ void DiagnosisFirewallDetection::checkIfAllInformationReady() void DiagnosisFirewallDetection::onFirstRuleDone(int exitCode, QProcess::ExitStatus exitStatus) { - Q_UNUSED(exitStatus); + Q_UNUSED(exitStatus) if (exitCode != 0) { @@ -75,7 +75,7 @@ void DiagnosisFirewallDetection::onFirstRuleError(QProcess::ProcessError pError) void DiagnosisFirewallDetection::onSecondRuleDone(int exitCode, QProcess::ExitStatus exitStatus) { - Q_UNUSED(exitStatus); + Q_UNUSED(exitStatus) if (exitCode != 0) { @@ -127,7 +127,7 @@ void DiagnosisFirewallDetection::onSecondRuleError(QProcess::ProcessError pError void DiagnosisFirewallDetection::onProfilesDone(int exitCode, QProcess::ExitStatus exitStatus) { - Q_UNUSED(exitStatus); + Q_UNUSED(exitStatus) if (exitCode != 0) { qDebug() << "Error while getting firewall profiles, error code:" << exitCode; @@ -183,7 +183,7 @@ void DiagnosisFirewallDetection::onProfilesError(QProcess::ProcessError pError) void DiagnosisFirewallDetection::onInstalledFirewallSoftwareDone(int exitCode, QProcess::ExitStatus exitStatus) { - Q_UNUSED(exitStatus); + Q_UNUSED(exitStatus) if (exitCode != 0) { @@ -231,8 +231,8 @@ void DiagnosisFirewallDetection::onInstalledFirewallSoftwareDone(int exitCode, Q QString hexString = QString::number(statusValue, 16); if (hexString.length() >= 4) { - enabled = hexString.right(4).left(2) == QStringLiteral("10"); - uptodate = hexString.right(2) == QStringLiteral("00"); + enabled = hexString.right(4).left(2) == QLatin1String("10"); + uptodate = hexString.right(2) == QLatin1String("00"); } else { @@ -370,7 +370,7 @@ void DiagnosisFirewallDetection::startDetection() } -FirewallSoftware::FirewallSoftware(QString pName, bool pEnabled, bool pUpToDate) +FirewallSoftware::FirewallSoftware(const QString& pName, bool pEnabled, bool pUpToDate) : mName(pName) , mEnabled(pEnabled) , mUpToDate(pUpToDate) @@ -378,7 +378,7 @@ FirewallSoftware::FirewallSoftware(QString pName, bool pEnabled, bool pUpToDate) } -FirewallProfile::FirewallProfile(QString pName, bool pEnabled) +FirewallProfile::FirewallProfile(const QString& pName, bool pEnabled) : mName(pName) , mEnabled(pEnabled) { diff --git a/src/core/DiagnosisFirewallDetection.h b/src/core/DiagnosisFirewallDetection.h index f69c51c..ecc0aea 100644 --- a/src/core/DiagnosisFirewallDetection.h +++ b/src/core/DiagnosisFirewallDetection.h @@ -23,7 +23,7 @@ class FirewallProfile const bool mEnabled; public: - FirewallProfile(QString pName, bool pEnabled); + FirewallProfile(const QString& pName, bool pEnabled); const QString& getName() const { @@ -47,7 +47,7 @@ class FirewallSoftware bool mUpToDate; public: - FirewallSoftware(QString pName, bool pEnabled, bool pUpToDate); + FirewallSoftware(const QString& pName, bool pEnabled, bool pUpToDate); const QString& getName() const { diff --git a/src/core/DiagnosisItem.cpp b/src/core/DiagnosisItem.cpp index f574051..c1f77e5 100644 --- a/src/core/DiagnosisItem.cpp +++ b/src/core/DiagnosisItem.cpp @@ -69,7 +69,7 @@ int DiagnosisItem::row() const } -int DiagnosisItem::getIndexOf(const DiagnosisItem* pChild) const +int DiagnosisItem::getIndexOf(const DiagnosisItem* const pChild) const { for (int i = 0; i < mChildren.length(); ++i) { diff --git a/src/core/DiagnosisItem.h b/src/core/DiagnosisItem.h index ff0970f..24dabbe 100644 --- a/src/core/DiagnosisItem.h +++ b/src/core/DiagnosisItem.h @@ -24,7 +24,7 @@ class DiagnosisItem QVector > mChildren; QSharedPointer mParent; - int getIndexOf(const DiagnosisItem* pChild) const; + int getIndexOf(const DiagnosisItem* const pChild) const; void setParent(const QSharedPointer& pParent); public: diff --git a/src/core/DiagnosisModel.cpp b/src/core/DiagnosisModel.cpp index d1195c8..ede4eb2 100644 --- a/src/core/DiagnosisModel.cpp +++ b/src/core/DiagnosisModel.cpp @@ -5,576 +5,180 @@ #include "DiagnosisModel.h" #include "AppSettings.h" +#include "BuildHelper.h" +#include "Env.h" +#include "GeneralSettings.h" #include "LanguageLoader.h" #include "RemoteServiceSettings.h" -#include "ScopeGuard.h" #include -#include + using namespace governikus; DiagnosisModel::DiagnosisModel(const QSharedPointer& pContext) : mContext(pContext) - , mRootItem(new DiagnosisItem(tr("Diagnosis data"))) - , mAppVersionItem(new DiagnosisItem(QCoreApplication::applicationName())) - , mOperatingSystemItem(new DiagnosisItem(tr("Operating system"))) - , mReaderItem(new DiagnosisItem(tr("Card reader"))) - , mPcScItem(new DiagnosisItem(tr("PC/SC"))) - , mPairedDevices(new DiagnosisItem(tr("Paired devices"))) - , mNetworkInterfaces(new DiagnosisItem(tr("Network interfaces"))) - , mNetworkConnectionTest(new DiagnosisItem(tr("Network connection test"))) - , mInstalledAntivirus(new DiagnosisItem(tr("Installed antivirus software"))) - , mWindowsFirewall(new DiagnosisItem(tr("Firewall"))) - , mTimestampItem(new DiagnosisItem(tr("Time of diagnosis"))) - , mAntivirusDetection() - , mFirewallDetection() - , mConnectionTest() { - mRootItem->addChild(mAppVersionItem); - initAppVersionInfo(); + reloadContent(); +} - mRootItem->addChild(mOperatingSystemItem); - mOperatingSystemItem->addChild(QSharedPointer::create(QSysInfo::prettyProductName())); - mOperatingSystemItem->addChild(QSharedPointer::create(QSysInfo::kernelVersion())); - mOperatingSystemItem->addChild(QSharedPointer::create(QSysInfo::currentCpuArchitecture())); - mRootItem->addChild(mReaderItem); - mReaderItem->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); - connect(mContext.data(), &DiagnosisContext::readerInfosChanged, this, &DiagnosisModel::onReaderInfosChanged); +DiagnosisModel::~DiagnosisModel() +{ + disconnectSignals(); +} - mRootItem->addChild(mPcScItem); - mPcScItem->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); + +QSharedPointer DiagnosisModel::createAusweisApp2Section() +{ + QSharedPointer aa2Section(new SectionModel); + + BuildHelper::processInformationHeader([aa2Section](const QString& pKey, const QString& pValue){ + aa2Section->addItem(pKey, pValue); + }); + + mTimestampItem = QSharedPointer::create(tr("Time of diagnosis"), tr("Initial diagnosis running, please wait.")); + aa2Section->addItem(mTimestampItem); + + return aa2Section; +} + + +void DiagnosisModel::createNetworkSection() +{ + mNetworkInterfaceSection = QSharedPointer::create(); + mNetworkConnectionSection = QSharedPointer::create(); + mCombinedNetworkSection = QSharedPointer::create(); +} + + +void DiagnosisModel::createCardReaderSection() +{ + mCombinedReaderSection = QSharedPointer::create(); + mPcscSection = QSharedPointer::create(); + mPcscSection->addTitleWithoutContent(tr("PC/SC information")); + mPcscSection->addItemWithoutTitle(tr("Diagnosis is running...")); + mCardReaderSection = QSharedPointer::create(); + mCardReaderSection->addTitleWithoutContent(tr("Card reader")); + mCardReaderSection->addItemWithoutTitle(tr("Diagnosis is running...")); + mRemoteDeviceSection = QSharedPointer::create(); + mRemoteDeviceSection->addTitleWithoutContent(tr("Paired remote devices")); + mRemoteDeviceSection->addItemWithoutTitle(tr("Diagnosis is running...")); +} + + +void DiagnosisModel::createAntiVirusAndFirewallSection() +{ + mAntivirusSection = QSharedPointer::create(); + mFirewallSection = QSharedPointer::create(); + mCombinedAntivirusFirewallSection = QSharedPointer::create(); + +#ifdef Q_OS_WIN + mAntivirusSection->addTitleWithoutContent(tr("Antivirus information")); + mAntivirusSection->addItemWithoutTitle(tr("Diagnosis is running...")); + + mFirewallSection->addTitleWithoutContent(tr("Firewall information")); + mFirewallSection->addItemWithoutTitle(tr("Diagnosis is running...")); +#else + mAntivirusSection->addItemWithoutTitle(tr("No Antivirus information available on this platform.")); + mFirewallSection->addItemWithoutTitle(tr("No Firewall information available on this platform.")); +#endif +} + + +void DiagnosisModel::emitDataChangedForSection(const QSharedPointer& pItem) const +{ + QSharedPointer sectionModel = pItem->mSection; + if (sectionModel) + { + sectionModel->emitDataChangedForItem(pItem); + } +} + + +void DiagnosisModel::connectSignals() +{ + const GeneralSettings& generalSettings = Env::getSingleton()->getGeneralSettings(); + connect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &DiagnosisModel::reloadContent); + connect(mContext.data(), &DiagnosisContext::timestampChanged, this, &DiagnosisModel::onTimestampChanged); + connect(mContext.data(), &DiagnosisContext::fireNetworkInfoChanged, this, &DiagnosisModel::onNetworkInfoChanged); + connect(&mConnectionTest, &DiagnosisConnectionTest::fireConnectionTestDone, this, &DiagnosisModel::onConnectionTestDone); connect(mContext.data(), &DiagnosisContext::pcscInfoChanged, this, &DiagnosisModel::onPcscInfoChanged); - - mRootItem->addChild(mPairedDevices); RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); connect(&settings, &RemoteServiceSettings::fireTrustedRemoteInfosChanged, this, &DiagnosisModel::onRemoteInfosChanged); - onRemoteInfosChanged(); + connect(mContext.data(), &DiagnosisContext::readerInfosChanged, this, &DiagnosisModel::onReaderInfosChanged); - mRootItem->addChild(mNetworkInterfaces); - connect(mContext.data(), &DiagnosisContext::fireNetworkInfoChanged, this, &DiagnosisModel::onNetworkInfoChanged); - - mRootItem->addChild(mNetworkConnectionTest); - mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); - connect(&mConnectionTest, &DiagnosisConnectionTest::fireConnectionTestDone, this, &DiagnosisModel::onConnectionTestDone); - mConnectionTest.startConnectionTest(); - - mRootItem->addChild(mInstalledAntivirus); - mRootItem->addChild(mWindowsFirewall); #ifdef Q_OS_WIN connect(&mAntivirusDetection, &DiagnosisAntivirusDetection::fireAntivirusInformationChanged, this, &DiagnosisModel::onAntivirusInformationChanged); connect(&mAntivirusDetection, &DiagnosisAntivirusDetection::fireDetectionFailed, this, &DiagnosisModel::onAntivirusDetectionFailed); - mAntivirusDetection.startInformationProcess(); - mInstalledAntivirus->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); - connect(&mFirewallDetection, &DiagnosisFirewallDetection::fireFirewallInformationReady, this, &DiagnosisModel::onFirewallInformationReady); connect(&mFirewallDetection, &DiagnosisFirewallDetection::fireDetectionFailed, this, &DiagnosisModel::onFirewallInformationFailed); - mFirewallDetection.startDetection(); - mWindowsFirewall->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); -#else - mInstalledAntivirus->addChild(QSharedPointer::create(tr("No Antivirus information available on this platform."))); - mWindowsFirewall->addChild(QSharedPointer::create(tr("No Firewall information available on this platform."))); #endif - - mRootItem->addChild(mTimestampItem); - connect(mContext.data(), &DiagnosisContext::timestampChanged, this, &DiagnosisModel::onTimestampChanged); - onTimestampChanged(); } -void DiagnosisModel::initAppVersionInfo() +void DiagnosisModel::disconnectSignals() { - const QStringList appVersion({ - QCoreApplication::applicationVersion(), - QCoreApplication::organizationName(), - QStringLiteral("Qt ") + QString::fromLatin1(qVersion()), - QSslSocket::sslLibraryVersionString() - }); - for (const auto& str : appVersion) - { - mAppVersionItem->addChild(QSharedPointer::create(str)); - } -} + const GeneralSettings& generalSettings = Env::getSingleton()->getGeneralSettings(); + disconnect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &DiagnosisModel::reloadContent); + disconnect(mContext.data(), &DiagnosisContext::timestampChanged, this, &DiagnosisModel::onTimestampChanged); + disconnect(mContext.data(), &DiagnosisContext::fireNetworkInfoChanged, this, &DiagnosisModel::onNetworkInfoChanged); + disconnect(&mConnectionTest, &DiagnosisConnectionTest::fireConnectionTestDone, this, &DiagnosisModel::onConnectionTestDone); + disconnect(mContext.data(), &DiagnosisContext::pcscInfoChanged, this, &DiagnosisModel::onPcscInfoChanged); + RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); + disconnect(&settings, &RemoteServiceSettings::fireTrustedRemoteInfosChanged, this, &DiagnosisModel::onRemoteInfosChanged); + disconnect(mContext.data(), &DiagnosisContext::readerInfosChanged, this, &DiagnosisModel::onReaderInfosChanged); -void DiagnosisModel::insertPcScComponentList(const QVector& pComponents, const QSharedPointer& pParentItem) -{ - if (pComponents.isEmpty()) - { - return; - } - - for (const DiagnosisContext::ComponentInfo& info : pComponents) - { - auto descriptionItem = QSharedPointer::create(info.getDescription()); - pParentItem->addChild(descriptionItem); - - auto companyItem = QSharedPointer::create(tr("Vendor: %1").arg(info.getManufacturer())); - pParentItem->addChild(companyItem); - - auto versionItem = QSharedPointer::create(tr("Version: %1").arg(info.getVersion())); - pParentItem->addChild(versionItem); - - auto pathItem = QSharedPointer::create(tr("File path: %1").arg(info.getPath())); - descriptionItem->addChild(pathItem); - } -} - - -void DiagnosisModel::removeChildItems(QModelIndex pIndex, QSharedPointer pParentItem) -{ - if (pParentItem->childCount() <= 0) - { - return; - } - - beginRemoveRows(pIndex, 0, pParentItem->childCount() - 1); - pParentItem->clearChildren(); - endRemoveRows(); -} - - -void DiagnosisModel::onReaderInfosChanged() -{ - auto itemModelIndex = index(2, 0); - removeChildItems(itemModelIndex, mReaderItem); - - const auto& readerInfos = mContext->getReaderInfos(); - if (readerInfos.isEmpty()) - { - beginInsertRows(itemModelIndex, 0, 0); - mReaderItem->addChild(QSharedPointer::create(tr("Not recognised"))); - endInsertRows(); - return; - } - - beginInsertRows(itemModelIndex, 0, readerInfos.size() - 1); - for (const ReaderInfo& info : readerInfos) - { - auto readerName = QSharedPointer::create(info.getName()); - mReaderItem->addChild(readerName); - - QString readerTypeString = info.isBasicReader() ? tr("Basic card reader") : tr("Standard / comfort card reader"); - auto readerType = QSharedPointer::create(tr("Type: %1").arg(readerTypeString)); - readerName->addChild(readerType); - - QString cardTypeString = info.getCardTypeString(); - auto cardType = QSharedPointer::create(tr("Card: %1").arg(cardTypeString)); - readerName->addChild(cardType); - - if (info.hasEidCard()) - { - auto retryCounter = QSharedPointer::create(tr("Retry counter: %1").arg(3 - info.getRetryCounter())); - readerName->addChild(retryCounter); - } - } - endInsertRows(); -} - - -void DiagnosisModel::onPcscInfoChanged() -{ - auto itemModelIndex = index(3, 0); - removeChildItems(itemModelIndex, mPcScItem); - - beginInsertRows(itemModelIndex, 0, 2); - auto pcscVersion = QSharedPointer::create(tr("Version: %1").arg(mContext->getPcscVersion())); - mPcScItem->addChild(pcscVersion); - - auto pcscComponents = QSharedPointer::create(tr("Components")); - mPcScItem->addChild(pcscComponents); - insertPcScComponentList(mContext->getPcscComponents(), pcscComponents); - - auto driverItem = QSharedPointer::create(tr("Driver")); - mPcScItem->addChild(driverItem); - insertPcScComponentList(mContext->getPcscDrivers(), driverItem); - endInsertRows(); -} - - -void DiagnosisModel::onRemoteInfosChanged() -{ - auto itemModelIndex = index(4, 0); - removeChildItems(itemModelIndex, mPairedDevices); - - const RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); - const auto& trustedCertificates = settings.getTrustedCertificates(); - - if (trustedCertificates.isEmpty()) - { - beginInsertRows(itemModelIndex, 0, 0); - mPairedDevices->addChild(QSharedPointer::create(tr("No devices paired"))); - endInsertRows(); - return; - } - - beginInsertRows(itemModelIndex, 0, trustedCertificates.size() - 1); - for (const auto& cert : trustedCertificates) - { - const auto& info = settings.getRemoteInfo(cert); - - if (!info.getFingerprint().isEmpty()) - { - const auto& deviceName = QSharedPointer::create(info.getName()); - mPairedDevices->addChild(deviceName); - - const auto& deviceFingerprint = QSharedPointer::create((tr("Certificate fingerprint: %1").arg(info.getFingerprint()))); - deviceName->addChild(deviceFingerprint); - - const QString& timestamp = LanguageLoader::getInstance().getUsedLocale().toString(info.getLastConnected(), tr("dd.MM.yyyy, hh:mm:ss")); - const auto& deviceLastConnected = QSharedPointer::create(tr("Last connection: %1").arg(timestamp)); - deviceName->addChild(deviceLastConnected); - } - else - { - const auto& deviceName = QSharedPointer::create(RemoteServiceSettings::generateFingerprint(cert)); - mPairedDevices->addChild(deviceName); - - const auto& deviceInfo = QSharedPointer::create(tr("No information found for this certificate")); - deviceName->addChild(deviceInfo); - } - } - endInsertRows(); -} - - -void DiagnosisModel::onTimestampChanged() -{ - auto itemModelIndex = index(9, 0); - removeChildItems(itemModelIndex, mTimestampItem); - - beginInsertRows(itemModelIndex, 0, 0); - QDateTime timestampValue = mContext->getTimestamp(); - if (!timestampValue.isValid()) - { - mTimestampItem->addChild(QSharedPointer::create(tr("Initial diagnosis running, please wait."))); - } - else - { - QString timestamp = LanguageLoader::getInstance().getUsedLocale().toString(timestampValue, tr("d. MMMM yyyy, hh:mm:ss AP")); - mTimestampItem->addChild(QSharedPointer::create(timestamp)); - } - endInsertRows(); -} - - -void DiagnosisModel::onNetworkInfoChanged() -{ - auto itemModelIndex = index(5, 0); - removeChildItems(itemModelIndex, mNetworkInterfaces); - - const auto& networkInterfaces = mContext->getNetworkInterfaces(); - beginInsertRows(itemModelIndex, 0, networkInterfaces.size() - 1); - for (const auto& interface : networkInterfaces) - { - const auto& interfaceName = QSharedPointer::create(interface.humanReadableName()); - mNetworkInterfaces->addChild(interfaceName); - - QString hardwareAddress = interface.hardwareAddress().isEmpty() ? tr("") : interface.hardwareAddress(); - interfaceName->addChild(QSharedPointer::create(tr("Hardware address: %1").arg(hardwareAddress))); - - const auto& addresses = interface.addressEntries(); - if (addresses.isEmpty()) - { - interfaceName->addChild(QSharedPointer::create(tr("No IP addresses assigned"))); - } - else - { - const auto& interfaceAddresses = QSharedPointer::create(tr("IP addresses")); - interfaceName->addChild(interfaceAddresses); - for (const auto& address : addresses) - { - const auto& ip = QSharedPointer::create(address.ip().toString()); - interfaceAddresses->addChild(ip); - } - } - } - endInsertRows(); -} - - -void DiagnosisModel::onConnectionTestDone() -{ - auto itemModelIndex = index(6, 0); - removeChildItems(itemModelIndex, mNetworkConnectionTest); - - if (mConnectionTest.getIsProxySet()) - { - beginInsertRows(itemModelIndex, 0, 2); - auto proxy = QSharedPointer::create(tr("Proxy")); - mNetworkConnectionTest->addChild(proxy); - - proxy->addChild(QSharedPointer::create(tr("Hostname: %1").arg(mConnectionTest.getProxyHostName()))); - proxy->addChild(QSharedPointer::create(tr("Port: %1").arg(mConnectionTest.getProxyPort()))); - proxy->addChild(QSharedPointer::create(tr("Type: %1").arg(mConnectionTest.getProxyType()))); - proxy->addChild(QSharedPointer::create(tr("Capabilities: %1").arg(mConnectionTest.getProxyCapabilities()))); - - if (mConnectionTest.getPingTestOnProxySuccessful()) - { - proxy->addChild(QSharedPointer::create(tr("Ping test to proxy: Successful"))); - } - else - { - proxy->addChild(QSharedPointer::create(tr("Ping test to proxy: Failed"))); - } - - if (mConnectionTest.getConnectionTestWithProxySuccessful()) - { - mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test with proxy: Successful"))); - } - else - { - mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test with proxy: Failed"))); - } - } - else - { - beginInsertRows(itemModelIndex, 0, 1); - mNetworkConnectionTest->addChild(QSharedPointer::create(tr("No Proxy Found"))); - } - - if (mConnectionTest.getConnectionTestWithoutProxySuccessful()) - { - mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test without proxy: Successful"))); - } - else - { - mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test without proxy: Failed"))); - } - endInsertRows(); -} - - -void DiagnosisModel::onAntivirusInformationChanged() -{ - auto itemModelIndex = index(7, 0); - removeChildItems(itemModelIndex, mInstalledAntivirus); - - const auto& antivirusInfos = mAntivirusDetection.getAntivirusInformations(); - if (antivirusInfos.isEmpty()) - { - beginInsertRows(itemModelIndex, 0, 0); - mInstalledAntivirus->addChild(QSharedPointer::create(tr("No Antivirus software detected."))); - } - else - { - beginInsertRows(itemModelIndex, 0, antivirusInfos.size() - 1); - for (const auto& info : antivirusInfos) - { - auto antivirusName = QSharedPointer::create(info->getDisplayName()); - mInstalledAntivirus->addChild(antivirusName); - - if (!info->getLastUpdate().isEmpty()) - { - antivirusName->addChild(QSharedPointer::create(tr("Last updated: %1").arg(info->getLastUpdate()))); - } - antivirusName->addChild(QSharedPointer::create(tr("Executable path: %1").arg(info->getExePath()))); - } - } - endInsertRows(); -} - - -void DiagnosisModel::onAntivirusDetectionFailed() -{ - auto itemModelIndex = index(7, 0); - removeChildItems(itemModelIndex, mInstalledAntivirus); - - beginInsertRows(itemModelIndex, 0, 0); - mInstalledAntivirus->addChild(QSharedPointer::create(tr("Antivirus detection failed."))); - endInsertRows(); -} - - -const QString DiagnosisModel::boolToString(bool pBoolean) -{ - return pBoolean ? tr("Yes") : tr("No"); -} - - -void DiagnosisModel::onFirewallInformationReady() -{ - auto itemModelIndex = index(8, 0); - removeChildItems(itemModelIndex, mWindowsFirewall); - - beginInsertRows(itemModelIndex, 0, 2); - auto installedFirewalls = mFirewallDetection.getDetectedFirewalls(); - if (installedFirewalls.isEmpty()) - { -#if defined(Q_OS_WIN) - if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows8) - { - mWindowsFirewall->addChild(QSharedPointer::create(tr("Third party firewalls cannot be detected on Windows 7."))); - } - else - { -#else - { +#ifdef Q_OS_WIN + disconnect(&mAntivirusDetection, &DiagnosisAntivirusDetection::fireAntivirusInformationChanged, this, &DiagnosisModel::onAntivirusInformationChanged); + disconnect(&mAntivirusDetection, &DiagnosisAntivirusDetection::fireDetectionFailed, this, &DiagnosisModel::onAntivirusDetectionFailed); + disconnect(&mFirewallDetection, &DiagnosisFirewallDetection::fireFirewallInformationReady, this, &DiagnosisModel::onFirewallInformationReady); + disconnect(&mFirewallDetection, &DiagnosisFirewallDetection::fireDetectionFailed, this, &DiagnosisModel::onFirewallInformationFailed); #endif - mWindowsFirewall->addChild(QSharedPointer::create(tr("No third party firewalls detected"))); - } - } - else - { - auto thirdPartyFirewalls = QSharedPointer::create(tr("Firewalls from third party vendors")); - mWindowsFirewall->addChild(thirdPartyFirewalls); - for (const auto& firewall : installedFirewalls) - { - auto name = QSharedPointer::create(firewall->getName()); - thirdPartyFirewalls->addChild(name); - - QString enabled = boolToString(firewall->getEnabled()); - QString uptodate = boolToString(firewall->getUpToDate()); - name->addChild(QSharedPointer::create(tr("Enabled: %1").arg(enabled))); - name->addChild(QSharedPointer::create(tr("Up to date: %1").arg(uptodate))); - } - } - - auto firewallRules = QSharedPointer::create(tr("Windows firewall rules")); - mWindowsFirewall->addChild(firewallRules); - - QString firstRuleExists = boolToString(mFirewallDetection.getFirstRuleExists()); - QString firstRuleEnabled = boolToString(mFirewallDetection.getFirstRuleEnabled()); - auto outgoing = QSharedPointer::create(tr("Outgoing AusweisApp2 rule")); - firewallRules->addChild(outgoing); - outgoing->addChild(QSharedPointer::create(tr("Exists: %1").arg(firstRuleExists))); - outgoing->addChild(QSharedPointer::create(tr("Enabled: %1").arg(firstRuleEnabled))); - - QString secondRuleExists = boolToString(mFirewallDetection.getSecondRuleExists()); - QString secondRuleEnabled = boolToString(mFirewallDetection.getSecondRuleEnabled()); - auto incoming = QSharedPointer::create(tr("Incoming AusweisApp2 rule")); - firewallRules->addChild(incoming); - incoming->addChild(QSharedPointer::create(tr("Exists: %1").arg(secondRuleExists))); - incoming->addChild(QSharedPointer::create(tr("Enabled: %1").arg(secondRuleEnabled))); - - auto profiles = QSharedPointer::create(tr("Windows Firewall profiles")); - mWindowsFirewall->addChild(profiles); - - auto firewallProfiles = mFirewallDetection.getFirewallProfiles(); - for (const auto& profile : firewallProfiles) - { - auto name = QSharedPointer::create(profile->getName()); - profiles->addChild(name); - - QString enabled = boolToString(profile->getEnabled()); - name->addChild(QSharedPointer::create(tr("Enabled: %1").arg(enabled))); - } - profiles->addChild(QSharedPointer::create(tr("Warning: The current firewall status can be obscured by additional Group Policies on your system, often set by system administrators."))); - - endInsertRows(); -} - - -void DiagnosisModel::onFirewallInformationFailed() -{ - auto itemModelIndex = index(8, 0); - removeChildItems(itemModelIndex, mWindowsFirewall); - - beginInsertRows(itemModelIndex, 0, 0); - mWindowsFirewall->addChild(QSharedPointer::create(tr("An error occurred while trying to gather firewall information. Please check the log for more information."))); - endInsertRows(); } QVariant DiagnosisModel::data(const QModelIndex& pIndex, int pRole) const { - if (!pIndex.isValid()) + Q_UNUSED(pRole) + + const int row = pIndex.row(); + if (!pIndex.isValid() || row >= mSections.size()) { return QVariant(); } - if (pRole != Qt::DisplayRole) - { - return QVariant(); - } - - DiagnosisItem* item = static_cast(pIndex.internalPointer()); - - return item->getText(); -} - - -QModelIndex DiagnosisModel::index(int pRow, int pColumn, const QModelIndex& pParent) const -{ - if (!hasIndex(pRow, pColumn, pParent)) - { - return QModelIndex(); - } - - DiagnosisItem* parentItem; - - if (pParent.isValid()) - { - parentItem = static_cast(pParent.internalPointer()); - } - else - { - parentItem = mRootItem.data(); - } - - DiagnosisItem* childItem = parentItem->getChild(pRow).data(); - if (childItem) - { - return createIndex(pRow, pColumn, childItem); - } - else - { - return QModelIndex(); - } -} - - -QModelIndex DiagnosisModel::parent(const QModelIndex& pIndex) const -{ - if (!pIndex.isValid()) - { - return QModelIndex(); - } - - DiagnosisItem* childItem = static_cast(pIndex.internalPointer()); - if (childItem == nullptr) - { - return QModelIndex(); - } - - DiagnosisItem* parentItem = childItem->parentItem().data(); - - if (parentItem == mRootItem.data()) - { - return QModelIndex(); - } - - return createIndex(parentItem->row(), 0, parentItem); + return mSections.at(row).first; } int DiagnosisModel::rowCount(const QModelIndex& pParent) const { - DiagnosisItem* parentItem; - if (pParent.column() > 0) - { - return 0; - } - - if (pParent.isValid()) - { - parentItem = static_cast(pParent.internalPointer()); - } - else - { - parentItem = mRootItem.data(); - } - - return parentItem->childCount(); + Q_UNUSED(pParent) + return mSections.size(); } -int DiagnosisModel::columnCount(const QModelIndex& pParent) const +QString DiagnosisModel::getFirstSectionName() const { - Q_UNUSED(pParent); - return 1; + return mSections.first().first; +} + + +QAbstractListModel* DiagnosisModel::getSectionContent(const QString& pSection) +{ + for (const auto& pair : qAsConst(mSections)) + { + if (pair.first == pSection) + { + QSharedPointer sectionModel = pair.second; + return sectionModel.data(); + } + } + + return nullptr; } @@ -584,26 +188,539 @@ QDateTime DiagnosisModel::getCreationTime() const } +QString DiagnosisModel::getCreationTimeString() const +{ + return getCreationTime().toString(QStringLiteral("yyyy-MM-dd_HH-mm")); +} + + QString DiagnosisModel::getAsPlaintext() const { - QStringList modelPlaintext; - mRootItem->appendPlaintextContent(modelPlaintext); + #ifdef Q_OS_WIN - return modelPlaintext.join(QLatin1String("\r\n")); - + static const QString endl = QStringLiteral("\r\n"); #else - return modelPlaintext.join(QLatin1String("\n")); - + static const QString endl = QStringLiteral("\n"); #endif -} - -QVariant DiagnosisModel::headerData(int section, Qt::Orientation orientation, int role) const -{ - Q_UNUSED(section); - if (orientation == Qt::Horizontal && role == Qt::DisplayRole) + QStringList modelPlaintext; + for (const auto& sectionPair : qAsConst(mSections)) { - return mRootItem->getText(); + modelPlaintext << sectionPair.first; + modelPlaintext << sectionPair.second->getAsPlaintext(QStringLiteral("\t")); + modelPlaintext << endl; } - return QVariant(); + + return modelPlaintext.join(endl); +} + + +QString DiagnosisModel::boolToString(bool pBoolean) +{ + return pBoolean ? tr("Yes") : tr("No"); +} + + +void DiagnosisModel::onTimestampChanged() +{ + QDateTime timestampValue = mContext->getTimestamp(); + if (!timestampValue.isValid()) + { + mTimestampItem->mContent = tr("Failed to retrieve date & time"); + } + else + { + QString timestamp = LanguageLoader::getInstance().getUsedLocale().toString(timestampValue, tr("d. MMMM yyyy, hh:mm:ss AP")); + mTimestampItem->mContent = timestamp; + } + + emitDataChangedForSection(mTimestampItem); +} + + +void DiagnosisModel::onNetworkInfoChanged() +{ + mNetworkInterfaceSection->removeAllItems(); + + const auto& networkInterfaces = mContext->getNetworkInterfaces(); + for (const auto& iface : networkInterfaces) + { + QStringList interfaceInfos; + QString hardwareAddress = iface.hardwareAddress().isEmpty() ? tr("") : iface.hardwareAddress(); + interfaceInfos << tr("Hardware address: %1").arg(hardwareAddress); + + const auto& addresses = iface.addressEntries(); + if (addresses.isEmpty()) + { + interfaceInfos << tr("No IP addresses assigned"); + } + else + { + for (const auto& address : addresses) + { + const auto& ip = address.ip(); + if (ip.protocol() == QAbstractSocket::NetworkLayerProtocol::IPv4Protocol) + { + interfaceInfos << tr("IPv4 address: %1").arg(ip.toString()); + } + else if (ip.protocol() == QAbstractSocket::NetworkLayerProtocol::IPv6Protocol) + { + interfaceInfos << tr("IPv6 address: %1").arg(ip.toString()); + } + else + { + interfaceInfos << tr("Unknown address: %1").arg(ip.toString()); + } + } + } + + mNetworkInterfaceSection->addItem(tr("Interface: \"%1\"").arg(iface.humanReadableName()), interfaceInfos.join(QStringLiteral("\n"))); + } + + mCombinedNetworkSection->replaceWithSections({mNetworkConnectionSection, mNetworkInterfaceSection}); +} + + +void DiagnosisModel::onConnectionTestDone() +{ + mNetworkConnectionSection->removeAllItems(); + QStringList proxyInfo; + + if (mConnectionTest.getIsProxySet()) + { + proxyInfo << tr("Hostname: %1").arg(mConnectionTest.getProxyHostName()); + proxyInfo << tr("Port: %1").arg(mConnectionTest.getProxyPort()); + proxyInfo << tr("Type: %1").arg(mConnectionTest.getProxyType()); + proxyInfo << tr("Capabilities: %1").arg(mConnectionTest.getProxyCapabilities()); + + if (mConnectionTest.getPingTestOnProxySuccessful()) + { + proxyInfo << tr("Ping test to proxy: Successful"); + } + else + { + proxyInfo << tr("Ping test to proxy: Failed"); + } + + if (mConnectionTest.getConnectionTestWithProxySuccessful()) + { + proxyInfo << tr("Connection test with proxy: Successful"); + } + else + { + proxyInfo << tr("Connection test with proxy: Failed"); + } + } + else + { + proxyInfo << tr("No proxy found"); + } + + if (mConnectionTest.getConnectionTestWithoutProxySuccessful()) + { + proxyInfo << tr("Connection test without proxy: Successful"); + } + else + { + proxyInfo << tr("Connection test without proxy: Failed"); + } + + mNetworkConnectionSection->addItem(tr("Proxy information"), proxyInfo.join(QStringLiteral("\n"))); + mCombinedNetworkSection->replaceWithSections({mNetworkConnectionSection, mNetworkInterfaceSection}); +} + + +void DiagnosisModel::onAntivirusInformationChanged() +{ + mAntivirusSection->removeAllItems(); + + const auto& antivirusInfos = mAntivirusDetection.getAntivirusInformations(); + if (antivirusInfos.isEmpty()) + { + mAntivirusSection->addItem(tr("Antivirus information"), tr("No Antivirus software detected.")); + } + else + { + mAntivirusSection->addTitleWithoutContent(tr("Antivirus information")); + + for (const auto& info : antivirusInfos) + { + QStringList avInfo; + if (!info->getLastUpdate().isEmpty()) + { + avInfo << tr("Last updated: %1").arg(info->getLastUpdate()); + } + avInfo << tr("Executable path: %1").arg(info->getExePath()); + auto antivirusName = info->getDisplayName(); + mAntivirusSection->addItem(antivirusName, avInfo.join(QStringLiteral("\n"))); + } + } + + mCombinedAntivirusFirewallSection->replaceWithSections({mAntivirusSection, mFirewallSection}); +} + + +void DiagnosisModel::onAntivirusDetectionFailed() +{ + mAntivirusSection->removeAllItems(); + mAntivirusSection->addItem(tr("Antivirus information"), tr("Antivirus detection failed.")); + mCombinedAntivirusFirewallSection->replaceWithSections({mAntivirusSection, mFirewallSection}); +} + + +void DiagnosisModel::onFirewallInformationReady() +{ + mFirewallSection->removeAllItems(); + + mFirewallSection->addTitleWithoutContent(tr("Firewall information")); + auto installedFirewalls = mFirewallDetection.getDetectedFirewalls(); + if (installedFirewalls.isEmpty()) + { +#if defined(Q_OS_WIN) + if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows8) + { + mFirewallSection->addItemWithoutTitle(tr("Third party firewalls cannot be detected on Windows 7.")); + } + else + { +#else + { +#endif + mFirewallSection->addItemWithoutTitle(tr("No third party firewalls detected")); + } + } + else + { + QStringList firewallInfos; + for (const auto& firewall : installedFirewalls) + { + firewallInfos << firewall->getName(); + + QString enabled = boolToString(firewall->getEnabled()); + QString uptodate = boolToString(firewall->getUpToDate()); + firewallInfos << tr("Enabled: %1").arg(enabled); + firewallInfos << tr("Up to date: %1").arg(uptodate); + } + mFirewallSection->addItem(tr("Firewalls from third party vendors"), firewallInfos.join(QStringLiteral("\n"))); + } + + QStringList windowsFirewallSettings; + QString firstRuleExists = boolToString(mFirewallDetection.getFirstRuleExists()); + QString firstRuleEnabled = boolToString(mFirewallDetection.getFirstRuleEnabled()); + windowsFirewallSettings << tr("Outgoing AusweisApp2 rule"); + windowsFirewallSettings << tr("Exists: %1").arg(firstRuleExists); + windowsFirewallSettings << tr("Enabled: %1").arg(firstRuleEnabled); + + QString secondRuleExists = boolToString(mFirewallDetection.getSecondRuleExists()); + QString secondRuleEnabled = boolToString(mFirewallDetection.getSecondRuleEnabled()); + windowsFirewallSettings << tr("Incoming AusweisApp2 rule"); + windowsFirewallSettings << tr("Exists: %1").arg(secondRuleExists); + windowsFirewallSettings << tr("Enabled: %1").arg(secondRuleEnabled); + + mFirewallSection->addItem(tr("Windows firewall rules"), windowsFirewallSettings.join(QStringLiteral("\n"))); + + QStringList windowsFirewallProfiles; + auto firewallProfiles = mFirewallDetection.getFirewallProfiles(); + for (const auto& profile : firewallProfiles) + { + windowsFirewallProfiles << profile->getName(); + QString enabled = boolToString(profile->getEnabled()); + windowsFirewallProfiles << tr("Enabled: %1").arg(enabled); + } + + mFirewallSection->addItem(tr("Windows firewall profiles"), windowsFirewallProfiles.join(QStringLiteral("\n"))); + mFirewallSection->addItemWithoutTitle(tr("Warning: The current firewall status can be obscured by additional Group Policies on your system, often set by system administrators.")); + + mCombinedAntivirusFirewallSection->replaceWithSections({mAntivirusSection, mFirewallSection}); +} + + +void DiagnosisModel::onFirewallInformationFailed() +{ + mFirewallSection->removeAllItems(); + mFirewallSection->addItem(tr("Firewall information"), tr("An error occurred while trying to gather firewall information. Please check the log for more information.")); + mCombinedAntivirusFirewallSection->replaceWithSections({mAntivirusSection, mFirewallSection}); +} + + +void DiagnosisModel::onPcscInfoChanged() +{ + mPcscSection->removeAllItems(); + + mPcscSection->addTitleWithoutContent(tr("PC/SC information")); + mPcscSection->addItemWithoutTitle(tr("Version: %1").arg(mContext->getPcscVersion())); + + QStringList pcscInfo; + for (const auto& info : mContext->getPcscComponents()) + { + pcscInfo << info.getDescription(); + pcscInfo << tr("Vendor: %1").arg(info.getManufacturer()); + pcscInfo << tr("Version: %1").arg(info.getVersion()); + pcscInfo << tr("File path: %1").arg(info.getPath()); + } + if (!pcscInfo.empty()) + { + mPcscSection->addItem(tr("Components"), pcscInfo.join(QStringLiteral("\n"))); + } + + pcscInfo.clear(); + for (const auto& info : mContext->getPcscDrivers()) + { + pcscInfo << info.getDescription(); + pcscInfo << tr("Vendor: %1").arg(info.getManufacturer()); + pcscInfo << tr("Version: %1").arg(info.getVersion()); + pcscInfo << tr("File path: %1").arg(info.getPath()); + } + if (!pcscInfo.empty()) + { + mPcscSection->addItem(tr("Driver"), pcscInfo.join(QStringLiteral("\n"))); + } + + mCombinedReaderSection->replaceWithSections({mCardReaderSection, mRemoteDeviceSection, mPcscSection}); +} + + +void DiagnosisModel::onRemoteInfosChanged() +{ + mRemoteDeviceSection->removeAllItems(); + + const RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); + const auto& trustedCertificates = settings.getTrustedCertificates(); + + mRemoteDeviceSection->addTitleWithoutContent(tr("Paired remote devices")); + + if (trustedCertificates.isEmpty()) + { + mRemoteDeviceSection->addItemWithoutTitle(tr("No devices paired.")); + } + + for (const auto& cert : trustedCertificates) + { + QStringList certInfo; + const auto& info = settings.getRemoteInfo(cert); + + if (!info.getFingerprint().isEmpty()) + { + certInfo << tr("Certificate fingerprint: %1").arg(info.getFingerprint()); + const QString& timestamp = LanguageLoader::getInstance().getUsedLocale().toString(info.getLastConnected(), tr("dd.MM.yyyy, hh:mm:ss")); + certInfo << tr("Last connection: %1").arg(timestamp); + + mRemoteDeviceSection->addItem(info.getName(), certInfo.join(QStringLiteral("\n"))); + } + else + { + mRemoteDeviceSection->addItem(RemoteServiceSettings::generateFingerprint(cert), tr("No information found for this certificate.")); + } + } + + mCombinedReaderSection->replaceWithSections({mCardReaderSection, mRemoteDeviceSection, mPcscSection}); +} + + +void DiagnosisModel::onReaderInfosChanged() +{ + mCardReaderSection->removeAllItems(); + + mCardReaderSection->addTitleWithoutContent(tr("Connected Card reader")); + + const auto& readerInfos = mContext->getReaderInfos(); + if (readerInfos.isEmpty()) + { + mCardReaderSection->addItemWithoutTitle(tr("No supported reader found.")); + } + + for (const auto& info : readerInfos) + { + QStringList infoList; + + QString readerType = info.isBasicReader() ? tr("Basic card reader") : tr("Standard / comfort card reader"); + infoList << tr("Type: %1").arg(readerType); + infoList << tr("Card: %1").arg(info.getCardTypeString()); + + if (info.hasEidCard()) + { + infoList << tr("Retry counter: %1").arg(info.getRetryCounter()); + } + + mCardReaderSection->addItem(info.getName(), infoList.join(QStringLiteral("\n"))); + } + + mCombinedReaderSection->replaceWithSections({mCardReaderSection, mRemoteDeviceSection, mPcscSection}); +} + + +void DiagnosisModel::reloadContent() +{ + disconnectSignals(); + + beginResetModel(); + mSections.clear(); + + mSections.append(qMakePair(QCoreApplication::applicationName(), createAusweisApp2Section())); + + createCardReaderSection(); + mCombinedReaderSection->replaceWithSections({mCardReaderSection, mRemoteDeviceSection, mPcscSection}); + mSections.append(qMakePair(tr("Card reader"), mCombinedReaderSection)); + + createNetworkSection(); + mCombinedNetworkSection->replaceWithSections({mNetworkConnectionSection, mNetworkInterfaceSection}); + mSections.append(qMakePair(tr("Network"), mCombinedNetworkSection)); + + createAntiVirusAndFirewallSection(); + mCombinedAntivirusFirewallSection->replaceWithSections({mAntivirusSection, mFirewallSection}); + mSections.append(qMakePair(tr("Antivirus and firewall"), mCombinedAntivirusFirewallSection)); + + onRemoteInfosChanged(); + mConnectionTest.startConnectionTest(); + +#ifdef Q_OS_WIN + mAntivirusDetection.startInformationProcess(); + mFirewallDetection.startDetection(); +#endif + + connectSignals(); + + endResetModel(); +} + + +SectionModel::SectionModel(QObject* pParent) + : QAbstractListModel(pParent) +{ + +} + + +QVariant SectionModel::data(const QModelIndex& pIndex, int pRole) const +{ + const int row = pIndex.row(); + if (!pIndex.isValid() || row >= mContentItems.size()) + { + return QVariant(); + } + + static const QString endl = QStringLiteral("\n"); + + QSharedPointer item = mContentItems.at(row); + switch (pRole) + { + case Qt::DisplayRole: + if (item->mTitle.isEmpty()) + { + return item->mContent; + } + else + { + return item->mTitle + endl + item->mContent; + } + + case TitleRole: + return item->mTitle; + + case ContentRole: + return item->mContent; + + default: + return QVariant(); + } +} + + +int SectionModel::rowCount(const QModelIndex& pParent) const +{ + Q_UNUSED(pParent) + return mContentItems.size(); +} + + +QHash SectionModel::roleNames() const +{ + QHash roles; + roles.insert(Qt::DisplayRole, QByteArrayLiteral("display")); + roles.insert(TitleRole, QByteArrayLiteral("title")); + roles.insert(ContentRole, QByteArrayLiteral("content")); + return roles; +} + + +void SectionModel::addItem(const QString& pTitle, const QString& pContent) +{ + addItem(QSharedPointer::create(pTitle, pContent)); +} + + +void SectionModel::addItem(const QSharedPointer& pContentItem) +{ + beginInsertRows(index(0), mContentItems.size(), mContentItems.size()); + mContentItems.append(pContentItem); + pContentItem->mSection = sharedFromThis(); + endInsertRows(); +} + + +void SectionModel::addItemWithoutTitle(const QString& pContent) +{ + addItem(QString(), pContent); +} + + +void SectionModel::addTitleWithoutContent(const QString& pTitle) +{ + addItem(pTitle, QString()); +} + + +void SectionModel::removeAllItems() +{ + if (!mContentItems.empty()) + { + beginRemoveRows(index(0), 0, mContentItems.size() - 1); + mContentItems.clear(); + endRemoveRows(); + } +} + + +void SectionModel::emitDataChangedForItem(const QSharedPointer& pItem) +{ + QModelIndex itemIndex = index(mContentItems.indexOf(pItem)); + Q_EMIT dataChanged(itemIndex, itemIndex); +} + + +void SectionModel::replaceWithSections(QVector > pSections) +{ + beginResetModel(); + removeAllItems(); + + for (const auto& section : qAsConst(pSections)) + { + const auto& sectionItems = section->mContentItems; + for (const auto& item : sectionItems) + { + addItem(item); + } + } + + endResetModel(); +} + + +QStringList SectionModel::getAsPlaintext(const QString& pPrependString) const +{ + QStringList sectionPlaintext; + for (const auto& item : qAsConst(mContentItems)) + { + if (!item->mTitle.isEmpty()) + { + sectionPlaintext << pPrependString + item->mTitle; + } + + if (!item->mContent.isEmpty()) + { + sectionPlaintext << pPrependString + item->mContent; + } + } + + return sectionPlaintext; } diff --git a/src/core/DiagnosisModel.h b/src/core/DiagnosisModel.h index 1dc1778..33b0868 100644 --- a/src/core/DiagnosisModel.h +++ b/src/core/DiagnosisModel.h @@ -10,8 +10,8 @@ #include "DiagnosisFirewallDetection.h" #include "DiagnosisItem.h" -#include -#include +#include +#include #include #include @@ -20,59 +20,114 @@ class test_DiagnosisModel; namespace governikus { +class SectionModel; +struct ContentItem +{ + ContentItem(const QString& pTitle, const QString& pContent) + : mTitle(pTitle) + , mContent(pContent) + { + } + + + QString mTitle; + QString mContent; + QSharedPointer mSection; +}; + + +class SectionModel + : public QAbstractListModel + , public QEnableSharedFromThis +{ + Q_OBJECT + + enum ContentRoles + { + TitleRole = Qt::UserRole + 1, + ContentRole + }; + + private: + friend class ::test_DiagnosisModel; + QVector > mContentItems; + + public: + explicit SectionModel(QObject* pParent = nullptr); + + QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const override; + int rowCount(const QModelIndex& pParent = QModelIndex()) const override; + QHash roleNames() const override; + + void addItem(const QString& pTitle, const QString& pContent); + void addItem(const QSharedPointer& pContentItem); + void addItemWithoutTitle(const QString& pContent); + void addTitleWithoutContent(const QString& pTitle); + void removeAllItems(); + void emitDataChangedForItem(const QSharedPointer& pItem); + void replaceWithSections(QVector > pSections); + QStringList getAsPlaintext(const QString& pPrependString = QString()) const; +}; + + class DiagnosisModel - : public QAbstractItemModel + : public QAbstractListModel { Q_OBJECT private: friend class ::test_DiagnosisModel; + QVector > > mSections; QSharedPointer mContext; - QSharedPointer mRootItem; - QSharedPointer mAppVersionItem; - QSharedPointer mOperatingSystemItem; - QSharedPointer mReaderItem; - QSharedPointer mPcScItem; - QSharedPointer mPairedDevices; - QSharedPointer mNetworkInterfaces; - QSharedPointer mNetworkConnectionTest; - QSharedPointer mInstalledAntivirus; - QSharedPointer mWindowsFirewall; - QSharedPointer mTimestampItem; DiagnosisAntivirusDetection mAntivirusDetection; DiagnosisFirewallDetection mFirewallDetection; DiagnosisConnectionTest mConnectionTest; + QSharedPointer mTimestampItem; + QSharedPointer mNetworkInterfaceSection; + QSharedPointer mNetworkConnectionSection; + QSharedPointer mCombinedNetworkSection; + QSharedPointer mCombinedAntivirusFirewallSection; + QSharedPointer mAntivirusSection; + QSharedPointer mFirewallSection; + QSharedPointer mCombinedReaderSection; + QSharedPointer mCardReaderSection; + QSharedPointer mPcscSection; + QSharedPointer mRemoteDeviceSection; - void initAppVersionInfo(); - void insertPcScComponentList(const QVector& pComponents, const QSharedPointer& pParentItem); - void removeChildItems(QModelIndex pIndex, QSharedPointer pParentItem); - static const QString boolToString(bool pBoolean); + QSharedPointer createAusweisApp2Section(); + void createNetworkSection(); + void createCardReaderSection(); + void createAntiVirusAndFirewallSection(); + void emitDataChangedForSection(const QSharedPointer& pItem) const; + void connectSignals(); + void disconnectSignals(); + + public: + explicit DiagnosisModel(const QSharedPointer& pContext); + ~DiagnosisModel() override; + + QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const override; + int rowCount(const QModelIndex& pParent = QModelIndex()) const override; + + QString getFirstSectionName() const; + QAbstractListModel* getSectionContent(const QString& pSection); + QDateTime getCreationTime() const; + Q_INVOKABLE QString getCreationTimeString() const; + QString getAsPlaintext() const; + QString boolToString(bool pBoolean); private Q_SLOTS: - void onReaderInfosChanged(); - void onPcscInfoChanged(); void onTimestampChanged(); void onNetworkInfoChanged(); - void onRemoteInfosChanged(); + void onConnectionTestDone(); void onAntivirusInformationChanged(); void onAntivirusDetectionFailed(); void onFirewallInformationReady(); void onFirewallInformationFailed(); - void onConnectionTestDone(); - - public: - explicit DiagnosisModel(const QSharedPointer& pContext); - - QVariant data(const QModelIndex& pIndex, int pRole) const override; - QModelIndex index(int pRow, int pColumn, - const QModelIndex& pParent = QModelIndex()) const override; - QModelIndex parent(const QModelIndex& pIndex) const override; - int rowCount(const QModelIndex& pParent = QModelIndex()) const override; - int columnCount(const QModelIndex& pParent = QModelIndex()) const override; - QVariant headerData(int section, Qt::Orientation orientation, int role) const override; - - QDateTime getCreationTime() const; - QString getAsPlaintext() const; + void onPcscInfoChanged(); + void onRemoteInfosChanged(); + void onReaderInfosChanged(); + void reloadContent(); }; } // namespace governikus diff --git a/src/core/DiagnosisTreeModel.cpp b/src/core/DiagnosisTreeModel.cpp new file mode 100644 index 0000000..9e2982d --- /dev/null +++ b/src/core/DiagnosisTreeModel.cpp @@ -0,0 +1,614 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "DiagnosisTreeModel.h" + +#include "AppSettings.h" +#include "LanguageLoader.h" +#include "RemoteServiceSettings.h" + +#include +#include + +using namespace governikus; + + +DiagnosisTreeModel::DiagnosisTreeModel(const QSharedPointer& pContext) + : mContext(pContext) + , mRootItem(new DiagnosisItem(tr("Diagnosis data"))) + , mAppVersionItem(new DiagnosisItem(QCoreApplication::applicationName())) + , mOperatingSystemItem(new DiagnosisItem(tr("Operating system"))) + , mReaderItem(new DiagnosisItem(tr("Card reader"))) + , mPcScItem(new DiagnosisItem(tr("PC/SC"))) + , mPairedDevices(new DiagnosisItem(tr("Paired devices"))) + , mNetworkInterfaces(new DiagnosisItem(tr("Network interfaces"))) + , mNetworkConnectionTest(new DiagnosisItem(tr("Network connection test"))) + , mInstalledAntivirus(new DiagnosisItem(tr("Installed antivirus software"))) + , mWindowsFirewall(new DiagnosisItem(tr("Firewall"))) + , mTimestampItem(new DiagnosisItem(tr("Time of diagnosis"))) + , mAntivirusDetection() + , mFirewallDetection() + , mConnectionTest() +{ + mRootItem->addChild(mAppVersionItem); + initAppVersionInfo(); + + mRootItem->addChild(mOperatingSystemItem); + mOperatingSystemItem->addChild(QSharedPointer::create(QSysInfo::prettyProductName())); + mOperatingSystemItem->addChild(QSharedPointer::create(QSysInfo::kernelVersion())); + mOperatingSystemItem->addChild(QSharedPointer::create(QSysInfo::currentCpuArchitecture())); + + mRootItem->addChild(mReaderItem); + mReaderItem->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); + connect(mContext.data(), &DiagnosisContext::readerInfosChanged, this, &DiagnosisTreeModel::onReaderInfosChanged); + + mRootItem->addChild(mPcScItem); + mPcScItem->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); + connect(mContext.data(), &DiagnosisContext::pcscInfoChanged, this, &DiagnosisTreeModel::onPcscInfoChanged); + + mRootItem->addChild(mPairedDevices); + RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); + connect(&settings, &RemoteServiceSettings::fireTrustedRemoteInfosChanged, this, &DiagnosisTreeModel::onRemoteInfosChanged); + onRemoteInfosChanged(); + + mRootItem->addChild(mNetworkInterfaces); + connect(mContext.data(), &DiagnosisContext::fireNetworkInfoChanged, this, &DiagnosisTreeModel::onNetworkInfoChanged); + + mRootItem->addChild(mNetworkConnectionTest); + mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); + connect(&mConnectionTest, &DiagnosisConnectionTest::fireConnectionTestDone, this, &DiagnosisTreeModel::onConnectionTestDone); + mConnectionTest.startConnectionTest(); + + mRootItem->addChild(mInstalledAntivirus); + mRootItem->addChild(mWindowsFirewall); +#ifdef Q_OS_WIN + connect(&mAntivirusDetection, &DiagnosisAntivirusDetection::fireAntivirusInformationChanged, this, &DiagnosisTreeModel::onAntivirusInformationChanged); + connect(&mAntivirusDetection, &DiagnosisAntivirusDetection::fireDetectionFailed, this, &DiagnosisTreeModel::onAntivirusDetectionFailed); + mAntivirusDetection.startInformationProcess(); + mInstalledAntivirus->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); + + connect(&mFirewallDetection, &DiagnosisFirewallDetection::fireFirewallInformationReady, this, &DiagnosisTreeModel::onFirewallInformationReady); + connect(&mFirewallDetection, &DiagnosisFirewallDetection::fireDetectionFailed, this, &DiagnosisTreeModel::onFirewallInformationFailed); + mFirewallDetection.startDetection(); + mWindowsFirewall->addChild(QSharedPointer::create(tr("Diagnosis is running..."))); +#else + mInstalledAntivirus->addChild(QSharedPointer::create(tr("No Antivirus information available on this platform."))); + mWindowsFirewall->addChild(QSharedPointer::create(tr("No Firewall information available on this platform."))); +#endif + + mRootItem->addChild(mTimestampItem); + connect(mContext.data(), &DiagnosisContext::timestampChanged, this, &DiagnosisTreeModel::onTimestampChanged); + onTimestampChanged(); +} + + +void DiagnosisTreeModel::initAppVersionInfo() +{ + const QStringList appVersion({ + QCoreApplication::applicationVersion(), + QCoreApplication::organizationName(), + QStringLiteral("Qt ") + QString::fromLatin1(qVersion()), + QSslSocket::sslLibraryVersionString() + }); + for (const auto& str : appVersion) + { + mAppVersionItem->addChild(QSharedPointer::create(str)); + } +} + + +void DiagnosisTreeModel::insertPcScComponentList(const QVector& pComponents, const QSharedPointer& pParentItem) +{ + if (pComponents.isEmpty()) + { + return; + } + + for (const DiagnosisContext::ComponentInfo& info : pComponents) + { + auto descriptionItem = QSharedPointer::create(info.getDescription()); + pParentItem->addChild(descriptionItem); + + auto companyItem = QSharedPointer::create(tr("Vendor: %1").arg(info.getManufacturer())); + pParentItem->addChild(companyItem); + + auto versionItem = QSharedPointer::create(tr("Version: %1").arg(info.getVersion())); + pParentItem->addChild(versionItem); + + auto pathItem = QSharedPointer::create(tr("File path: %1").arg(info.getPath())); + descriptionItem->addChild(pathItem); + } +} + + +void DiagnosisTreeModel::removeChildItems(const QModelIndex& pIndex, const QSharedPointer& pParentItem) +{ + if (pParentItem->childCount() <= 0) + { + return; + } + + beginRemoveRows(pIndex, 0, pParentItem->childCount() - 1); + pParentItem->clearChildren(); + endRemoveRows(); +} + + +void DiagnosisTreeModel::onReaderInfosChanged() +{ + auto itemModelIndex = index(2, 0); + removeChildItems(itemModelIndex, mReaderItem); + + const auto& readerInfos = mContext->getReaderInfos(); + if (readerInfos.isEmpty()) + { + beginInsertRows(itemModelIndex, 0, 0); + mReaderItem->addChild(QSharedPointer::create(tr("Not recognised"))); + endInsertRows(); + return; + } + + beginInsertRows(itemModelIndex, 0, readerInfos.size() - 1); + for (const ReaderInfo& info : readerInfos) + { + auto readerName = QSharedPointer::create(info.getName()); + mReaderItem->addChild(readerName); + + QString readerTypeString = info.isBasicReader() ? tr("Basic card reader") : tr("Standard / comfort card reader"); + auto readerType = QSharedPointer::create(tr("Type: %1").arg(readerTypeString)); + readerName->addChild(readerType); + + QString cardTypeString = info.getCardTypeString(); + auto cardType = QSharedPointer::create(tr("Card: %1").arg(cardTypeString)); + readerName->addChild(cardType); + + if (info.hasEidCard()) + { + auto retryCounter = QSharedPointer::create(tr("Retry counter: %1").arg(info.getRetryCounter())); + readerName->addChild(retryCounter); + } + } + endInsertRows(); +} + + +void DiagnosisTreeModel::onPcscInfoChanged() +{ + auto itemModelIndex = index(3, 0); + removeChildItems(itemModelIndex, mPcScItem); + + beginInsertRows(itemModelIndex, 0, 2); + auto pcscVersion = QSharedPointer::create(tr("Version: %1").arg(mContext->getPcscVersion())); + mPcScItem->addChild(pcscVersion); + + auto pcscComponents = QSharedPointer::create(tr("Components")); + mPcScItem->addChild(pcscComponents); + insertPcScComponentList(mContext->getPcscComponents(), pcscComponents); + + auto driverItem = QSharedPointer::create(tr("Driver")); + mPcScItem->addChild(driverItem); + insertPcScComponentList(mContext->getPcscDrivers(), driverItem); + endInsertRows(); +} + + +void DiagnosisTreeModel::onRemoteInfosChanged() +{ + auto itemModelIndex = index(4, 0); + removeChildItems(itemModelIndex, mPairedDevices); + + const RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); + const auto& trustedCertificates = settings.getTrustedCertificates(); + + if (trustedCertificates.isEmpty()) + { + beginInsertRows(itemModelIndex, 0, 0); + mPairedDevices->addChild(QSharedPointer::create(tr("No devices paired"))); + endInsertRows(); + return; + } + + beginInsertRows(itemModelIndex, 0, trustedCertificates.size() - 1); + for (const auto& cert : trustedCertificates) + { + const auto& info = settings.getRemoteInfo(cert); + + if (!info.getFingerprint().isEmpty()) + { + const auto& deviceName = QSharedPointer::create(info.getName()); + mPairedDevices->addChild(deviceName); + + const auto& deviceFingerprint = QSharedPointer::create((tr("Certificate fingerprint: %1").arg(info.getFingerprint()))); + deviceName->addChild(deviceFingerprint); + + const QString& timestamp = LanguageLoader::getInstance().getUsedLocale().toString(info.getLastConnected(), tr("dd.MM.yyyy, hh:mm:ss")); + const auto& deviceLastConnected = QSharedPointer::create(tr("Last connection: %1").arg(timestamp)); + deviceName->addChild(deviceLastConnected); + } + else + { + const auto& deviceName = QSharedPointer::create(RemoteServiceSettings::generateFingerprint(cert)); + mPairedDevices->addChild(deviceName); + + const auto& deviceInfo = QSharedPointer::create(tr("No information found for this certificate")); + deviceName->addChild(deviceInfo); + } + } + endInsertRows(); +} + + +void DiagnosisTreeModel::onTimestampChanged() +{ + auto itemModelIndex = index(9, 0); + removeChildItems(itemModelIndex, mTimestampItem); + + beginInsertRows(itemModelIndex, 0, 0); + QDateTime timestampValue = mContext->getTimestamp(); + if (!timestampValue.isValid()) + { + mTimestampItem->addChild(QSharedPointer::create(tr("Initial diagnosis running, please wait."))); + } + else + { + QString timestamp = LanguageLoader::getInstance().getUsedLocale().toString(timestampValue, tr("d. MMMM yyyy, hh:mm:ss AP")); + mTimestampItem->addChild(QSharedPointer::create(timestamp)); + } + endInsertRows(); +} + + +void DiagnosisTreeModel::onNetworkInfoChanged() +{ + auto itemModelIndex = index(5, 0); + removeChildItems(itemModelIndex, mNetworkInterfaces); + + const auto& networkInterfaces = mContext->getNetworkInterfaces(); + beginInsertRows(itemModelIndex, 0, networkInterfaces.size() - 1); + for (const auto& interface : networkInterfaces) + { + const auto& interfaceName = QSharedPointer::create(interface.humanReadableName()); + mNetworkInterfaces->addChild(interfaceName); + + QString hardwareAddress = interface.hardwareAddress().isEmpty() ? tr("") : interface.hardwareAddress(); + interfaceName->addChild(QSharedPointer::create(tr("Hardware address: %1").arg(hardwareAddress))); + + const auto& addresses = interface.addressEntries(); + if (addresses.isEmpty()) + { + interfaceName->addChild(QSharedPointer::create(tr("No IP addresses assigned"))); + } + else + { + const auto& interfaceAddresses = QSharedPointer::create(tr("IP addresses")); + interfaceName->addChild(interfaceAddresses); + for (const auto& address : addresses) + { + const auto& ip = QSharedPointer::create(address.ip().toString()); + interfaceAddresses->addChild(ip); + } + } + } + endInsertRows(); +} + + +void DiagnosisTreeModel::onConnectionTestDone() +{ + auto itemModelIndex = index(6, 0); + removeChildItems(itemModelIndex, mNetworkConnectionTest); + + if (mConnectionTest.getIsProxySet()) + { + beginInsertRows(itemModelIndex, 0, 2); + auto proxy = QSharedPointer::create(tr("Proxy")); + mNetworkConnectionTest->addChild(proxy); + + proxy->addChild(QSharedPointer::create(tr("Hostname: %1").arg(mConnectionTest.getProxyHostName()))); + proxy->addChild(QSharedPointer::create(tr("Port: %1").arg(mConnectionTest.getProxyPort()))); + proxy->addChild(QSharedPointer::create(tr("Type: %1").arg(mConnectionTest.getProxyType()))); + proxy->addChild(QSharedPointer::create(tr("Capabilities: %1").arg(mConnectionTest.getProxyCapabilities()))); + + if (mConnectionTest.getPingTestOnProxySuccessful()) + { + proxy->addChild(QSharedPointer::create(tr("Ping test to proxy: Successful"))); + } + else + { + proxy->addChild(QSharedPointer::create(tr("Ping test to proxy: Failed"))); + } + + if (mConnectionTest.getConnectionTestWithProxySuccessful()) + { + mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test with proxy: Successful"))); + } + else + { + mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test with proxy: Failed"))); + } + } + else + { + beginInsertRows(itemModelIndex, 0, 1); + mNetworkConnectionTest->addChild(QSharedPointer::create(tr("No Proxy Found"))); + } + + if (mConnectionTest.getConnectionTestWithoutProxySuccessful()) + { + mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test without proxy: Successful"))); + } + else + { + mNetworkConnectionTest->addChild(QSharedPointer::create(tr("Connection test without proxy: Failed"))); + } + endInsertRows(); +} + + +void DiagnosisTreeModel::onAntivirusInformationChanged() +{ + auto itemModelIndex = index(7, 0); + removeChildItems(itemModelIndex, mInstalledAntivirus); + + const auto& antivirusInfos = mAntivirusDetection.getAntivirusInformations(); + if (antivirusInfos.isEmpty()) + { + beginInsertRows(itemModelIndex, 0, 0); + mInstalledAntivirus->addChild(QSharedPointer::create(tr("No Antivirus software detected."))); + } + else + { + beginInsertRows(itemModelIndex, 0, antivirusInfos.size() - 1); + for (const auto& info : antivirusInfos) + { + auto antivirusName = QSharedPointer::create(info->getDisplayName()); + mInstalledAntivirus->addChild(antivirusName); + + if (!info->getLastUpdate().isEmpty()) + { + antivirusName->addChild(QSharedPointer::create(tr("Last updated: %1").arg(info->getLastUpdate()))); + } + antivirusName->addChild(QSharedPointer::create(tr("Executable path: %1").arg(info->getExePath()))); + } + } + endInsertRows(); +} + + +void DiagnosisTreeModel::onAntivirusDetectionFailed() +{ + auto itemModelIndex = index(7, 0); + removeChildItems(itemModelIndex, mInstalledAntivirus); + + beginInsertRows(itemModelIndex, 0, 0); + mInstalledAntivirus->addChild(QSharedPointer::create(tr("Antivirus detection failed."))); + endInsertRows(); +} + + +const QString DiagnosisTreeModel::boolToString(bool pBoolean) +{ + return pBoolean ? tr("Yes") : tr("No"); +} + + +void DiagnosisTreeModel::onFirewallInformationReady() +{ + auto itemModelIndex = index(8, 0); + removeChildItems(itemModelIndex, mWindowsFirewall); + + beginInsertRows(itemModelIndex, 0, 2); + auto installedFirewalls = mFirewallDetection.getDetectedFirewalls(); + if (installedFirewalls.isEmpty()) + { +#if defined(Q_OS_WIN) + if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows8) + { + mWindowsFirewall->addChild(QSharedPointer::create(tr("Third party firewalls cannot be detected on Windows 7."))); + } + else + { +#else + { +#endif + mWindowsFirewall->addChild(QSharedPointer::create(tr("No third party firewalls detected"))); + } + } + else + { + auto thirdPartyFirewalls = QSharedPointer::create(tr("Firewalls from third party vendors")); + mWindowsFirewall->addChild(thirdPartyFirewalls); + for (const auto& firewall : installedFirewalls) + { + auto name = QSharedPointer::create(firewall->getName()); + thirdPartyFirewalls->addChild(name); + + QString enabled = boolToString(firewall->getEnabled()); + QString uptodate = boolToString(firewall->getUpToDate()); + name->addChild(QSharedPointer::create(tr("Enabled: %1").arg(enabled))); + name->addChild(QSharedPointer::create(tr("Up to date: %1").arg(uptodate))); + } + } + + auto firewallRules = QSharedPointer::create(tr("Windows firewall rules")); + mWindowsFirewall->addChild(firewallRules); + + QString firstRuleExists = boolToString(mFirewallDetection.getFirstRuleExists()); + QString firstRuleEnabled = boolToString(mFirewallDetection.getFirstRuleEnabled()); + auto outgoing = QSharedPointer::create(tr("Outgoing AusweisApp2 rule")); + firewallRules->addChild(outgoing); + outgoing->addChild(QSharedPointer::create(tr("Exists: %1").arg(firstRuleExists))); + outgoing->addChild(QSharedPointer::create(tr("Enabled: %1").arg(firstRuleEnabled))); + + QString secondRuleExists = boolToString(mFirewallDetection.getSecondRuleExists()); + QString secondRuleEnabled = boolToString(mFirewallDetection.getSecondRuleEnabled()); + auto incoming = QSharedPointer::create(tr("Incoming AusweisApp2 rule")); + firewallRules->addChild(incoming); + incoming->addChild(QSharedPointer::create(tr("Exists: %1").arg(secondRuleExists))); + incoming->addChild(QSharedPointer::create(tr("Enabled: %1").arg(secondRuleEnabled))); + + auto profiles = QSharedPointer::create(tr("Windows Firewall profiles")); + mWindowsFirewall->addChild(profiles); + + auto firewallProfiles = mFirewallDetection.getFirewallProfiles(); + for (const auto& profile : firewallProfiles) + { + auto name = QSharedPointer::create(profile->getName()); + profiles->addChild(name); + + QString enabled = boolToString(profile->getEnabled()); + name->addChild(QSharedPointer::create(tr("Enabled: %1").arg(enabled))); + } + profiles->addChild(QSharedPointer::create(tr("Warning: The current firewall status can be obscured by additional Group Policies on your system, often set by system administrators."))); + + endInsertRows(); +} + + +void DiagnosisTreeModel::onFirewallInformationFailed() +{ + auto itemModelIndex = index(8, 0); + removeChildItems(itemModelIndex, mWindowsFirewall); + + beginInsertRows(itemModelIndex, 0, 0); + mWindowsFirewall->addChild(QSharedPointer::create(tr("An error occurred while trying to gather firewall information. Please check the log for more information."))); + endInsertRows(); +} + + +QVariant DiagnosisTreeModel::data(const QModelIndex& pIndex, int pRole) const +{ + if (!pIndex.isValid()) + { + return QVariant(); + } + + if (pRole != Qt::DisplayRole) + { + return QVariant(); + } + + auto* item = static_cast(pIndex.internalPointer()); + + return item->getText(); +} + + +QModelIndex DiagnosisTreeModel::index(int pRow, int pColumn, const QModelIndex& pParent) const +{ + if (!hasIndex(pRow, pColumn, pParent)) + { + return QModelIndex(); + } + + DiagnosisItem* parentItem; + + if (pParent.isValid()) + { + parentItem = static_cast(pParent.internalPointer()); + } + else + { + parentItem = mRootItem.data(); + } + + DiagnosisItem* childItem = parentItem->getChild(pRow).data(); + if (childItem) + { + return createIndex(pRow, pColumn, childItem); + } + else + { + return QModelIndex(); + } +} + + +QModelIndex DiagnosisTreeModel::parent(const QModelIndex& pIndex) const +{ + if (!pIndex.isValid()) + { + return QModelIndex(); + } + + auto* childItem = static_cast(pIndex.internalPointer()); + if (childItem == nullptr) + { + return QModelIndex(); + } + + DiagnosisItem* parentItem = childItem->parentItem().data(); + + if (parentItem == mRootItem.data()) + { + return QModelIndex(); + } + + return createIndex(parentItem->row(), 0, parentItem); +} + + +int DiagnosisTreeModel::rowCount(const QModelIndex& pParent) const +{ + DiagnosisItem* parentItem; + if (pParent.column() > 0) + { + return 0; + } + + if (pParent.isValid()) + { + parentItem = static_cast(pParent.internalPointer()); + } + else + { + parentItem = mRootItem.data(); + } + + return parentItem->childCount(); +} + + +int DiagnosisTreeModel::columnCount(const QModelIndex& pParent) const +{ + Q_UNUSED(pParent) + return 1; +} + + +QDateTime DiagnosisTreeModel::getCreationTime() const +{ + return mContext->getTimestamp(); +} + + +QString DiagnosisTreeModel::getCreationTimeString() const +{ + return getCreationTime().toString(QStringLiteral("yyyy-MM-dd_HH-mm")); +} + + +QString DiagnosisTreeModel::getAsPlaintext() const +{ + QStringList modelPlaintext; + mRootItem->appendPlaintextContent(modelPlaintext); +#ifdef Q_OS_WIN + return modelPlaintext.join(QLatin1String("\r\n")); + +#else + return modelPlaintext.join(QLatin1String("\n")); + +#endif +} + + +QVariant DiagnosisTreeModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + Q_UNUSED(section) + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) + { + return mRootItem->getText(); + } + return QVariant(); +} diff --git a/src/core/DiagnosisTreeModel.h b/src/core/DiagnosisTreeModel.h new file mode 100644 index 0000000..5ed311b --- /dev/null +++ b/src/core/DiagnosisTreeModel.h @@ -0,0 +1,78 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "context/DiagnosisContext.h" +#include "DiagnosisAntivirusDetection.h" +#include "DiagnosisConnectionTest.h" +#include "DiagnosisFirewallDetection.h" +#include "DiagnosisItem.h" + +#include +#include +#include +#include + +class test_DiagnosisTreeModel; + +namespace governikus +{ + +class DiagnosisTreeModel + : public QAbstractItemModel +{ + Q_OBJECT + + private: + friend class ::test_DiagnosisTreeModel; + QSharedPointer mContext; + QSharedPointer mRootItem; + QSharedPointer mAppVersionItem; + QSharedPointer mOperatingSystemItem; + QSharedPointer mReaderItem; + QSharedPointer mPcScItem; + QSharedPointer mPairedDevices; + QSharedPointer mNetworkInterfaces; + QSharedPointer mNetworkConnectionTest; + QSharedPointer mInstalledAntivirus; + QSharedPointer mWindowsFirewall; + QSharedPointer mTimestampItem; + DiagnosisAntivirusDetection mAntivirusDetection; + DiagnosisFirewallDetection mFirewallDetection; + DiagnosisConnectionTest mConnectionTest; + + void initAppVersionInfo(); + void insertPcScComponentList(const QVector& pComponents, const QSharedPointer& pParentItem); + void removeChildItems(const QModelIndex& pIndex, const QSharedPointer& pParentItem); + static const QString boolToString(bool pBoolean); + + private Q_SLOTS: + void onReaderInfosChanged(); + void onPcscInfoChanged(); + void onTimestampChanged(); + void onNetworkInfoChanged(); + void onRemoteInfosChanged(); + void onAntivirusInformationChanged(); + void onAntivirusDetectionFailed(); + void onFirewallInformationReady(); + void onFirewallInformationFailed(); + void onConnectionTestDone(); + + public: + explicit DiagnosisTreeModel(const QSharedPointer& pContext); + + QVariant data(const QModelIndex& pIndex, int pRole) const override; + QModelIndex index(int pRow, int pColumn, const QModelIndex& pParent = QModelIndex()) const override; + QModelIndex parent(const QModelIndex& pIndex) const override; + int rowCount(const QModelIndex& pParent) const override; + int columnCount(const QModelIndex& pParent) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role) const override; + + QDateTime getCreationTime() const; + Q_INVOKABLE QString getCreationTimeString() const; + QString getAsPlaintext() const; +}; + +} // namespace governikus diff --git a/src/core/SelfAuthenticationData.cpp b/src/core/SelfAuthenticationData.cpp index a1955fe..1669b99 100644 --- a/src/core/SelfAuthenticationData.cpp +++ b/src/core/SelfAuthenticationData.cpp @@ -89,6 +89,7 @@ QString SelfAuthenticationData::SelfData::getValue(SelfAuthData pData) const return QStringLiteral("D"); } + //: INFO ALL_PLATFORMS The requested data is not stored on this chip's generation. return tr("This data has not been stored in this chip generation."); } @@ -128,7 +129,7 @@ bool SelfAuthenticationData::SelfData::parsePersonalData(const QJsonObject& pObj const auto& keys = pObject.keys(); for (const auto& entry : keys) { - const auto subvalue = [&pObject, &entry](const char* pValue){ + const auto subvalue = [&pObject, &entry](const char* const pValue){ return pObject.value(entry).toObject().value(QLatin1String(pValue)); }; @@ -220,38 +221,47 @@ SelfAuthenticationData::OrderedSelfData SelfAuthenticationData::SelfData::getOrd //fill layout with new data, see 18 Personalausweisgesetz (PAuswG) if (!getValue(SelfAuthData::FamilyNames).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Family name"), getValue(SelfAuthData::FamilyNames)); } if (!getValue(SelfAuthData::BirthName).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Birth name"), getValue(SelfAuthData::BirthName)); } if (!getValue(SelfAuthData::GivenNames).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Given name(s)"), getValue(SelfAuthData::GivenNames)); } if (!getValue(SelfAuthData::AcademicTitle).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Doctoral degree"), getValue(SelfAuthData::AcademicTitle)); } if (!getValue(SelfAuthData::DateOfBirth).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Date of birth"), formatDate(getValue(SelfAuthData::DateOfBirth))); } if (!getValue(SelfAuthData::PlaceOfBirth).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Place of birth"), getValue(SelfAuthData::PlaceOfBirth)); } if (!getValue(SelfAuthData::PlaceOfResidenceNoPlaceInfo).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Address"), getValue(SelfAuthData::PlaceOfResidenceNoPlaceInfo)); } if (!getValue(SelfAuthData::PlaceOfResidenceStreet).isNull()) { + //: LABEL ALL_PLATFORMS add(getValue(SelfAuthData::PlaceOfResidenceNoPlaceInfo).isNull() ? tr("Address") : QString(), getValue(SelfAuthData::PlaceOfResidenceStreet)); } if (!getValue(SelfAuthData::PlaceOfResidenceZipCode).isNull() || !getValue(SelfAuthData::PlaceOfResidenceCity).isNull()) { + //: LABEL ALL_PLATFORMS add(getValue(SelfAuthData::PlaceOfResidenceStreet).isNull() ? tr("Address") : QString(), getValue(SelfAuthData::PlaceOfResidenceZipCode) + QLatin1Char(' ') + getValue(SelfAuthData::PlaceOfResidenceCity)); } if (!getValue(SelfAuthData::PlaceOfResidenceCountry).isNull()) @@ -262,18 +272,22 @@ SelfAuthenticationData::OrderedSelfData SelfAuthenticationData::SelfData::getOrd const auto& documentType = getValue(SelfAuthData::DocumentType); if (!documentType.isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Document type"), documentType); } if (!getValue(SelfAuthData::Nationality).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Nationality"), getValue(SelfAuthData::Nationality)); } if (!getValue(SelfAuthData::ArtisticName).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Religious / artistic name"), getValue(SelfAuthData::ArtisticName)); } if (!getValue(SelfAuthData::IssuingState).isNull()) { + //: LABEL ALL_PLATFORMS add(tr("Issuing country"), getValue(SelfAuthData::IssuingState)); } @@ -286,6 +300,7 @@ SelfAuthenticationData::OrderedSelfData SelfAuthenticationData::SelfData::getOrd documentType == QLatin1String("AF") || documentType == QLatin1String("TA"))) { + //: LABEL ALL_PLATFORMS add(tr("Residence permit I"), getValue(SelfAuthData::ResidencePermitI)); } diff --git a/src/core/SelfAuthenticationData.h b/src/core/SelfAuthenticationData.h index 10cd641..10a8b6e 100644 --- a/src/core/SelfAuthenticationData.h +++ b/src/core/SelfAuthenticationData.h @@ -78,7 +78,7 @@ class SelfAuthenticationData QMap mOperationsAllowed; QMap mSelfAuthData; - SelfData(const QByteArray& pData); + explicit SelfData(const QByteArray& pData); QString getValue(SelfAuthData pData) const; OrderedSelfData getOrderedSelfInfo() const; }; @@ -86,7 +86,7 @@ class SelfAuthenticationData QSharedDataPointer d; public: - SelfAuthenticationData(const QByteArray& pData = QByteArray()); + explicit SelfAuthenticationData(const QByteArray& pData = QByteArray()); ~SelfAuthenticationData() = default; /** diff --git a/src/core/SignalHandler_bsd_linux_osx.cpp b/src/core/SignalHandler_bsd_linux_osx.cpp index 0a0c8f6..819315b 100644 --- a/src/core/SignalHandler_bsd_linux_osx.cpp +++ b/src/core/SignalHandler_bsd_linux_osx.cpp @@ -44,7 +44,10 @@ void SignalHandler::initUnix() void SignalHandler::sigHandler(int pSignal) { - ::write(cSignalSocketPair[0], &pSignal, sizeof(pSignal)); + if (::write(cSignalSocketPair[0], &pSignal, sizeof(pSignal)) != sizeof(pSignal)) + { + qCWarning(system) << "Cannot bind signal:" << pSignal; + } } diff --git a/src/core/TcToken.h b/src/core/TcToken.h index 71ffbf5..3336817 100644 --- a/src/core/TcToken.h +++ b/src/core/TcToken.h @@ -10,7 +10,6 @@ #include class test_TcToken; -class test_StateGenericSendReceive; namespace governikus { @@ -19,7 +18,6 @@ class TcToken { private: friend class ::test_TcToken; - friend class ::test_StateGenericSendReceive; bool mSchemaConform; QString mBinding; QString mPathSecurityProtocol; @@ -43,7 +41,7 @@ class TcToken QString readElementValue(QXmlStreamReader& pReader); public: - TcToken(const QByteArray& pData); + explicit TcToken(const QByteArray& pData); virtual ~TcToken(); /** diff --git a/src/core/context/AuthContext.cpp b/src/core/context/AuthContext.cpp index e089101..d3fa695 100644 --- a/src/core/context/AuthContext.cpp +++ b/src/core/context/AuthContext.cpp @@ -6,6 +6,7 @@ #include "asn1/Chat.h" #include "AppSettings.h" +#include "GeneralSettings.h" #include "paos/retrieve/DidAuthenticateEac1Parser.h" #include "SecureStorage.h" @@ -15,6 +16,8 @@ using namespace governikus; AuthContext::AuthContext(const QSharedPointer& pActivationContext) : WorkflowContext() + , mProgressValue(0) + , mProgressMessage() , mTcTokenNotFound(true) , mErrorReportedToServer(false) , mSkipRedirect(false) @@ -48,6 +51,35 @@ AuthContext::AuthContext(const QSharedPointer& pActivationCon , mCvcChainBuilderTest() , mSslSession() { + const auto& generalSettings = Env::getSingleton()->getGeneralSettings(); + connect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &AuthContext::fireProgressChanged); +} + + +void AuthContext::setProgress(int pValue, const QString& pMessage) +{ + if (pValue != mProgressValue || pMessage != mProgressMessage) + { + mProgressValue = pValue; + mProgressMessage = pMessage; + + const auto& connection = getCardConnection(); + if (connection) + { + // Card interaction makes up about 80 % of the entire workflow's duration, + // "correct" the relative progress value accordingly. + if (pMessage.isEmpty()) + { + connection->setProgressMessage(QStringLiteral("%1 %").arg(1.25 * pValue)); + } + else + { + connection->setProgressMessage(QStringLiteral("%1\n%2 %").arg(pMessage).arg(1.25 * pValue)); + } + } + + Q_EMIT fireProgressChanged(); + } } @@ -292,9 +324,9 @@ void AuthContext::initCvcChainBuilder(const QVectorgetCvCertificates(); cvcs += pAdditionalCertificates; - const SecureStorage& secureStorage = SecureStorage::getInstance(); - mCvcChainBuilderProd = CVCertificateChainBuilder(cvcs + CVCertificate::fromHex(secureStorage.getCVRootCertificates(true)), true); - mCvcChainBuilderTest = CVCertificateChainBuilder(cvcs + CVCertificate::fromHex(secureStorage.getCVRootCertificates(false)), false); + const auto* secureStorage = Env::getSingleton(); + mCvcChainBuilderProd = CVCertificateChainBuilder(cvcs + CVCertificate::fromHex(secureStorage->getCVRootCertificates(true)), true); + mCvcChainBuilderTest = CVCertificateChainBuilder(cvcs + CVCertificate::fromHex(secureStorage->getCVRootCertificates(false)), false); } diff --git a/src/core/context/AuthContext.h b/src/core/context/AuthContext.h index 1379403..d06631e 100644 --- a/src/core/context/AuthContext.h +++ b/src/core/context/AuthContext.h @@ -37,6 +37,8 @@ class test_StateRedirectBrowser; class test_ChatModel; +class test_StatePreVerification; +class test_StateCertificateDescriptionCheck; namespace governikus { @@ -53,6 +55,8 @@ class AuthContext friend class ::test_StateCertificateDescriptionCheck; friend class ::test_ChatModel; + int mProgressValue; + QString mProgressMessage; bool mTcTokenNotFound; bool mErrorReportedToServer; bool mSkipRedirect; @@ -90,12 +94,13 @@ class AuthContext bool removeForbiddenAccessRights(QSet& pSet); Q_SIGNALS: + void fireProgressChanged(); void fireDidAuthenticateEac1Changed(); void fireAuthenticationDataChanged(); void fireEffectiveChatChanged(); public: - AuthContext(const QSharedPointer& pActivationContext); + explicit AuthContext(const QSharedPointer& pActivationContext); bool isErrorReportedToServer() const { @@ -109,6 +114,21 @@ class AuthContext } + int getProgressValue() const + { + return mProgressValue; + } + + + const QString getProgressMessage() const + { + return mProgressMessage; + } + + + void setProgress(int pValue, const QString& pMessage); + + bool isTcTokenNotFound() const { return mTcTokenNotFound; diff --git a/src/core/context/ChangePinContext.cpp b/src/core/context/ChangePinContext.cpp index acae9aa..9a32bc3 100644 --- a/src/core/context/ChangePinContext.cpp +++ b/src/core/context/ChangePinContext.cpp @@ -16,6 +16,17 @@ ChangePinContext::ChangePinContext(bool pRequestTransportPin) } +ChangePinContext::~ChangePinContext() +{ +#ifndef QT_NO_DEBUG + if (!QCoreApplication::applicationName().startsWith(QLatin1String("Test"))) + { + Q_ASSERT(getNewPin().isEmpty() && "PACE passwords must be cleared as soon as possible."); + } +#endif +} + + const QString& ChangePinContext::getNewPin() const { return mNewPin; diff --git a/src/core/context/ChangePinContext.h b/src/core/context/ChangePinContext.h index 583d7c0..405a225 100644 --- a/src/core/context/ChangePinContext.h +++ b/src/core/context/ChangePinContext.h @@ -22,6 +22,7 @@ class ChangePinContext public: explicit ChangePinContext(bool pRequestTransportPin = false); + virtual ~ChangePinContext() override; const QString& getNewPin() const; void setNewPin(const QString& pNewPin); diff --git a/src/core/context/RemoteServiceContext.cpp b/src/core/context/RemoteServiceContext.cpp index 02efa69..27b2bf4 100644 --- a/src/core/context/RemoteServiceContext.cpp +++ b/src/core/context/RemoteServiceContext.cpp @@ -9,6 +9,13 @@ using namespace governikus; + +void RemoteServiceContext::onMessageHandlerAdded(QSharedPointer pHandler) +{ + connect(pHandler.data(), &ServerMessageHandler::fireCardConnectionEstablished, this, &RemoteServiceContext::fireCardConnectionEstablished); +} + + RemoteServiceContext::RemoteServiceContext() : mRemoteServer(Env::create()) , mNewPin() @@ -17,6 +24,18 @@ RemoteServiceContext::RemoteServiceContext() , mModifyPinMessage() , mModifyPinMessageResponseApdu() { + connect(mRemoteServer.data(), &RemoteServer::fireMessageHandlerAdded, this, &RemoteServiceContext::onMessageHandlerAdded); +} + + +RemoteServiceContext::~RemoteServiceContext() +{ +#ifndef QT_NO_DEBUG + if (!QCoreApplication::applicationName().startsWith(QLatin1String("Test"))) + { + Q_ASSERT(getNewPin().isEmpty() && "PACE passwords must be cleared as soon as possible."); + } +#endif } @@ -61,7 +80,7 @@ const QSharedPointer& RemoteServiceContext::getEs } -void RemoteServiceContext::setEstablishPaceChannelOutput(EstablishPaceChannelOutput pEstablishPaceChannelOutput) +void RemoteServiceContext::setEstablishPaceChannelOutput(const EstablishPaceChannelOutput& pEstablishPaceChannelOutput) { mEstablishPaceChannelOutput = pEstablishPaceChannelOutput; } diff --git a/src/core/context/RemoteServiceContext.h b/src/core/context/RemoteServiceContext.h index 7118a75..22e7d3d 100644 --- a/src/core/context/RemoteServiceContext.h +++ b/src/core/context/RemoteServiceContext.h @@ -33,12 +33,17 @@ class RemoteServiceContext QSharedPointer mModifyPinMessage; ResponseApdu mModifyPinMessageResponseApdu; + public Q_SLOTS: + void onMessageHandlerAdded(QSharedPointer pHandler); + Q_SIGNALS: + void fireCardConnectionEstablished(const QSharedPointer& pConnection); void fireCancelPasswordRequest(); void fireEstablishPaceChannelMessageUpdated(const QSharedPointer& pMessage); public: RemoteServiceContext(); + virtual ~RemoteServiceContext() override; const QSharedPointer& getRemoteServer() const; bool isRunning() const; @@ -49,7 +54,7 @@ class RemoteServiceContext void setEstablishPaceChannelMessage(const QSharedPointer& pMessage); const QSharedPointer& getEstablishPaceChannelMessage() const; - void setEstablishPaceChannelOutput(EstablishPaceChannelOutput pEstablishPaceChannelOutput); + void setEstablishPaceChannelOutput(const EstablishPaceChannelOutput& pEstablishPaceChannelOutput); const EstablishPaceChannelOutput& getEstablishPaceChannelOutput() const; void setModifyPinMessage(const QSharedPointer& pMessage); diff --git a/src/core/context/WorkflowContext.cpp b/src/core/context/WorkflowContext.cpp index d0cf9e0..2a00700 100644 --- a/src/core/context/WorkflowContext.cpp +++ b/src/core/context/WorkflowContext.cpp @@ -21,7 +21,7 @@ WorkflowContext::WorkflowContext() : QObject() , mStateApproved(false) , mWorkflowKilled(false) - , mCurrentState() + , mCurrentState(QLatin1String("Initial")) , mReaderPlugInTypes() , mReaderName() , mCardConnection() @@ -43,11 +43,25 @@ WorkflowContext::WorkflowContext() , mWorkflowCancelled(false) , mCanAllowedMode(false) , mNextWorkflowPending(false) + , mCurrentReaderHasEidCardButInsufficientApduLength(false) { connect(this, &WorkflowContext::fireCancelWorkflow, this, &WorkflowContext::onWorkflowCancelled); } +WorkflowContext::~WorkflowContext() +{ +#ifndef QT_NO_DEBUG + if (!QCoreApplication::applicationName().startsWith(QLatin1String("Test"))) + { + Q_ASSERT(getPin().isEmpty() && "PACE passwords must be cleared as soon as possible."); + Q_ASSERT(getCan().isEmpty() && "PACE passwords must be cleared as soon as possible."); + Q_ASSERT(getPuk().isEmpty() && "PACE passwords must be cleared as soon as possible."); + } +#endif +} + + bool WorkflowContext::isErrorReportedToUser() const { return mErrorReportedToUser || mWorkflowKilled; @@ -283,6 +297,7 @@ PacePasswordId WorkflowContext::getEstablishPaceChannelType() const void WorkflowContext::setEstablishPaceChannelType(PacePasswordId pType) { mEstablishPaceChannelType = pType; + Q_EMIT firePasswordTypeChanged(); } @@ -315,11 +330,8 @@ CardReturnCode WorkflowContext::getLastPaceResult() const void WorkflowContext::setLastPaceResult(CardReturnCode pLastPaceResult) { mPaceResultReportedToUser = false; - if (mLastPaceResult != pLastPaceResult) - { - mLastPaceResult = pLastPaceResult; - Q_EMIT fireLastPaceResultChanged(); - } + mLastPaceResult = pLastPaceResult; + Q_EMIT firePaceResultUpdated(); } @@ -424,3 +436,19 @@ void WorkflowContext::setNextWorkflowPending(bool pNextWorkflowPending) Q_EMIT fireNextWorkflowPending(); } } + + +bool WorkflowContext::currentReaderHasEidCardButInsufficientApduLength() const +{ + return mCurrentReaderHasEidCardButInsufficientApduLength; +} + + +void WorkflowContext::setCurrentReaderHasEidCardButInsufficientApduLength(bool pState) +{ + if (pState != mCurrentReaderHasEidCardButInsufficientApduLength) + { + mCurrentReaderHasEidCardButInsufficientApduLength = pState; + Q_EMIT fireReaderInfoChanged(); + } +} diff --git a/src/core/context/WorkflowContext.h b/src/core/context/WorkflowContext.h index 52d39ca..3cee4b5 100644 --- a/src/core/context/WorkflowContext.h +++ b/src/core/context/WorkflowContext.h @@ -15,8 +15,6 @@ #include #include -class test_WorkflowContext; - namespace governikus { @@ -26,7 +24,6 @@ class WorkflowContext Q_OBJECT private: - friend class ::test_WorkflowContext; bool mStateApproved; bool mWorkflowKilled; QString mCurrentState; @@ -51,6 +48,7 @@ class WorkflowContext bool mWorkflowCancelled; bool mCanAllowedMode; bool mNextWorkflowPending; + bool mCurrentReaderHasEidCardButInsufficientApduLength; private Q_SLOTS: void onWorkflowCancelled(); @@ -59,22 +57,24 @@ class WorkflowContext void fireStateApprovedChanged(); void fireStateChanged(const QString& pNewState); void fireReaderPlugInTypesChanged(); + void fireReaderInfoChanged(); void fireReaderNameChanged(); void fireCardConnectionChanged(); void fireCanChanged(); void firePinChanged(); void firePukChanged(); - void fireLastPaceResultChanged(); + void firePaceResultUpdated(); void fireResultChanged(); void fireCanAllowedModeChanged(); + void firePasswordTypeChanged(); void fireCancelWorkflow(); - void fireAbortCardSelection(); void fireNextWorkflowPending(); public: WorkflowContext(); + virtual ~WorkflowContext(); bool isErrorReportedToUser() const; void setErrorReportedToUser(bool pErrorReportedToUser = true); @@ -149,6 +149,9 @@ class WorkflowContext bool hasNextWorkflowPending() const; void setNextWorkflowPending(bool pNextWorkflowPending); + + bool currentReaderHasEidCardButInsufficientApduLength() const; + void setCurrentReaderHasEidCardButInsufficientApduLength(bool pState); }; } // namespace governikus diff --git a/src/core/controller/AppController.cpp b/src/core/controller/AppController.cpp index e84ba88..76d4c39 100644 --- a/src/core/controller/AppController.cpp +++ b/src/core/controller/AppController.cpp @@ -94,6 +94,7 @@ AppController::AppController() , mActiveController() , mShutdownRunning(false) , mUiDomination(nullptr) + , mRestartApplication(false) { setObjectName(QStringLiteral("AppController")); @@ -101,8 +102,8 @@ AppController::AppController() QCoreApplication::instance()->installNativeEventFilter(this); #endif - connect(&Env::getSingleton()->getGeneralSettings(), &GeneralSettings::fireSettingsChanged, this, &AppController::onSettingsChanged, Qt::DirectConnection); - onSettingsChanged(); + connect(&Env::getSingleton()->getGeneralSettings(), &GeneralSettings::fireLanguageChanged, this, &AppController::onLanguageChanged, Qt::DirectConnection); + onLanguageChanged(); ResourceLoader::getInstance().init(); @@ -185,7 +186,7 @@ bool AppController::start() connect(this, &AppController::fireStarted, this, [this] { if (cShowUi) { - Q_EMIT fireShowUi(UiModule::DEFAULT); + Q_EMIT fireShowUi(UiModule::CURRENT); } }, Qt::QueuedConnection); @@ -195,6 +196,12 @@ bool AppController::start() } +bool AppController::shouldApplicationRestart() const +{ + return mRestartApplication; +} + + void AppController::onWorkflowFinished() { qDebug() << mActiveController->metaObject()->className() << "done"; @@ -285,7 +292,7 @@ void AppController::onChangePinRequested() void AppController::onSelfAuthenticationRequested() { - qDebug() << "Self authentication requested"; + qDebug() << "Self-authentication requested"; if (canStartNewAction()) { const auto& context = QSharedPointer::create(); @@ -304,11 +311,11 @@ void AppController::onAuthenticationRequest(const QSharedPointer activeContext = mActiveController->getContext(); Q_ASSERT(!activeContext.isNull()); - if (activeContext->isWorkflowFinished() && activeContext->getStatus().isNoError()) + if (activeContext->isWorkflowFinished()) { qDebug() << "Auto-approving the current state"; if (mWaitingRequest.isNull()) @@ -341,7 +348,7 @@ void AppController::onRemoteServiceRequested() } -void AppController::onSettingsChanged() +void AppController::onLanguageChanged() { LanguageLoader& languageLoader = LanguageLoader::getInstance(); const QLocale& newLocale = QLocale(Env::getSingleton()->getGeneralSettings().getLanguage()); @@ -410,7 +417,7 @@ void AppController::completeShutdown() handler->stop(); } - QTimer* timer = new QTimer(); + auto* timer = new QTimer(); static const int TIMER_INTERVAL = 50; timer->setInterval(TIMER_INTERVAL); connect(timer, &QTimer::timeout, this, [ = ](){ @@ -448,13 +455,13 @@ void AppController::onUILoaderShutdownComplete() void AppController::onUiDominationRequested(const UIPlugIn* pUi, const QString& pInformation) { bool accepted = false; - if (!mUiDomination && mCurrentAction == Action::NONE) + if (mUiDomination == nullptr && mCurrentAction == Action::NONE) { mUiDomination = pUi; accepted = true; } - qDebug() << pUi->metaObject()->className() << "requested ui domination:" << pInformation << "|" << accepted; + qDebug() << pUi->metaObject()->className() << "requested ui domination:" << pInformation << '|' << accepted; Q_EMIT fireUiDomination(pUi, pInformation, accepted); } @@ -469,6 +476,13 @@ void AppController::onUiDominationRelease() } +void AppController::onRestartApplicationRequested() +{ + mRestartApplication = true; + doShutdown(); +} + + void AppController::onUiPlugin(UIPlugIn* pPlugin) { qDebug() << "Register UI:" << pPlugin->metaObject()->className(); @@ -491,6 +505,7 @@ void AppController::onUiPlugin(UIPlugIn* pPlugin) connect(pPlugin, &UIPlugIn::fireChangePinRequest, this, &AppController::onChangePinRequested, Qt::QueuedConnection); connect(pPlugin, &UIPlugIn::fireSelfAuthenticationRequested, this, &AppController::onSelfAuthenticationRequested, Qt::QueuedConnection); connect(pPlugin, &UIPlugIn::fireRemoteServiceRequested, this, &AppController::onRemoteServiceRequested, Qt::QueuedConnection); + connect(pPlugin, &UIPlugIn::fireRestartApplicationRequested, this, &AppController::onRestartApplicationRequested, Qt::QueuedConnection); connect(pPlugin, &UIPlugIn::fireQuitApplicationRequest, this, &AppController::doShutdown); connect(pPlugin, &UIPlugIn::fireCloseReminderFinished, this, &AppController::onCloseReminderFinished); connect(pPlugin, &UIPlugIn::fireUiDominationRequest, this, &AppController::onUiDominationRequested); @@ -527,10 +542,10 @@ bool AppController::startNewWorkflow(Action pAction, const QSharedPointer #include +class test_AppController; namespace governikus { @@ -36,6 +37,7 @@ class AppController final Q_OBJECT private: + friend class ::test_AppController; Q_DISABLE_COPY(AppController) friend class SignalHandler; @@ -47,6 +49,7 @@ class AppController final QScopedPointer mActiveController; bool mShutdownRunning; const UIPlugIn* mUiDomination; + bool mRestartApplication; bool canStartNewAction(); void completeShutdown(); @@ -60,6 +63,8 @@ class AppController final bool start(); + bool shouldApplicationRestart() const; + Q_SIGNALS: void fireStarted(); void fireShutdown(); @@ -85,10 +90,11 @@ class AppController final void onSelfAuthenticationRequested(); void onAuthenticationRequest(const QSharedPointer& pActivationContext); void onRemoteServiceRequested(); - void onSettingsChanged(); + void onLanguageChanged(); void onUILoaderShutdownComplete(); void onUiDominationRequested(const UIPlugIn* pUi, const QString& pInformation); void onUiDominationRelease(); + void onRestartApplicationRequested(); private: template bool startNewWorkflow(Action pAction, const QSharedPointer& pContext); diff --git a/src/core/controller/AuthController.cpp b/src/core/controller/AuthController.cpp index b5bb4c4..a63a928 100644 --- a/src/core/controller/AuthController.cpp +++ b/src/core/controller/AuthController.cpp @@ -5,30 +5,15 @@ #include "controller/AuthController.h" #include "context/AuthContext.h" -#include "states/CompositeStatePace.h" -#include "states/CompositeStateProcessCvcsAndSetRights.h" +#include "states/CompositeStateTrustedChannel.h" #include "states/FinalState.h" #include "states/StateActivateStoreFeedbackDialog.h" #include "states/StateCheckRefreshAddress.h" -#include "states/StateCleanUpReaderManager.h" -#include "states/StateClearPacePasswords.h" -#include "states/StateDidAuthenticateEac1.h" -#include "states/StateDidAuthenticateEac2.h" -#include "states/StateDidList.h" -#include "states/StateEACAdditionalInputType.h" -#include "states/StateGenericSendReceive.h" -#include "states/StateGetTcToken.h" -#include "states/StateInitializeFramework.h" #include "states/StateParseTcTokenUrl.h" -#include "states/StateProcessCertificatesFromEac2.h" #include "states/StateProcessing.h" #include "states/StateRedirectBrowser.h" #include "states/StateSelectPasswordId.h" #include "states/StateSendWhitelistSurvey.h" -#include "states/StateStartPaos.h" -#include "states/StateStartPaosResponse.h" -#include "states/StateTransmit.h" -#include "states/StateUpdateRetryCounter.h" #include "states/StateWriteHistory.h" #include @@ -44,128 +29,23 @@ AuthController::AuthController(QSharedPointer pContext) auto sProcessing = addState(); mStateMachine.setInitialState(sProcessing); auto sParseTcTokenUrl = addState(); - auto sGetTcToken = addState(); - auto sStartPaos = addState(); - auto sSendStartPaos = addState(); - auto sInitializeFramework = addState(); - auto sSendInitializeFrameworkResponse = addState(); - auto sDidList = addState(); - auto sSendDidListResponse = addState(); - auto sProcessCvcsAndSetRights = new CompositeStateProcessCvcsAndSetRights(pContext); - mStateMachine.addState(sProcessCvcsAndSetRights); - auto sStatePace = new CompositeStatePace(pContext); - mStateMachine.addState(sStatePace); - auto sClearPacePasswords = addState(); - auto sDidAuthenticateEac1 = addState(); - auto sSendDidAuthenticateResponseEac1 = addState(); - auto sEacAdditionalInputType = addState(); - auto sSendDidAuthenticatResponseEacAdditionalInput = addState(); - auto sProcessCertificatesFromEac2 = addState(); - auto sDidAuthenticateEac2 = addState(); - auto sSendDidAuthenticateResponseEac2 = addState(); - auto sTransmit = addState(); - auto sSendTransmitResponse = addState(); - auto sSendDisconnectResponse = addState(); - auto sStartPaosResponse = addState(); + auto sTrustedChannel = new CompositeStateTrustedChannel(pContext); + mStateMachine.addState(sTrustedChannel); auto sCheckRefreshAddress = addState(); auto sActivateStoreFeedbackDialog = addState(); auto sWriteHistory = addState(); auto sRedirectBrowser = addState(); - auto sUpdateRetryCounterFinal = addState(); - auto sCleanUpReaderManager = addState(); auto sSendWhitelistSurvey = addState(); auto sFinal = addState(); sProcessing->addTransition(sProcessing, &AbstractState::fireContinue, sParseTcTokenUrl); - sProcessing->addTransition(sProcessing, &AbstractState::fireAbort, sCleanUpReaderManager); + sProcessing->addTransition(sProcessing, &AbstractState::fireAbort, sCheckRefreshAddress); - sParseTcTokenUrl->addTransition(sParseTcTokenUrl, &AbstractState::fireContinue, sGetTcToken); - sParseTcTokenUrl->addTransition(sParseTcTokenUrl, &AbstractState::fireAbort, sCleanUpReaderManager); + sParseTcTokenUrl->addTransition(sParseTcTokenUrl, &AbstractState::fireContinue, sTrustedChannel); + sParseTcTokenUrl->addTransition(sParseTcTokenUrl, &AbstractState::fireAbort, sCheckRefreshAddress); - sGetTcToken->addTransition(sGetTcToken, &AbstractState::fireContinue, sStartPaos); - sGetTcToken->addTransition(sGetTcToken, &AbstractState::fireAbort, sCleanUpReaderManager); - - sStartPaos->addTransition(sStartPaos, &AbstractState::fireContinue, sSendStartPaos); - sStartPaos->addTransition(sStartPaos, &AbstractState::fireAbort, sCleanUpReaderManager); - - sSendStartPaos->addTransition(sSendStartPaos, &AbstractState::fireContinue, sInitializeFramework); - sSendStartPaos->addTransition(sSendStartPaos, &AbstractState::fireAbort, sCleanUpReaderManager); - sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedDidList, sDidList); - sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedExtractCvcsFromEac1InputType, sProcessCvcsAndSetRights); - sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedStartPaosResponse, sStartPaosResponse); - - sInitializeFramework->addTransition(sInitializeFramework, &AbstractState::fireContinue, sSendInitializeFrameworkResponse); - sInitializeFramework->addTransition(sInitializeFramework, &AbstractState::fireAbort, sSendInitializeFrameworkResponse); - - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &AbstractState::fireContinue, sDidList); - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &AbstractState::fireAbort, sCleanUpReaderManager); - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &StateSendInitializeFrameworkResponse::fireReceivedExtractCvcsFromEac1InputType, sProcessCvcsAndSetRights); - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &StateSendInitializeFrameworkResponse::fireReceivedStartPaosResponse, sStartPaosResponse); - - sDidList->addTransition(sDidList, &AbstractState::fireContinue, sSendDidListResponse); - sDidList->addTransition(sDidList, &AbstractState::fireAbort, sSendDidListResponse); - - sSendDidListResponse->addTransition(sSendDidListResponse, &AbstractState::fireContinue, sProcessCvcsAndSetRights); - sSendDidListResponse->addTransition(sSendDidListResponse, &AbstractState::fireAbort, sCleanUpReaderManager); - sSendDidListResponse->addTransition(sSendDidListResponse, &StateSendDIDListResponse::fireReceivedDisconnect, sSendDisconnectResponse); - sSendDidListResponse->addTransition(sSendDidListResponse, &StateSendDIDListResponse::fireReceivedStartPaosResponse, sStartPaosResponse); - - sProcessCvcsAndSetRights->addTransition(sProcessCvcsAndSetRights, &CompositeStateProcessCvcsAndSetRights::fireContinue, sStatePace); - sProcessCvcsAndSetRights->addTransition(sProcessCvcsAndSetRights, &CompositeStateProcessCvcsAndSetRights::fireAbort, sSendDidAuthenticateResponseEac1); - - sStatePace->addTransition(sStatePace, &CompositeStatePace::firePaceChannelEstablished, sClearPacePasswords); - sStatePace->addTransition(sStatePace, &CompositeStatePace::firePacePukEstablished, sStatePace); - sStatePace->addTransition(sStatePace, &CompositeStatePace::fireAbort, sSendDidAuthenticateResponseEac1); - - sClearPacePasswords->addTransition(sClearPacePasswords, &AbstractState::fireContinue, sDidAuthenticateEac1); - sClearPacePasswords->addTransition(sClearPacePasswords, &AbstractState::fireAbort, sDidAuthenticateEac1); - - sDidAuthenticateEac1->addTransition(sDidAuthenticateEac1, &AbstractState::fireContinue, sSendDidAuthenticateResponseEac1); - sDidAuthenticateEac1->addTransition(sDidAuthenticateEac1, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac1); - - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &AbstractState::fireContinue, sEacAdditionalInputType); - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &StateSendDIDAuthenticateResponseEAC1::fireReceivedDisconnect, sSendDisconnectResponse); - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &StateSendDIDAuthenticateResponseEAC1::fireReceivedStartPaosResponse, sStartPaosResponse); - - sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &AbstractState::fireContinue, sProcessCertificatesFromEac2); - sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &AbstractState::fireAbort, sSendDidAuthenticatResponseEacAdditionalInput); - sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &StateEACAdditionalInputType::fireSendDidAuthenticatResponse, sSendDidAuthenticatResponseEacAdditionalInput); - - sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &AbstractState::fireContinue, sProcessCertificatesFromEac2); - sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &StateSendDIDAuthenticateResponseEACAdditionalInputType::fireReceivedStartPaosResponse, sStartPaosResponse); - - sProcessCertificatesFromEac2->addTransition(sProcessCertificatesFromEac2, &AbstractState::fireContinue, sDidAuthenticateEac2); - sProcessCertificatesFromEac2->addTransition(sProcessCertificatesFromEac2, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac2); - - sDidAuthenticateEac2->addTransition(sDidAuthenticateEac2, &AbstractState::fireContinue, sSendDidAuthenticateResponseEac2); - sDidAuthenticateEac2->addTransition(sDidAuthenticateEac2, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac2); - - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &AbstractState::fireContinue, sTransmit); - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &StateSendDIDAuthenticateResponseEAC2::fireReceivedDisconnect, sSendDisconnectResponse); - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &StateSendDIDAuthenticateResponseEAC2::fireReceivedStartPaosResponse, sStartPaosResponse); - - sTransmit->addTransition(sTransmit, &AbstractState::fireContinue, sSendTransmitResponse); - sTransmit->addTransition(sTransmit, &AbstractState::fireAbort, sSendTransmitResponse); - - sSendTransmitResponse->addTransition(sSendTransmitResponse, &AbstractState::fireContinue, sTransmit); - sSendTransmitResponse->addTransition(sSendTransmitResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendTransmitResponse->addTransition(sSendTransmitResponse, &StateSendTransmitResponse::fireReceivedDisconnect, sSendDisconnectResponse); - sSendTransmitResponse->addTransition(sSendTransmitResponse, &StateSendTransmitResponse::fireReceivedStartPaosResponse, sStartPaosResponse); - - sSendDisconnectResponse->addTransition(sSendDisconnectResponse, &AbstractState::fireContinue, sStartPaosResponse); - sSendDisconnectResponse->addTransition(sSendDisconnectResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - - sStartPaosResponse->addTransition(sStartPaosResponse, &AbstractState::fireContinue, sUpdateRetryCounterFinal); - sStartPaosResponse->addTransition(sStartPaosResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - - sUpdateRetryCounterFinal->addTransition(sUpdateRetryCounterFinal, &AbstractState::fireContinue, sCleanUpReaderManager); - sUpdateRetryCounterFinal->addTransition(sUpdateRetryCounterFinal, &AbstractState::fireAbort, sCleanUpReaderManager); - - sCleanUpReaderManager->addTransition(sCleanUpReaderManager, &AbstractState::fireContinue, sCheckRefreshAddress); - sCleanUpReaderManager->addTransition(sCleanUpReaderManager, &AbstractState::fireAbort, sCheckRefreshAddress); + sTrustedChannel->addTransition(sTrustedChannel, &CompositeStateTrustedChannel::fireContinue, sCheckRefreshAddress); + sTrustedChannel->addTransition(sTrustedChannel, &CompositeStateTrustedChannel::fireAbort, sCheckRefreshAddress); sCheckRefreshAddress->addTransition(sCheckRefreshAddress, &AbstractState::fireContinue, sActivateStoreFeedbackDialog); sCheckRefreshAddress->addTransition(sCheckRefreshAddress, &AbstractState::fireAbort, sRedirectBrowser); diff --git a/src/core/controller/AuthController.h b/src/core/controller/AuthController.h index fc430dd..fb2025d 100644 --- a/src/core/controller/AuthController.h +++ b/src/core/controller/AuthController.h @@ -19,7 +19,7 @@ class AuthController Q_OBJECT public: - AuthController(QSharedPointer pContext); + explicit AuthController(QSharedPointer pContext); virtual ~AuthController() = default; }; diff --git a/src/core/controller/ChangePinController.cpp b/src/core/controller/ChangePinController.cpp index 9c767b4..49a84fb 100644 --- a/src/core/controller/ChangePinController.cpp +++ b/src/core/controller/ChangePinController.cpp @@ -39,7 +39,7 @@ ChangePinController::ChangePinController(QSharedPointer pConte mStateMachine.setInitialState(sStatePace); sStatePace->addTransition(sStatePace, &CompositeStatePace::firePaceChannelEstablished, sPrepareChangePin); - sStatePace->addTransition(sStatePace, &CompositeStatePace::firePacePukEstablished, sClearPacePasswords); + sStatePace->addTransition(sStatePace, &CompositeStatePace::firePacePukEstablished, sStatePace); sStatePace->addTransition(sStatePace, &CompositeStatePace::fireAbort, sClearPacePasswords); sPrepareChangePin->addTransition(sPrepareChangePin, &StatePrepareChangePin::fireContinue, sChangePin); diff --git a/src/core/controller/ChangePinController.h b/src/core/controller/ChangePinController.h index 39f6f92..d0950b1 100644 --- a/src/core/controller/ChangePinController.h +++ b/src/core/controller/ChangePinController.h @@ -20,7 +20,7 @@ class ChangePinController Q_OBJECT public: - ChangePinController(QSharedPointer pContext); + explicit ChangePinController(QSharedPointer pContext); virtual ~ChangePinController(); }; diff --git a/src/core/controller/DiagnosisController.cpp b/src/core/controller/DiagnosisController.cpp index 65b2989..e74cbb5 100644 --- a/src/core/controller/DiagnosisController.cpp +++ b/src/core/controller/DiagnosisController.cpp @@ -24,7 +24,7 @@ DiagnosisController::DiagnosisController(const QSharedPointer& connect(&mWatcherPcscInfo, &QFutureWatcher::finished, this, &DiagnosisController::onPcscInfoRetrieved); const auto& readerManager = Env::getSingleton(); - connect(readerManager, &ReaderManager::fireReaderEvent, this, &DiagnosisController::onFireReaderEvent); + connect(readerManager, &ReaderManager::fireReaderEvent, this, &DiagnosisController::onReaderEvent); } @@ -46,7 +46,7 @@ void DiagnosisController::run() if (!readerManager->isScanRunning()) { qCDebug(diagnosis) << "Scan not running, starting scan ourself and stop it afterwards."; - readerManager->startScanAll(true); + readerManager->startScanAll(false); mScanHasToBeStopped = true; } @@ -59,16 +59,7 @@ void DiagnosisController::onPcscInfoRetrieved() { auto info = mWatcherPcscInfo.future().result(); mContext->setPcscInfo(info.mPcscVersion, info.mPcscComponents, info.mPcscDrivers); - checkDone(); -} - - -void DiagnosisController::checkDone() -{ - if (mWatcherPcscInfo.isFinished()) - { - onFireReaderEvent(); - } + onReaderEvent(); } @@ -113,7 +104,7 @@ DiagnosisController::PcscInfo DiagnosisController::retrievePcscInfo() } -void DiagnosisController::onFireReaderEvent() +void DiagnosisController::onReaderEvent() { mContext->setReaderInfos(Env::getSingleton()->getReaderInfos()); mContext->setTimestamp(QDateTime::currentDateTime()); diff --git a/src/core/controller/DiagnosisController.h b/src/core/controller/DiagnosisController.h index be5f1ab..80c056f 100644 --- a/src/core/controller/DiagnosisController.h +++ b/src/core/controller/DiagnosisController.h @@ -32,8 +32,6 @@ class DiagnosisController QFutureWatcher mWatcherPcscInfo; bool mScanHasToBeStopped; - void checkDone(); - void collectInterfaceInformation(); static PcscInfo retrievePcscInfo(); @@ -48,7 +46,7 @@ class DiagnosisController private Q_SLOTS: void onPcscInfoRetrieved(); - void onFireReaderEvent(); + void onReaderEvent(); }; diff --git a/src/core/controller/DiagnosisController_generic.cpp b/src/core/controller/DiagnosisController_generic.cpp index 900f951..14ae371 100644 --- a/src/core/controller/DiagnosisController_generic.cpp +++ b/src/core/controller/DiagnosisController_generic.cpp @@ -14,6 +14,6 @@ using namespace governikus; void DiagnosisController::getPcscInfo(QVector& pComponents, QVector& pDrivers) { - Q_UNUSED(pComponents); - Q_UNUSED(pDrivers); + Q_UNUSED(pComponents) + Q_UNUSED(pDrivers) } diff --git a/src/core/controller/DiagnosisController_win.cpp b/src/core/controller/DiagnosisController_win.cpp index f44296f..d702361 100644 --- a/src/core/controller/DiagnosisController_win.cpp +++ b/src/core/controller/DiagnosisController_win.cpp @@ -18,7 +18,7 @@ using namespace governikus; #ifndef Q_OS_WINRT static QString getWindowsDirectoryPath() { - UINT length = GetSystemWindowsDirectory(nullptr, 0); + const auto length = static_cast(GetSystemWindowsDirectory(nullptr, 0)); if (length > 0) { QVector path(length + 1); @@ -49,7 +49,7 @@ static QString toAbsoluteWindowsDirectoryPath(const QString& pPath) } -static QString getWindowsFileVersionString(QByteArray& pVersionData, const char* pInfoName, int pLanguage, int pCodePage) +static QString getWindowsFileVersionString(QByteArray& pVersionData, const char* const pInfoName, int pLanguage, int pCodePage) { QString key = QString().sprintf("\\StringFileInfo\\%04x%04x\\%s", pLanguage, pCodePage, pInfoName); @@ -68,7 +68,7 @@ static void addWindowsComponentInfo(QVector& pC { std::wstring fileName = pFileName.toStdWString(); - DWORD infoSize = GetFileVersionInfoSize(fileName.data(), nullptr); + const auto infoSize = static_cast(GetFileVersionInfoSize(fileName.data(), nullptr)); if (infoSize == 0) { return; @@ -193,7 +193,7 @@ static QString getWindowsServiceDriverFileName(const QString& pServiceName) QueryServiceConfig(service, nullptr, 0, &configSize); if (configSize > 0) { - QByteArray serviceConfigBuffer(configSize, 0); + QByteArray serviceConfigBuffer(static_cast(configSize), 0); QUERY_SERVICE_CONFIG* serviceConfig = reinterpret_cast(serviceConfigBuffer.data()); if (QueryServiceConfig(service, serviceConfig, configSize, &configSize)) { diff --git a/src/core/controller/RemoteServiceController.h b/src/core/controller/RemoteServiceController.h index 5242e09..8560626 100644 --- a/src/core/controller/RemoteServiceController.h +++ b/src/core/controller/RemoteServiceController.h @@ -19,7 +19,7 @@ class RemoteServiceController Q_OBJECT public: - RemoteServiceController(QSharedPointer pContext); + explicit RemoteServiceController(QSharedPointer pContext); virtual ~RemoteServiceController(); }; diff --git a/src/core/controller/SelfAuthController.cpp b/src/core/controller/SelfAuthController.cpp index 8f73fdd..5131fdc 100644 --- a/src/core/controller/SelfAuthController.cpp +++ b/src/core/controller/SelfAuthController.cpp @@ -5,30 +5,15 @@ #include "controller/SelfAuthController.h" #include "context/SelfAuthContext.h" -#include "states/CompositeStatePace.h" -#include "states/CompositeStateProcessCvcsAndSetRights.h" +#include "states/CompositeStateTrustedChannel.h" #include "states/FinalState.h" #include "states/StateActivateStoreFeedbackDialog.h" #include "states/StateCheckError.h" #include "states/StateCheckRefreshAddress.h" -#include "states/StateCleanUpReaderManager.h" -#include "states/StateClearPacePasswords.h" -#include "states/StateDidAuthenticateEac1.h" -#include "states/StateDidAuthenticateEac2.h" -#include "states/StateDidList.h" -#include "states/StateEACAdditionalInputType.h" -#include "states/StateGenericSendReceive.h" #include "states/StateGetSelfAuthenticationData.h" -#include "states/StateGetTcToken.h" -#include "states/StateInitializeFramework.h" #include "states/StateLoadTcTokenUrl.h" -#include "states/StateProcessCertificatesFromEac2.h" #include "states/StateSendWhitelistSurvey.h" #include "states/StateShowSelfInfo.h" -#include "states/StateStartPaos.h" -#include "states/StateStartPaosResponse.h" -#include "states/StateTransmit.h" -#include "states/StateUpdateRetryCounter.h" #include "states/StateWriteHistory.h" #include @@ -43,127 +28,22 @@ SelfAuthController::SelfAuthController(QSharedPointer pContext) { auto sLoadTcTokenUrl = addState(); mStateMachine.setInitialState(sLoadTcTokenUrl); - auto sGetTcToken = addState(); - auto sStartPaos = addState(); - auto sSendStartPaos = addState(); - auto sInitializeFramework = addState(); - auto sSendInitializeFrameworkResponse = addState(); - auto sDidList = addState(); - auto sSendDidListResponse = addState(); - auto sProcessCvcsAndSetRights = new CompositeStateProcessCvcsAndSetRights(pContext); - mStateMachine.addState(sProcessCvcsAndSetRights); - auto sStatePace = new CompositeStatePace(pContext); - mStateMachine.addState(sStatePace); - auto sClearPacePasswords = addState(); - auto sDidAuthenticateEac1 = addState(); - auto sSendDidAuthenticateResponseEac1 = addState(); - auto sEacAdditionalInputType = addState(); - auto sSendDidAuthenticatResponseEacAdditionalInput = addState(); - auto sProcessCertificatesFromEac2 = addState(); - auto sDidAuthenticateEac2 = addState(); - auto sSendDidAuthenticateResponseEac2 = addState(); - auto sTransmit = addState(); - auto sSendTransmitResponse = addState(); - auto sSendDisconnectResponse = addState(); - auto sStartPaosResponse = addState(); + auto sTrustedChannel = new CompositeStateTrustedChannel(pContext); + mStateMachine.addState(sTrustedChannel); auto sCheckErrorEpilogue = addState(); auto sCheckRefreshAddress = addState(); auto sActivateStoreFeedbackDialog = addState(); auto sWriteHistory = addState(); auto sSendWhitelistSurvey = addState(); auto sGetSelfAuthenticationData = addState(); - auto sUpdateRetryCounterFinal = addState(); - auto sCleanUpReaderManager = addState(); auto sShowSelfInfo = addState(); auto sFinal = addState(); - sLoadTcTokenUrl->addTransition(sLoadTcTokenUrl, &AbstractState::fireContinue, sGetTcToken); - sLoadTcTokenUrl->addTransition(sLoadTcTokenUrl, &AbstractState::fireAbort, sCleanUpReaderManager); + sLoadTcTokenUrl->addTransition(sLoadTcTokenUrl, &AbstractState::fireContinue, sTrustedChannel); + sLoadTcTokenUrl->addTransition(sLoadTcTokenUrl, &AbstractState::fireAbort, sCheckRefreshAddress); - sGetTcToken->addTransition(sGetTcToken, &AbstractState::fireContinue, sStartPaos); - sGetTcToken->addTransition(sGetTcToken, &AbstractState::fireAbort, sCleanUpReaderManager); - - sStartPaos->addTransition(sStartPaos, &AbstractState::fireContinue, sSendStartPaos); - sStartPaos->addTransition(sStartPaos, &AbstractState::fireAbort, sCleanUpReaderManager); - - sSendStartPaos->addTransition(sSendStartPaos, &AbstractState::fireContinue, sInitializeFramework); - sSendStartPaos->addTransition(sSendStartPaos, &AbstractState::fireAbort, sCleanUpReaderManager); - sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedDidList, sDidList); - sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedExtractCvcsFromEac1InputType, sProcessCvcsAndSetRights); - sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedStartPaosResponse, sStartPaosResponse); - - sInitializeFramework->addTransition(sInitializeFramework, &AbstractState::fireContinue, sSendInitializeFrameworkResponse); - sInitializeFramework->addTransition(sInitializeFramework, &AbstractState::fireAbort, sSendInitializeFrameworkResponse); - - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &AbstractState::fireContinue, sDidList); - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &AbstractState::fireAbort, sCleanUpReaderManager); - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &StateSendInitializeFrameworkResponse::fireReceivedExtractCvcsFromEac1InputType, sProcessCvcsAndSetRights); - sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &StateSendInitializeFrameworkResponse::fireReceivedStartPaosResponse, sStartPaosResponse); - - sDidList->addTransition(sDidList, &AbstractState::fireContinue, sSendDidListResponse); - sDidList->addTransition(sDidList, &AbstractState::fireAbort, sSendDidListResponse); - - sSendDidListResponse->addTransition(sSendDidListResponse, &AbstractState::fireContinue, sProcessCvcsAndSetRights); - sSendDidListResponse->addTransition(sSendDidListResponse, &AbstractState::fireAbort, sCleanUpReaderManager); - sSendDidListResponse->addTransition(sSendDidListResponse, &StateSendDIDListResponse::fireReceivedDisconnect, sSendDisconnectResponse); - sSendDidListResponse->addTransition(sSendDidListResponse, &StateSendDIDListResponse::fireReceivedStartPaosResponse, sStartPaosResponse); - - sProcessCvcsAndSetRights->addTransition(sProcessCvcsAndSetRights, &CompositeStateProcessCvcsAndSetRights::fireContinue, sStatePace); - sProcessCvcsAndSetRights->addTransition(sProcessCvcsAndSetRights, &CompositeStateProcessCvcsAndSetRights::fireAbort, sSendDidAuthenticateResponseEac1); - - sStatePace->addTransition(sStatePace, &CompositeStatePace::firePaceChannelEstablished, sClearPacePasswords); - sStatePace->addTransition(sStatePace, &CompositeStatePace::firePacePukEstablished, sStatePace); - sStatePace->addTransition(sStatePace, &CompositeStatePace::fireAbort, sSendDidAuthenticateResponseEac1); - - sClearPacePasswords->addTransition(sClearPacePasswords, &AbstractState::fireContinue, sDidAuthenticateEac1); - sClearPacePasswords->addTransition(sClearPacePasswords, &AbstractState::fireAbort, sDidAuthenticateEac1); - - sDidAuthenticateEac1->addTransition(sDidAuthenticateEac1, &AbstractState::fireContinue, sSendDidAuthenticateResponseEac1); - sDidAuthenticateEac1->addTransition(sDidAuthenticateEac1, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac1); - - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &AbstractState::fireContinue, sEacAdditionalInputType); - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &StateSendDIDAuthenticateResponseEAC1::fireReceivedDisconnect, sSendDisconnectResponse); - sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &StateSendDIDAuthenticateResponseEAC1::fireReceivedStartPaosResponse, sStartPaosResponse); - - sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &AbstractState::fireContinue, sProcessCertificatesFromEac2); - sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &AbstractState::fireAbort, sSendDidAuthenticatResponseEacAdditionalInput); - sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &StateEACAdditionalInputType::fireSendDidAuthenticatResponse, sSendDidAuthenticatResponseEacAdditionalInput); - - sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &AbstractState::fireContinue, sProcessCertificatesFromEac2); - sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &StateSendDIDAuthenticateResponseEACAdditionalInputType::fireReceivedStartPaosResponse, sStartPaosResponse); - - sProcessCertificatesFromEac2->addTransition(sProcessCertificatesFromEac2, &AbstractState::fireContinue, sDidAuthenticateEac2); - sProcessCertificatesFromEac2->addTransition(sProcessCertificatesFromEac2, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac2); - - sDidAuthenticateEac2->addTransition(sDidAuthenticateEac2, &AbstractState::fireContinue, sSendDidAuthenticateResponseEac2); - sDidAuthenticateEac2->addTransition(sDidAuthenticateEac2, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac2); - - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &AbstractState::fireContinue, sTransmit); - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &StateSendDIDAuthenticateResponseEAC2::fireReceivedDisconnect, sSendDisconnectResponse); - sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &StateSendDIDAuthenticateResponseEAC2::fireReceivedStartPaosResponse, sStartPaosResponse); - - sTransmit->addTransition(sTransmit, &AbstractState::fireContinue, sSendTransmitResponse); - sTransmit->addTransition(sTransmit, &AbstractState::fireAbort, sSendTransmitResponse); - - sSendTransmitResponse->addTransition(sSendTransmitResponse, &AbstractState::fireContinue, sTransmit); - sSendTransmitResponse->addTransition(sSendTransmitResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - sSendTransmitResponse->addTransition(sSendTransmitResponse, &StateSendTransmitResponse::fireReceivedDisconnect, sSendDisconnectResponse); - sSendTransmitResponse->addTransition(sSendTransmitResponse, &StateSendTransmitResponse::fireReceivedStartPaosResponse, sStartPaosResponse); - - sSendDisconnectResponse->addTransition(sSendDisconnectResponse, &AbstractState::fireContinue, sStartPaosResponse); - sSendDisconnectResponse->addTransition(sSendDisconnectResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - - sStartPaosResponse->addTransition(sStartPaosResponse, &AbstractState::fireContinue, sUpdateRetryCounterFinal); - sStartPaosResponse->addTransition(sStartPaosResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); - - sUpdateRetryCounterFinal->addTransition(sUpdateRetryCounterFinal, &AbstractState::fireContinue, sCleanUpReaderManager); - sUpdateRetryCounterFinal->addTransition(sUpdateRetryCounterFinal, &AbstractState::fireAbort, sCleanUpReaderManager); - - sCleanUpReaderManager->addTransition(sCleanUpReaderManager, &AbstractState::fireContinue, sCheckErrorEpilogue); - sCleanUpReaderManager->addTransition(sCleanUpReaderManager, &AbstractState::fireAbort, sCheckErrorEpilogue); + sTrustedChannel->addTransition(sTrustedChannel, &CompositeStateTrustedChannel::fireContinue, sCheckErrorEpilogue); + sTrustedChannel->addTransition(sTrustedChannel, &CompositeStateTrustedChannel::fireAbort, sCheckErrorEpilogue); sCheckErrorEpilogue->addTransition(sCheckErrorEpilogue, &AbstractState::fireContinue, sCheckRefreshAddress); sCheckErrorEpilogue->addTransition(sCheckErrorEpilogue, &AbstractState::fireAbort, sFinal); diff --git a/src/core/controller/SelfAuthController.h b/src/core/controller/SelfAuthController.h index bc4118a..6942938 100644 --- a/src/core/controller/SelfAuthController.h +++ b/src/core/controller/SelfAuthController.h @@ -19,7 +19,7 @@ class SelfAuthController Q_OBJECT public: - SelfAuthController(QSharedPointer pContext); + explicit SelfAuthController(QSharedPointer pContext); virtual ~SelfAuthController() = default; }; diff --git a/src/core/controller/WorkflowController.h b/src/core/controller/WorkflowController.h index b933033..559a75e 100644 --- a/src/core/controller/WorkflowController.h +++ b/src/core/controller/WorkflowController.h @@ -12,8 +12,6 @@ #include #include -class test_ChangePinController; - namespace governikus { @@ -27,7 +25,7 @@ class WorkflowController const QSharedPointer mContext; public: - WorkflowController(const QSharedPointer& pContext); + explicit WorkflowController(const QSharedPointer& pContext); virtual ~WorkflowController(); void run(); diff --git a/src/core/paos/ElementDetector.h b/src/core/paos/ElementDetector.h index b5e50d0..4324707 100644 --- a/src/core/paos/ElementDetector.h +++ b/src/core/paos/ElementDetector.h @@ -27,7 +27,7 @@ class ElementDetector virtual bool handleFoundElement(const QString& pElementName, const QString& pValue, const QXmlStreamAttributes& pAttributes) = 0; public: - ElementDetector(const QByteArray& pXmlData); + explicit ElementDetector(const QByteArray& pXmlData); virtual ~ElementDetector(); }; diff --git a/src/core/paos/PaosHandler.h b/src/core/paos/PaosHandler.h index e756094..32abf73 100644 --- a/src/core/paos/PaosHandler.h +++ b/src/core/paos/PaosHandler.h @@ -30,7 +30,7 @@ class PaosHandler virtual bool handleFoundElement(const QString& pElementName, const QString& pValue, const QXmlStreamAttributes& pAttributes) override; public: - PaosHandler(const QByteArray& pXmlData); + explicit PaosHandler(const QByteArray& pXmlData); PaosType getDetectedPaosType() const; QSharedPointer getPaosMessage() const; diff --git a/src/core/paos/PaosMessage.h b/src/core/paos/PaosMessage.h index 201cb53..98e8e18 100644 --- a/src/core/paos/PaosMessage.h +++ b/src/core/paos/PaosMessage.h @@ -28,7 +28,7 @@ class PaosMessage public: const PaosType mType; - PaosMessage(PaosType pType); + explicit PaosMessage(PaosType pType); virtual ~PaosMessage(); const QString& getMessageId() const diff --git a/src/core/paos/RequestType.h b/src/core/paos/RequestType.h index 3901bb1..65c54f2 100644 --- a/src/core/paos/RequestType.h +++ b/src/core/paos/RequestType.h @@ -16,7 +16,7 @@ class RequestType : public PaosMessage { public: - RequestType(PaosType pType); + explicit RequestType(PaosType pType); virtual ~RequestType(); }; diff --git a/src/core/paos/ResponseType.h b/src/core/paos/ResponseType.h index d395593..6ae37fd 100644 --- a/src/core/paos/ResponseType.h +++ b/src/core/paos/ResponseType.h @@ -22,7 +22,7 @@ class ResponseType ECardApiResult mResult; public: - ResponseType(PaosType pType); + explicit ResponseType(PaosType pType); virtual ~ResponseType(); const ECardApiResult& getResult() const; diff --git a/src/core/paos/element/ConnectionHandleParser.h b/src/core/paos/element/ConnectionHandleParser.h index f8c494f..f0c9955 100644 --- a/src/core/paos/element/ConnectionHandleParser.h +++ b/src/core/paos/element/ConnectionHandleParser.h @@ -21,7 +21,7 @@ class ConnectionHandleParser : public ElementParser { public: - ConnectionHandleParser(QSharedPointer pXmlReader); + explicit ConnectionHandleParser(QSharedPointer pXmlReader); virtual ~ConnectionHandleParser(); ConnectionHandle parse(); diff --git a/src/core/paos/element/Eac1InputType.h b/src/core/paos/element/Eac1InputType.h index 76101b2..5c7c481 100644 --- a/src/core/paos/element/Eac1InputType.h +++ b/src/core/paos/element/Eac1InputType.h @@ -16,12 +16,6 @@ #include #include -class test_StatePrepareChat; -class test_StateExtractCvcsFromEac1InputType; -class test_StatePreVerification; -class test_StateCertificateDescriptionCheck; -class test_StateProcessCertificatesFromEac2; -class test_AuthModel; namespace governikus { @@ -31,11 +25,6 @@ class Eac1InputType { friend class DidAuthenticateEac1Parser; friend class TestAuthContext; - friend class ::test_StateExtractCvcsFromEac1InputType; - friend class ::test_StatePreVerification; - friend class ::test_StateCertificateDescriptionCheck; - friend class ::test_StateProcessCertificatesFromEac2; - friend class ::test_AuthModel; private: QVector > mCvCertificates; diff --git a/src/core/paos/element/ElementParser.cpp b/src/core/paos/element/ElementParser.cpp index fbd79af..8dcc3cf 100644 --- a/src/core/paos/element/ElementParser.cpp +++ b/src/core/paos/element/ElementParser.cpp @@ -58,7 +58,7 @@ bool ElementParser::assertNoDuplicateElement(bool pNotYetSeen) } -void ElementParser::assertMandatoryElement(const QString& pValue, const char* pElementName) +void ElementParser::assertMandatoryElement(const QString& pValue, const char* const pElementName) { if (pValue.isNull()) { diff --git a/src/core/paos/element/ElementParser.h b/src/core/paos/element/ElementParser.h index 63024cd..2aac622 100644 --- a/src/core/paos/element/ElementParser.h +++ b/src/core/paos/element/ElementParser.h @@ -21,7 +21,7 @@ namespace governikus class ElementParser { public: - ElementParser(QSharedPointer pXmlReader); + explicit ElementParser(QSharedPointer pXmlReader); virtual ~ElementParser(); protected: @@ -44,7 +44,7 @@ class ElementParser * \param pValue the elements value to check. * \param pElementName the elements name used to generate the log message. */ - void assertMandatoryElement(const QString& pValue, const char* pElementName); + void assertMandatoryElement(const QString& pValue, const char* const pElementName); /*! * \brief Issues a log warning and sets the error when the list is empty. @@ -52,7 +52,7 @@ class ElementParser * \param pElementName the elements name used to generate the log message. * \return \c true, if the assertion holds, \c false otherwise. */ - template bool assertMandatoryList(const QVector& pList, const char* pElementName); + template bool assertMandatoryList(const QVector& pList, const char* const pElementName); /*! * \brief Issues a log warning and sets the error when a duplicate element has been encountered. @@ -78,7 +78,7 @@ class ElementParser }; -template bool ElementParser::assertMandatoryList(const QVector& pList, const char* pElementName) +template bool ElementParser::assertMandatoryList(const QVector& pList, const char* const pElementName) { if (pList.isEmpty()) { diff --git a/src/core/paos/invoke/DisconnectResponse.h b/src/core/paos/invoke/DisconnectResponse.h index 7d8e63c..e944374 100644 --- a/src/core/paos/invoke/DisconnectResponse.h +++ b/src/core/paos/invoke/DisconnectResponse.h @@ -9,8 +9,6 @@ #include "paos/ResponseType.h" #include "PaosCreator.h" -class test_DisconnectResponse; - namespace governikus { @@ -18,8 +16,6 @@ class DisconnectResponse : public PaosCreator , public ResponseType { - friend class ::test_DisconnectResponse; - private: QString mSlotHandle; diff --git a/src/core/paos/invoke/PaosCreator.h b/src/core/paos/invoke/PaosCreator.h index ef10181..882ad61 100644 --- a/src/core/paos/invoke/PaosCreator.h +++ b/src/core/paos/invoke/PaosCreator.h @@ -10,15 +10,11 @@ #include -class test_PaosCreator; - namespace governikus { class PaosCreator { - friend class ::test_PaosCreator; - public: enum class Namespace { diff --git a/src/core/paos/invoke/StartPaos.h b/src/core/paos/invoke/StartPaos.h index 8370335..819d0ab 100644 --- a/src/core/paos/invoke/StartPaos.h +++ b/src/core/paos/invoke/StartPaos.h @@ -38,7 +38,7 @@ class StartPaos Q_DISABLE_COPY(StartPaos) public: - StartPaos(const QByteArray& pSessionId); + explicit StartPaos(const QByteArray& pSessionId); }; } // namespace governikus diff --git a/src/core/paos/invoke/TransmitResponse.h b/src/core/paos/invoke/TransmitResponse.h index f85fffd..bea2bba 100644 --- a/src/core/paos/invoke/TransmitResponse.h +++ b/src/core/paos/invoke/TransmitResponse.h @@ -9,8 +9,6 @@ #include "paos/ResponseType.h" #include "PaosCreator.h" -class test_TransmitResponse; - namespace governikus { @@ -18,8 +16,6 @@ class TransmitResponse : public PaosCreator , public ResponseType { - friend class ::test_TransmitResponse; - private: QByteArrayList mOutputApdus; diff --git a/src/core/paos/retrieve/DidAuthenticateEac1.h b/src/core/paos/retrieve/DidAuthenticateEac1.h index 3677dfc..465f9c0 100644 --- a/src/core/paos/retrieve/DidAuthenticateEac1.h +++ b/src/core/paos/retrieve/DidAuthenticateEac1.h @@ -25,11 +25,6 @@ class DIDAuthenticateEAC1 { friend class DidAuthenticateEac1Parser; friend class TestAuthContext; - friend class ::test_StatePreVerification; - friend class ::test_StateExtractCvcsFromEac1InputType; - friend class ::test_StateProcessCertificatesFromEac2; - friend class ::test_StateCertificateDescriptionCheck; - friend class ::test_AuthModel; private: ConnectionHandle mConnectionHandle; diff --git a/src/core/paos/retrieve/DidAuthenticateEacAdditionalParser.cpp b/src/core/paos/retrieve/DidAuthenticateEacAdditionalParser.cpp index d4943b5..bf8cf04 100644 --- a/src/core/paos/retrieve/DidAuthenticateEacAdditionalParser.cpp +++ b/src/core/paos/retrieve/DidAuthenticateEacAdditionalParser.cpp @@ -77,7 +77,11 @@ QString DidAuthenticateEacAdditionalParser::parseEacAdditionalInputType() qCDebug(paos) << mXmlReader->name(); if (mXmlReader->name() == QLatin1String("Signature")) { - Q_UNUSED(readUniqueElementText(signature)) + if (!readUniqueElementText(signature)) + { + qCWarning(paos) << "Abort parsing of Signature"; + mParseError = true; + } } else { diff --git a/src/core/paos/retrieve/DidList.h b/src/core/paos/retrieve/DidList.h index 20a45a4..d7d3eac 100644 --- a/src/core/paos/retrieve/DidList.h +++ b/src/core/paos/retrieve/DidList.h @@ -25,7 +25,7 @@ class DIDList bool handleFoundElementConnectionHandle(const QString& pElementName, const QString& pValue); public: - DIDList(const QByteArray& pXmlData); + explicit DIDList(const QByteArray& pXmlData); const ConnectionHandle& getConnectionHandle() const; }; diff --git a/src/core/paos/retrieve/Disconnect.h b/src/core/paos/retrieve/Disconnect.h index 31b7db8..bd1fa92 100644 --- a/src/core/paos/retrieve/Disconnect.h +++ b/src/core/paos/retrieve/Disconnect.h @@ -24,7 +24,7 @@ class Disconnect virtual bool handleFoundElement(const QString& pElementName, const QString& pValue, const QXmlStreamAttributes& pAttributes) override; public: - Disconnect(const QByteArray& pXmlData); + explicit Disconnect(const QByteArray& pXmlData); virtual ~Disconnect() override; const QString& getSlotHandle() const; diff --git a/src/core/paos/retrieve/InitializeFramework.h b/src/core/paos/retrieve/InitializeFramework.h index d6d560b..3707b68 100644 --- a/src/core/paos/retrieve/InitializeFramework.h +++ b/src/core/paos/retrieve/InitializeFramework.h @@ -21,7 +21,7 @@ class InitializeFramework virtual bool handleFoundElement(const QString& pElementName, const QString& pValue, const QXmlStreamAttributes& pAttributes) override; public: - InitializeFramework(const QByteArray& pXmlData); + explicit InitializeFramework(const QByteArray& pXmlData); }; } // namespace governikus diff --git a/src/core/paos/retrieve/PaosParser.h b/src/core/paos/retrieve/PaosParser.h index 981cc43..895300a 100644 --- a/src/core/paos/retrieve/PaosParser.h +++ b/src/core/paos/retrieve/PaosParser.h @@ -16,7 +16,7 @@ class PaosParser : public ElementParser { public: - PaosParser(const QString& pMessageName); + explicit PaosParser(const QString& pMessageName); virtual ~PaosParser(); PaosMessage* parse(const QByteArray& pXmlData); diff --git a/src/core/paos/retrieve/StartPaosResponse.h b/src/core/paos/retrieve/StartPaosResponse.h index 998b3f4..db9785d 100644 --- a/src/core/paos/retrieve/StartPaosResponse.h +++ b/src/core/paos/retrieve/StartPaosResponse.h @@ -23,7 +23,7 @@ class StartPaosResponse QString mResultMajor, mResultMinor, mResultMessage; public: - StartPaosResponse(const QByteArray& pXmlData); + explicit StartPaosResponse(const QByteArray& pXmlData); private: void parse(); diff --git a/src/core/paos/retrieve/Transmit.h b/src/core/paos/retrieve/Transmit.h index 672c0b2..dff61d3 100644 --- a/src/core/paos/retrieve/Transmit.h +++ b/src/core/paos/retrieve/Transmit.h @@ -22,7 +22,7 @@ class Transmit public: Transmit(); - Transmit(const QByteArray& pXmlData); + explicit Transmit(const QByteArray& pXmlData); virtual ~Transmit(); const QString& getSlotHandle() const diff --git a/src/core/states/AbstractState.cpp b/src/core/states/AbstractState.cpp index 5240c8f..169fa84 100644 --- a/src/core/states/AbstractState.cpp +++ b/src/core/states/AbstractState.cpp @@ -42,7 +42,7 @@ void AbstractState::setStateName(const QString& pName) } -QString AbstractState::getClassName(const char* pName) +QString AbstractState::getClassName(const char* const pName) { QString className = QString::fromLatin1(pName); if (className.contains(QLatin1Char(':'))) @@ -65,7 +65,7 @@ void AbstractState::onStateApprovedChanged() void AbstractState::onEntry(QEvent* pEvent) { - Q_UNUSED(pEvent); + Q_UNUSED(pEvent) if (mConnectOnCardRemoved) { const auto readerManager = Env::getSingleton(); diff --git a/src/core/states/AbstractState.h b/src/core/states/AbstractState.h index e77bc34..784864d 100644 --- a/src/core/states/AbstractState.h +++ b/src/core/states/AbstractState.h @@ -27,12 +27,13 @@ class AbstractState const QSharedPointer mContext; const bool mConnectOnCardRemoved; - explicit AbstractState(const QSharedPointer& pContext, bool pConnectOnCardRemoved); virtual void run() = 0; protected: QVector mConnections; + explicit AbstractState(const QSharedPointer& pContext, bool pConnectOnCardRemoved = true); + void onExit(QEvent* pEvent) override; void clearConnections(); @@ -41,7 +42,7 @@ class AbstractState void updateStartPaosResult(const ECardApiResult& pStartPaosResult); public: - static QString getClassName(const char* pName); + static QString getClassName(const char* const pName); template static bool isState(const QString& pState) diff --git a/src/core/states/CompositeStatePace.cpp b/src/core/states/CompositeStatePace.cpp index 3025266..e0c0ae1 100644 --- a/src/core/states/CompositeStatePace.cpp +++ b/src/core/states/CompositeStatePace.cpp @@ -5,14 +5,15 @@ #include "CompositeStatePace.h" #include "context/WorkflowContext.h" -#include "states/CompositeStateSelectCard.h" #include "states/StateBuilder.h" #include "states/StateClearPacePasswords.h" +#include "states/StateConnectCard.h" #include "states/StateDestroyPace.h" #include "states/StateEnterPacePassword.h" #include "states/StateEstablishPaceChannel.h" #include "states/StateMaintainCardConnection.h" #include "states/StatePreparePace.h" +#include "states/StateSelectReader.h" #include "states/StateUnfortunateCardPosition.h" #include "states/StateUpdateRetryCounter.h" #include "states/StateVerifyRetryCounter.h" @@ -26,7 +27,8 @@ CompositeStatePace::CompositeStatePace(const QSharedPointer& pC { auto sMaintainCardConnection = StateBuilder::createState(mContext); auto sClearPacePasswordsOnError = StateBuilder::createState(mContext); - auto sSelectCard = new CompositeStateSelectCard(pContext); + auto sSelectReader = StateBuilder::createState(mContext); + auto sConnectCard = StateBuilder::createState(mContext); auto sUpdateRetryCounter = StateBuilder::createState(mContext); auto sVerifyRetryCounter = StateBuilder::createState(mContext); auto sPreparePace = StateBuilder::createState(mContext); @@ -38,7 +40,8 @@ CompositeStatePace::CompositeStatePace(const QSharedPointer& pC sMaintainCardConnection->setParent(this); sClearPacePasswordsOnError->setParent(this); - sSelectCard->setParent(this); + sSelectReader->setParent(this); + sConnectCard->setParent(this); sUpdateRetryCounter->setParent(this); sVerifyRetryCounter->setParent(this); sPreparePace->setParent(this); @@ -51,15 +54,20 @@ CompositeStatePace::CompositeStatePace(const QSharedPointer& pC setInitialState(sMaintainCardConnection); sMaintainCardConnection->addTransition(sMaintainCardConnection, &StateMaintainCardConnection::fireContinue, sVerifyRetryCounter); - sMaintainCardConnection->addTransition(sMaintainCardConnection, &StateMaintainCardConnection::fireNoCardConnection, sSelectCard); + sMaintainCardConnection->addTransition(sMaintainCardConnection, &StateMaintainCardConnection::fireNoCardConnection, sSelectReader); sMaintainCardConnection->addTransition(sMaintainCardConnection, &StateMaintainCardConnection::fireForceUpdateRetryCounter, sUpdateRetryCounter); sMaintainCardConnection->addTransition(sMaintainCardConnection, &StateMaintainCardConnection::fireAbort, sClearPacePasswordsOnError); connect(sClearPacePasswordsOnError, &AbstractState::fireContinue, this, &CompositeStatePace::fireAbort); connect(sClearPacePasswordsOnError, &AbstractState::fireAbort, this, &CompositeStatePace::fireAbort); - sSelectCard->addTransition(sSelectCard, &CompositeStateSelectCard::fireContinue, sUpdateRetryCounter); - sSelectCard->addTransition(sSelectCard, &CompositeStateSelectCard::fireAbort, sMaintainCardConnection); + sSelectReader->addTransition(sSelectReader, &StateSelectReader::fireRetry, sSelectReader); + sSelectReader->addTransition(sSelectReader, &AbstractState::fireContinue, sConnectCard); + sSelectReader->addTransition(sSelectReader, &AbstractState::fireAbort, sMaintainCardConnection); + + sConnectCard->addTransition(sConnectCard, &StateConnectCard::fireRetry, sSelectReader); + sConnectCard->addTransition(sConnectCard, &AbstractState::fireContinue, sUpdateRetryCounter); + sConnectCard->addTransition(sConnectCard, &AbstractState::fireAbort, sMaintainCardConnection); sUpdateRetryCounter->addTransition(sUpdateRetryCounter, &AbstractState::fireContinue, sVerifyRetryCounter); sUpdateRetryCounter->addTransition(sUpdateRetryCounter, &AbstractState::fireAbort, sMaintainCardConnection); diff --git a/src/core/states/CompositeStateSelectCard.cpp b/src/core/states/CompositeStateSelectCard.cpp deleted file mode 100644 index 4e56728..0000000 --- a/src/core/states/CompositeStateSelectCard.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/*! - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "CompositeStateSelectCard.h" - -#include "context/WorkflowContext.h" -#include "states/StateBuilder.h" -#include "states/StateConnectCard.h" -#include "states/StateSelectReader.h" - -using namespace governikus; - - -CompositeStateSelectCard::CompositeStateSelectCard(const QSharedPointer& pContext) - : QState() - , mContext(pContext) -{ - auto sSelectReader = StateBuilder::createState(mContext); - auto sConnectCard = StateBuilder::createState(mContext); - - sSelectReader->setParent(this); - sConnectCard->setParent(this); - - setInitialState(sSelectReader); - - sSelectReader->addTransition(sSelectReader, &StateSelectReader::fireRetry, sSelectReader); - sSelectReader->addTransition(sSelectReader, &AbstractState::fireContinue, sConnectCard); - connect(sSelectReader, &AbstractState::fireAbort, this, &CompositeStateSelectCard::fireAbort); - - sConnectCard->addTransition(sConnectCard, &StateConnectCard::fireRetry, sSelectReader); - sConnectCard->addTransition(sConnectCard, &StateConnectCard::fireReaderRemoved, sSelectReader); - connect(sConnectCard, &AbstractState::fireContinue, this, &CompositeStateSelectCard::fireContinue); - connect(sConnectCard, &AbstractState::fireAbort, this, &CompositeStateSelectCard::fireAbort); -} - - -CompositeStateSelectCard::~CompositeStateSelectCard() -{ -} diff --git a/src/core/states/CompositeStateTrustedChannel.cpp b/src/core/states/CompositeStateTrustedChannel.cpp new file mode 100644 index 0000000..c5d57fb --- /dev/null +++ b/src/core/states/CompositeStateTrustedChannel.cpp @@ -0,0 +1,167 @@ +/*! + * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "CompositeStateTrustedChannel.h" + +#include "context/WorkflowContext.h" +#include "states/CompositeStatePace.h" +#include "states/CompositeStateProcessCvcsAndSetRights.h" +#include "states/StateBuilder.h" +#include "states/StateCleanUpReaderManager.h" +#include "states/StateClearPacePasswords.h" +#include "states/StateDidAuthenticateEac1.h" +#include "states/StateDidAuthenticateEac2.h" +#include "states/StateDidList.h" +#include "states/StateEACAdditionalInputType.h" +#include "states/StateGenericSendReceive.h" +#include "states/StateGetTcToken.h" +#include "states/StateInitializeFramework.h" +#include "states/StateProcessCertificatesFromEac2.h" +#include "states/StateStartPaos.h" +#include "states/StateStartPaosResponse.h" +#include "states/StateTransmit.h" +#include "states/StateUpdateRetryCounter.h" + +using namespace governikus; + + +CompositeStateTrustedChannel::CompositeStateTrustedChannel(const QSharedPointer& pContext) + : QState() + , mContext(pContext) +{ + auto sGetTcToken = StateBuilder::createState(mContext); + auto sStartPaos = StateBuilder::createState(mContext); + auto sSendStartPaos = StateBuilder::createState(mContext); + auto sInitializeFramework = StateBuilder::createState(mContext); + auto sSendInitializeFrameworkResponse = StateBuilder::createState(mContext); + auto sDidList = StateBuilder::createState(mContext); + auto sSendDidListResponse = StateBuilder::createState(mContext); + auto sProcessCvcsAndSetRights = new CompositeStateProcessCvcsAndSetRights(mContext); + auto sStatePace = new CompositeStatePace(mContext); + auto sClearPacePasswords = StateBuilder::createState(mContext); + auto sDidAuthenticateEac1 = StateBuilder::createState(mContext); + auto sSendDidAuthenticateResponseEac1 = StateBuilder::createState(mContext); + auto sEacAdditionalInputType = StateBuilder::createState(mContext); + auto sSendDidAuthenticatResponseEacAdditionalInput = StateBuilder::createState(mContext); + auto sProcessCertificatesFromEac2 = StateBuilder::createState(mContext); + auto sDidAuthenticateEac2 = StateBuilder::createState(mContext); + auto sSendDidAuthenticateResponseEac2 = StateBuilder::createState(mContext); + auto sTransmit = StateBuilder::createState(mContext); + auto sSendTransmitResponse = StateBuilder::createState(mContext); + auto sSendDisconnectResponse = StateBuilder::createState(mContext); + auto sStartPaosResponse = StateBuilder::createState(mContext); + auto sUpdateRetryCounterFinal = StateBuilder::createState(mContext); + auto sCleanUpReaderManager = StateBuilder::createState(mContext); + + sGetTcToken->setParent(this); + sStartPaos->setParent(this); + sSendStartPaos->setParent(this); + sInitializeFramework->setParent(this); + sSendInitializeFrameworkResponse->setParent(this); + sDidList->setParent(this); + sSendDidListResponse->setParent(this); + sProcessCvcsAndSetRights->setParent(this); + sStatePace->setParent(this); + sClearPacePasswords->setParent(this); + sDidAuthenticateEac1->setParent(this); + sSendDidAuthenticateResponseEac1->setParent(this); + sEacAdditionalInputType->setParent(this); + sSendDidAuthenticatResponseEacAdditionalInput->setParent(this); + sProcessCertificatesFromEac2->setParent(this); + sDidAuthenticateEac2->setParent(this); + sSendDidAuthenticateResponseEac2->setParent(this); + sTransmit->setParent(this); + sSendTransmitResponse->setParent(this); + sSendDisconnectResponse->setParent(this); + sStartPaosResponse->setParent(this); + sUpdateRetryCounterFinal->setParent(this); + sCleanUpReaderManager->setParent(this); + + setInitialState(sGetTcToken); + + sGetTcToken->addTransition(sGetTcToken, &AbstractState::fireContinue, sStartPaos); + sGetTcToken->addTransition(sGetTcToken, &AbstractState::fireAbort, sCleanUpReaderManager); + + sStartPaos->addTransition(sStartPaos, &AbstractState::fireContinue, sSendStartPaos); + sStartPaos->addTransition(sStartPaos, &AbstractState::fireAbort, sCleanUpReaderManager); + + sSendStartPaos->addTransition(sSendStartPaos, &AbstractState::fireContinue, sInitializeFramework); + sSendStartPaos->addTransition(sSendStartPaos, &AbstractState::fireAbort, sCleanUpReaderManager); + sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedDidList, sDidList); + sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedExtractCvcsFromEac1InputType, sProcessCvcsAndSetRights); + sSendStartPaos->addTransition(sSendStartPaos, &StateSendStartPaos::fireReceivedStartPaosResponse, sStartPaosResponse); + + sInitializeFramework->addTransition(sInitializeFramework, &AbstractState::fireContinue, sSendInitializeFrameworkResponse); + sInitializeFramework->addTransition(sInitializeFramework, &AbstractState::fireAbort, sSendInitializeFrameworkResponse); + + sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &AbstractState::fireContinue, sDidList); + sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &AbstractState::fireAbort, sCleanUpReaderManager); + sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &StateSendInitializeFrameworkResponse::fireReceivedExtractCvcsFromEac1InputType, sProcessCvcsAndSetRights); + sSendInitializeFrameworkResponse->addTransition(sSendInitializeFrameworkResponse, &StateSendInitializeFrameworkResponse::fireReceivedStartPaosResponse, sStartPaosResponse); + + sDidList->addTransition(sDidList, &AbstractState::fireContinue, sSendDidListResponse); + sDidList->addTransition(sDidList, &AbstractState::fireAbort, sSendDidListResponse); + + sSendDidListResponse->addTransition(sSendDidListResponse, &AbstractState::fireContinue, sProcessCvcsAndSetRights); + sSendDidListResponse->addTransition(sSendDidListResponse, &AbstractState::fireAbort, sCleanUpReaderManager); + sSendDidListResponse->addTransition(sSendDidListResponse, &StateSendDIDListResponse::fireReceivedDisconnect, sSendDisconnectResponse); + sSendDidListResponse->addTransition(sSendDidListResponse, &StateSendDIDListResponse::fireReceivedStartPaosResponse, sStartPaosResponse); + + sProcessCvcsAndSetRights->addTransition(sProcessCvcsAndSetRights, &CompositeStateProcessCvcsAndSetRights::fireContinue, sStatePace); + sProcessCvcsAndSetRights->addTransition(sProcessCvcsAndSetRights, &CompositeStateProcessCvcsAndSetRights::fireAbort, sSendDidAuthenticateResponseEac1); + + sStatePace->addTransition(sStatePace, &CompositeStatePace::firePaceChannelEstablished, sClearPacePasswords); + sStatePace->addTransition(sStatePace, &CompositeStatePace::firePacePukEstablished, sStatePace); + sStatePace->addTransition(sStatePace, &CompositeStatePace::fireAbort, sSendDidAuthenticateResponseEac1); + + sClearPacePasswords->addTransition(sClearPacePasswords, &AbstractState::fireContinue, sDidAuthenticateEac1); + sClearPacePasswords->addTransition(sClearPacePasswords, &AbstractState::fireAbort, sDidAuthenticateEac1); + + sDidAuthenticateEac1->addTransition(sDidAuthenticateEac1, &AbstractState::fireContinue, sSendDidAuthenticateResponseEac1); + sDidAuthenticateEac1->addTransition(sDidAuthenticateEac1, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac1); + + sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &AbstractState::fireContinue, sEacAdditionalInputType); + sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &AbstractState::fireAbort, sUpdateRetryCounterFinal); + sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &StateSendDIDAuthenticateResponseEAC1::fireReceivedDisconnect, sSendDisconnectResponse); + sSendDidAuthenticateResponseEac1->addTransition(sSendDidAuthenticateResponseEac1, &StateSendDIDAuthenticateResponseEAC1::fireReceivedStartPaosResponse, sStartPaosResponse); + + sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &AbstractState::fireContinue, sProcessCertificatesFromEac2); + sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &AbstractState::fireAbort, sSendDidAuthenticatResponseEacAdditionalInput); + sEacAdditionalInputType->addTransition(sEacAdditionalInputType, &StateEACAdditionalInputType::fireSendDidAuthenticatResponse, sSendDidAuthenticatResponseEacAdditionalInput); + + sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &AbstractState::fireContinue, sProcessCertificatesFromEac2); + sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &AbstractState::fireAbort, sUpdateRetryCounterFinal); + sSendDidAuthenticatResponseEacAdditionalInput->addTransition(sSendDidAuthenticatResponseEacAdditionalInput, &StateSendDIDAuthenticateResponseEACAdditionalInputType::fireReceivedStartPaosResponse, sStartPaosResponse); + + sProcessCertificatesFromEac2->addTransition(sProcessCertificatesFromEac2, &AbstractState::fireContinue, sDidAuthenticateEac2); + sProcessCertificatesFromEac2->addTransition(sProcessCertificatesFromEac2, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac2); + + sDidAuthenticateEac2->addTransition(sDidAuthenticateEac2, &AbstractState::fireContinue, sSendDidAuthenticateResponseEac2); + sDidAuthenticateEac2->addTransition(sDidAuthenticateEac2, &AbstractState::fireAbort, sSendDidAuthenticateResponseEac2); + + sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &AbstractState::fireContinue, sTransmit); + sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &AbstractState::fireAbort, sUpdateRetryCounterFinal); + sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &StateSendDIDAuthenticateResponseEAC2::fireReceivedDisconnect, sSendDisconnectResponse); + sSendDidAuthenticateResponseEac2->addTransition(sSendDidAuthenticateResponseEac2, &StateSendDIDAuthenticateResponseEAC2::fireReceivedStartPaosResponse, sStartPaosResponse); + + sTransmit->addTransition(sTransmit, &AbstractState::fireContinue, sSendTransmitResponse); + sTransmit->addTransition(sTransmit, &AbstractState::fireAbort, sSendTransmitResponse); + + sSendTransmitResponse->addTransition(sSendTransmitResponse, &AbstractState::fireContinue, sTransmit); + sSendTransmitResponse->addTransition(sSendTransmitResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); + sSendTransmitResponse->addTransition(sSendTransmitResponse, &StateSendTransmitResponse::fireReceivedDisconnect, sSendDisconnectResponse); + sSendTransmitResponse->addTransition(sSendTransmitResponse, &StateSendTransmitResponse::fireReceivedStartPaosResponse, sStartPaosResponse); + + sSendDisconnectResponse->addTransition(sSendDisconnectResponse, &AbstractState::fireContinue, sStartPaosResponse); + sSendDisconnectResponse->addTransition(sSendDisconnectResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); + + sStartPaosResponse->addTransition(sStartPaosResponse, &AbstractState::fireContinue, sUpdateRetryCounterFinal); + sStartPaosResponse->addTransition(sStartPaosResponse, &AbstractState::fireAbort, sUpdateRetryCounterFinal); + + sUpdateRetryCounterFinal->addTransition(sUpdateRetryCounterFinal, &AbstractState::fireContinue, sCleanUpReaderManager); + sUpdateRetryCounterFinal->addTransition(sUpdateRetryCounterFinal, &AbstractState::fireAbort, sCleanUpReaderManager); + + connect(sCleanUpReaderManager, &AbstractState::fireContinue, this, &CompositeStateTrustedChannel::fireContinue); + connect(sCleanUpReaderManager, &AbstractState::fireAbort, this, &CompositeStateTrustedChannel::fireAbort); +} diff --git a/src/core/states/CompositeStateSelectCard.h b/src/core/states/CompositeStateTrustedChannel.h similarity index 51% rename from src/core/states/CompositeStateSelectCard.h rename to src/core/states/CompositeStateTrustedChannel.h index 21b02e2..78cde15 100644 --- a/src/core/states/CompositeStateSelectCard.h +++ b/src/core/states/CompositeStateTrustedChannel.h @@ -1,7 +1,5 @@ /*! - * \brief Composite state for selecting a card. - * - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany */ #pragma once @@ -15,7 +13,7 @@ namespace governikus class WorkflowContext; -class CompositeStateSelectCard +class CompositeStateTrustedChannel : public QState { Q_OBJECT @@ -23,8 +21,8 @@ class CompositeStateSelectCard const QSharedPointer mContext; public: - explicit CompositeStateSelectCard(const QSharedPointer& pContext); - virtual ~CompositeStateSelectCard(); + explicit CompositeStateTrustedChannel(const QSharedPointer& pContext); + virtual ~CompositeStateTrustedChannel() = default; Q_SIGNALS: void fireContinue(); diff --git a/src/core/states/FinalState.cpp b/src/core/states/FinalState.cpp index 47ef352..a46475d 100644 --- a/src/core/states/FinalState.cpp +++ b/src/core/states/FinalState.cpp @@ -15,7 +15,7 @@ void FinalState::run() // We need a separate QFinaleState since we do not want the controller to stop working until // this state has been approved. We add the QFinalState at this point since we need to know // the state machine and since we do not want to alter our ctor pattern. - QFinalState* sStopMachine = new QFinalState(); + auto* sStopMachine = new QFinalState(); machine()->addState(sStopMachine); addTransition(this, &AbstractState::fireContinue, sStopMachine); addTransition(this, &AbstractState::fireAbort, sStopMachine); diff --git a/src/core/states/FinalState.h b/src/core/states/FinalState.h index 77c0dce..57c7546 100644 --- a/src/core/states/FinalState.h +++ b/src/core/states/FinalState.h @@ -6,14 +6,15 @@ #pragma once -#include "states/AbstractGenericState.h" - +#include "AbstractState.h" +#include "GenericContextContainer.h" namespace governikus { class FinalState - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT @@ -23,14 +24,15 @@ class FinalState protected: void onEntry(QEvent* pEvent) override { - AbstractGenericState::onEntry(pEvent); + AbstractState::onEntry(pEvent); getContext()->setWorkflowFinished(true); } public: explicit FinalState(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/AbstractGenericState.h b/src/core/states/GenericContextContainer.h similarity index 57% rename from src/core/states/AbstractGenericState.h rename to src/core/states/GenericContextContainer.h index e57ad52..ac5e2bf 100644 --- a/src/core/states/AbstractGenericState.h +++ b/src/core/states/GenericContextContainer.h @@ -9,34 +9,31 @@ #pragma once -#include "AbstractState.h" - -#include +#include "context/WorkflowContext.h" namespace governikus { template -class AbstractGenericState - : public AbstractState +class GenericContextContainer { + private: + const QSharedPointer mTypedContext; + public: - explicit AbstractGenericState(const QSharedPointer& pContext, bool pConnectOnCardRemoved = true) - : AbstractState(pContext, pConnectOnCardRemoved) + explicit GenericContextContainer(const QSharedPointer& pContext) + : mTypedContext(pContext.staticCast()) { - Q_ASSERT(mContext.objectCast()); + Q_ASSERT(pContext.objectCast()); } - virtual ~AbstractGenericState() - { - } - + virtual ~GenericContextContainer() = default; virtual QSharedPointer getContext() { - return mContext.staticCast(); + return mTypedContext; } diff --git a/src/core/states/StateActivateStoreFeedbackDialog.cpp b/src/core/states/StateActivateStoreFeedbackDialog.cpp index 486d3b4..78d6e86 100644 --- a/src/core/states/StateActivateStoreFeedbackDialog.cpp +++ b/src/core/states/StateActivateStoreFeedbackDialog.cpp @@ -11,14 +11,15 @@ using namespace governikus; StateActivateStoreFeedbackDialog::StateActivateStoreFeedbackDialog(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } void StateActivateStoreFeedbackDialog::run() { -#if defined(Q_OS_ANDROID) +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) auto& settings = Env::getSingleton()->getGeneralSettings(); if (getContext()->getStatus().isNoError() && settings.askForStoreFeedback()) { diff --git a/src/core/states/StateActivateStoreFeedbackDialog.h b/src/core/states/StateActivateStoreFeedbackDialog.h index cc4f807..aefc117 100644 --- a/src/core/states/StateActivateStoreFeedbackDialog.h +++ b/src/core/states/StateActivateStoreFeedbackDialog.h @@ -7,15 +7,17 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateActivateStoreFeedbackDialog - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateCertificateDescriptionCheck.cpp b/src/core/states/StateCertificateDescriptionCheck.cpp index 4c59d82..1f185e2 100644 --- a/src/core/states/StateCertificateDescriptionCheck.cpp +++ b/src/core/states/StateCertificateDescriptionCheck.cpp @@ -16,7 +16,8 @@ Q_DECLARE_LOGGING_CATEGORY(developermode) StateCertificateDescriptionCheck::StateCertificateDescriptionCheck(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateCertificateDescriptionCheck.h b/src/core/states/StateCertificateDescriptionCheck.h index d71dafd..9bb39b5 100644 --- a/src/core/states/StateCertificateDescriptionCheck.h +++ b/src/core/states/StateCertificateDescriptionCheck.h @@ -4,19 +4,20 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateCertificateDescriptionCheck - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; - friend class ::test_StateCertificateDescriptionCheck; explicit StateCertificateDescriptionCheck(const QSharedPointer& pContext); virtual void run() override; diff --git a/src/core/states/StateChangePin.cpp b/src/core/states/StateChangePin.cpp index 2b56388..eb30b9b 100644 --- a/src/core/states/StateChangePin.cpp +++ b/src/core/states/StateChangePin.cpp @@ -10,7 +10,8 @@ using namespace governikus; StateChangePin::StateChangePin(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -32,6 +33,7 @@ void StateChangePin::onSetEidPinDone(QSharedPointer pCommand) switch (returnCode) { case CardReturnCode::OK: + //: INFO ALL_PLATFORMS The pin was changed successfully. getContext()->setSuccessMessage(tr("You have successfully changed your PIN.")); Q_EMIT fireContinue(); break; diff --git a/src/core/states/StateChangePin.h b/src/core/states/StateChangePin.h index eb7f219..6defed4 100644 --- a/src/core/states/StateChangePin.h +++ b/src/core/states/StateChangePin.h @@ -6,8 +6,9 @@ #pragma once -#include "AbstractGenericState.h" +#include "AbstractState.h" #include "context/ChangePinContext.h" +#include "GenericContextContainer.h" class test_StateChangePin; @@ -15,7 +16,8 @@ namespace governikus { class StateChangePin - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateCheckCertificates.cpp b/src/core/states/StateCheckCertificates.cpp index 0819ccb..5b093b3 100644 --- a/src/core/states/StateCheckCertificates.cpp +++ b/src/core/states/StateCheckCertificates.cpp @@ -13,7 +13,8 @@ Q_DECLARE_LOGGING_CATEGORY(developermode) StateCheckCertificates::StateCheckCertificates(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateCheckCertificates.h b/src/core/states/StateCheckCertificates.h index f221299..66a4da9 100644 --- a/src/core/states/StateCheckCertificates.h +++ b/src/core/states/StateCheckCertificates.h @@ -8,14 +8,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateCheckCertificates - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateCheckError.cpp b/src/core/states/StateCheckError.cpp index 69a76ee..94c8ab7 100644 --- a/src/core/states/StateCheckError.cpp +++ b/src/core/states/StateCheckError.cpp @@ -7,7 +7,8 @@ using namespace governikus; StateCheckError::StateCheckError(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateCheckError.h b/src/core/states/StateCheckError.h index 2765763..f91777d 100644 --- a/src/core/states/StateCheckError.h +++ b/src/core/states/StateCheckError.h @@ -7,14 +7,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateCheckError - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateCheckRefreshAddress.cpp b/src/core/states/StateCheckRefreshAddress.cpp index 0b6a87b..df5eb69 100644 --- a/src/core/states/StateCheckRefreshAddress.cpp +++ b/src/core/states/StateCheckRefreshAddress.cpp @@ -27,7 +27,8 @@ Q_DECLARE_LOGGING_CATEGORY(network) StateCheckRefreshAddress::StateCheckRefreshAddress(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) , mReply(nullptr) , mUrl() , mSubjectUrl() @@ -101,7 +102,7 @@ void StateCheckRefreshAddress::run() auto refreshAddrError = QStringLiteral("Invalid RefreshAddress: %1").arg(mUrl.toString()); if (!mUrl.isValid()) { - qDebug() << refreshAddrError; + qDebug().noquote() << refreshAddrError; Q_EMIT fireContinue(); return; } @@ -113,7 +114,7 @@ void StateCheckRefreshAddress::run() } else { - qDebug() << refreshAddrError; + qDebug().noquote() << refreshAddrError; Q_EMIT fireContinue(); return; } @@ -234,7 +235,7 @@ bool StateCheckRefreshAddress::checkSslConnectionAndSaveCertificate(const QSslCo return false; case CertificateChecker::CertificateStatus::Hash_Not_In_Description: - reportCommunicationError(GlobalStatus(GlobalStatus::Code::Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description, issuerName)); + reportCommunicationError(GlobalStatus(GlobalStatus::Code::Workflow_Network_Ssl_Hash_Not_In_Certificate_Description, issuerName)); return false; } @@ -269,7 +270,7 @@ void StateCheckRefreshAddress::onNetworkReply() reportCommunicationError(GlobalStatus(GlobalStatus::Code::Network_Proxy_Error)); break; - case NetworkManager::NetworkError::SslError: + case NetworkManager::NetworkError::SecurityError: reportCommunicationError(GlobalStatus(GlobalStatus::Code::Network_Ssl_Establishment_Error)); break; @@ -408,3 +409,11 @@ void StateCheckRefreshAddress::onNetworkErrorFetchingServerCertificate(QNetworkR qCritical() << "An error occured fetching the server certificate:" << mReply->errorString(); reportCommunicationError(GlobalStatus(GlobalStatus::Code::Workflow_Network_Empty_Redirect_Url)); } + + +void StateCheckRefreshAddress::onEntry(QEvent* pEvent) +{ + //: INFO ALL_PLATFORMS Status message after the communication between card and server is completed, the result is being forwarded to the provider. + getContext()->setProgress(80, tr("Sending data to service provider")); + AbstractState::onEntry(pEvent); +} diff --git a/src/core/states/StateCheckRefreshAddress.h b/src/core/states/StateCheckRefreshAddress.h index 462c31d..7558537 100644 --- a/src/core/states/StateCheckRefreshAddress.h +++ b/src/core/states/StateCheckRefreshAddress.h @@ -7,8 +7,9 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" #include #include @@ -22,7 +23,8 @@ namespace governikus { class StateCheckRefreshAddress - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; @@ -57,6 +59,7 @@ class StateCheckRefreshAddress public: virtual ~StateCheckRefreshAddress() override; + void onEntry(QEvent* pEvent) override; }; } // namespace governikus diff --git a/src/core/states/StateCleanUpReaderManager.cpp b/src/core/states/StateCleanUpReaderManager.cpp index fe0e465..f7a6ad9 100644 --- a/src/core/states/StateCleanUpReaderManager.cpp +++ b/src/core/states/StateCleanUpReaderManager.cpp @@ -13,7 +13,8 @@ using namespace governikus; StateCleanUpReaderManager::StateCleanUpReaderManager(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateCleanUpReaderManager.h b/src/core/states/StateCleanUpReaderManager.h index 357b4a1..10b773a 100644 --- a/src/core/states/StateCleanUpReaderManager.h +++ b/src/core/states/StateCleanUpReaderManager.h @@ -7,13 +7,15 @@ #pragma once -#include "AbstractGenericState.h" +#include "AbstractState.h" +#include "GenericContextContainer.h" namespace governikus { class StateCleanUpReaderManager - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateClearPacePasswords.cpp b/src/core/states/StateClearPacePasswords.cpp index bba9bcc..c22437b 100644 --- a/src/core/states/StateClearPacePasswords.cpp +++ b/src/core/states/StateClearPacePasswords.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateClearPacePasswords::StateClearPacePasswords(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateClearPacePasswords.h b/src/core/states/StateClearPacePasswords.h index 641006f..01b98ab 100644 --- a/src/core/states/StateClearPacePasswords.h +++ b/src/core/states/StateClearPacePasswords.h @@ -4,14 +4,17 @@ #pragma once +#include "AbstractState.h" #include "context/WorkflowContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" + namespace governikus { class StateClearPacePasswords - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateConnectCard.cpp b/src/core/states/StateConnectCard.cpp index e9098cd..ecfa53a 100644 --- a/src/core/states/StateConnectCard.cpp +++ b/src/core/states/StateConnectCard.cpp @@ -5,6 +5,9 @@ #include "CardConnection.h" #include "ReaderManager.h" #include "StateConnectCard.h" +#if defined(Q_OS_ANDROID) +#include "SurveyModel.h" +#endif #include @@ -13,7 +16,8 @@ Q_DECLARE_LOGGING_CATEGORY(statemachine) using namespace governikus; StateConnectCard::StateConnectCard(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -23,8 +27,6 @@ void StateConnectCard::run() const auto readerManager = Env::getSingleton(); mConnections += connect(readerManager, &ReaderManager::fireCardInserted, this, &StateConnectCard::onCardInserted); mConnections += connect(readerManager, &ReaderManager::fireReaderRemoved, this, &StateConnectCard::onReaderRemoved); - mConnections += connect(getContext().data(), &WorkflowContext::fireAbortCardSelection, this, &StateConnectCard::onAbort); - mConnections += connect(getContext().data(), &WorkflowContext::fireReaderPlugInTypesChanged, this, &StateConnectCard::fireRetry); onCardInserted(); } @@ -35,11 +37,11 @@ void StateConnectCard::onCardInserted() ReaderInfo readerInfo = readerManager->getReaderInfo(getContext()->getReaderName()); if (readerInfo.hasEidCard()) { - if (readerInfo.sufficientApduLength() && (!readerInfo.isPinDeactivated() || getContext()->isCanAllowedMode())) - { - qCDebug(statemachine) << "Card has been inserted, trying to connect"; - mConnections += readerManager->callCreateCardConnectionCommand(readerInfo.getName(), this, &StateConnectCard::onCommandDone); - } +#if defined(Q_OS_ANDROID) + Env::getSingleton()->setMaximumNfcPacketLength(readerInfo.getMaxApduLength()); +#endif + qCDebug(statemachine) << "Card has been inserted, trying to connect"; + mConnections += readerManager->callCreateCardConnectionCommand(readerInfo.getName(), this, &StateConnectCard::onCommandDone); } } @@ -56,7 +58,17 @@ void StateConnectCard::onCommandDone(QSharedPointer qCDebug(statemachine) << "Card connection was successful"; getContext()->setCardConnection(pCommand->getCardConnection()); - Q_EMIT fireContinue(); + + const auto readerManager = Env::getSingleton(); + ReaderInfo readerInfo = readerManager->getReaderInfo(getContext()->getReaderName()); + if (readerInfo.sufficientApduLength() && (!readerInfo.isPinDeactivated() || getContext()->isCanAllowedMode())) + { + Q_EMIT fireContinue(); + } + else if (readerInfo.isPinDeactivated() && !getContext()->isCanAllowedMode()) + { + getContext()->getCardConnection()->setProgressMessage(tr("The online identification function is disabled.")); + } } @@ -64,21 +76,21 @@ void StateConnectCard::onReaderRemoved(const QString& pReaderName) { if (pReaderName == getContext()->getReaderName()) { - Q_EMIT fireReaderRemoved(); + Q_EMIT fireRetry(); } } -void StateConnectCard::onAbort() +void StateConnectCard::onEntry(QEvent* pEvent) { - const QSharedPointer context = getContext(); + const WorkflowContext* const context = getContext().data(); Q_ASSERT(context); - const auto readerManager = Env::getSingleton(); - ReaderInfo readerInfo = readerManager->getReaderInfo(context->getReaderName()); - if (readerInfo.isConnected()) - { - readerManager->disconnectReader(readerInfo.getName()); - } - Q_EMIT fireRetry(); + /* + * Note: the plugin types to be used in this state must be already set in the workflow context before this state is entered. + * Changing the plugin types in the context, e.g. from {NFC} to {BLUETOOTH}, causes the state to be left with a fireRetry signal. + */ + mConnections += connect(context, &WorkflowContext::fireReaderPlugInTypesChanged, this, &StateConnectCard::fireRetry); + + AbstractState::onEntry(pEvent); } diff --git a/src/core/states/StateConnectCard.h b/src/core/states/StateConnectCard.h index 940275c..740730b 100644 --- a/src/core/states/StateConnectCard.h +++ b/src/core/states/StateConnectCard.h @@ -4,8 +4,9 @@ #pragma once -#include "AbstractGenericState.h" +#include "AbstractState.h" #include "command/CreateCardConnectionCommand.h" +#include "GenericContextContainer.h" class test_StateConnectCard; @@ -13,7 +14,8 @@ namespace governikus { class StateConnectCard - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; @@ -26,11 +28,12 @@ class StateConnectCard void onCardInserted(); void onCommandDone(QSharedPointer pCommand); void onReaderRemoved(const QString& pReaderName); - void onAbort(); + + public: + void onEntry(QEvent* pEvent) override; Q_SIGNALS: void fireRetry(); - void fireReaderRemoved(); }; diff --git a/src/core/states/StateDestroyPace.cpp b/src/core/states/StateDestroyPace.cpp index 19fe8a5..b5eb38a 100644 --- a/src/core/states/StateDestroyPace.cpp +++ b/src/core/states/StateDestroyPace.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateDestroyPace::StateDestroyPace(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateDestroyPace.h b/src/core/states/StateDestroyPace.h index e5c9856..1bd97bd 100644 --- a/src/core/states/StateDestroyPace.h +++ b/src/core/states/StateDestroyPace.h @@ -6,9 +6,9 @@ #pragma once -#include "AbstractGenericState.h" - +#include "AbstractState.h" #include "context/ChangePinContext.h" +#include "GenericContextContainer.h" class test_StateDestroyPace; @@ -16,7 +16,8 @@ namespace governikus { class StateDestroyPace - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateDidAuthenticateEac1.cpp b/src/core/states/StateDidAuthenticateEac1.cpp index e2d59ce..4d92b25 100644 --- a/src/core/states/StateDidAuthenticateEac1.cpp +++ b/src/core/states/StateDidAuthenticateEac1.cpp @@ -13,7 +13,8 @@ using namespace governikus; StateDidAuthenticateEac1::StateDidAuthenticateEac1(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } @@ -63,3 +64,11 @@ void StateDidAuthenticateEac1::onCardCommandDone(QSharedPointer Q_EMIT fireAbort(); } } + + +void StateDidAuthenticateEac1::onEntry(QEvent* pEvent) +{ + //: INFO ALL_PLATFORMS Status message after the PIN was entered, Terminal Authentication. + getContext()->setProgress(20, tr("Service provider is being verified")); + AbstractState::onEntry(pEvent); +} diff --git a/src/core/states/StateDidAuthenticateEac1.h b/src/core/states/StateDidAuthenticateEac1.h index c2d2d1f..024942c 100644 --- a/src/core/states/StateDidAuthenticateEac1.h +++ b/src/core/states/StateDidAuthenticateEac1.h @@ -4,9 +4,10 @@ #pragma once +#include "AbstractState.h" #include "command/DidAuthenticateEAC1Command.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" class test_StateDidAuthenticateEac1; @@ -14,7 +15,8 @@ namespace governikus { class StateDidAuthenticateEac1 - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; @@ -26,6 +28,9 @@ class StateDidAuthenticateEac1 private Q_SLOTS: void onCardCommandDone(QSharedPointer pCommand); + public: + void onEntry(QEvent* pEvent) override; + }; } // namespace governikus diff --git a/src/core/states/StateDidAuthenticateEac2.cpp b/src/core/states/StateDidAuthenticateEac2.cpp index a27f11f..5f1000f 100644 --- a/src/core/states/StateDidAuthenticateEac2.cpp +++ b/src/core/states/StateDidAuthenticateEac2.cpp @@ -10,7 +10,8 @@ using namespace governikus; StateDidAuthenticateEac2::StateDidAuthenticateEac2(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } @@ -64,3 +65,11 @@ void StateDidAuthenticateEac2::onCardCommandDone(QSharedPointer Q_EMIT fireContinue(); } + + +void StateDidAuthenticateEac2::onEntry(QEvent* pEvent) +{ + //: INFO ALL_PLATFORMS Status message after the PIN was entered, Card Authentication. + getContext()->setProgress(40, tr("Card is being verified")); + AbstractState::onEntry(pEvent); +} diff --git a/src/core/states/StateDidAuthenticateEac2.h b/src/core/states/StateDidAuthenticateEac2.h index 3e4df1a..61ed0a6 100644 --- a/src/core/states/StateDidAuthenticateEac2.h +++ b/src/core/states/StateDidAuthenticateEac2.h @@ -4,24 +4,32 @@ #pragma once +#include "AbstractState.h" #include "command/DidAuthenticateEAC2Command.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" + +class test_StateDidAuthenticateEac2; namespace governikus { class StateDidAuthenticateEac2 - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; + friend class ::test_StateDidAuthenticateEac2; explicit StateDidAuthenticateEac2(const QSharedPointer& pContext); virtual void run() override; private Q_SLOTS: void onCardCommandDone(QSharedPointer pCommand); + + public: + void onEntry(QEvent* pEvent) override; }; } // namespace governikus diff --git a/src/core/states/StateDidList.cpp b/src/core/states/StateDidList.cpp index 9947bac..0cecb9c 100644 --- a/src/core/states/StateDidList.cpp +++ b/src/core/states/StateDidList.cpp @@ -10,7 +10,8 @@ using namespace governikus; StateDidList::StateDidList(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateDidList.h b/src/core/states/StateDidList.h index ebf206a..29099cb 100644 --- a/src/core/states/StateDidList.h +++ b/src/core/states/StateDidList.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateDidList - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateEACAdditionalInputType.cpp b/src/core/states/StateEACAdditionalInputType.cpp index 19b1571..6a8f756 100644 --- a/src/core/states/StateEACAdditionalInputType.cpp +++ b/src/core/states/StateEACAdditionalInputType.cpp @@ -7,7 +7,8 @@ using namespace governikus; StateEACAdditionalInputType::StateEACAdditionalInputType(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateEACAdditionalInputType.h b/src/core/states/StateEACAdditionalInputType.h index a21152e..bc5478a 100644 --- a/src/core/states/StateEACAdditionalInputType.h +++ b/src/core/states/StateEACAdditionalInputType.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateEACAdditionalInputType - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateEditAccessRights.cpp b/src/core/states/StateEditAccessRights.cpp index 3cbef70..5232020 100644 --- a/src/core/states/StateEditAccessRights.cpp +++ b/src/core/states/StateEditAccessRights.cpp @@ -4,15 +4,47 @@ #include "StateEditAccessRights.h" +Q_DECLARE_LOGGING_CATEGORY(statemachine) + using namespace governikus; StateEditAccessRights::StateEditAccessRights(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } void StateEditAccessRights::run() { + const auto& effectiveRights = getContext()->getEffectiveAccessRights(); + qCDebug(statemachine) << effectiveRights; + + const auto& requiredRights = getContext()->getRequiredAccessRights(); + printRights(QStringLiteral("Required rights"), requiredRights); + + const auto& optionalRights = getContext()->getOptionalAccessRights(); + printRights(QStringLiteral("Optional selected rights"), effectiveRights & optionalRights); + + printRights(QStringLiteral("Optional not selected rights"), optionalRights - effectiveRights); + Q_EMIT fireContinue(); } + + +void StateEditAccessRights::printRights(const QString& pTitle, const QSet& pRights) const +{ + QStringList accessRightsToDisplay; + if (pRights.isEmpty()) + { + accessRightsToDisplay += QStringLiteral("None"); + } + else + { + for (const auto& accessRight : pRights) + { + accessRightsToDisplay += AccessRoleAndRightsUtil::toDisplayText(accessRight); + } + } + qCDebug(statemachine) << pTitle << ":" << accessRightsToDisplay.join(QLatin1String(", ")); +} diff --git a/src/core/states/StateEditAccessRights.h b/src/core/states/StateEditAccessRights.h index a3b7577..4869d18 100644 --- a/src/core/states/StateEditAccessRights.h +++ b/src/core/states/StateEditAccessRights.h @@ -7,20 +7,24 @@ #pragma once -#include "AbstractGenericState.h" +#include "AbstractState.h" #include "context/AuthContext.h" +#include "GenericContextContainer.h" namespace governikus { class StateEditAccessRights - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; explicit StateEditAccessRights(const QSharedPointer& pContext); virtual void run() override; + + void printRights(const QString& pTitle, const QSet& pRights) const; }; } // namespace governikus diff --git a/src/core/states/StateEnterNewPacePin.cpp b/src/core/states/StateEnterNewPacePin.cpp index 5c43759..ec2ece2 100644 --- a/src/core/states/StateEnterNewPacePin.cpp +++ b/src/core/states/StateEnterNewPacePin.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateEnterNewPacePin::StateEnterNewPacePin(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateEnterNewPacePin.h b/src/core/states/StateEnterNewPacePin.h index cc216b2..3839068 100644 --- a/src/core/states/StateEnterNewPacePin.h +++ b/src/core/states/StateEnterNewPacePin.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/ChangePinContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateEnterNewPacePin - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateEnterPacePassword.cpp b/src/core/states/StateEnterPacePassword.cpp index 1ea922f..1629a1f 100644 --- a/src/core/states/StateEnterPacePassword.cpp +++ b/src/core/states/StateEnterPacePassword.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateEnterPacePassword::StateEnterPacePassword(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateEnterPacePassword.h b/src/core/states/StateEnterPacePassword.h index 6c36810..397092a 100644 --- a/src/core/states/StateEnterPacePassword.h +++ b/src/core/states/StateEnterPacePassword.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/WorkflowContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateEnterPacePassword - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateEstablishPaceChannel.cpp b/src/core/states/StateEstablishPaceChannel.cpp index 2b8abdb..9e6dddb 100644 --- a/src/core/states/StateEstablishPaceChannel.cpp +++ b/src/core/states/StateEstablishPaceChannel.cpp @@ -13,7 +13,8 @@ Q_DECLARE_LOGGING_CATEGORY(statemachine) using namespace governikus; StateEstablishPaceChannel::StateEstablishPaceChannel(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) , mPasswordId(PacePasswordId::UNKNOWN) { } @@ -32,7 +33,6 @@ void StateEstablishPaceChannel::run() QByteArray certificateDescription, effectiveChat; mPasswordId = getContext()->getEstablishPaceChannelType(); Q_ASSERT(mPasswordId != PacePasswordId::UNKNOWN); - getContext()->setEstablishPaceChannelType(PacePasswordId::UNKNOWN); if (mPasswordId == PacePasswordId::PACE_PIN || (mPasswordId == PacePasswordId::PACE_CAN && getContext()->isCanAllowedMode())) @@ -170,11 +170,6 @@ void StateEstablishPaceChannel::onEstablishConnectionDone(QSharedPointersetLastPaceResult(CardReturnCode::OK_PUK); - if (auto changePinContext = getContext().objectCast()) - { - changePinContext->setSuccessMessage(tr("PIN successfully unblocked")); - } - Q_EMIT firePacePukEstablished(); return; } diff --git a/src/core/states/StateEstablishPaceChannel.h b/src/core/states/StateEstablishPaceChannel.h index 50f422f..d0ce422 100644 --- a/src/core/states/StateEstablishPaceChannel.h +++ b/src/core/states/StateEstablishPaceChannel.h @@ -7,8 +7,9 @@ #pragma once -#include "AbstractGenericState.h" +#include "AbstractState.h" #include "context/WorkflowContext.h" +#include "GenericContextContainer.h" class test_StateEstablishPaceChannel; @@ -16,7 +17,8 @@ namespace governikus { class StateEstablishPaceChannel - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateExtractCvcsFromEac1InputType.cpp b/src/core/states/StateExtractCvcsFromEac1InputType.cpp index 8e7e256..a046b19 100644 --- a/src/core/states/StateExtractCvcsFromEac1InputType.cpp +++ b/src/core/states/StateExtractCvcsFromEac1InputType.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateExtractCvcsFromEac1InputType::StateExtractCvcsFromEac1InputType(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateExtractCvcsFromEac1InputType.h b/src/core/states/StateExtractCvcsFromEac1InputType.h index 11d8237..dd28dfe 100644 --- a/src/core/states/StateExtractCvcsFromEac1InputType.h +++ b/src/core/states/StateExtractCvcsFromEac1InputType.h @@ -6,19 +6,20 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateExtractCvcsFromEac1InputType - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; - friend class ::test_StateExtractCvcsFromEac1InputType; explicit StateExtractCvcsFromEac1InputType(const QSharedPointer& pContext); virtual void run() override; diff --git a/src/core/states/StateGenericSendReceive.cpp b/src/core/states/StateGenericSendReceive.cpp index 7f5ced0..08813d6 100644 --- a/src/core/states/StateGenericSendReceive.cpp +++ b/src/core/states/StateGenericSendReceive.cpp @@ -22,7 +22,8 @@ using namespace governikus; StateGenericSendReceive::StateGenericSendReceive(const QSharedPointer& pContext, const QVector& pTypesToReceive, bool pConnectOnCardRemoved) - : AbstractGenericState(pContext, pConnectOnCardRemoved) + : AbstractState(pContext, pConnectOnCardRemoved) + , GenericContextContainer(pContext) , mTypesToReceive(pTypesToReceive) , mReply() { @@ -117,7 +118,7 @@ void StateGenericSendReceive::onSslHandshakeDone() switch (statusCode) { case GlobalStatus::Code::Workflow_TrustedChannel_Hash_Not_In_Description: - case GlobalStatus::Code::Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description: + case GlobalStatus::Code::Workflow_Network_Ssl_Hash_Not_In_Certificate_Description: case GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Certificate_Unsupported_Algorithm_Or_Length: case GlobalStatus::Code::Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length: { @@ -148,7 +149,7 @@ void StateGenericSendReceive::onSslHandshakeDone() else { qCCritical(network) << sessionFailedError; - updateStatus(GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Establishment_Error); + updateStatus(GlobalStatus::Code::Workflow_TrustedChannel_Establishment_Error); abort = true; } } @@ -311,7 +312,7 @@ void StateGenericSendReceive::onReplyFinished() if (paosHandler.getDetectedPaosType() == PaosType::UNKNOWN) { qCCritical(network) << "The program received an unknown message from the server."; - updateStatus(GlobalStatus::Code::Workflow_Unknown_Paos_Form_EidServer); + updateStatus(GlobalStatus::Code::Workflow_Unknown_Paos_From_EidServer); Q_EMIT fireAbort(); } else diff --git a/src/core/states/StateGenericSendReceive.h b/src/core/states/StateGenericSendReceive.h index c7732b4..c1a0def 100644 --- a/src/core/states/StateGenericSendReceive.h +++ b/src/core/states/StateGenericSendReceive.h @@ -4,11 +4,12 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" +#include "GenericContextContainer.h" #include "paos/invoke/PaosCreator.h" #include "paos/PaosMessage.h" #include "paos/PaosType.h" -#include "states/AbstractGenericState.h" #include #include @@ -20,7 +21,8 @@ namespace governikus { class StateGenericSendReceive - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT @@ -55,7 +57,7 @@ class StateSendStartPaos Q_OBJECT friend class StateBuilder; - StateSendStartPaos(const QSharedPointer& pContext) + explicit StateSendStartPaos(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, QVector { PaosType::INITIALIZE_FRAMEWORK, PaosType::DID_LIST, @@ -115,7 +117,7 @@ class StateSendInitializeFrameworkResponse Q_OBJECT friend class StateBuilder; - StateSendInitializeFrameworkResponse(const QSharedPointer& pContext) + explicit StateSendInitializeFrameworkResponse(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, QVector { PaosType::DID_LIST, PaosType::DID_AUTHENTICATE_EAC1, PaosType::STARTPAOS_RESPONSE @@ -169,7 +171,7 @@ class StateSendDIDListResponse Q_OBJECT friend class StateBuilder; - StateSendDIDListResponse(const QSharedPointer& pContext) + explicit StateSendDIDListResponse(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, QVector { PaosType::DID_AUTHENTICATE_EAC1, PaosType::DISCONNECT, PaosType::STARTPAOS_RESPONSE @@ -222,7 +224,7 @@ class StateSendDIDAuthenticateResponseEAC1 Q_OBJECT friend class StateBuilder; - StateSendDIDAuthenticateResponseEAC1(const QSharedPointer& pContext) + explicit StateSendDIDAuthenticateResponseEAC1(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, QVector { PaosType::DID_AUTHENTICATE_EAC2, PaosType::DISCONNECT, PaosType::STARTPAOS_RESPONSE @@ -275,7 +277,7 @@ class StateSendDIDAuthenticateResponseEACAdditionalInputType Q_OBJECT friend class StateBuilder; - StateSendDIDAuthenticateResponseEACAdditionalInputType(const QSharedPointer& pContext) + explicit StateSendDIDAuthenticateResponseEACAdditionalInputType(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, QVector { PaosType::DID_AUTHENTICATE_EAC_ADDITIONAL_INPUT_TYPE, PaosType::STARTPAOS_RESPONSE @@ -323,7 +325,7 @@ class StateSendDIDAuthenticateResponseEAC2 Q_OBJECT friend class StateBuilder; - StateSendDIDAuthenticateResponseEAC2(const QSharedPointer& pContext) + explicit StateSendDIDAuthenticateResponseEAC2(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, QVector { PaosType::TRANSMIT, PaosType::DISCONNECT, PaosType::STARTPAOS_RESPONSE @@ -376,7 +378,7 @@ class StateSendTransmitResponse Q_OBJECT friend class StateBuilder; - StateSendTransmitResponse(const QSharedPointer& pContext) + explicit StateSendTransmitResponse(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, QVector { PaosType::TRANSMIT, PaosType::DISCONNECT, PaosType::STARTPAOS_RESPONSE @@ -430,7 +432,7 @@ class StateSendDisconnectResponse Q_OBJECT friend class StateBuilder; - StateSendDisconnectResponse(const QSharedPointer& pContext) + explicit StateSendDisconnectResponse(const QSharedPointer& pContext) : StateGenericSendReceive(pContext, PaosType::STARTPAOS_RESPONSE) { } @@ -457,7 +459,7 @@ class StateSendDisconnectResponse virtual void emitStateMachineSignal(int pResult) override { - Q_UNUSED(pResult); + Q_UNUSED(pResult) } diff --git a/src/core/states/StateGetSelfAuthenticationData.cpp b/src/core/states/StateGetSelfAuthenticationData.cpp index f3ad485..418b4b0 100644 --- a/src/core/states/StateGetSelfAuthenticationData.cpp +++ b/src/core/states/StateGetSelfAuthenticationData.cpp @@ -18,7 +18,8 @@ Q_DECLARE_LOGGING_CATEGORY(network) using namespace governikus; StateGetSelfAuthenticationData::StateGetSelfAuthenticationData(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) , mReply(nullptr) { } @@ -90,7 +91,7 @@ bool StateGetSelfAuthenticationData::checkSslConnectionAndSaveCertificate(const return false; case CertificateChecker::CertificateStatus::Hash_Not_In_Description: - reportCommunicationError(GlobalStatus(GlobalStatus::Code::Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description, issuerName)); + reportCommunicationError(GlobalStatus(GlobalStatus::Code::Workflow_Network_Ssl_Hash_Not_In_Certificate_Description, issuerName)); return false; } @@ -126,14 +127,14 @@ void StateGetSelfAuthenticationData::onNetworkReply() } else { - qDebug() << "No valid data of self authentication."; + qDebug() << "No valid data of self-authentication."; updateStatus(GlobalStatus::Code::Workflow_Server_Incomplete_Information_Provided); Q_EMIT fireAbort(); } } else { - qDebug() << "Could not read data for self authentication."; + qDebug() << "Could not read data for self-authentication."; updateStatus(GlobalStatus::Code::Workflow_Server_Incomplete_Information_Provided); Q_EMIT fireAbort(); } diff --git a/src/core/states/StateGetSelfAuthenticationData.h b/src/core/states/StateGetSelfAuthenticationData.h index 19a5567..947e0cd 100644 --- a/src/core/states/StateGetSelfAuthenticationData.h +++ b/src/core/states/StateGetSelfAuthenticationData.h @@ -6,18 +6,23 @@ #pragma once +#include "AbstractState.h" #include "context/SelfAuthContext.h" +#include "GenericContextContainer.h" #include "NetworkManager.h" -#include "states/AbstractGenericState.h" + +class test_StateGetSelfAuthenticationData; namespace governikus { class StateGetSelfAuthenticationData - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; + friend class ::test_StateGetSelfAuthenticationData; QPointer mReply; diff --git a/src/core/states/StateGetTcToken.cpp b/src/core/states/StateGetTcToken.cpp index 11acdd4..c7d3cf8 100644 --- a/src/core/states/StateGetTcToken.cpp +++ b/src/core/states/StateGetTcToken.cpp @@ -22,7 +22,8 @@ Q_DECLARE_LOGGING_CATEGORY(network) StateGetTcToken::StateGetTcToken(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) , mReply() { } @@ -118,7 +119,7 @@ void StateGetTcToken::onSslHandshakeDone() { mReply->abort(); qCritical() << "Error while connecting to the service provider. The server's SSL certificate uses an unsupported key algorithm or length."; - updateStatus(GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Establishment_Error); + updateStatus(GlobalStatus::Code::Workflow_TrustedChannel_Establishment_Error); Q_EMIT fireAbort(); return; } @@ -127,7 +128,7 @@ void StateGetTcToken::onSslHandshakeDone() { mReply->abort(); qCritical() << "Error while connecting to the service provider. The SSL connection uses an unsupported key algorithm or length."; - updateStatus(GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Establishment_Error); + updateStatus(GlobalStatus::Code::Workflow_TrustedChannel_Establishment_Error); Q_EMIT fireAbort(); return; } @@ -187,7 +188,7 @@ void StateGetTcToken::parseTcToken() Q_EMIT fireAbort(); return; } - const auto& tcToken = QSharedPointer::create(data); + const QSharedPointer& tcToken = QSharedPointer::create(data); getContext()->setTcToken(tcToken); getContext()->setTcTokenNotFound(!tcToken->isSchemaConform()); diff --git a/src/core/states/StateGetTcToken.h b/src/core/states/StateGetTcToken.h index c402138..6f6b2e4 100644 --- a/src/core/states/StateGetTcToken.h +++ b/src/core/states/StateGetTcToken.h @@ -6,19 +6,21 @@ #pragma once +#include "AbstractState.h" +#include "context/AuthContext.h" +#include "GenericContextContainer.h" + #include #include -#include "context/AuthContext.h" -#include "states/AbstractGenericState.h" - class test_StateGetTcToken; namespace governikus { class StateGetTcToken - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateInitializeFramework.cpp b/src/core/states/StateInitializeFramework.cpp index fd046f9..0becde2 100644 --- a/src/core/states/StateInitializeFramework.cpp +++ b/src/core/states/StateInitializeFramework.cpp @@ -8,7 +8,8 @@ using namespace governikus; StateInitializeFramework::StateInitializeFramework(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateInitializeFramework.h b/src/core/states/StateInitializeFramework.h index 9cca069..956d5cd 100644 --- a/src/core/states/StateInitializeFramework.h +++ b/src/core/states/StateInitializeFramework.h @@ -4,8 +4,9 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" #include @@ -13,7 +14,8 @@ namespace governikus { class StateInitializeFramework - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateLoadTcTokenUrl.cpp b/src/core/states/StateLoadTcTokenUrl.cpp index 490489a..6f548ed 100644 --- a/src/core/states/StateLoadTcTokenUrl.cpp +++ b/src/core/states/StateLoadTcTokenUrl.cpp @@ -10,7 +10,8 @@ using namespace governikus; StateLoadTcTokenUrl::StateLoadTcTokenUrl(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -19,8 +20,8 @@ void StateLoadTcTokenUrl::run() { const bool useTestUri = Env::getSingleton()->getGeneralSettings().useSelfAuthTestUri(); - const QUrl& url = SecureStorage::getInstance().getSelfAuthenticationUrl(useTestUri); - qDebug() << "Loaded tcTokenUrl for self authentication from securestorage:" << url; + const QUrl& url = Env::getSingleton()->getSelfAuthenticationUrl(useTestUri); + qDebug() << "Loaded tcTokenUrl for self-authentication from securestorage:" << url; getContext()->setTcTokenUrl(url); Q_EMIT fireContinue(); diff --git a/src/core/states/StateLoadTcTokenUrl.h b/src/core/states/StateLoadTcTokenUrl.h index f5dd3b0..58edff5 100644 --- a/src/core/states/StateLoadTcTokenUrl.h +++ b/src/core/states/StateLoadTcTokenUrl.h @@ -6,14 +6,16 @@ #pragma once +#include "AbstractState.h" #include "context/SelfAuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateLoadTcTokenUrl - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateMaintainCardConnection.cpp b/src/core/states/StateMaintainCardConnection.cpp index 9050a1c..155104d 100644 --- a/src/core/states/StateMaintainCardConnection.cpp +++ b/src/core/states/StateMaintainCardConnection.cpp @@ -13,7 +13,8 @@ using namespace governikus; StateMaintainCardConnection::StateMaintainCardConnection(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateMaintainCardConnection.h b/src/core/states/StateMaintainCardConnection.h index 01ebe6c..c65e99b 100644 --- a/src/core/states/StateMaintainCardConnection.h +++ b/src/core/states/StateMaintainCardConnection.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/WorkflowContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateMaintainCardConnection - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateParseTcTokenUrl.cpp b/src/core/states/StateParseTcTokenUrl.cpp index db36d65..825d516 100644 --- a/src/core/states/StateParseTcTokenUrl.cpp +++ b/src/core/states/StateParseTcTokenUrl.cpp @@ -11,7 +11,8 @@ using namespace governikus; StateParseTcTokenUrl::StateParseTcTokenUrl(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateParseTcTokenUrl.h b/src/core/states/StateParseTcTokenUrl.h index 7085c6f..bc61077 100644 --- a/src/core/states/StateParseTcTokenUrl.h +++ b/src/core/states/StateParseTcTokenUrl.h @@ -6,14 +6,17 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" + namespace governikus { class StateParseTcTokenUrl - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StatePreVerification.cpp b/src/core/states/StatePreVerification.cpp index 4ed0af6..871a5bc 100644 --- a/src/core/states/StatePreVerification.cpp +++ b/src/core/states/StatePreVerification.cpp @@ -18,9 +18,10 @@ using namespace governikus; StatePreVerification::StatePreVerification(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) - , mTrustedCvcas(CVCertificate::fromHex(SecureStorage::getInstance().getCVRootCertificates(true)) - + CVCertificate::fromHex(SecureStorage::getInstance().getCVRootCertificates(false))) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) + , mTrustedCvcas(CVCertificate::fromHex(Env::getSingleton()->getCVRootCertificates(true)) + + CVCertificate::fromHex(Env::getSingleton()->getCVRootCertificates(false))) , mValidationDateTime(QDateTime::currentDateTime()) { } diff --git a/src/core/states/StatePreVerification.h b/src/core/states/StatePreVerification.h index 72c3793..5478889 100644 --- a/src/core/states/StatePreVerification.h +++ b/src/core/states/StatePreVerification.h @@ -6,8 +6,9 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" #include @@ -16,7 +17,8 @@ namespace governikus { class StatePreVerification - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StatePrepareChangePin.cpp b/src/core/states/StatePrepareChangePin.cpp index 8bf9052..81e8401 100644 --- a/src/core/states/StatePrepareChangePin.cpp +++ b/src/core/states/StatePrepareChangePin.cpp @@ -12,7 +12,8 @@ Q_DECLARE_LOGGING_CATEGORY(statemachine) StatePrepareChangePin::StatePrepareChangePin(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StatePrepareChangePin.h b/src/core/states/StatePrepareChangePin.h index 659eec5..4ffe45a 100644 --- a/src/core/states/StatePrepareChangePin.h +++ b/src/core/states/StatePrepareChangePin.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/ChangePinContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StatePrepareChangePin - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StatePreparePace.cpp b/src/core/states/StatePreparePace.cpp index 51f16f7..f2fe030 100644 --- a/src/core/states/StatePreparePace.cpp +++ b/src/core/states/StatePreparePace.cpp @@ -11,13 +11,15 @@ using namespace governikus; StatePreparePace::StatePreparePace(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } void StatePreparePace::run() { + getContext()->setEstablishPaceChannelType(PacePasswordId::UNKNOWN); const QSharedPointer& cardConnection = getContext()->getCardConnection(); if (!cardConnection) { diff --git a/src/core/states/StatePreparePace.h b/src/core/states/StatePreparePace.h index 5b9dd62..ec2b3bf 100644 --- a/src/core/states/StatePreparePace.h +++ b/src/core/states/StatePreparePace.h @@ -4,14 +4,17 @@ #pragma once +#include "AbstractState.h" #include "context/WorkflowContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" + namespace governikus { class StatePreparePace - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateProcessCertificatesFromEac2.cpp b/src/core/states/StateProcessCertificatesFromEac2.cpp index 757bdb2..513f6a3 100644 --- a/src/core/states/StateProcessCertificatesFromEac2.cpp +++ b/src/core/states/StateProcessCertificatesFromEac2.cpp @@ -13,7 +13,8 @@ using namespace governikus; StateProcessCertificatesFromEac2::StateProcessCertificatesFromEac2(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateProcessCertificatesFromEac2.h b/src/core/states/StateProcessCertificatesFromEac2.h index 0b2eae0..443a42d 100644 --- a/src/core/states/StateProcessCertificatesFromEac2.h +++ b/src/core/states/StateProcessCertificatesFromEac2.h @@ -6,19 +6,20 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateProcessCertificatesFromEac2 - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; - friend class ::test_StateProcessCertificatesFromEac2; explicit StateProcessCertificatesFromEac2(const QSharedPointer& pContext); virtual void run() override; diff --git a/src/core/states/StateProcessing.cpp b/src/core/states/StateProcessing.cpp index b485ef9..93c2b82 100644 --- a/src/core/states/StateProcessing.cpp +++ b/src/core/states/StateProcessing.cpp @@ -7,7 +7,8 @@ using namespace governikus; StateProcessing::StateProcessing(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateProcessing.h b/src/core/states/StateProcessing.h index cb146f4..cdbcb55 100644 --- a/src/core/states/StateProcessing.h +++ b/src/core/states/StateProcessing.h @@ -6,14 +6,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateProcessing - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateRedirectBrowser.cpp b/src/core/states/StateRedirectBrowser.cpp index 290618f..ba98b7d 100644 --- a/src/core/states/StateRedirectBrowser.cpp +++ b/src/core/states/StateRedirectBrowser.cpp @@ -15,19 +15,24 @@ using namespace governikus; StateRedirectBrowser::StateRedirectBrowser(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } void StateRedirectBrowser::run() { +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + // Only skip redirects on mobile platforms because it induces a forced focus change if (getContext()->isSkipRedirect()) { qDebug() << "Skipping redirect, Workflow pending"; Q_EMIT fireContinue(); } - else if (getContext()->isTcTokenNotFound()) + else +#endif + if (getContext()->isTcTokenNotFound()) { sendErrorPage(HTTP_STATUS_NOT_FOUND); } @@ -38,13 +43,13 @@ void StateRedirectBrowser::run() else { bool redirectSuccess; - if (!getContext()->getStartPaosResult().isOk()) + if (getContext()->getStartPaosResult().isOk()) { - redirectSuccess = sendRedirect(getContext()->getRefreshUrl(), getContext()->getStartPaosResult()); + redirectSuccess = sendRedirect(getContext()->getRefreshUrl(), getContext()->getStatus()); } else { - redirectSuccess = sendRedirect(getContext()->getRefreshUrl(), getContext()->getStatus()); + redirectSuccess = sendRedirect(getContext()->getRefreshUrl(), getContext()->getStartPaosResult()); } if (redirectSuccess) diff --git a/src/core/states/StateRedirectBrowser.h b/src/core/states/StateRedirectBrowser.h index b6ed65a..07a291c 100644 --- a/src/core/states/StateRedirectBrowser.h +++ b/src/core/states/StateRedirectBrowser.h @@ -6,9 +6,10 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" #include "ECardApiResult.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" #include @@ -16,7 +17,8 @@ namespace governikus { class StateRedirectBrowser - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateSelectPasswordId.cpp b/src/core/states/StateSelectPasswordId.cpp index bfbb8ce..4a97ab1 100644 --- a/src/core/states/StateSelectPasswordId.cpp +++ b/src/core/states/StateSelectPasswordId.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateSelectPasswordId::StateSelectPasswordId(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateSelectPasswordId.h b/src/core/states/StateSelectPasswordId.h index d23c1cc..3971581 100644 --- a/src/core/states/StateSelectPasswordId.h +++ b/src/core/states/StateSelectPasswordId.h @@ -4,21 +4,19 @@ #pragma once -#include "AbstractGenericState.h" - +#include "AbstractState.h" #include "context/WorkflowContext.h" - -class test_StateSelectPasswordId; +#include "GenericContextContainer.h" namespace governikus { class StateSelectPasswordId - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; - friend class ::test_StateSelectPasswordId; explicit StateSelectPasswordId(const QSharedPointer& pContext); virtual void run() override; diff --git a/src/core/states/StateSelectReader.cpp b/src/core/states/StateSelectReader.cpp index 0d054c3..a80bcd4 100644 --- a/src/core/states/StateSelectReader.cpp +++ b/src/core/states/StateSelectReader.cpp @@ -16,7 +16,8 @@ using namespace governikus; StateSelectReader::StateSelectReader(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -41,10 +42,16 @@ void StateSelectReader::run() if (!Env::getSingleton()->isUsedAsSDK()) { - const auto& readerPlugInTypes = getContext()->getReaderPlugInTypes(); + const auto& readerPlugInTypes = Enum::getList(); + const auto& enabledPlugInTypes = getContext()->getReaderPlugInTypes(); for (const auto t : readerPlugInTypes) { - readerManager->startScan(t); + if (enabledPlugInTypes.contains(t)) + { + readerManager->startScan(t); + continue; + } + readerManager->stopScan(t); } } } @@ -54,13 +61,28 @@ void StateSelectReader::onReaderInfoChanged() { const QSharedPointer context = getContext(); Q_ASSERT(context); + bool currentReaderHasEidCardButInsufficientApduLength = false; const QVector& plugInTypes = context->getReaderPlugInTypes(); - const auto allReaders = Env::getSingleton()->getReaderInfos(plugInTypes); - const QVector selectableReaders = filter([](const ReaderInfo& info) + const auto allReaders = Env::getSingleton()->getReaderInfos(ReaderFilter(plugInTypes)); + QVector selectableReaders; + + for (const auto& info : allReaders) + { + if (info.isConnected() && (!requiresCard(info.getPlugInType()) || info.hasEidCard())) + { + if (info.sufficientApduLength()) { - return info.isConnected() && (!requiresCard(info.getPlugInType()) || info.hasEidCard()); - }, allReaders); + selectableReaders.append(info); + } + else + { + currentReaderHasEidCardButInsufficientApduLength = true; + } + } + } + + context->setCurrentReaderHasEidCardButInsufficientApduLength(currentReaderHasEidCardButInsufficientApduLength); if (selectableReaders.isEmpty()) { @@ -79,26 +101,7 @@ void StateSelectReader::onReaderInfoChanged() } -void StateSelectReader::onAbort() -{ - const QSharedPointer context = getContext(); - Q_ASSERT(context); - - const auto& readerName = context->getReaderName(); - if (!readerName.isEmpty()) - { - const auto readerManager = Env::getSingleton(); - const ReaderInfo readerInfo = readerManager->getReaderInfo(readerName); - if (readerInfo.isConnected()) - { - readerManager->disconnectReader(readerName); - } - } - Q_EMIT fireRetry(); -} - - -void StateSelectReader::onReaderDeviceError(const GlobalStatus pErrorCode) +void StateSelectReader::onReaderDeviceError(const GlobalStatus& pErrorCode) { if (pErrorCode.isError() && !pErrorCode.is(GlobalStatus::Code::Workflow_Reader_Device_Scan_Error)) { @@ -113,13 +116,11 @@ void StateSelectReader::onEntry(QEvent* pEvent) const WorkflowContext* const context = getContext().data(); Q_ASSERT(context); - mConnections += connect(context, &WorkflowContext::fireAbortCardSelection, this, &StateSelectReader::onAbort); - /* * Note: the plugin types to be used in this state must be already set in the workflow context before this state is entered. * Changing the plugin types in the context, e.g. from {NFC} to {BLUETOOTH}, causes the state to be left with a fireRetry signal. */ mConnections += connect(context, &WorkflowContext::fireReaderPlugInTypesChanged, this, &StateSelectReader::fireRetry); - AbstractGenericState::onEntry(pEvent); + AbstractState::onEntry(pEvent); } diff --git a/src/core/states/StateSelectReader.h b/src/core/states/StateSelectReader.h index 98ab9b8..7d336bc 100644 --- a/src/core/states/StateSelectReader.h +++ b/src/core/states/StateSelectReader.h @@ -4,19 +4,19 @@ #pragma once -#include "AbstractGenericState.h" +#include "AbstractState.h" +#include "GenericContextContainer.h" -class test_StateSelectReader; namespace governikus { class StateSelectReader - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; - friend class ::test_StateSelectReader; private: explicit StateSelectReader(const QSharedPointer& pContext); @@ -26,8 +26,7 @@ class StateSelectReader private Q_SLOTS: void onReaderInfoChanged(); - void onAbort(); - void onReaderDeviceError(const GlobalStatus pError); + void onReaderDeviceError(const GlobalStatus& pError); public: void onEntry(QEvent* pEvent) override; diff --git a/src/core/states/StateSendWhitelistSurvey.cpp b/src/core/states/StateSendWhitelistSurvey.cpp index bed1e9c..ac1db76 100644 --- a/src/core/states/StateSendWhitelistSurvey.cpp +++ b/src/core/states/StateSendWhitelistSurvey.cpp @@ -6,7 +6,7 @@ #include "AppSettings.h" #include "ReaderManager.h" -#include "SurveyHandler.h" +#include "SurveyModel.h" Q_DECLARE_LOGGING_CATEGORY(statemachine) @@ -14,7 +14,8 @@ using namespace governikus; StateSendWhitelistSurvey::StateSendWhitelistSurvey(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -48,17 +49,7 @@ void StateSendWhitelistSurvey::run() return; } - const QString& readerName = authContext->getReaderName(); - if (readerName.isEmpty()) - { - qWarning() << "No reader information available, cannot send survey to whitelist server."; - Q_ASSERT(false); - Q_EMIT fireAbort(); - return; - } - - const ReaderInfo& readerInfo = Env::getSingleton()->getReaderInfo(readerName); - SurveyHandler().sendSurvey(readerInfo.getMaxApduLength()); + Env::getSingleton()->transmitSurvey(); #endif Q_EMIT fireContinue(); diff --git a/src/core/states/StateSendWhitelistSurvey.h b/src/core/states/StateSendWhitelistSurvey.h index 7cdd3e4..b2824d2 100644 --- a/src/core/states/StateSendWhitelistSurvey.h +++ b/src/core/states/StateSendWhitelistSurvey.h @@ -7,14 +7,17 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" +#include namespace governikus { class StateSendWhitelistSurvey - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateShowSelfInfo.cpp b/src/core/states/StateShowSelfInfo.cpp index a17e7f0..b292c71 100644 --- a/src/core/states/StateShowSelfInfo.cpp +++ b/src/core/states/StateShowSelfInfo.cpp @@ -8,7 +8,8 @@ using namespace governikus; StateShowSelfInfo::StateShowSelfInfo(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateShowSelfInfo.h b/src/core/states/StateShowSelfInfo.h index 3e3278d..261a861 100644 --- a/src/core/states/StateShowSelfInfo.h +++ b/src/core/states/StateShowSelfInfo.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateShowSelfInfo - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateStartPaos.cpp b/src/core/states/StateStartPaos.cpp index 92969a9..114da07 100644 --- a/src/core/states/StateStartPaos.cpp +++ b/src/core/states/StateStartPaos.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateStartPaos::StateStartPaos(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateStartPaos.h b/src/core/states/StateStartPaos.h index eea8889..837db5d 100644 --- a/src/core/states/StateStartPaos.h +++ b/src/core/states/StateStartPaos.h @@ -6,14 +6,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateStartPaos - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateStartPaosResponse.cpp b/src/core/states/StateStartPaosResponse.cpp index 3bafdbb..c848af8 100644 --- a/src/core/states/StateStartPaosResponse.cpp +++ b/src/core/states/StateStartPaosResponse.cpp @@ -7,7 +7,8 @@ using namespace governikus; StateStartPaosResponse::StateStartPaosResponse(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateStartPaosResponse.h b/src/core/states/StateStartPaosResponse.h index 10f3a1b..0a80202 100644 --- a/src/core/states/StateStartPaosResponse.h +++ b/src/core/states/StateStartPaosResponse.h @@ -6,14 +6,16 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateStartPaosResponse - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateTransmit.cpp b/src/core/states/StateTransmit.cpp index 7ef36a2..283de89 100644 --- a/src/core/states/StateTransmit.cpp +++ b/src/core/states/StateTransmit.cpp @@ -8,7 +8,8 @@ using namespace governikus; StateTransmit::StateTransmit(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } @@ -49,3 +50,11 @@ void StateTransmit::onCardCommandDone(QSharedPointer pCommand) Q_EMIT fireAbort(); } } + + +void StateTransmit::onEntry(QEvent* pEvent) +{ + //: INFO ALL_PLATFORMS Status message after the PIN was entered, communication between eID server and card is running. + getContext()->setProgress(60, tr("Reading data")); + AbstractState::onEntry(pEvent); +} diff --git a/src/core/states/StateTransmit.h b/src/core/states/StateTransmit.h index 73b6c71..a61d3f4 100644 --- a/src/core/states/StateTransmit.h +++ b/src/core/states/StateTransmit.h @@ -6,9 +6,10 @@ #pragma once +#include "AbstractState.h" #include "command/TransmitCommand.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" class test_StateTransmit; @@ -16,7 +17,8 @@ namespace governikus { class StateTransmit - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; @@ -27,6 +29,9 @@ class StateTransmit private Q_SLOTS: friend class ::test_StateTransmit; void onCardCommandDone(QSharedPointer pCommand); + + public: + void onEntry(QEvent* pEvent) override; }; } // namespace governikus diff --git a/src/core/states/StateUnfortunateCardPosition.cpp b/src/core/states/StateUnfortunateCardPosition.cpp index c1ca4a1..d955859 100644 --- a/src/core/states/StateUnfortunateCardPosition.cpp +++ b/src/core/states/StateUnfortunateCardPosition.cpp @@ -2,14 +2,16 @@ * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany */ +#include "AbstractState.h" +#include "GenericContextContainer.h" #include "StateUnfortunateCardPosition.h" - using namespace governikus; StateUnfortunateCardPosition::StateUnfortunateCardPosition(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateUnfortunateCardPosition.h b/src/core/states/StateUnfortunateCardPosition.h index cb4a105..62770a9 100644 --- a/src/core/states/StateUnfortunateCardPosition.h +++ b/src/core/states/StateUnfortunateCardPosition.h @@ -4,14 +4,16 @@ #pragma once +#include "AbstractState.h" #include "context/WorkflowContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateUnfortunateCardPosition - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateUpdateRetryCounter.cpp b/src/core/states/StateUpdateRetryCounter.cpp index 6389055..a73d64b 100644 --- a/src/core/states/StateUpdateRetryCounter.cpp +++ b/src/core/states/StateUpdateRetryCounter.cpp @@ -14,7 +14,8 @@ using namespace governikus; StateUpdateRetryCounter::StateUpdateRetryCounter(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -46,7 +47,12 @@ void StateUpdateRetryCounter::onUpdateRetryCounterDone(QSharedPointergetCardConnection()->getReaderInfo().getRetryCounter() != -1 && "Retry counter must be intialized if command has succeeded."); +#ifndef QT_NO_DEBUG + if (getContext()->getCardConnection()->getReaderInfo().getRetryCounter() == -1) + { + qCWarning(statemachine) << "Retry counter should be intialized if command has succeeded."; + } +#endif Q_EMIT fireContinue(); } diff --git a/src/core/states/StateUpdateRetryCounter.h b/src/core/states/StateUpdateRetryCounter.h index 6cc5fa9..6ed9755 100644 --- a/src/core/states/StateUpdateRetryCounter.h +++ b/src/core/states/StateUpdateRetryCounter.h @@ -7,9 +7,9 @@ #pragma once -#include "AbstractGenericState.h" - +#include "AbstractState.h" #include "context/ChangePinContext.h" +#include "GenericContextContainer.h" class test_StateUpdateRetryCounter; @@ -17,7 +17,8 @@ namespace governikus { class StateUpdateRetryCounter - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateVerifyRetryCounter.cpp b/src/core/states/StateVerifyRetryCounter.cpp index df2d2e3..d6bef0b 100644 --- a/src/core/states/StateVerifyRetryCounter.cpp +++ b/src/core/states/StateVerifyRetryCounter.cpp @@ -11,7 +11,8 @@ using namespace governikus; StateVerifyRetryCounter::StateVerifyRetryCounter(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/StateVerifyRetryCounter.h b/src/core/states/StateVerifyRetryCounter.h index 8ee1943..fc83eba 100644 --- a/src/core/states/StateVerifyRetryCounter.h +++ b/src/core/states/StateVerifyRetryCounter.h @@ -4,14 +4,17 @@ #pragma once +#include "AbstractState.h" #include "context/WorkflowContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" + namespace governikus { class StateVerifyRetryCounter - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/StateWriteHistory.cpp b/src/core/states/StateWriteHistory.cpp index 54469a1..2f93db2 100644 --- a/src/core/states/StateWriteHistory.cpp +++ b/src/core/states/StateWriteHistory.cpp @@ -12,7 +12,8 @@ using namespace governikus; StateWriteHistory::StateWriteHistory(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -44,6 +45,7 @@ void StateWriteHistory::run() CVCertificateBody body = getContext()->getDidAuthenticateEac1()->getCvCertificates().at(0)->getBody(); QString effectiveDate = body.getCertificateEffectiveDate().toString(Qt::DefaultLocaleShortDate); QString expirationDate = body.getCertificateExpirationDate().toString(Qt::DefaultLocaleShortDate); + //: LABEL ALL_PLATFORMS QString validity = tr("Validity:\n%1 - %2").arg(effectiveDate, expirationDate); QStringList requestedData; @@ -68,3 +70,12 @@ void StateWriteHistory::run() } Q_EMIT fireContinue(); } + + +void StateWriteHistory::onEntry(QEvent* pEvent) +{ + //: INFO ALL_PLATFORMS Status message after the authentication was completed, the results are prepared for the user, mainly relevant for the self authentication since it takes some more time. + const auto text = getContext()->getStatus().isNoError() ? tr("Preparing results") : QString(); // The empty string is set to not confuse users when they get redirected to the service provider + getContext()->setProgress(100, text); + AbstractState::onEntry(pEvent); +} diff --git a/src/core/states/StateWriteHistory.h b/src/core/states/StateWriteHistory.h index b6c5c85..0cf8317 100644 --- a/src/core/states/StateWriteHistory.h +++ b/src/core/states/StateWriteHistory.h @@ -7,21 +7,26 @@ #pragma once +#include "AbstractState.h" #include "context/AuthContext.h" -#include "states/AbstractGenericState.h" +#include "GenericContextContainer.h" namespace governikus { class StateWriteHistory - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; explicit StateWriteHistory(const QSharedPointer& pContext); virtual void run() override; + + public: + void onEntry(QEvent* pEvent) override; }; } // namespace governikus diff --git a/src/core/states/remote_service/StateChangePinRemote.cpp b/src/core/states/remote_service/StateChangePinRemote.cpp index 8dde9f3..0d15322 100644 --- a/src/core/states/remote_service/StateChangePinRemote.cpp +++ b/src/core/states/remote_service/StateChangePinRemote.cpp @@ -16,7 +16,8 @@ using namespace governikus; StateChangePinRemote::StateChangePinRemote(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/remote_service/StateChangePinRemote.h b/src/core/states/remote_service/StateChangePinRemote.h index 8bcba09..c483faf 100644 --- a/src/core/states/remote_service/StateChangePinRemote.h +++ b/src/core/states/remote_service/StateChangePinRemote.h @@ -8,7 +8,9 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" + class test_StateChangePinRemote; @@ -16,7 +18,8 @@ namespace governikus { class StateChangePinRemote - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StateChangePinResponse.cpp b/src/core/states/remote_service/StateChangePinResponse.cpp index aabcbef..65a7a3e 100644 --- a/src/core/states/remote_service/StateChangePinResponse.cpp +++ b/src/core/states/remote_service/StateChangePinResponse.cpp @@ -11,7 +11,8 @@ using namespace governikus; StateChangePinResponse::StateChangePinResponse(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/remote_service/StateChangePinResponse.h b/src/core/states/remote_service/StateChangePinResponse.h index ba38a13..9df62d4 100644 --- a/src/core/states/remote_service/StateChangePinResponse.h +++ b/src/core/states/remote_service/StateChangePinResponse.h @@ -8,13 +8,15 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" namespace governikus { class StateChangePinResponse - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StateEnterNewPacePinRemote.cpp b/src/core/states/remote_service/StateEnterNewPacePinRemote.cpp index 2267b77..b6bbfab 100644 --- a/src/core/states/remote_service/StateEnterNewPacePinRemote.cpp +++ b/src/core/states/remote_service/StateEnterNewPacePinRemote.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateEnterNewPacePinRemote::StateEnterNewPacePinRemote(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -39,5 +40,5 @@ void StateEnterNewPacePinRemote::onEntry(QEvent* pEvent) } mConnections += connect(getContext().data(), &RemoteServiceContext::fireCancelPasswordRequest, this, &StateEnterNewPacePinRemote::onCancelChangePin); - AbstractGenericState::onEntry(pEvent); + AbstractState::onEntry(pEvent); } diff --git a/src/core/states/remote_service/StateEnterNewPacePinRemote.h b/src/core/states/remote_service/StateEnterNewPacePinRemote.h index dcc1398..a6fd06a 100644 --- a/src/core/states/remote_service/StateEnterNewPacePinRemote.h +++ b/src/core/states/remote_service/StateEnterNewPacePinRemote.h @@ -5,13 +5,15 @@ #pragma once #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" namespace governikus { class StateEnterNewPacePinRemote - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StateEnterPacePasswordRemote.cpp b/src/core/states/remote_service/StateEnterPacePasswordRemote.cpp index 39749d6..4599144 100644 --- a/src/core/states/remote_service/StateEnterPacePasswordRemote.cpp +++ b/src/core/states/remote_service/StateEnterPacePasswordRemote.cpp @@ -9,7 +9,8 @@ using namespace governikus; StateEnterPacePasswordRemote::StateEnterPacePasswordRemote(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -42,5 +43,5 @@ void StateEnterPacePasswordRemote::onEntry(QEvent* pEvent) } mConnections += connect(getContext().data(), &RemoteServiceContext::fireCancelPasswordRequest, this, &StateEnterPacePasswordRemote::onCancelEstablishPaceChannel); - AbstractGenericState::onEntry(pEvent); + AbstractState::onEntry(pEvent); } diff --git a/src/core/states/remote_service/StateEnterPacePasswordRemote.h b/src/core/states/remote_service/StateEnterPacePasswordRemote.h index f8e8004..b1a155d 100644 --- a/src/core/states/remote_service/StateEnterPacePasswordRemote.h +++ b/src/core/states/remote_service/StateEnterPacePasswordRemote.h @@ -5,13 +5,15 @@ #pragma once #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" namespace governikus { class StateEnterPacePasswordRemote - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StateEstablishPaceChannelRemote.cpp b/src/core/states/remote_service/StateEstablishPaceChannelRemote.cpp index d4e2c1f..8d4e7e1 100644 --- a/src/core/states/remote_service/StateEstablishPaceChannelRemote.cpp +++ b/src/core/states/remote_service/StateEstablishPaceChannelRemote.cpp @@ -16,7 +16,8 @@ using namespace governikus; StateEstablishPaceChannelRemote::StateEstablishPaceChannelRemote(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/remote_service/StateEstablishPaceChannelRemote.h b/src/core/states/remote_service/StateEstablishPaceChannelRemote.h index 25c6fbd..09b3ad5 100644 --- a/src/core/states/remote_service/StateEstablishPaceChannelRemote.h +++ b/src/core/states/remote_service/StateEstablishPaceChannelRemote.h @@ -8,7 +8,8 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" class test_StateEstablishPaceChannelRemote; @@ -16,7 +17,8 @@ namespace governikus { class StateEstablishPaceChannelRemote - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StateEstablishPaceChannelResponse.cpp b/src/core/states/remote_service/StateEstablishPaceChannelResponse.cpp index 521cef3..824ac6b 100644 --- a/src/core/states/remote_service/StateEstablishPaceChannelResponse.cpp +++ b/src/core/states/remote_service/StateEstablishPaceChannelResponse.cpp @@ -10,7 +10,8 @@ using namespace governikus; StateEstablishPaceChannelResponse::StateEstablishPaceChannelResponse(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/remote_service/StateEstablishPaceChannelResponse.h b/src/core/states/remote_service/StateEstablishPaceChannelResponse.h index 6748b13..e29ee1d 100644 --- a/src/core/states/remote_service/StateEstablishPaceChannelResponse.h +++ b/src/core/states/remote_service/StateEstablishPaceChannelResponse.h @@ -8,15 +8,15 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" - -class test_StateEstablishPaceChannelRemote; +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" namespace governikus { class StateEstablishPaceChannelResponse - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StatePrepareChangePinRemote.cpp b/src/core/states/remote_service/StatePrepareChangePinRemote.cpp index 4dcb2fb..9e4066d 100644 --- a/src/core/states/remote_service/StatePrepareChangePinRemote.cpp +++ b/src/core/states/remote_service/StatePrepareChangePinRemote.cpp @@ -16,7 +16,8 @@ using namespace governikus; StatePrepareChangePinRemote::StatePrepareChangePinRemote(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/remote_service/StatePrepareChangePinRemote.h b/src/core/states/remote_service/StatePrepareChangePinRemote.h index 4781028..42aeed7 100644 --- a/src/core/states/remote_service/StatePrepareChangePinRemote.h +++ b/src/core/states/remote_service/StatePrepareChangePinRemote.h @@ -6,14 +6,16 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" namespace governikus { class StatePrepareChangePinRemote - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StatePreparePaceRemote.cpp b/src/core/states/remote_service/StatePreparePaceRemote.cpp index 1d88b5a..fd2abb3 100644 --- a/src/core/states/remote_service/StatePreparePaceRemote.cpp +++ b/src/core/states/remote_service/StatePreparePaceRemote.cpp @@ -16,7 +16,8 @@ using namespace governikus; StatePreparePaceRemote::StatePreparePaceRemote(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) { } @@ -56,8 +57,10 @@ void StatePreparePaceRemote::run() } break; - default: - Q_UNREACHABLE(); + case PacePasswordId::PACE_MRZ: + case PacePasswordId::UNKNOWN: + qCritical() << "Cannot handle PacePasswordId:" << parser.getPasswordId(); + break; } } diff --git a/src/core/states/remote_service/StatePreparePaceRemote.h b/src/core/states/remote_service/StatePreparePaceRemote.h index 36b5060..c0ec5e0 100644 --- a/src/core/states/remote_service/StatePreparePaceRemote.h +++ b/src/core/states/remote_service/StatePreparePaceRemote.h @@ -6,14 +6,16 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" namespace governikus { class StatePreparePaceRemote - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; diff --git a/src/core/states/remote_service/StateProcessRemoteMessages.cpp b/src/core/states/remote_service/StateProcessRemoteMessages.cpp index 68a9599..30ca318 100644 --- a/src/core/states/remote_service/StateProcessRemoteMessages.cpp +++ b/src/core/states/remote_service/StateProcessRemoteMessages.cpp @@ -14,7 +14,8 @@ using namespace governikus; StateProcessRemoteMessages::StateProcessRemoteMessages(const QSharedPointer& pContext) - : AbstractGenericState(pContext, false) + : AbstractState(pContext, false) + , GenericContextContainer(pContext) , mMessageConnections() { } @@ -31,6 +32,7 @@ void StateProcessRemoteMessages::run() const QSharedPointer server = context->getRemoteServer(); Q_ASSERT(server); + mConnections += connect(Env::getSingleton(), &ReaderManager::fireStatusChanged, this, &StateProcessRemoteMessages::onReaderStatusChanged); mConnections += connect(server.data(), &RemoteServer::fireMessageHandlerAdded, this, &StateProcessRemoteMessages::onMessageHandlerAdded); const auto messageHandler = server->getMessageHandler(); @@ -73,6 +75,26 @@ void StateProcessRemoteMessages::onClosed() } +void StateProcessRemoteMessages::onReaderStatusChanged(const ReaderManagerPlugInInfo& pInfo) +{ + if (pInfo.getPlugInType() != ReaderManagerPlugInType::NFC) + { + return; + } + + if (Env::getSingleton()->isScanRunning(ReaderManagerPlugInType::NFC)) + { + return; + } + + const auto& context = getContext(); + if (context->getRemoteServer()->isConnected()) + { + Q_EMIT fireAbort(); + } +} + + void StateProcessRemoteMessages::onEstablishPaceChannel(const QSharedPointer& pMessage, const QSharedPointer& pConnection) { Q_ASSERT(pMessage); diff --git a/src/core/states/remote_service/StateProcessRemoteMessages.h b/src/core/states/remote_service/StateProcessRemoteMessages.h index 5e826a4..2046840 100644 --- a/src/core/states/remote_service/StateProcessRemoteMessages.h +++ b/src/core/states/remote_service/StateProcessRemoteMessages.h @@ -9,7 +9,9 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "ReaderManager.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" class test_StateProcessRemoteMessages; @@ -17,7 +19,8 @@ namespace governikus { class StateProcessRemoteMessages - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; @@ -32,6 +35,7 @@ class StateProcessRemoteMessages private Q_SLOTS: void onMessageHandlerAdded(const QSharedPointer& pHandler); void onClosed(); + void onReaderStatusChanged(const ReaderManagerPlugInInfo& pInfo); void onModifyPin(const QSharedPointer& pMessage, const QSharedPointer& pConnection); void onEstablishPaceChannel(const QSharedPointer& pMessage, const QSharedPointer& pConnection); diff --git a/src/core/states/remote_service/StateStartRemoteService.cpp b/src/core/states/remote_service/StateStartRemoteService.cpp index f2529c0..2302975 100644 --- a/src/core/states/remote_service/StateStartRemoteService.cpp +++ b/src/core/states/remote_service/StateStartRemoteService.cpp @@ -11,7 +11,8 @@ using namespace governikus; StateStartRemoteService::StateStartRemoteService(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/remote_service/StateStartRemoteService.h b/src/core/states/remote_service/StateStartRemoteService.h index 681b555..e2f1385 100644 --- a/src/core/states/remote_service/StateStartRemoteService.h +++ b/src/core/states/remote_service/StateStartRemoteService.h @@ -8,19 +8,19 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" -class test_StateStartRemoteService; namespace governikus { class StateStartRemoteService - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; - friend class ::test_StateStartRemoteService; explicit StateStartRemoteService(const QSharedPointer& pContext); diff --git a/src/core/states/remote_service/StateStopRemoteService.cpp b/src/core/states/remote_service/StateStopRemoteService.cpp index cc8ce1d..fcd5ca0 100644 --- a/src/core/states/remote_service/StateStopRemoteService.cpp +++ b/src/core/states/remote_service/StateStopRemoteService.cpp @@ -10,7 +10,8 @@ using namespace governikus; StateStopRemoteService::StateStopRemoteService(const QSharedPointer& pContext) - : AbstractGenericState(pContext) + : AbstractState(pContext) + , GenericContextContainer(pContext) { } diff --git a/src/core/states/remote_service/StateStopRemoteService.h b/src/core/states/remote_service/StateStopRemoteService.h index 9deee03..d018c1a 100644 --- a/src/core/states/remote_service/StateStopRemoteService.h +++ b/src/core/states/remote_service/StateStopRemoteService.h @@ -8,19 +8,19 @@ #include "context/RemoteServiceContext.h" -#include "states/AbstractGenericState.h" +#include "states/AbstractState.h" +#include "states/GenericContextContainer.h" -class test_StateStopRemoteService; namespace governikus { class StateStopRemoteService - : public AbstractGenericState + : public AbstractState + , public GenericContextContainer { Q_OBJECT friend class StateBuilder; - friend class ::test_StateStopRemoteService; explicit StateStopRemoteService(const QSharedPointer& pContext); diff --git a/src/export/PdfCreator.cpp b/src/export/PdfCreator.cpp index 60320db..010b1cc 100644 --- a/src/export/PdfCreator.cpp +++ b/src/export/PdfCreator.cpp @@ -51,7 +51,8 @@ void PdfCreator::createHeader(const QString& pTitle, const QString& pHeadline) "").arg( pTitle, QCoreApplication::applicationName(), - tr("AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Ministry of the Interior, Building and Community."), + //: LABEL ALL_PLATFORMS + tr("AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Office for Information Security."), pHeadline); QSvgRenderer renderer(QStringLiteral(":/images/npa.svg")); @@ -74,6 +75,7 @@ void PdfCreator::createContent(const QString& pContent) void PdfCreator::createFooter() { const auto& footer = QStringLiteral("

    %1

    ").arg( + //: LABEL ALL_PLATFORMS tr("For further information, please see https://www.ausweisapp.bund.de/")); mFooter.setHtml(footer); diff --git a/src/export/PdfExporter.cpp b/src/export/PdfExporter.cpp index 713328e..3525fef 100644 --- a/src/export/PdfExporter.cpp +++ b/src/export/PdfExporter.cpp @@ -108,25 +108,37 @@ bool PdfExporter::exportHistory() const auto& locale = LanguageLoader::getInstance().getUsedLocale(); - initTable(3, {180, 80}, {tr("Date"), tr("Details")}); + initTable(3, {180, 80}, + //: LABEL ALL_PLATFORMS + {tr("Date"), + //: LABEL ALL_PLATFORMS + tr("Details")}); + //: LABEL ALL_PLATFORMS const auto& dateTimeFormat = tr("dd.MM.yyyy hh:mm AP"); const auto& infos = Env::getSingleton()->getHistorySettings().getHistoryInfos(); for (const auto& entry : infos) { toggleRowColor(); const QString& dateTimeEntry = locale.toString(entry.getDateTime(), dateTimeFormat); + //: LABEL ALL_PLATFORMS addTableRow({dateTimeEntry, tr("Provider:"), entry.getSubjectName()}); + //: LABEL ALL_PLATFORMS addTableRow({QString(), tr("Purpose:"), entry.getPurpose()}); const auto& data = AccessRoleAndRightsUtil::joinFromTechnicalName(entry.getRequestedData()); + //: LABEL ALL_PLATFORMS addTableRow({QString(), tr("Data:"), data}); } closeTable(); const auto& now = QDateTime::currentDateTime(); + //: LABEL ALL_PLATFORMS QString date = locale.toString(now, tr("dd.MM.yyyy")); + //: LABEL ALL_PLATFORMS QString time = locale.toString(now, tr("hh:mm AP")); + //: LABEL ALL_PLATFORMS const auto& headline = tr("At %1 %2 the following data were saved:").arg(date, time); + //: LABEL ALL_PLATFORMS PdfCreator pdf(mFilename, tr("History"), headline, getContent()); const bool success = pdf.save(); checkOpenFile(success); @@ -142,7 +154,11 @@ bool PdfExporter::exportSelfInfo(const QDateTime& pDate, const QVector #include +static uint32_t max_header_size = HTTP_MAX_HEADER_SIZE; + #ifndef ULLONG_MAX # define ULLONG_MAX ((uint64_t) -1) /* 2^64-1 */ #endif @@ -49,6 +51,7 @@ #define SET_ERRNO(e) \ do { \ + parser->nread = nread; \ parser->http_errno = (e); \ } while(0) @@ -56,6 +59,7 @@ do { \ #define UPDATE_STATE(V) p_state = (enum state) (V); #define RETURN(V) \ do { \ + parser->nread = nread; \ parser->state = CURRENT_STATE(); \ return (V); \ } while (0); @@ -137,20 +141,20 @@ do { \ } while (0) /* Don't allow the total size of the HTTP headers (including the status - * line) to exceed HTTP_MAX_HEADER_SIZE. This check is here to protect + * line) to exceed max_header_size. This check is here to protect * embedders against denial-of-service attacks where the attacker feeds * us a never-ending header that the embedder keeps buffering. * * This check is arguably the responsibility of embedders but we're doing * it on the embedder's behalf because most won't bother and this way we - * make the web a little safer. HTTP_MAX_HEADER_SIZE is still far bigger + * make the web a little safer. max_header_size is still far bigger * than any reasonable request or response so this should never affect * day-to-day operation. */ #define COUNT_HEADER_SIZE(V) \ do { \ - parser->nread += (V); \ - if (UNLIKELY(parser->nread > (HTTP_MAX_HEADER_SIZE))) { \ + nread += (uint32_t)(V); \ + if (UNLIKELY(nread > max_header_size)) { \ SET_ERRNO(HPE_HEADER_OVERFLOW); \ goto error; \ } \ @@ -192,7 +196,7 @@ static const char tokens[256] = { /* 24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us */ 0, 0, 0, 0, 0, 0, 0, 0, /* 32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' */ - 0, '!', 0, '#', '$', '%', '&', '\'', + ' ', '!', 0, '#', '$', '%', '&', '\'', /* 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / */ 0, 0, '*', '+', 0, '-', '.', 0, /* 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 */ @@ -312,6 +316,8 @@ enum state , s_req_http_HT , s_req_http_HTT , s_req_http_HTTP + , s_req_http_I + , s_req_http_IC , s_req_http_major , s_req_http_dot , s_req_http_minor @@ -419,14 +425,14 @@ enum http_host_state (c) == ';' || (c) == ':' || (c) == '&' || (c) == '=' || (c) == '+' || \ (c) == '$' || (c) == ',') -#define STRICT_TOKEN(c) (tokens[(unsigned char)c]) +#define STRICT_TOKEN(c) ((c == ' ') ? 0 : tokens[(unsigned char)c]) #if HTTP_PARSER_STRICT -#define TOKEN(c) (tokens[(unsigned char)c]) +#define TOKEN(c) STRICT_TOKEN(c) #define IS_URL_CHAR(c) (BIT_AT(normal_url_char, (unsigned char)c)) #define IS_HOST_CHAR(c) (IS_ALPHANUM(c) || (c) == '.' || (c) == '-') #else -#define TOKEN(c) ((c == ' ') ? ' ' : tokens[(unsigned char)c]) +#define TOKEN(c) tokens[(unsigned char)c] #define IS_URL_CHAR(c) \ (BIT_AT(normal_url_char, (unsigned char)c) || ((c) & 0x80)) #define IS_HOST_CHAR(c) \ @@ -540,7 +546,7 @@ parse_url_char(enum state s, const char ch) return s_dead; } - /* FALLTHROUGH */ + /* fall through */ case s_req_server_start: case s_req_server: if (ch == '/') { @@ -644,6 +650,7 @@ size_t http_parser_execute (http_parser *parser, const char *status_mark = 0; enum state p_state = (enum state) parser->state; const unsigned int lenient = parser->lenient_http_headers; + uint32_t nread = parser->nread; /* We're in an error state. Don't bother doing anything. */ if (HTTP_PARSER_ERRNO(parser) != HPE_OK) { @@ -755,21 +762,16 @@ reexecute: case s_start_res: { + if (ch == CR || ch == LF) + break; parser->flags = 0; parser->content_length = ULLONG_MAX; - switch (ch) { - case 'H': - UPDATE_STATE(s_res_H); - break; - - case CR: - case LF: - break; - - default: - SET_ERRNO(HPE_INVALID_CONSTANT); - goto error; + if (ch == 'H') { + UPDATE_STATE(s_res_H); + } else { + SET_ERRNO(HPE_INVALID_CONSTANT); + goto error; } CALLBACK_NOTIFY(message_begin); @@ -1086,11 +1088,17 @@ reexecute: case s_req_http_start: switch (ch) { + case ' ': + break; case 'H': UPDATE_STATE(s_req_http_H); break; - case ' ': - break; + case 'I': + if (parser->method == HTTP_SOURCE) { + UPDATE_STATE(s_req_http_I); + break; + } + /* fall through */ default: SET_ERRNO(HPE_INVALID_CONSTANT); goto error; @@ -1112,6 +1120,16 @@ reexecute: UPDATE_STATE(s_req_http_HTTP); break; + case s_req_http_I: + STRICT_CHECK(ch != 'C'); + UPDATE_STATE(s_req_http_IC); + break; + + case s_req_http_IC: + STRICT_CHECK(ch != 'E'); + UPDATE_STATE(s_req_http_HTTP); /* Treat "ICE" as "HTTP". */ + break; + case s_req_http_HTTP: STRICT_CHECK(ch != '/'); UPDATE_STATE(s_req_http_major); @@ -1238,8 +1256,14 @@ reexecute: break; switch (parser->header_state) { - case h_general: + case h_general: { + size_t left = data + len - p; + const char* pe = p + MIN(left, max_header_size); + while (p+1 < pe && TOKEN(p[1])) { + p++; + } break; + } case h_C: parser->index++; @@ -1339,13 +1363,14 @@ reexecute: } } - COUNT_HEADER_SIZE(p - start); - if (p == data + len) { --p; + COUNT_HEADER_SIZE(p - start); break; } + COUNT_HEADER_SIZE(p - start); + if (ch == ':') { UPDATE_STATE(s_header_value_discard_ws); CALLBACK_DATA(header_field); @@ -1369,7 +1394,7 @@ reexecute: break; } - /* FALLTHROUGH */ + /* fall through */ case s_header_value_start: { @@ -1411,6 +1436,11 @@ reexecute: parser->header_state = h_content_length_num; break; + /* when obsolete line folding is encountered for content length + * continue to the s_header_value state */ + case h_content_length_ws: + break; + case h_connection: /* looking for 'Connection: keep-alive' */ if (c == 'k') { @@ -1466,29 +1496,25 @@ reexecute: switch (h_state) { case h_general: - { - const char* p_cr; - const char* p_lf; - size_t limit = data + len - p; + { + size_t left = data + len - p; + const char* pe = p + MIN(left, max_header_size); - limit = MIN(limit, HTTP_MAX_HEADER_SIZE); - - p_cr = (const char*) memchr(p, CR, limit); - p_lf = (const char*) memchr(p, LF, limit); - if (p_cr != NULL) { - if (p_lf != NULL && p_cr >= p_lf) - p = p_lf; - else - p = p_cr; - } else if (UNLIKELY(p_lf != NULL)) { - p = p_lf; - } else { - p = data + len; + for (; p != pe; p++) { + ch = *p; + if (ch == CR || ch == LF) { + --p; + break; + } + if (!lenient && !IS_HEADER_CHAR(ch)) { + SET_ERRNO(HPE_INVALID_HEADER_TOKEN); + goto error; + } + } + if (p == data + len) + --p; + break; } - --p; - - break; - } case h_connection: case h_transfer_encoding: @@ -1498,7 +1524,7 @@ reexecute: case h_content_length: if (ch == ' ') break; h_state = h_content_length_num; - /* FALLTHROUGH */ + /* fall through */ case h_content_length_num: { @@ -1634,10 +1660,10 @@ reexecute: } parser->header_state = h_state; - COUNT_HEADER_SIZE(p - start); - if (p == data + len) --p; + + COUNT_HEADER_SIZE(p - start); break; } @@ -1655,6 +1681,10 @@ reexecute: case s_header_value_lws: { if (ch == ' ' || ch == '\t') { + if (parser->header_state == h_content_length_num) { + /* treat obsolete line folding as space */ + parser->header_state = h_content_length_ws; + } UPDATE_STATE(s_header_value_start); REEXECUTE(); } @@ -1707,6 +1737,11 @@ reexecute: case h_transfer_encoding_chunked: parser->flags |= F_CHUNKED; break; + case h_content_length: + /* do not allow empty content length */ + SET_ERRNO(HPE_INVALID_CONTENT_LENGTH); + goto error; + break; default: break; } @@ -1770,7 +1805,7 @@ reexecute: case 2: parser->upgrade = 1; - /* FALLTHROUGH */ + /* fall through */ case 1: parser->flags |= F_SKIPBODY; break; @@ -1794,6 +1829,7 @@ reexecute: STRICT_CHECK(ch != LF); parser->nread = 0; + nread = 0; hasBody = parser->flags & F_CHUNKED || (parser->content_length > 0 && parser->content_length != ULLONG_MAX); @@ -1888,7 +1924,7 @@ reexecute: case s_chunk_size_start: { - assert(parser->nread == 1); + assert(nread == 1); assert(parser->flags & F_CHUNKED); unhex_val = unhex[(unsigned char)ch]; @@ -1956,6 +1992,7 @@ reexecute: STRICT_CHECK(ch != LF); parser->nread = 0; + nread = 0; if (parser->content_length == 0) { parser->flags |= F_TRAILING; @@ -2002,6 +2039,7 @@ reexecute: assert(parser->flags & F_CHUNKED); STRICT_CHECK(ch != LF); parser->nread = 0; + nread = 0; UPDATE_STATE(s_chunk_size_start); CALLBACK_NOTIFY(chunk_complete); break; @@ -2013,7 +2051,7 @@ reexecute: } } - /* Run callbacks for any marks that we have leftover after we ran our of + /* Run callbacks for any marks that we have leftover after we ran out of * bytes. There should be at most one of these set, so it's OK to invoke * them in series (unset marks will not result in callbacks). * @@ -2095,6 +2133,16 @@ http_method_str (enum http_method m) return ELEM_AT(method_strings, m, ""); } +const char * +http_status_str (enum http_status s) +{ + switch (s) { +#define XX(num, name, string) case HTTP_STATUS_##name: return #string; + HTTP_STATUS_MAP(XX) +#undef XX + default: return ""; + } +} void http_parser_init (http_parser *parser, enum http_parser_type t) @@ -2155,7 +2203,7 @@ http_parse_host_char(enum http_host_state s, const char ch) { return s_http_host; } - /* FALLTHROUGH */ + /* fall through */ case s_http_host_v6_end: if (ch == ':') { return s_http_host_port_start; @@ -2168,7 +2216,7 @@ http_parse_host_char(enum http_host_state s, const char ch) { return s_http_host_v6_end; } - /* FALLTHROUGH */ + /* fall through */ case s_http_host_v6_start: if (IS_HEX(ch) || ch == ':' || ch == '.') { return s_http_host_v6; @@ -2184,7 +2232,7 @@ http_parse_host_char(enum http_host_state s, const char ch) { return s_http_host_v6_end; } - /* FALLTHROUGH */ + /* fall through */ case s_http_host_v6_zone_start: /* RFC 6874 Zone ID consists of 1*( unreserved / pct-encoded) */ if (IS_ALPHANUM(ch) || ch == '%' || ch == '.' || ch == '-' || ch == '_' || @@ -2230,14 +2278,14 @@ http_parse_host(const char * buf, struct http_parser_url *u, int found_at) { switch(new_s) { case s_http_host: if (s != s_http_host) { - u->field_data[UF_HOST].off = p - buf; + u->field_data[UF_HOST].off = (uint16_t)(p - buf); } u->field_data[UF_HOST].len++; break; case s_http_host_v6: if (s != s_http_host_v6) { - u->field_data[UF_HOST].off = p - buf; + u->field_data[UF_HOST].off = (uint16_t)(p - buf); } u->field_data[UF_HOST].len++; break; @@ -2249,7 +2297,7 @@ http_parse_host(const char * buf, struct http_parser_url *u, int found_at) { case s_http_host_port: if (s != s_http_host_port) { - u->field_data[UF_PORT].off = p - buf; + u->field_data[UF_PORT].off = (uint16_t)(p - buf); u->field_data[UF_PORT].len = 0; u->field_set |= (1 << UF_PORT); } @@ -2258,7 +2306,7 @@ http_parse_host(const char * buf, struct http_parser_url *u, int found_at) { case s_http_userinfo: if (s != s_http_userinfo) { - u->field_data[UF_USERINFO].off = p - buf ; + u->field_data[UF_USERINFO].off = (uint16_t)(p - buf); u->field_data[UF_USERINFO].len = 0; u->field_set |= (1 << UF_USERINFO); } @@ -2303,6 +2351,10 @@ http_parser_parse_url(const char *buf, size_t buflen, int is_connect, enum http_parser_url_fields uf, old_uf; int found_at = 0; + if (buflen == 0) { + return 1; + } + u->port = u->field_set = 0; s = is_connect ? s_req_server_start : s_req_spaces_before_url; old_uf = UF_MAX; @@ -2330,7 +2382,7 @@ http_parser_parse_url(const char *buf, size_t buflen, int is_connect, case s_req_server_with_at: found_at = 1; - /* FALLTHROUGH */ + /* fall through */ case s_req_server: uf = UF_HOST; break; @@ -2358,7 +2410,7 @@ http_parser_parse_url(const char *buf, size_t buflen, int is_connect, continue; } - u->field_data[uf].off = p - buf; + u->field_data[uf].off = (uint16_t)(p - buf); u->field_data[uf].len = 1; u->field_set |= (1 << uf); @@ -2421,6 +2473,7 @@ http_parser_pause(http_parser *parser, int paused) { */ if (HTTP_PARSER_ERRNO(parser) == HPE_OK || HTTP_PARSER_ERRNO(parser) == HPE_PAUSED) { + uint32_t nread = parser->nread; /* used by the SET_ERRNO macro */ SET_ERRNO((paused) ? HPE_PAUSED : HPE_OK); } else { assert(0 && "Attempting to pause parser in error state"); @@ -2438,3 +2491,8 @@ http_parser_version(void) { HTTP_PARSER_VERSION_MINOR * 0x00100 | HTTP_PARSER_VERSION_PATCH * 0x00001; } + +void +http_parser_set_max_header_size(uint32_t size) { + max_header_size = size; +} diff --git a/src/external/http_parser/http_parser.h b/src/external/http_parser/http_parser.h index a0de71e..16b5281 100644 --- a/src/external/http_parser/http_parser.h +++ b/src/external/http_parser/http_parser.h @@ -26,8 +26,8 @@ extern "C" { /* Also update SONAME in the Makefile whenever you change these. */ #define HTTP_PARSER_VERSION_MAJOR 2 -#define HTTP_PARSER_VERSION_MINOR 8 -#define HTTP_PARSER_VERSION_PATCH 1 +#define HTTP_PARSER_VERSION_MINOR 9 +#define HTTP_PARSER_VERSION_PATCH 2 #include #if defined(_WIN32) && !defined(__MINGW32__) && \ @@ -407,6 +407,9 @@ int http_should_keep_alive(const http_parser *parser); /* Returns a string version of the HTTP method. */ const char *http_method_str(enum http_method m); +/* Returns a string version of the HTTP status code. */ +const char *http_status_str(enum http_status s); + /* Return a string name of the given error */ const char *http_errno_name(enum http_errno err); @@ -427,6 +430,9 @@ void http_parser_pause(http_parser *parser, int paused); /* Checks if this is the final chunk of the body. */ int http_body_is_final(const http_parser *parser); +/* Change the maximum header size provided at compile time. */ +void http_parser_set_max_header_size(uint32_t size); + #ifdef __cplusplus } #endif diff --git a/src/file_provider/Downloader.cpp b/src/file_provider/Downloader.cpp index ee3c2c1..247a594 100644 --- a/src/file_provider/Downloader.cpp +++ b/src/file_provider/Downloader.cpp @@ -5,10 +5,15 @@ #include "Downloader.h" #include "LogHandler.h" -#include "ScopeGuard.h" #include "SingletonHelper.h" #include "TlsChecker.h" +#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) +#include +#else +#include "ScopeGuard.h" +#endif + #include #include #include @@ -103,7 +108,7 @@ void Downloader::onNetworkReplyFinished() { qCDebug(fileprovider) << "Downloader finished:" << mCurrentReply->request().url().fileName(); - const ScopeGuard guard([this] { + const auto guard = qScopeGuard([this] { mCurrentReply->deleteLater(); mCurrentReply = nullptr; startDownloadIfPending(); diff --git a/src/file_provider/UpdatableFile.cpp b/src/file_provider/UpdatableFile.cpp index d1cc816..740c222 100644 --- a/src/file_provider/UpdatableFile.cpp +++ b/src/file_provider/UpdatableFile.cpp @@ -79,7 +79,7 @@ QString UpdatableFile::cachePath() const QUrl UpdatableFile::updateUrl(const QString& pSection, const QString& pName) { - const QUrl updateServerBaseUrl = SecureStorage::getInstance().getUpdateServerBaseUrl(); + const QUrl updateServerBaseUrl = Env::getSingleton()->getUpdateServerBaseUrl(); const QString section = pSection.isEmpty() ? QString() : Sep + pSection; return QUrl(updateServerBaseUrl.toString() + section + Sep + pName); @@ -148,7 +148,7 @@ QString UpdatableFile::makeSectionCachePath(const QString& pSection) void UpdatableFile::cleanupAfterUpdate(const std::function& pCustomAction) { - Downloader* const downloader = Env::getSingleton(); + auto* const downloader = Env::getSingleton(); disconnect(downloader, &Downloader::fireDownloadSuccess, this, &UpdatableFile::onDownloadSuccess); disconnect(downloader, &Downloader::fireDownloadFailed, this, &UpdatableFile::onDownloadFailed); disconnect(downloader, &Downloader::fireDownloadUnnecessary, this, &UpdatableFile::onDownloadUnnecessary); @@ -255,7 +255,7 @@ QUrl UpdatableFile::lookupUrl() } else { - return QStringLiteral("file://") + path; + return QStringLiteral("file:///") + path; } } @@ -310,7 +310,7 @@ void UpdatableFile::update() { mUpdateRunning = true; - Downloader* const downloader = Env::getSingleton(); + auto* const downloader = Env::getSingleton(); connect(downloader, &Downloader::fireDownloadSuccess, this, &UpdatableFile::onDownloadSuccess); connect(downloader, &Downloader::fireDownloadFailed, this, &UpdatableFile::onDownloadFailed); connect(downloader, &Downloader::fireDownloadUnnecessary, this, &UpdatableFile::onDownloadUnnecessary); diff --git a/src/global/BuildHelper.cpp b/src/global/BuildHelper.cpp index 44eff10..4cc678c 100644 --- a/src/global/BuildHelper.cpp +++ b/src/global/BuildHelper.cpp @@ -135,7 +135,7 @@ QByteArrayList BuildHelper::getAppCertificates(const QString& pPackageName) jbyteArray data = bytes.object(); const auto size = env->GetArrayLength(data); jbyte* buffer = env->GetByteArrayElements(data, 0); - list << QByteArray(reinterpret_cast(buffer), size).toHex(); + list << QByteArray(reinterpret_cast(buffer), size).toHex(); } if (env->ExceptionCheck()) diff --git a/src/global/CardReturnCode.cpp b/src/global/CardReturnCode.cpp index 6519217..eb33ee5 100644 --- a/src/global/CardReturnCode.cpp +++ b/src/global/CardReturnCode.cpp @@ -74,6 +74,7 @@ GlobalStatus CardReturnCodeUtil::toGlobalStatus(CardReturnCode pCode) } Q_UNREACHABLE(); + return GlobalStatus::Code::Unknown_Error; } diff --git a/src/global/DeviceInfo.cpp b/src/global/DeviceInfo.cpp index 895a93c..b41ed20 100644 --- a/src/global/DeviceInfo.cpp +++ b/src/global/DeviceInfo.cpp @@ -23,7 +23,7 @@ DeviceInfo::~DeviceInfo() #ifdef Q_OS_ANDROID -QString DeviceInfo::getField(const char* pField) +QString DeviceInfo::getField(const char* const pField) { QAndroidJniObject field = QAndroidJniObject::getStaticObjectField("android/os/Build", pField, "Ljava/lang/String;"); if (field == nullptr || !field.isValid()) diff --git a/src/global/DeviceInfo.h b/src/global/DeviceInfo.h index 6ef8ed1..d2fe7ac 100644 --- a/src/global/DeviceInfo.h +++ b/src/global/DeviceInfo.h @@ -20,7 +20,7 @@ class DeviceInfo Q_DISABLE_COPY(DeviceInfo) #ifdef Q_OS_ANDROID - static QString getField(const char* pField); + static QString getField(const char* const pField); #endif public: diff --git a/src/global/ECardApiResult.cpp b/src/global/ECardApiResult.cpp index f2efee6..bd5b6a6 100644 --- a/src/global/ECardApiResult.cpp +++ b/src/global/ECardApiResult.cpp @@ -69,7 +69,7 @@ QMap ECardApiResult::cConversionMap2 ECardApiResult ECardApiResult::fromStatus(const GlobalStatus& pStatus) { - if (pStatus.getStatusCode() == GlobalStatus::Code::No_Error || pStatus.getStatusCode() == GlobalStatus::Code::RemoteReader_CloseCode_NormalClose) + if (pStatus.getStatusCode() == GlobalStatus::Code::No_Error) { return createOk(); } @@ -101,7 +101,6 @@ void ECardApiResult::initConversionMaps() addConversionElement(GlobalStatus::Code::Card_Unexpected_Transmit_Status, Minor::AL_Unknown_Error); addConversionElement(GlobalStatus::Code::No_Error, Minor::null); - addConversionElement(GlobalStatus::Code::RemoteReader_CloseCode_NormalClose, Minor::null); addConversionElement(GlobalStatus::Code::Workflow_Card_Removed, Minor::IFDL_CancellationByUser); @@ -124,7 +123,7 @@ void ECardApiResult::initConversionMaps() addConversionElement(GlobalStatus::Code::Workflow_TrustedChannel_ServiceUnavailable, Minor::DP_Trusted_Channel_Establishment_Failed); addConversionElement(GlobalStatus::Code::Workflow_TrustedChannel_TimeOut, Minor::DP_Trusted_Channel_Establishment_Failed); addConversionElement(GlobalStatus::Code::Workflow_TrustedChannel_Proxy_Error, Minor::DP_Trusted_Channel_Establishment_Failed); - addConversionElement(GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Establishment_Error, Minor::DP_Trusted_Channel_Establishment_Failed); + addConversionElement(GlobalStatus::Code::Workflow_TrustedChannel_Establishment_Error, Minor::DP_Trusted_Channel_Establishment_Failed); addConversionElement(GlobalStatus::Code::Workflow_TrustedChannel_Server_Format_Error, Minor::DP_Trusted_Channel_Establishment_Failed); addConversionElement(GlobalStatus::Code::Workflow_TrustedChannel_Other_Network_Error, Minor::DP_Trusted_Channel_Establishment_Failed); @@ -140,14 +139,13 @@ void ECardApiResult::initConversionMaps() addConversionElement(GlobalStatus::Code::Workflow_Redirect_Transmission_Error, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Processing_Error, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Reader_Became_Inaccessible, Minor::AL_Communication_Error); - addConversionElement(GlobalStatus::Code::Workflow_Reader_Communication_Error, Minor::AL_Communication_Error); - addConversionElement(GlobalStatus::Code::Workflow_Reader_Device_Connection_Error, Minor::AL_Communication_Error); + addConversionElement(GlobalStatus::Code::Workflow_Bluetooth_Reader_Connection_Error, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Reader_Device_Scan_Error, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Server_Incomplete_Information_Provided, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Network_Ssl_Establishment_Error, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Network_Ssl_Connection_Unsupported_Algorithm_Or_Length, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length, Minor::AL_Communication_Error); - addConversionElement(GlobalStatus::Code::Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description, Minor::AL_Communication_Error); + addConversionElement(GlobalStatus::Code::Workflow_Network_Ssl_Hash_Not_In_Certificate_Description, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Network_Empty_Redirect_Url, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Network_Expected_Redirect, Minor::AL_Communication_Error); addConversionElement(GlobalStatus::Code::Workflow_Network_Invalid_Scheme, Minor::AL_Communication_Error); @@ -173,7 +171,7 @@ void ECardApiResult::initConversionMaps() addConversionElement(GlobalStatus::Code::Paos_Error_AL_Internal_Error, Minor::AL_Internal_Error); addConversionElement(GlobalStatus::Code::Workflow_Cannot_Confirm_IdCard_Authenticity, Minor::AL_Internal_Error); - addConversionElement(GlobalStatus::Code::Workflow_Unknown_Paos_Form_EidServer, Minor::AL_Internal_Error); + addConversionElement(GlobalStatus::Code::Workflow_Unknown_Paos_From_EidServer, Minor::AL_Internal_Error); addConversionElement(GlobalStatus::Code::Workflow_Unexpected_Message_From_EidServer, Minor::AL_Internal_Error); addConversionElement(GlobalStatus::Code::Workflow_Pin_Blocked_And_Puk_Objectionable, Minor::AL_Internal_Error); addConversionElement(GlobalStatus::Code::Card_Protocol_Error, Minor::AL_Internal_Error); @@ -207,9 +205,7 @@ void ECardApiResult::initConversionMaps() addConversionElement(GlobalStatus::Code::Downloader_Data_Corrupted, Minor::AL_Unknown_Error); addConversionElement(GlobalStatus::Code::RemoteReader_CloseCode_AbnormalClose, Minor::AL_Unknown_Error); - addConversionElement(GlobalStatus::Code::RemoteReader_CloseCode_Undefined, Minor::AL_Unknown_Error); addConversionElement(GlobalStatus::Code::RemoteConnector_InvalidRequest, Minor::AL_Unknown_Error); - addConversionElement(GlobalStatus::Code::RemoteConnector_EmptyPassword, Minor::AL_Unknown_Error); addConversionElement(GlobalStatus::Code::RemoteConnector_NoSupportedApiLevel, Minor::AL_Unknown_Error); addConversionElement(GlobalStatus::Code::RemoteConnector_ConnectionTimeout, Minor::AL_Unknown_Error); addConversionElement(GlobalStatus::Code::RemoteConnector_ConnectionError, Minor::AL_Unknown_Error); @@ -347,90 +343,119 @@ QString ECardApiResult::getMessage(Minor pMinor) switch (pMinor) { case Minor::AL_Unknown_Error: + //: LABEL ALL_PLATFORMS return tr("An unexpected error has occurred during processing."); case Minor::AL_No_Permission: + //: LABEL ALL_PLATFORMS return tr("Use of the function by the client application is not permitted."); case Minor::AL_Internal_Error: + //: LABEL ALL_PLATFORMS return tr("An internal error has occurred during processing."); case Minor::AL_Parameter_Error: + //: LABEL ALL_PLATFORMS return tr("There was some problem with a provided or omitted parameter."); case Minor::AL_Unkown_API_Function: + //: LABEL ALL_PLATFORMS return tr("The API function is unknown."); case Minor::AL_Not_Initialized: + //: LABEL ALL_PLATFORMS return tr("The framework or layer has not been initialized."); case Minor::AL_Warning_Connection_Disconnected: + //: LABEL ALL_PLATFORMS return tr("The active session has been terminated."); case Minor::AL_Session_Terminated_Warning: + //: LABEL ALL_PLATFORMS return tr("The active session has been terminated."); case Minor::AL_Communication_Error: + //: LABEL ALL_PLATFORMS return tr("A Communication error occurred during processing."); case Minor::DP_Timeout_Error: + //: LABEL ALL_PLATFORMS return tr("The operation was terminated as the set time was exceeded."); case Minor::DP_Unknown_Channel_Handle: + //: LABEL ALL_PLATFORMS return tr("The operation was aborted as an invalid channel handle was used."); case Minor::DP_Communication_Error: + //: LABEL ALL_PLATFORMS return tr("A Communication error occurred during processing."); case Minor::DP_Trusted_Channel_Establishment_Failed: + //: LABEL ALL_PLATFORMS return tr("A trusted channel could not be opened."); case Minor::DP_Unknown_Protocol: + //: LABEL ALL_PLATFORMS return tr("The operation was aborted as an unknown protocol was used."); case Minor::DP_Unknown_Cipher_Suite: + //: LABEL ALL_PLATFORMS return tr("The operation was aborted as an unknown cipher suite was used."); case Minor::DP_Unknown_Webservice_Binding: + //: LABEL ALL_PLATFORMS return tr("The operation was aborted as an unknown web service binding was used."); case Minor::DP_Node_Not_Reachable: + //: LABEL ALL_PLATFORMS return tr("A Communication error occurred during processing."); case Minor::IFDL_Timeout_Error: + //: LABEL ALL_PLATFORMS return tr("The operation was terminated as the set time was exceeded."); case Minor::IFDL_Terminal_NoCard: + //: LABEL ALL_PLATFORMS return tr("The card is missing or was removed."); case Minor::IFDL_IO_RepeatedDataMismatch: + //: LABEL ALL_PLATFORMS return tr("The new PIN and the confirmation do not match."); case Minor::IFDL_IO_UnknownPINFormat: + //: LABEL ALL_PLATFORMS return tr("The format of the PIN is wrong."); case Minor::KEY_KeyGenerationNotPossible: + //: LABEL ALL_PLATFORMS return tr("Signature certificate key generation is not possible."); case Minor::SAL_Cancellation_by_User: + //: LABEL ALL_PLATFORMS return tr("The process was cancelled by the user."); case Minor::IL_Signature_InvalidCertificatePath: + //: LABEL ALL_PLATFORMS return tr("One or more certificate checks failed. The operation will be aborted due to security reasons."); case Minor::SAL_Invalid_Key: + //: LABEL ALL_PLATFORMS return tr("This action cannot be performed. The online identification function of your ID card is deactivated. Please contact the authority responsible for issuing your identification document to activate the online identification function."); case Minor::SAL_SecurityConditionNotSatisfied: + //: LABEL ALL_PLATFORMS return tr("The authenticity of your ID card could not be verified. Please make sure that you are using a genuine ID card. Please note that test applications require the use of a test ID card."); case Minor::SAL_MEAC_AgeVerificationFailedWarning: + //: LABEL ALL_PLATFORMS return tr("The age verification failed."); case Minor::SAL_MEAC_CommunityVerificationFailedWarning: + //: LABEL ALL_PLATFORMS return tr("The community verification failed."); case Minor::SAL_MEAC_DocumentValidityVerificationFailed: + //: LABEL ALL_PLATFORMS return tr("The ID card is invalid or disabled."); case Minor::null: diff --git a/src/global/EnumHelper.h b/src/global/EnumHelper.h index 116d9b9..9ce095d 100644 --- a/src/global/EnumHelper.h +++ b/src/global/EnumHelper.h @@ -44,6 +44,11 @@ namespace governikus inline bool operator!=(std::underlying_type::type pType, enumName pName)\ {\ return !(pType == pName);\ + }\ +\ + inline uint qHash(enumName pKey, uint pSeed)\ + {\ + return ::qHash(static_cast::type>(pKey), pSeed);\ } @@ -77,7 +82,7 @@ template class Enum using EnumBaseTypeT = typename std::underlying_type::type; private: - Enum(); + Enum() = delete; Q_DISABLE_COPY(Enum) public: @@ -96,7 +101,7 @@ template class Enum static QLatin1String getName(EnumTypeT pType) { const int value = static_cast(pType); - const char* name = getQtEnumMetaEnum().valueToKey(value); + const char* const name = getQtEnumMetaEnum().valueToKey(value); if (Q_UNLIKELY(name == nullptr)) { qCritical().noquote().nospace() << "CRITICAL CONVERSION MISMATCH: UNKNOWN 0x" << QString::number(value, 16); @@ -113,23 +118,22 @@ template class Enum } - static const QVector& getList() + static QVector getList() { - static QVector list; - if (list.isEmpty()) + QVector list; + + const QMetaEnum metaEnum = getQtEnumMetaEnum(); + list.reserve(metaEnum.keyCount()); + for (int i = 0; i < metaEnum.keyCount(); ++i) { - const QMetaEnum metaEnum = getQtEnumMetaEnum(); - list.reserve(metaEnum.keyCount()); - for (int i = 0; i < metaEnum.keyCount(); ++i) - { - list << static_cast(metaEnum.value(i)); - } + list << static_cast(metaEnum.value(i)); } + return list; } - static EnumTypeT fromString(const char* pValue, EnumTypeT pDefault) + static EnumTypeT fromString(const char* const pValue, EnumTypeT pDefault) { bool ok = false; int key = getQtEnumMetaEnum().keyToValue(pValue, &ok); diff --git a/src/global/Env.h b/src/global/Env.h index f4885c1..de04796 100644 --- a/src/global/Env.h +++ b/src/global/Env.h @@ -75,13 +75,8 @@ class Env const std::function mFunc; public: - FuncWrapper(const std::function& pFunc) - : mFunc(pFunc) - { - } - - - virtual ~FuncWrapper() + FuncWrapper(std::function pFunc) + : mFunc(std::move(pFunc)) { } @@ -107,17 +102,17 @@ class Env static Env& getInstance(); template - typename std::enable_if::value && std::is_destructible::value, T*>::type fetchRealSingleton() + inline T* fetchRealSingleton() { - static_assert(std::has_virtual_destructor::value, "Destructor must be virtual"); - return singleton(); - } - - - template - typename std::enable_if::value || !std::is_destructible::value, T*>::type fetchRealSingleton() - { - return &T::getInstance(); + if constexpr (std::is_abstract::value && std::is_destructible::value) + { + static_assert(std::has_virtual_destructor::value, "Destructor must be virtual"); + return singleton(); + } + else + { + return &T::getInstance(); + } } @@ -129,7 +124,7 @@ class Env inline typename std::enable_if::Value, T*>::type checkObjectInfo(Identifier pId, T* pObject) const #endif { - Q_UNUSED(pId); + Q_UNUSED(pId) return pObject; } @@ -174,34 +169,27 @@ class Env template - inline typename std::enable_if::type, Args ...>::value, T>::type newObject(Args&& ... pArgs) const + inline T newObject(Args&& ... pArgs) const { - static_assert(std::is_pointer::value, "It is impossible to return implementation of interface by value. Use pointer or add constructor!"); - auto obj = createNewObject(std::forward(pArgs) ...); - Q_ASSERT(obj); - return obj; - } - - - template - inline typename std::enable_if::value, T>::type internalNewObject(Args&& ... pArgs) const - { - using t = typename std::remove_pointer::type; - return new t(std::forward(pArgs) ...); - } - - - template - inline typename std::enable_if::value, T>::type internalNewObject(Args&& ... pArgs) const - { - return T(std::forward(pArgs) ...); - } - - - template - inline typename std::enable_if::type, Args ...>::value, T>::type newObject(Args&& ... pArgs) const - { - return internalNewObject(std::forward(pArgs) ...); + if constexpr (std::is_constructible::type, Args ...>::value) + { + if constexpr (std::is_pointer::value) + { + using t = typename std::remove_pointer::type; + return new t(std::forward(pArgs) ...); + } + else + { + return T(std::forward(pArgs) ...); + } + } + else + { + static_assert(std::is_pointer::value, "It is impossible to return implementation of interface by value. Use pointer or add constructor!"); + auto obj = createNewObject(std::forward(pArgs) ...); + Q_ASSERT(obj); + return obj; + } } @@ -307,11 +295,11 @@ class Env template - static void setCreator(const std::function& pFunc) + static void setCreator(std::function pFunc) { Q_ASSERT(pFunc); - const auto& value = QSharedPointer >::create(pFunc); + const auto& value = QSharedPointer >::create(std::move(pFunc)); auto& holder = getInstance(); const QWriteLocker locker(&holder.mLock); diff --git a/src/global/FileDestination.h b/src/global/FileDestination.h index 79d2290..88be709 100644 --- a/src/global/FileDestination.h +++ b/src/global/FileDestination.h @@ -41,12 +41,6 @@ class FileDestination } - static QString getPath(const char* pFilename) - { - return getPath() % QLatin1Char('/') % QString::fromUtf8(pFilename); - } - - }; } // namespace governikus diff --git a/src/global/GlobalStatus.cpp b/src/global/GlobalStatus.cpp index e059ead..4a12059 100644 --- a/src/global/GlobalStatus.cpp +++ b/src/global/GlobalStatus.cpp @@ -26,7 +26,7 @@ bool GlobalStatus::isMessageMasked() const { switch (d->mStatusCode) { - case Code::Workflow_Unknown_Paos_Form_EidServer: + case Code::Workflow_Unknown_Paos_From_EidServer: case Code::Workflow_Unexpected_Message_From_EidServer: case Code::Workflow_Preverification_Error: case Code::Workflow_No_Unique_AtCvc: @@ -47,7 +47,6 @@ bool GlobalStatus::isMessageMasked() const case Code::Workflow_TrustedChannel_Proxy_Error: case Code::Workflow_TrustedChannel_Server_Format_Error: case Code::Network_Ssl_Establishment_Error: - case Code::Workflow_TrustedChannel_Ssl_Establishment_Error: case Code::Workflow_Wrong_Parameter_Invocation: case Code::Network_Other_Error: case Code::Workflow_TrustedChannel_Other_Network_Error: @@ -56,6 +55,13 @@ bool GlobalStatus::isMessageMasked() const case Code::Workflow_Network_Expected_Redirect: case Code::Workflow_Network_Invalid_Scheme: case Code::Workflow_Network_Malformed_Redirect_Url: + case Code::Paos_Unexpected_Warning: + case Code::Paos_Error_AL_Unknown_Error: + case Code::Paos_Error_AL_Internal_Error: + case Code::Paos_Error_AL_Communication_Error: + case Code::Paos_Error_DP_Trusted_Channel_Establishment_Failed: + case Code::Paos_Error_SAL_Cancellation_by_User: + case Code::Paos_Error_SAL_Invalid_Key: return true; default: @@ -86,12 +92,15 @@ QString GlobalStatus::toErrorDescription(const bool pSimplifiedVersion) const { if (pSimplifiedVersion && isMessageMasked()) { + //: LABEL ALL_PLATFORMS const QString supportUrl = tr("https://www.ausweisapp.bund.de/en/qa/support/"); const QString hyperlink = QStringLiteral("").arg(supportUrl); #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + //: ERROR ANDROID IOS Error message which is used for "masked" errors. Generic message with link to support section of the homepage. QString message = tr("An error occurred. Please contact our %1support%2.").arg(hyperlink, QStringLiteral("")); #else + //: ERROR DESKTOP Error message which is used for "masked" errors. Generic message with link to support section of the homepage. QString message = tr("An error occurred. Please contact our %1support%2 or feel free to send us an email.").arg(hyperlink, QStringLiteral("")); #endif return message; @@ -108,54 +117,71 @@ QString GlobalStatus::toErrorDescriptionInternal() const return QString(); case Code::No_Error: + //: ERROR ALL_PLATFORMS No actual error occured, required to provide a message for status code No_Error. return tr("No error occurred."); case Code::Unknown_Error: + //: ERROR ALL_PLATFORMS An unknown error from any of the subcomponents (PCSC, EcardAPI, QtNetwork, ...) occurred. return tr("An unexpected error has occurred during processing."); case Code::Workflow_AlreadyInProgress_Error: + //: ERROR ALL_PLATFORMS An ActivationHandler is requested even though an operation is currently still running. return tr("Cannot start authentication. An operation is already in progress."); case Code::Workflow_Card_Removed: - return tr("The ID card has been removed. The process is aborted."); + //: ERROR ALL_PLATFORMS The card was removed after the PACE channel was established. + return tr("The connection to the ID card has been lost. The process was aborted."); case Code::Workflow_Cannot_Confirm_IdCard_Authenticity: + //: ERROR ALL_PLATFORMS The certificates supplied by the card did not pass the authenticity check, further operation is not allowed. return tr("The authenticity of your ID card could not be confirmed."); - case Code::Workflow_Unknown_Paos_Form_EidServer: + case Code::Workflow_Unknown_Paos_From_EidServer: + //: ERROR_MASKED ALL_PLATFORMS The type of a POAS message could not be determined. return tr("The program received an unknown message from the server."); case Code::Workflow_Unexpected_Message_From_EidServer: + //: ERROR_MASKED ALL_PLATFORMS The server sent a valid PAOS message but its type was unexpected. return tr("The program received an unexpected message from the server."); case Code::Workflow_Pin_Blocked_And_Puk_Objectionable: + //: ERROR ALL_PLATFORMS The id card was blocked after three wrongfully entered PINs, the PUK is required to unlock the card. Hint to do so in the PIN management section of the app. return tr("After three wrong entries your PIN is blocked. Please use the PIN management in this app to unblock it with the help of your PUK."); case Code::Workflow_Preverification_Developermode_Error: + //: ERROR ALL_PLATFORMS The developer mode is enabled but a productive environment was detected. return tr("Using the developer mode is only allowed in a test environment."); case Code::Workflow_Preverification_Error: + //: ERROR_MASKED ALL_PLATFORMS The certificates submitted by the server failed the authenticity check during pre-verification. return tr("Pre-verification failed."); case Code::Workflow_No_Unique_AtCvc: + //: ERROR_MASKED ALL_PLATFORMS The EAC1 request contained more than one At certificate. return tr("No unique AT CVC"); case Code::Workflow_No_Unique_DvCvc: + //: ERROR_MASKED ALL_PLATFORMS The EAC1 request contained more than one Dv certificate. return tr("No unique DV CVC"); case Code::Workflow_No_Permission_Error: + //: ERROR ALL_PLATFORMS DidAuthenticateEAC2, AA2 or the id card declined the certificates. return tr("Authentication failed."); case Code::Workflow_Certificate_No_Description: + //: ERROR_MASKED ALL_PLATFORMS return tr("No certificate description available."); case Code::Workflow_Certificate_No_Url_In_Description: + //: ERROR_MASKED ALL_PLATFORMS return tr("No subject url available in certificate description."); case Code::Workflow_Certificate_Hash_Error: + //: ERROR_MASKED ALL_PLATFORMS return tr("The certificate description does not match the certificate."); case Code::Workflow_Certificate_Sop_Error: + //: ERROR_MASKED ALL_PLATFORMS return tr("The subject URL in the certificate description and the TCToken URL don't satisfy the same origin policy."); case Code::Workflow_Error_Page_Transmission_Error: @@ -163,75 +189,88 @@ QString GlobalStatus::toErrorDescriptionInternal() const case Code::Workflow_Redirect_Transmission_Error: return getExternalInfo(); - case Code::Workflow_TrustedChannel_Establishment_Error: - return tr("Failed to establish secure connection"); - case Code::Workflow_TrustedChannel_Error_From_Server: + //: ERROR_MASKED ALL_PLATFORMS return tr("The program received an error from the server."); case Code::Workflow_TrustedChannel_Hash_Not_In_Description: - case Code::Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description: + case Code::Workflow_Network_Ssl_Hash_Not_In_Certificate_Description: + //: ERROR ALL_PLATFORMS The TLS certificate was not folded with the Authorization Certificate, thus violating the security requirements. Might also be caused by a firewall and/or the antivirus software. return tr("Hash of certificate not in certificate description (issuer: %1). This indicates a misconfiguration or manipulation of the certificate. Please check that your antivirus-software and firewalls are not interfering with SSL traffic.").arg(getExternalInfo()); case Code::Workflow_TrustedChannel_No_Data_Received: + //: ERROR_MASKED ALL_PLATFORMS Received an empty TC token. return tr("Received no data."); case Code::Workflow_TrustedChannel_ServiceUnavailable: case Code::Network_ServiceUnavailable: + //: ERROR ALL_PLATFORMS A server has responded with an HTTP error code 503. return tr("The service is temporarily not available. Please try again later."); case Code::Network_TimeOut: case Code::Workflow_TrustedChannel_TimeOut: + //: ERROR_MASKED ALL_PLATFORMS The TCP connection to the server timed out. return tr("Establishing a connection is taking too long."); case Code::Network_Proxy_Error: case Code::Workflow_TrustedChannel_Proxy_Error: + //: ERROR_MASKED ALL_PLATFORMS The connection using a proxy failed, it may be misconfigured.. return tr("Establishing a connection via the proxy did not succeed."); case Code::Workflow_TrustedChannel_Server_Format_Error: + //: ERROR_MASKED ALL_PLATFORMS An critical error while retrieving or parsing the TC token occurred. return tr("It wasn't possible to connect to the server: the server sent a non-standard response."); case Code::Network_Ssl_Establishment_Error: - case Code::Workflow_TrustedChannel_Ssl_Establishment_Error: + case Code::Workflow_TrustedChannel_Establishment_Error: + //: ERROR_MASKED ALL_PLATFORMS Critical error from Qt's TLS API. return tr("It wasn't possible to connect to the server: a secure connection could not be established."); case Code::Workflow_Wrong_Parameter_Invocation: + //: ERROR_MASKED ALL_PLATFORMS The TC token URL could not be parsed/validated. return tr("Application was invoked with wrong parameters."); case Code::Network_Other_Error: case Code::Workflow_TrustedChannel_Other_Network_Error: + //: ERROR_MASKED ALL_PLATFORMS Other critial network error by Qt. return tr("An unknown network error occurred."); case Code::Workflow_Reader_Became_Inaccessible: + //: ERROR ALL_PLATFORMS The card reader was removed after the PACE channel was established. return tr("The selected card reader cannot be accessed anymore."); - case Code::Workflow_Reader_Communication_Error: - return tr("An error occurred while communicating with the card reader."); - case Code::Workflow_Server_Incomplete_Information_Provided: + //: ERROR ALL_PLATFORMS The result of the self authentication could not be retrieved from the eService. return tr("The server provided no or incomplete information. Your personal data could not be read out."); case Code::Workflow_Network_Ssl_Connection_Unsupported_Algorithm_Or_Length: + //: ERROR_MASKED ALL_PLATFORMS return tr("Error while connecting to the service provider. The SSL connection uses an unsupported key algorithm or length."); case Code::Workflow_TrustedChannel_Ssl_Certificate_Unsupported_Algorithm_Or_Length: case Code::Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length: + //: ERROR ALL_PLATFORMS Received a TLS certificate that uses an invalid algorithm or key length. return tr("Error while connecting to the server. The SSL certificate uses an unsupported key algorithm or length. Certificate issuer: %1").arg(getExternalInfo()); case Code::Workflow_Network_Empty_Redirect_Url: + //: ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined because the server sent an empty response. return tr("Empty redirect URL"); case Code::Workflow_Network_Expected_Redirect: + //: ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined due to an erroneous HTTP code. return tr("Expected redirect, got %1").arg(getExternalInfo()); case Code::Workflow_Network_Invalid_Scheme: + //: ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined because the redirect URL did not adhere to the HTTPS scheme. return tr("Invalid scheme: %1").arg(getExternalInfo()); case Code::Workflow_Network_Malformed_Redirect_Url: + //: ERROR_MASKED ALL_PLATFORMS The redirect URL could not be determined because the redirect URL was invalid. return tr("Malformed redirect URL: %1").arg(getExternalInfo()); case Code::Workflow_Cancellation_By_User: case Code::Card_Cancellation_By_User: + //: ERROR ALL_PLATFORMS The user cancelled the authentication in either the UI or the card reader. return tr("The process was cancelled by the user."); case Code::Paos_Generic_Server_Error: @@ -245,89 +284,104 @@ QString GlobalStatus::toErrorDescriptionInternal() const return getExternalInfo(); case Code::Card_Input_TimeOut: + //: ERROR ALL_PLATFORMS The card reader signalled that it timed out. return tr("The maximum time was exceeded during input process."); case Code::Card_Not_Found: + //: ERROR ALL_PLATFORMS Internal error, either PCSC, SaK or card reader could not find the id card. return tr("Card does not exist"); case Code::Card_Communication_Error: + //: ERROR ALL_PLATFORMS Communication with the card failed due to the specification of the TR (Technische Richtlinie), return tr("An error occurred while communicating with the ID card. Please make sure that your ID card is placed correctly on the card reader and try again."); case Code::Card_Protocol_Error: case Code::Card_Unexpected_Transmit_Status: + //: ERROR ALL_PLATFORMS Communication with the card failed due to the specification of the TR (Technische Richtlinie). The protocol was faulty or invalid values were requested/received, return QStringLiteral("%1 %3.").arg( tr("A protocol error occurred. Please make sure that your ID card is placed correctly on the card reader and try again. If the problem occurs again, please contact our support at"), tr("https://www.ausweisapp.bund.de/en/qa/support/"), tr("AusweisApp2 Support")); case Code::Card_Invalid_Pin: + //: ERROR ALL_PLATFORMS The id card declined the PIN. return tr("The given PIN is invalid."); case Code::Card_Invalid_Can: + //: ERROR ALL_PLATFORMS The id card declined the CAN. return tr("The given card access number (CAN) is invalid."); case Code::Card_Invalid_Puk: + //: ERROR ALL_PLATFORMS The id card declined the PUK. return tr("The given PUK is invalid."); case Code::Card_Pin_Blocked: + //: ERROR ALL_PLATFORMS The id card refused the PIN since the PIN feature is blocked after too many wrong attemps. return tr("The PIN was blocked after too many unsuccessful attempts."); case Code::Card_Pin_Not_Blocked: + //: ERROR ALL_PLATFORMS It was attempted to unlock the id card via PUK even though it was not locked in the first place. This scenario is avoided in the UI by hiding the respective UI elements. return tr("The PIN is not blocked."); case Code::Card_Puk_Blocked: + //: ERROR ALL_PLATFORMS The card declined the PUK since it was entered wrongfully 10 times, the local authorities have to be contacted to unlock the id card. return tr("The PUK was used ten times and is set inoperative. Please contact the competent authority that issued your ID document to unlock the PIN."); case Code::Card_NewPin_Mismatch: + //: ERROR ALL_PLATFORMS The card reader signalled that the new PIN was not confirmed correctly. return tr("The new PIN and the confirmation do not match."); case Code::Card_NewPin_Invalid_Length: + //: ERROR ALL_PLATFORMS The card reader declined the new PIN since its length was invalid. return tr("The length of the new PIN is not valid."); - case Code::Workflow_Reader_Device_Connection_Error: + case Code::Workflow_Bluetooth_Reader_Connection_Error: + //: ERROR ALL_PLATFORMS Error while connecting to a bluetooth card reader. return tr("An error occurred while connecting to a reader device."); case Code::Workflow_Reader_Device_Scan_Error: + //: ERROR ALL_PLATFORMS Error while searching for bluetooth card reader. return tr("An error occurred while scanning for reader devices."); - case Code::RemoteReader_CloseCode_NormalClose: - return tr("The remote reader connection was closed properly."); - case Code::RemoteReader_CloseCode_AbnormalClose: + //: ERROR ALL_PLATFORMS The connection to the smartphone card reader (SaK) was lost. return tr("The remote card reader connection was not closed properly."); - case Code::RemoteReader_CloseCode_Undefined: - return tr("Undefined error code occured when the remote card reader connection was closed."); - case Code::RemoteConnector_InvalidRequest: + //: ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) was invalid (missing device ID). return tr("Remote reader connection request contains invalid parameters."); - case Code::RemoteConnector_EmptyPassword: - return tr("Empty password in extended encryption of remote reader connection request."); - case Code::RemoteConnector_NoSupportedApiLevel: + //: ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) was invalid (API mismatch). return tr("Your remote reader version is incompatible with the local version. Please install the latest AusweisApp2 version on both your smartphone and your computer."); case Code::RemoteConnector_ConnectionTimeout: + //: ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) timed out. return tr("A timeout occurred while trying to establish a connection to a remote reader."); case Code::RemoteConnector_ConnectionError: + //: ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) failed due to network errors (Host not found, OS error, ...) return tr("An error occurred while trying to establish a connection to a remote reader."); case Code::RemoteConnector_RemoteHostRefusedConnection: + //: ERROR ALL_PLATFORMS The requested connection to the smartphone card reader (SaK) was rejected by the device. return tr("Remote device has rejected the connection. Please check the pairing code."); case Code::Downloader_File_Not_Found: + //: ERROR ALL_PLATFORMS Download of the file failed with HTTP error code 404. return tr("File not found."); case Code::Downloader_Cannot_Save_File: + //: ERROR ALL_PLATFORMS Saving the downloaded file on the local disk failed. return tr("Cannot save file."); case Code::Downloader_Data_Corrupted: + //: ERROR ALL_PLATFORMS The downloaded file contained unsupported/invalid data. return tr("Received data were corrupted."); } Q_UNREACHABLE(); + return QString(); } @@ -365,6 +419,6 @@ bool GlobalStatus::isCancellationByUser() const QDebug operator <<(QDebug pDbg, const GlobalStatus& pStatus) { - pDbg << pStatus.getStatusCode() << "|" << pStatus.toErrorDescription(); + pDbg << pStatus.getStatusCode() << '|' << pStatus.toErrorDescription(); return pDbg; } diff --git a/src/global/GlobalStatus.h b/src/global/GlobalStatus.h index 2d17c41..943a318 100644 --- a/src/global/GlobalStatus.h +++ b/src/global/GlobalStatus.h @@ -40,7 +40,7 @@ class GlobalStatus Workflow_Cancellation_By_User, Workflow_Card_Removed, Workflow_Cannot_Confirm_IdCard_Authenticity, - Workflow_Unknown_Paos_Form_EidServer, + Workflow_Unknown_Paos_From_EidServer, Workflow_Unexpected_Message_From_EidServer, Workflow_Pin_Blocked_And_Puk_Objectionable, Workflow_Preverification_Developermode_Error, @@ -63,15 +63,13 @@ class GlobalStatus Workflow_TrustedChannel_ServiceUnavailable, Workflow_TrustedChannel_TimeOut, Workflow_TrustedChannel_Proxy_Error, - Workflow_TrustedChannel_Ssl_Establishment_Error, Workflow_TrustedChannel_Server_Format_Error, Workflow_TrustedChannel_Other_Network_Error, Workflow_Reader_Became_Inaccessible, - Workflow_Reader_Communication_Error, Workflow_Server_Incomplete_Information_Provided, Workflow_Network_Ssl_Connection_Unsupported_Algorithm_Or_Length, Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length, - Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description, + Workflow_Network_Ssl_Hash_Not_In_Certificate_Description, Workflow_Network_Empty_Redirect_Url, Workflow_Network_Expected_Redirect, Workflow_Network_Invalid_Scheme, @@ -89,7 +87,7 @@ class GlobalStatus Paos_Error_SAL_Cancellation_by_User, Paos_Error_SAL_Invalid_Key, - Workflow_Reader_Device_Connection_Error, + Workflow_Bluetooth_Reader_Connection_Error, Workflow_Reader_Device_Scan_Error, Card_Not_Found, @@ -107,12 +105,9 @@ class GlobalStatus Card_NewPin_Mismatch, Card_NewPin_Invalid_Length, - RemoteReader_CloseCode_NormalClose, RemoteReader_CloseCode_AbnormalClose, - RemoteReader_CloseCode_Undefined, RemoteConnector_InvalidRequest, - RemoteConnector_EmptyPassword, RemoteConnector_NoSupportedApiLevel, RemoteConnector_ConnectionTimeout, RemoteConnector_ConnectionError, diff --git a/src/global/Initializer.h b/src/global/Initializer.h index 0209db8..7b14f19 100644 --- a/src/global/Initializer.h +++ b/src/global/Initializer.h @@ -29,7 +29,7 @@ class Initializer struct Entry final { - Entry(const std::function& pRegister) + explicit Entry(const std::function& pRegister) { Initializer::getInstance().add(pRegister); } diff --git a/src/global/LogCategories.cpp b/src/global/LogCategories.cpp index 373512b..9555845 100644 --- a/src/global/LogCategories.cpp +++ b/src/global/LogCategories.cpp @@ -19,7 +19,7 @@ Q_LOGGING_CATEGORY(paos, "paos") Q_LOGGING_CATEGORY(gui, "gui") Q_LOGGING_CATEGORY(language, "language") Q_LOGGING_CATEGORY(qml, "qml") -Q_LOGGING_CATEGORY(jsonapi, "jsonapi") +Q_LOGGING_CATEGORY(json, "json") Q_LOGGING_CATEGORY(aidl, "aidl") Q_LOGGING_CATEGORY(websocket, "websocket") Q_LOGGING_CATEGORY(cli, "cli") @@ -81,6 +81,11 @@ Q_LOGGING_CATEGORY(support, "support") Q_LOGGING_CATEGORY(developermode, "developermode") /*! - * Loggin category for persistent settings + * Logging category for persistent settings */ Q_LOGGING_CATEGORY(settings, "settings") + +/*! + * Logging category for ApplicationModel::showFeedback + */ +Q_LOGGING_CATEGORY(feedback, "feedback") diff --git a/src/global/LogHandler.cpp b/src/global/LogHandler.cpp index c3579dd..e69a04b 100644 --- a/src/global/LogHandler.cpp +++ b/src/global/LogHandler.cpp @@ -5,9 +5,14 @@ #include "LogHandler.h" #include "BreakPropertyBindingDiagnosticLogFilter.h" -#include "ScopeGuard.h" #include "SingletonHelper.h" +#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) +#include +#else +#include "ScopeGuard.h" +#endif + #include #include #include @@ -124,7 +129,7 @@ QByteArray LogHandler::readLogFile(qint64 pStart, qint64 pLength) if (mLogFile.isOpen() && mLogFile.isReadable()) { const auto currentPos = mLogFile.pos(); - const ScopeGuard resetPosition([this, currentPos] { + const auto resetPosition = qScopeGuard([this, currentPos] { mLogFile.seek(currentPos); }); @@ -134,6 +139,7 @@ QByteArray LogHandler::readLogFile(qint64 pStart, qint64 pLength) if (useLogfile()) { + //: LABEL ALL_PLATFORMS return tr("An error occurred in log handling: %1").arg(mLogFile.errorString()).toUtf8(); } @@ -220,7 +226,7 @@ void LogHandler::copyMessageLogContext(const QMessageLogContext& pSource, QMessa } -QByteArray LogHandler::formatFilename(const char* pFilename) const +QByteArray LogHandler::formatFilename(const char* const pFilename) const { QByteArray filename(pFilename); @@ -232,7 +238,7 @@ QByteArray LogHandler::formatFilename(const char* pFilename) const } -QByteArray LogHandler::formatFunction(const char* pFunction, const QByteArray& pFilename, int pLine) const +QByteArray LogHandler::formatFunction(const char* const pFunction, const QByteArray& pFilename, int pLine) const { QByteArray function(pFunction); diff --git a/src/global/LogHandler.h b/src/global/LogHandler.h index 4cc8f4d..d73bb74 100644 --- a/src/global/LogHandler.h +++ b/src/global/LogHandler.h @@ -57,8 +57,8 @@ class LogHandler inline void copyMessageLogContext(const QMessageLogContext& pSource, QMessageLogContext& pDestination, const QByteArray& pFilename = QByteArray(), const QByteArray& pFunction = QByteArray(), const QByteArray& pCategory = QByteArray()); inline void logToFile(const QString& pOutput); - inline QByteArray formatFunction(const char* pFunction, const QByteArray& pFilename, int pLine) const; - inline QByteArray formatFilename(const char* pFilename) const; + inline QByteArray formatFunction(const char* const pFunction, const QByteArray& pFilename, int pLine) const; + inline QByteArray formatFilename(const char* const pFilename) const; inline QByteArray formatCategory(const QByteArray& pCategory) const; QString getPaddedLogMsg(const QMessageLogContext& pContext, const QString& pMsg); diff --git a/src/global/ScopeGuard.h b/src/global/ScopeGuard.h index 8f2e68f..957c5ee 100644 --- a/src/global/ScopeGuard.h +++ b/src/global/ScopeGuard.h @@ -7,31 +7,48 @@ #pragma once #include +#include class test_ScopeGuard; namespace governikus { -class ScopeGuard +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED + +class [[deprecated ("Use qScopeGuard")]] ScopeGuard { private: friend class ::test_ScopeGuard; + friend ScopeGuard qScopeGuard(const std::function &pFunc); const std::function mFunction; bool mEnabled; - public: - ScopeGuard(const ScopeGuard& pCopy) = delete; - ScopeGuard(const ScopeGuard&& pCopy) = delete; - ScopeGuard& operator=(const ScopeGuard& pCopy) = delete; - ScopeGuard& operator=(const ScopeGuard&& pCopy) = delete; - - ScopeGuard(const std::function& pFunc, bool pEnabled = true); - ~ScopeGuard(); + ScopeGuard(const std::function &pFunc, bool pEnabled = true); bool isEnabled() const; void setEnabled(bool pEnabled = true); + + public: + ScopeGuard(const ScopeGuard& pCopy) = delete; + ScopeGuard(const ScopeGuard && pCopy) = delete; + ScopeGuard& operator=(const ScopeGuard& pCopy) = delete; + ScopeGuard& operator=(const ScopeGuard&& pCopy) = delete; + + ~ScopeGuard(); }; +#if (QT_VERSION < QT_VERSION_CHECK(5, 12, 0)) +inline ScopeGuard qScopeGuard(const std::function& pFunc) +{ + return ScopeGuard(pFunc); +} + + +#endif + +QT_WARNING_POP + } // namespace governikus diff --git a/src/global/VersionInfo.h b/src/global/VersionInfo.h index b376100..46e139f 100644 --- a/src/global/VersionInfo.h +++ b/src/global/VersionInfo.h @@ -18,7 +18,7 @@ class VersionInfo { QMap mInfo; - VersionInfo(const QMap& pInfo); + explicit VersionInfo(const QMap& pInfo); public: VersionInfo(); diff --git a/src/global/VersionNumber.cpp b/src/global/VersionNumber.cpp index df70a4a..1edd5d5 100644 --- a/src/global/VersionNumber.cpp +++ b/src/global/VersionNumber.cpp @@ -47,7 +47,7 @@ int VersionNumber::getDistance() const { const int indexStart = mSuffix.indexOf(QLatin1Char('+')) + 1; const int indexEnd = mSuffix.indexOf(QLatin1Char('-'), indexStart); - if (indexStart && indexEnd) + if (indexStart != 0 && indexEnd != 0) { bool ok; int value = mSuffix.mid(indexStart, indexEnd - indexStart).toInt(&ok); @@ -65,7 +65,7 @@ QString VersionNumber::getBranch() const { const int indexStart = mSuffix.indexOf(QLatin1Char('-')) + 1; const int indexEnd = mSuffix.indexOf(QLatin1Char('-'), indexStart); - if (indexStart && indexEnd) + if (indexStart != 0 && indexEnd != 0) { return mSuffix.mid(indexStart, indexEnd - indexStart); } @@ -79,7 +79,7 @@ QString VersionNumber::getRevision() const if (mSuffix.count(QLatin1Char('-')) > 1) { const int index = mSuffix.lastIndexOf(QLatin1Char('-')) + 1; - if (index) + if (index != 0) { return mSuffix.mid(index); } diff --git a/src/global/VersionNumber.h b/src/global/VersionNumber.h index 630ef55..b8f50bc 100644 --- a/src/global/VersionNumber.h +++ b/src/global/VersionNumber.h @@ -21,7 +21,7 @@ class VersionNumber public: static const VersionNumber& getApplicationVersion(); - VersionNumber(const QString& pVersion); + explicit VersionNumber(const QString& pVersion); const QVersionNumber& getVersionNumber() const; bool isDeveloperVersion() const; diff --git a/src/main.cpp b/src/main.cpp index 837c30a..54c9c78 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ #include // version API #include +#include #include #include #include @@ -58,6 +59,10 @@ Q_IMPORT_PLUGIN(IntentActivationHandler) #if defined(Q_OS_IOS) +Q_IMPORT_PLUGIN(QIOSIntegrationPlugin) + +Q_IMPORT_PLUGIN(IosReaderManagerPlugIn) + Q_IMPORT_PLUGIN(CustomSchemeActivationHandler) Q_IMPORT_PLUGIN(QJpegPlugin) @@ -85,7 +90,6 @@ Q_IMPORT_PLUGIN(BluetoothReaderManagerPlugIn) #if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) && !defined(Q_OS_WINRT) -Q_IMPORT_PLUGIN(UIPlugInCli) Q_IMPORT_PLUGIN(UIPlugInWidgets) #endif @@ -93,11 +97,11 @@ Q_IMPORT_PLUGIN(UIPlugInWidgets) Q_IMPORT_PLUGIN(UIPlugInAidl) #endif -#if (defined(Q_OS_ANDROID) && !defined(ANDROID_BUILD_AAR)) || defined(Q_OS_IOS) || (!defined(QT_NO_DEBUG) && !defined(ANDROID_BUILD_AAR)) +#ifndef ANDROID_BUILD_AAR Q_IMPORT_PLUGIN(UIPlugInQml) #endif -Q_IMPORT_PLUGIN(UIPlugInJsonApi) +Q_IMPORT_PLUGIN(UIPlugInJson) Q_IMPORT_PLUGIN(UIPlugInWebSocket) @@ -141,6 +145,9 @@ static inline QCoreApplication* initQt(int& argc, char** argv) #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) QCoreApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton); #endif +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); +#endif QCoreApplication::setOrganizationName(QStringLiteral(VENDOR)); QCoreApplication::setOrganizationDomain(QStringLiteral(VENDOR_DOMAIN)); @@ -151,6 +158,10 @@ static inline QCoreApplication* initQt(int& argc, char** argv) QGuiApplication::setQuitOnLastWindowClosed(false); #endif +#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) + QGuiApplication::setDesktopSettingsAware(false); +#endif + #if defined(Q_OS_ANDROID) && !defined(ANDROID_BUILD_AAR) if (QtAndroid::androidService().isValid()) { @@ -162,6 +173,31 @@ static inline QCoreApplication* initQt(int& argc, char** argv) } +#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) +void restartApp(const QString& pApplicationFilePath, QStringList pArgumentList, int pArgc) +{ + if (pArgumentList.size() == pArgc) + { + pArgumentList.removeFirst(); + } + + qCInfo(init) << "Attempting to start new process:" << pApplicationFilePath << ", args:" << pArgumentList; + qint64 pid = -1; + const bool restartSuccessful = QProcess::startDetached(pApplicationFilePath, pArgumentList, QString(), &pid); + + if (restartSuccessful) + { + qCInfo(init) << "New process successfully launched, PID:" << pid; + } + else + { + qCCritical(init) << "Could not launch new process."; + } +} + + +#endif + Q_DECL_EXPORT int main(int argc, char** argv) { const QScopedPointer app(initQt(argc, argv)); @@ -180,5 +216,19 @@ Q_DECL_EXPORT int main(int argc, char** argv) } SignalHandler::getInstance().setController(controller); - return SignalHandler::getInstance().shouldQuit() ? EXIT_SUCCESS : app->exec(); + if (SignalHandler::getInstance().shouldQuit()) + { + return EXIT_SUCCESS; + } + + const int returnCode = app->exec(); + +#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) + if (controller.shouldApplicationRestart()) + { + restartApp(app->applicationFilePath(), app->arguments(), argc); + } +#endif + + return returnCode; } diff --git a/src/network/DatagramHandler.h b/src/network/DatagramHandler.h index 472e6ba..d427f11 100644 --- a/src/network/DatagramHandler.h +++ b/src/network/DatagramHandler.h @@ -19,7 +19,7 @@ class DatagramHandler Q_OBJECT public: - DatagramHandler(bool pListen = true); + explicit DatagramHandler(bool pListen = true); virtual ~DatagramHandler(); virtual bool isBound() const = 0; virtual bool send(const QByteArray& pData) = 0; diff --git a/src/network/DatagramHandlerImpl.cpp b/src/network/DatagramHandlerImpl.cpp index 422979a..cb220ac 100644 --- a/src/network/DatagramHandlerImpl.cpp +++ b/src/network/DatagramHandlerImpl.cpp @@ -94,11 +94,11 @@ bool DatagramHandlerImpl::isBound() const bool DatagramHandlerImpl::send(const QByteArray& pData) { - return send(pData, 0); + return sendToAllAddressEntries(pData, 0); } -bool DatagramHandlerImpl::send(const QByteArray& pData, quint16 pPort) +bool DatagramHandlerImpl::sendToAllAddressEntries(const QByteArray& pData, quint16 pPort) { QVector broadcastAddresses; @@ -164,7 +164,7 @@ bool DatagramHandlerImpl::send(const QByteArray& pData, quint16 pPort) for (const QHostAddress& broadcastAddr : qAsConst(broadcastAddresses)) { - if (!send(pData, broadcastAddr, pPort)) + if (!sendToAddress(pData, broadcastAddr, pPort)) { qCDebug(network) << "Broadcasting to" << broadcastAddr << "failed"; return false; @@ -175,7 +175,7 @@ bool DatagramHandlerImpl::send(const QByteArray& pData, quint16 pPort) } -bool DatagramHandlerImpl::send(const QByteArray& pData, const QHostAddress& pAddress, quint16 pPort) +bool DatagramHandlerImpl::sendToAddress(const QByteArray& pData, const QHostAddress& pAddress, quint16 pPort) { // If port is 0 we should take our own listening port as destination as other instances // should use the same port to receive broadcasts. diff --git a/src/network/DatagramHandlerImpl.h b/src/network/DatagramHandlerImpl.h index 114cd75..dbed4f0 100644 --- a/src/network/DatagramHandlerImpl.h +++ b/src/network/DatagramHandlerImpl.h @@ -32,8 +32,8 @@ class DatagramHandlerImpl quint16 mUsedPort; PortFile mPortFile; - bool send(const QByteArray& pData, const QHostAddress& pAddress, quint16 pPort = 0); - bool send(const QByteArray& pData, quint16 pPort); + bool sendToAddress(const QByteArray& pData, const QHostAddress& pAddress, quint16 pPort = 0); + bool sendToAllAddressEntries(const QByteArray& pData, quint16 pPort); public: static quint16 cPort; diff --git a/src/network/HttpRequest.cpp b/src/network/HttpRequest.cpp index bd2f02f..e0fb292 100644 --- a/src/network/HttpRequest.cpp +++ b/src/network/HttpRequest.cpp @@ -145,7 +145,7 @@ void HttpRequest::onReadyRead() const auto errorCode = static_cast(mParser.http_errno); if (errorCode != HPE_OK) { - qCWarning(network) << "Http request not well-formed:" << http_errno_name(errorCode) << "|" << http_errno_description(errorCode); + qCWarning(network) << "Http request not well-formed:" << http_errno_name(errorCode) << '|' << http_errno_description(errorCode); } } @@ -184,7 +184,7 @@ int HttpRequest::onHeadersComplete(http_parser* pParser) } -int HttpRequest::onHeaderField(http_parser* pParser, const char* pPos, size_t pLength) +int HttpRequest::onHeaderField(http_parser* pParser, const char* const pPos, size_t pLength) { CAST_OBJ(pParser) obj->insertHeader(); @@ -193,7 +193,7 @@ int HttpRequest::onHeaderField(http_parser* pParser, const char* pPos, size_t pL } -int HttpRequest::onHeaderValue(http_parser* pParser, const char* pPos, size_t pLength) +int HttpRequest::onHeaderValue(http_parser* pParser, const char* const pPos, size_t pLength) { CAST_OBJ(pParser) add(obj->mCurrentHeaderValue, pPos, pLength); @@ -201,7 +201,7 @@ int HttpRequest::onHeaderValue(http_parser* pParser, const char* pPos, size_t pL } -int HttpRequest::onBody(http_parser* pParser, const char* pPos, size_t pLength) +int HttpRequest::onBody(http_parser* pParser, const char* const pPos, size_t pLength) { CAST_OBJ(pParser) add(obj->mBody, pPos, pLength); @@ -209,7 +209,7 @@ int HttpRequest::onBody(http_parser* pParser, const char* pPos, size_t pLength) } -int HttpRequest::onUrl(http_parser* pParser, const char* pPos, size_t pLength) +int HttpRequest::onUrl(http_parser* pParser, const char* const pPos, size_t pLength) { CAST_OBJ(pParser) add(obj->mUrl, pPos, pLength); diff --git a/src/network/HttpRequest.h b/src/network/HttpRequest.h index ee052a5..7556ed5 100644 --- a/src/network/HttpRequest.h +++ b/src/network/HttpRequest.h @@ -35,12 +35,12 @@ class HttpRequest static int onMessageBegin(http_parser* pParser); static int onMessageComplete(http_parser* pParser); static int onHeadersComplete(http_parser* pParser); - static int onHeaderField(http_parser* pParser, const char* pPos, size_t pLength); - static int onHeaderValue(http_parser* pParser, const char* pPos, size_t pLength); - static int onBody(http_parser* pParser, const char* pPos, size_t pLength); - static int onUrl(http_parser* pParser, const char* pPos, size_t pLength); + static int onHeaderField(http_parser* pParser, const char* const pPos, size_t pLength); + static int onHeaderValue(http_parser* pParser, const char* const pPos, size_t pLength); + static int onBody(http_parser* pParser, const char* const pPos, size_t pLength); + static int onUrl(http_parser* pParser, const char* const pPos, size_t pLength); - static inline void add(QByteArray& pDest, const char* pPos, size_t pLength) + static inline void add(QByteArray& pDest, const char* const pPos, size_t pLength) { pDest += QByteArray(pPos, static_cast(pLength)); } diff --git a/src/network/HttpServer.h b/src/network/HttpServer.h index 161d1dc..a362f00 100644 --- a/src/network/HttpServer.h +++ b/src/network/HttpServer.h @@ -31,7 +31,7 @@ class HttpServer public: static quint16 cPort; - HttpServer(quint16 pPort = HttpServer::cPort); + explicit HttpServer(quint16 pPort = HttpServer::cPort); virtual ~HttpServer(); bool isListening() const; diff --git a/src/network/MulticastLock.cpp b/src/network/MulticastLock.cpp index 0308132..765dfee 100644 --- a/src/network/MulticastLock.cpp +++ b/src/network/MulticastLock.cpp @@ -34,7 +34,7 @@ MulticastLock::~MulticastLock() } -void MulticastLock::invokeJniMethod(const char* pMethodName) +void MulticastLock::invokeJniMethod(const char* const pMethodName) { #if defined(Q_OS_ANDROID) QAndroidJniEnvironment env; @@ -57,6 +57,6 @@ void MulticastLock::invokeJniMethod(const char* pMethodName) env->ExceptionClear(); } #else - Q_UNUSED(pMethodName); + Q_UNUSED(pMethodName) #endif } diff --git a/src/network/MulticastLock.h b/src/network/MulticastLock.h index 909845f..92cc984 100644 --- a/src/network/MulticastLock.h +++ b/src/network/MulticastLock.h @@ -10,7 +10,7 @@ namespace governikus class MulticastLock { private: - void invokeJniMethod(const char* pMethodName); + void invokeJniMethod(const char* const pMethodName); public: MulticastLock(); diff --git a/src/network/NetworkManager.cpp b/src/network/NetworkManager.cpp index ab63db3..decc0f5 100644 --- a/src/network/NetworkManager.cpp +++ b/src/network/NetworkManager.cpp @@ -85,7 +85,7 @@ QNetworkReply* NetworkManager::paos(QNetworkRequest& pRequest, QNetworkReply* response; SecureStorage::TlsSuite tlsSuite = pUsePsk ? SecureStorage::TlsSuite::PSK : SecureStorage::TlsSuite::DEFAULT; - auto cfg = SecureStorage::getInstance().getTlsConfig(tlsSuite).getConfiguration(); + auto cfg = Env::getSingleton()->getTlsConfig(tlsSuite).getConfiguration(); cfg.setSessionTicket(pSslSession); pRequest.setSslConfiguration(cfg); response = mNetAccessManager->post(pRequest, pData); @@ -105,7 +105,7 @@ QNetworkReply* NetworkManager::get(QNetworkRequest& pRequest, } pRequest.setHeader(QNetworkRequest::UserAgentHeader, getUserAgentHeader()); - auto cfg = SecureStorage::getInstance().getTlsConfig().getConfiguration(); + auto cfg = Env::getSingleton()->getTlsConfig().getConfiguration(); cfg.setSessionTicket(pSslSession); pRequest.setSslConfiguration(cfg); QNetworkReply* response = mNetAccessManager->get(pRequest); @@ -126,7 +126,7 @@ QNetworkReply* NetworkManager::post(QNetworkRequest& pRequest, pRequest.setHeader(QNetworkRequest::UserAgentHeader, getUserAgentHeader()); pRequest.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(pData.size())); - auto cfg = SecureStorage::getInstance().getTlsConfig(SecureStorage::TlsSuite::DEFAULT).getConfiguration(); + auto cfg = Env::getSingleton()->getTlsConfig(SecureStorage::TlsSuite::DEFAULT).getConfiguration(); pRequest.setSslConfiguration(cfg); QNetworkReply* response = mNetAccessManager->post(pRequest, pData); @@ -137,7 +137,7 @@ QNetworkReply* NetworkManager::post(QNetworkRequest& pRequest, bool NetworkManager::checkUpdateServerCertificate(const QNetworkReply& pReply) { - const QVector& trustedCertificates = SecureStorage::getInstance().getUpdateCertificates(); + const QVector& trustedCertificates = Env::getSingleton()->getUpdateCertificates(); const auto& cert = pReply.sslConfiguration().peerCertificate(); return !cert.isNull() && trustedCertificates.contains(cert); @@ -179,7 +179,7 @@ NetworkManager::NetworkError NetworkManager::toNetworkError(const QNetworkReply* return NetworkError::ProxyError; case QNetworkReply::SslHandshakeFailedError: - return NetworkError::SslError; + return NetworkError::SecurityError; default: qCCritical(network) << "Network error opening URL" << pNetworkReply->request().url().toString(); @@ -202,8 +202,8 @@ GlobalStatus NetworkManager::toTrustedChannelStatus(const QNetworkReply* const p case NetworkManager::NetworkError::ProxyError: return GlobalStatus::Code::Workflow_TrustedChannel_Proxy_Error; - case NetworkManager::NetworkError::SslError: - return GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Establishment_Error; + case NetworkManager::NetworkError::SecurityError: + return GlobalStatus::Code::Workflow_TrustedChannel_Establishment_Error; case NetworkManager::NetworkError::OtherError: return GlobalStatus::Code::Workflow_TrustedChannel_Other_Network_Error; @@ -226,7 +226,7 @@ GlobalStatus NetworkManager::toStatus(const QNetworkReply* const pNetworkReply) case NetworkManager::NetworkError::ProxyError: return GlobalStatus::Code::Network_Proxy_Error; - case NetworkManager::NetworkError::SslError: + case NetworkManager::NetworkError::SecurityError: return GlobalStatus::Code::Network_Ssl_Establishment_Error; case NetworkManager::NetworkError::OtherError: diff --git a/src/network/NetworkManager.h b/src/network/NetworkManager.h index 804fae0..17b8631 100644 --- a/src/network/NetworkManager.h +++ b/src/network/NetworkManager.h @@ -55,7 +55,7 @@ class NetworkManager ServiceUnavailable, TimeOut, ProxyError, - SslError, + SecurityError, OtherError, }; Q_ENUM(NetworkError) @@ -85,7 +85,7 @@ class NetworkManager const QByteArray& pSslSession = QByteArray(), int pTimeoutInMilliSeconds = 30000); - QNetworkReply* post(QNetworkRequest& pRequest, + virtual QNetworkReply* post(QNetworkRequest& pRequest, const QByteArray& pData, int pTimeoutInMilliSeconds = 30000); diff --git a/src/network/NetworkReplyError.cpp b/src/network/NetworkReplyError.cpp index 2019356..5083150 100644 --- a/src/network/NetworkReplyError.cpp +++ b/src/network/NetworkReplyError.cpp @@ -9,8 +9,8 @@ using namespace governikus; qint64 NetworkReplyError::readData(char* data, qint64 maxlen) { - Q_UNUSED(data); - Q_UNUSED(maxlen); + Q_UNUSED(data) + Q_UNUSED(maxlen) return -1; } diff --git a/src/network/NetworkReplyTimeout.cpp b/src/network/NetworkReplyTimeout.cpp index b3ea577..8c32a93 100644 --- a/src/network/NetworkReplyTimeout.cpp +++ b/src/network/NetworkReplyTimeout.cpp @@ -14,7 +14,7 @@ NetworkReplyTimeout::NetworkReplyTimeout(QNetworkReply* pReply, const int pTimeo : QObject(pReply) { Q_ASSERT(pReply); - if (!pReply) + if (pReply == nullptr) { return; } @@ -28,7 +28,7 @@ NetworkReplyTimeout::NetworkReplyTimeout(QNetworkReply* pReply, const int pTimeo void NetworkReplyTimeout::onTimeout() { - QNetworkReply* reply = static_cast(parent()); + auto* reply = static_cast(parent()); if (reply != nullptr && reply->isRunning()) { reply->abort(); @@ -46,6 +46,6 @@ void NetworkReplyTimeout::onShutdown() void NetworkReplyTimeout::setTimeout(QNetworkReply* pReply, const int pTimeout) { // since the QNetworkReply is set as parent, we don't need to care about destruction - NetworkReplyTimeout* timeout = new NetworkReplyTimeout(pReply, pTimeout); + auto* timeout = new NetworkReplyTimeout(pReply, pTimeout); connect(Env::getSingleton(), &NetworkManager::fireShutdown, timeout, &NetworkReplyTimeout::onShutdown); } diff --git a/src/network/TlsChecker.cpp b/src/network/TlsChecker.cpp index 6a3361c..9e28308 100644 --- a/src/network/TlsChecker.cpp +++ b/src/network/TlsChecker.cpp @@ -10,11 +10,13 @@ #include #include -#include -#include -#include -#include -#include +#if (QT_VERSION < QT_VERSION_CHECK(5, 13, 0)) + #include + #include + #include + #include + #include +#endif Q_DECLARE_LOGGING_CATEGORY(developermode) Q_DECLARE_LOGGING_CATEGORY(network) @@ -64,6 +66,9 @@ bool TlsChecker::hasValidEphemeralKeyLength(const QSslKey& pEphemeralServerKey) if (keyAlgorithm == QSsl::Opaque) { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)) + qWarning() << "Qt failed to determine algorithm"; +#else qWarning() << "Qt failed to determine algorithm... fallback to internal handling"; // try do determine key algorithm and length if (auto key = static_cast(pEphemeralServerKey.handle())) @@ -86,6 +91,7 @@ bool TlsChecker::hasValidEphemeralKeyLength(const QSslKey& pEphemeralServerKey) break; } } +#endif } qDebug() << "Check ephemeral key of type" << TlsChecker::toString(keyAlgorithm) << "and key size" << keyLength; @@ -106,8 +112,8 @@ QString TlsChecker::getCertificateIssuerName(const QSslCertificate& pCertificate bool TlsChecker::isValidKeyLength(int pKeyLength, QSsl::KeyAlgorithm pKeyAlgorithm, bool pIsEphemeral) { - const auto& secureStorage = SecureStorage::getInstance(); - const int minKeySize = pIsEphemeral ? secureStorage.getMinimumEphemeralKeySize(pKeyAlgorithm) : secureStorage.getMinimumStaticKeySize(pKeyAlgorithm); + const auto* secureStorage = Env::getSingleton(); + const int minKeySize = pIsEphemeral ? secureStorage->getMinimumEphemeralKeySize(pKeyAlgorithm) : secureStorage->getMinimumStaticKeySize(pKeyAlgorithm); qDebug() << "Minimum requested key size" << minKeySize; @@ -191,6 +197,7 @@ QString TlsChecker::toString(QSsl::SslProtocol pProtocol) } Q_UNREACHABLE(); + return QString(); } @@ -284,7 +291,7 @@ bool TlsChecker::containsFatalError(QNetworkReply* pReply, const QList& pEntry); + void fireDeviceUpdated(const QSharedPointer& pEntry); void fireDeviceVanished(const QSharedPointer& pEntry); - void fireEstablishConnectionDone(const QSharedPointer& pEntry, GlobalStatus pStatus); + void fireEstablishConnectionDone(const QSharedPointer& pEntry, const GlobalStatus& pStatus); void fireNewRemoteDispatcher(const QSharedPointer& pRemoteDispatcher); void fireRemoteDevicesInfo(const QVector >& pRemoteDevices); void fireDispatcherDestroyed(GlobalStatus::Code pCloseCode, const QString& pId); void fireDetectionChanged(); - void fireCertificateRemoved(QString pDeviceName); + void fireCertificateRemoved(const QString& pDeviceName); public: RemoteClient() = default; diff --git a/src/remote_device/RemoteClientImpl.cpp b/src/remote_device/RemoteClientImpl.cpp index 0e12b03..5b14b3e 100644 --- a/src/remote_device/RemoteClientImpl.cpp +++ b/src/remote_device/RemoteClientImpl.cpp @@ -28,6 +28,7 @@ RemoteClientImpl::RemoteClientImpl() , mRemoteConnectorPending() { connect(mRemoteDeviceList.data(), &RemoteDeviceList::fireDeviceAppeared, this, &RemoteClient::fireDeviceAppeared); + connect(mRemoteDeviceList.data(), &RemoteDeviceList::fireDeviceUpdated, this, &RemoteClient::fireDeviceUpdated); connect(mRemoteDeviceList.data(), &RemoteDeviceList::fireDeviceVanished, this, &RemoteClient::fireDeviceVanished); bootstrapRemoteConnectorThread(); diff --git a/src/remote_device/RemoteConnector.cpp b/src/remote_device/RemoteConnector.cpp index 3d940f3..57d631b 100644 --- a/src/remote_device/RemoteConnector.cpp +++ b/src/remote_device/RemoteConnector.cpp @@ -31,9 +31,6 @@ GlobalStatus RemoteConnector::errorToGlobalStatus(RemoteErrorCode pDeviceError) case RemoteErrorCode::INVALID_REQUEST: return GlobalStatus::Code::RemoteConnector_InvalidRequest; - case RemoteErrorCode::EMPTY_PASSWORD: - return GlobalStatus::Code::RemoteConnector_EmptyPassword; - case RemoteErrorCode::NO_SUPPORTED_API_LEVEL: return GlobalStatus::Code::RemoteConnector_NoSupportedApiLevel; diff --git a/src/remote_device/RemoteConnector.h b/src/remote_device/RemoteConnector.h index 462a75d..5cddc40 100644 --- a/src/remote_device/RemoteConnector.h +++ b/src/remote_device/RemoteConnector.h @@ -17,7 +17,6 @@ namespace governikus { defineEnumType(RemoteErrorCode, INVALID_REQUEST, - EMPTY_PASSWORD, NO_SUPPORTED_API_LEVEL, CONNECTION_TIMEOUT, CONNECTION_ERROR, diff --git a/src/remote_device/RemoteConnectorImpl.cpp b/src/remote_device/RemoteConnectorImpl.cpp index 5673315..f74b870 100644 --- a/src/remote_device/RemoteConnectorImpl.cpp +++ b/src/remote_device/RemoteConnectorImpl.cpp @@ -88,7 +88,7 @@ void ConnectRequest::onConnected() qCDebug(remote_device) << "Connected to remote device"; auto& settings = Env::getSingleton()->getRemoteServiceSettings(); - const auto& pairingCiphers = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); + const auto& pairingCiphers = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); if (pairingCiphers.contains(cfg.sessionCipher())) { qCDebug(remote_device) << "Pairing completed | Add certificate:" << cfg.peerCertificate(); @@ -142,7 +142,7 @@ void ConnectRequest::onSslErrors(const QList& pErrors) }; const auto& config = mSocket->sslConfiguration(); - const auto& pairingCiphers = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); + const auto& pairingCiphers = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); if (pairingCiphers.contains(config.sessionCipher())) { allowedErrors << QSslError::SelfSignedCertificate; @@ -187,13 +187,13 @@ ConnectRequest::ConnectRequest(const RemoteDeviceDescriptor& pRemoteDeviceDescri QSslConfiguration config; if (mPsk.isEmpty()) { - config = SecureStorage::getInstance().getTlsConfigRemote().getConfiguration(); + config = Env::getSingleton()->getTlsConfigRemote().getConfiguration(); config.setCaCertificates(remoteServiceSettings.getTrustedCertificates()); qCCritical(remote_device) << "Start reconnect to server"; } else { - config = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); + config = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); qCCritical(remote_device) << "Start pairing to server"; } config.setPrivateKey(remoteServiceSettings.getKey()); diff --git a/src/remote_device/RemoteDeviceList.cpp b/src/remote_device/RemoteDeviceList.cpp index 583034a..d0cfbf4 100644 --- a/src/remote_device/RemoteDeviceList.cpp +++ b/src/remote_device/RemoteDeviceList.cpp @@ -7,6 +7,8 @@ #include "Env.h" #include "Initializer.h" +#include + using namespace governikus; @@ -37,16 +39,54 @@ template<> RemoteDeviceList* createNewObject(int&& RemoteDeviceListEntry::RemoteDeviceListEntry(const RemoteDeviceDescriptor& pRemoteDeviceDescriptor) : mRemoteDeviceDescriptor(pRemoteDeviceDescriptor) , mLastSeen(QTime::currentTime()) + , mLastSeenHistory() { } void RemoteDeviceListEntry::setLastSeenToNow() { + if (mLastSeen.isValid()) + { + mLastSeenHistory += mLastSeen; + } + mLastSeen = QTime::currentTime(); } +bool RemoteDeviceListEntry::cleanUpSeenTimestamps(int pReaderResponsiveTimeout) +{ + bool entryRemoved = false; + const int visibilityOld = getPercentSeen(); + + const QTime threshold(QTime::currentTime().addMSecs(-pReaderResponsiveTimeout)); + QMutableVectorIterator i(mLastSeenHistory); + while (i.hasNext()) + { + if (i.next() < threshold) + { + i.remove(); + entryRemoved = true; + } + } + + return entryRemoved && getPercentSeen() != visibilityOld; +} + + +int RemoteDeviceListEntry::getPercentSeen(int pCheckInterval, int pTimeFrame) const +{ + const int count = mLastSeenHistory.size(); + const int expectedMax = pTimeFrame / pCheckInterval; + const int percent = 100 * count / expectedMax; + + // Maximum is calculated based on the assumption, that only IPv4 is in use. + // If IPv6 is used in parallel - even better. + return qMin(percent, 100); +} + + bool RemoteDeviceListEntry::containsEquivalent(const RemoteDeviceDescriptor& pRemoteDeviceDescriptor) const { return mRemoteDeviceDescriptor.isEquivalent(pRemoteDeviceDescriptor); @@ -96,6 +136,7 @@ RemoteDeviceListImpl::RemoteDeviceListImpl(int pCheckInterval, int pReaderRespon , mResponsiveList() { connect(&mTimer, &QTimer::timeout, this, &RemoteDeviceListImpl::onProcessUnresponsiveRemoteReaders); + pCheckInterval = pCheckInterval / 2 - 1; // Nyquist-Shannon sampling theorem. Enable smooth UI updates. mTimer.setInterval(pCheckInterval); } @@ -112,7 +153,12 @@ void RemoteDeviceListImpl::update(const RemoteDeviceDescriptor& pDescriptor) { if (entry->containsEquivalent(pDescriptor)) { + const int visibilityOld = entry->getPercentSeen(); entry->setLastSeenToNow(); + if (entry->getPercentSeen() != visibilityOld) + { + Q_EMIT fireDeviceUpdated(entry); + } return; } } @@ -152,6 +198,12 @@ void RemoteDeviceListImpl::onProcessUnresponsiveRemoteReaders() { i.remove(); Q_EMIT fireDeviceVanished(entry); + continue; + } + + if (entry->cleanUpSeenTimestamps(mReaderResponsiveTimeout)) + { + Q_EMIT fireDeviceUpdated(entry); } } diff --git a/src/remote_device/RemoteDeviceList.h b/src/remote_device/RemoteDeviceList.h index 735d258..80b8c62 100644 --- a/src/remote_device/RemoteDeviceList.h +++ b/src/remote_device/RemoteDeviceList.h @@ -22,11 +22,14 @@ class RemoteDeviceListEntry private: const RemoteDeviceDescriptor mRemoteDeviceDescriptor; QTime mLastSeen; + QVector mLastSeenHistory; public: RemoteDeviceListEntry(const RemoteDeviceDescriptor& pRemoteDeviceDescriptor); void setLastSeenToNow(); + bool cleanUpSeenTimestamps(int pReaderResponsiveTimeout); + int getPercentSeen(int pCheckInterval = 1000, int pTimeFrame = 5000) const; bool containsEquivalent(const RemoteDeviceDescriptor& pRemoteDeviceDescriptor) const; bool isEqual(const RemoteDeviceListEntry* const pOther) const; @@ -44,6 +47,7 @@ class RemoteDeviceList Q_SIGNALS: void fireDeviceAppeared(const QSharedPointer&); + void fireDeviceUpdated(const QSharedPointer&); void fireDeviceVanished(const QSharedPointer&); public: diff --git a/src/remote_device/RemoteDispatcher.cpp b/src/remote_device/RemoteDispatcher.cpp index f338f1c..b7114cb 100644 --- a/src/remote_device/RemoteDispatcher.cpp +++ b/src/remote_device/RemoteDispatcher.cpp @@ -50,7 +50,7 @@ void RemoteDispatcher::onReceived(const QByteArray& pDataBlock) if (messageType == RemoteCardMessageType::UNDEFINED) { - const auto& errorMessage = QSharedPointer::create(QString(), ECardApiResult::Minor::AL_Unkown_API_Function); + const QSharedPointer& errorMessage = QSharedPointer::create(QString(), ECardApiResult::Minor::AL_Unkown_API_Function); send(errorMessage); return; } diff --git a/src/remote_device/RemoteDispatcherClient.cpp b/src/remote_device/RemoteDispatcherClient.cpp index 517cf50..265275b 100644 --- a/src/remote_device/RemoteDispatcherClient.cpp +++ b/src/remote_device/RemoteDispatcherClient.cpp @@ -67,6 +67,6 @@ void RemoteDispatcherClient::sendEstablishContext() qCDebug(remote_device) << "Try to establish context with version" << mVersion; RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); - const auto& establishContext = QSharedPointer::create(mVersion, settings.getServerName()); + const QSharedPointer& establishContext = QSharedPointer::create(mVersion, settings.getServerName()); send(establishContext); } diff --git a/src/remote_device/RemoteTlsServer.cpp b/src/remote_device/RemoteTlsServer.cpp index de29e7a..3b54abd 100644 --- a/src/remote_device/RemoteTlsServer.cpp +++ b/src/remote_device/RemoteTlsServer.cpp @@ -68,7 +68,7 @@ void RemoteTlsServer::incomingConnection(qintptr pSocketDescriptor) mSocket = new QSslSocket(); const auto cipherCfg = mPsk.isEmpty() ? SecureStorage::TlsSuite::DEFAULT : SecureStorage::TlsSuite::PSK; - QSslConfiguration config = SecureStorage::getInstance().getTlsConfigRemote(cipherCfg).getConfiguration(); + QSslConfiguration config = Env::getSingleton()->getTlsConfigRemote(cipherCfg).getConfiguration(); const auto& settings = Env::getSingleton()->getRemoteServiceSettings(); config.setPrivateKey(settings.getKey()); config.setLocalCertificate(settings.getCertificate()); @@ -83,15 +83,11 @@ void RemoteTlsServer::incomingConnection(qintptr pSocketDescriptor) { connect(mSocket.data(), QOverload&>::of(&QSslSocket::sslErrors), this, &RemoteTlsServer::onSslErrors); - connect(mSocket.data(), QOverload::of(&QAbstractSocket::error), this, &RemoteTlsServer::onError); - connect(mSocket.data(), &QSslSocket::preSharedKeyAuthenticationRequired, this, &RemoteTlsServer::onPreSharedKeyAuthenticationRequired); - - connect(mSocket.data(), &QSslSocket::encrypted, - this, &RemoteTlsServer::onEncrypted); + connect(mSocket.data(), &QSslSocket::encrypted, this, &RemoteTlsServer::onEncrypted); mSocket->startServerEncryption(); } @@ -128,7 +124,7 @@ void RemoteTlsServer::onSslErrors(const QList& pErrors) { if (pErrors.size() == 1 && pErrors.first().error() == QSslError::SelfSignedCertificate) { - const auto& pairingCiphers = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); + const auto& pairingCiphers = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); if (pairingCiphers.contains(mSocket->sessionCipher())) { qCDebug(remote_device) << "Client requests pairing | cipher:" << mSocket->sessionCipher() << "| certificate:" << mSocket->peerCertificate(); @@ -157,7 +153,7 @@ void RemoteTlsServer::onEncrypted() qCDebug(remote_device) << "Client connected"; auto& settings = Env::getSingleton()->getRemoteServiceSettings(); - const auto& pairingCiphers = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); + const auto& pairingCiphers = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); if (pairingCiphers.contains(cfg.sessionCipher())) { qCDebug(remote_device) << "Pairing completed | Add certificate:" << cfg.peerCertificate(); diff --git a/src/remote_device/ServerMessageHandler.cpp b/src/remote_device/ServerMessageHandler.cpp index 36deec8..91ca40b 100644 --- a/src/remote_device/ServerMessageHandler.cpp +++ b/src/remote_device/ServerMessageHandler.cpp @@ -147,6 +147,8 @@ void ServerMessageHandlerImpl::onCreateCardConnectionCommandDone(QSharedPointer< const auto& response = QSharedPointer::create(slotHandle); mRemoteDispatcher->send(response); + + Q_EMIT fireCardConnectionEstablished(pCommand->getCardConnection()); } @@ -384,7 +386,7 @@ void ServerMessageHandlerImpl::onClosed() } -void ServerMessageHandlerImpl::onRemoteMessage(RemoteCardMessageType pMessageType, const QJsonObject pJsonObject) +void ServerMessageHandlerImpl::onRemoteMessage(RemoteCardMessageType pMessageType, const QJsonObject& pJsonObject) { switch (pMessageType) { @@ -404,7 +406,7 @@ void ServerMessageHandlerImpl::onRemoteMessage(RemoteCardMessageType pMessageTyp qCWarning(remote_device) << "Received an unexpected message of type:" << pMessageType; const auto& localCopy = mRemoteDispatcher; QMetaObject::invokeMethod(localCopy.data(), [localCopy] { - const auto& errorMessage = QSharedPointer::create(QString(), ECardApiResult::Minor::AL_Unkown_API_Function); + const QSharedPointer& errorMessage = QSharedPointer::create(QString(), ECardApiResult::Minor::AL_Unkown_API_Function); localCopy->send(errorMessage); }, Qt::QueuedConnection); break; diff --git a/src/remote_device/ServerMessageHandler.h b/src/remote_device/ServerMessageHandler.h index e3e4dd3..788145b 100644 --- a/src/remote_device/ServerMessageHandler.h +++ b/src/remote_device/ServerMessageHandler.h @@ -37,6 +37,7 @@ class ServerMessageHandler virtual void sendModifyPinResponse(const QString& pSlotHandle, const ResponseApdu& pResponseApdu) = 0; Q_SIGNALS: + void fireCardConnectionEstablished(const QSharedPointer& pConnection); void fireEstablishPaceChannel(const QSharedPointer& pMessage, const QSharedPointer& pConnection); void fireModifyPin(const QSharedPointer& pMessage, const QSharedPointer& pConnection); void fireClosed(); @@ -68,7 +69,7 @@ class ServerMessageHandlerImpl void onCreateCardConnectionCommandDone(QSharedPointer pCommand); void onTransmitCardCommandDone(QSharedPointer pCommand); void onClosed(); - void onRemoteMessage(RemoteCardMessageType pMessageType, const QJsonObject pJsonObject); + void onRemoteMessage(RemoteCardMessageType pMessageType, const QJsonObject& pJsonObject); void onReaderChanged(const QString& pReaderName); void onReaderRemoved(const QString& pReaderName); diff --git a/src/remote_device/WebSocketChannel.cpp b/src/remote_device/WebSocketChannel.cpp index 80bd801..bcf213d 100644 --- a/src/remote_device/WebSocketChannel.cpp +++ b/src/remote_device/WebSocketChannel.cpp @@ -115,7 +115,7 @@ void WebSocketChannel::onDisconnected() if (mConnection) { Q_EMIT fireClosed(mConnection->closeCode() == QWebSocketProtocol::CloseCodeNormal ? - GlobalStatus::Code::RemoteReader_CloseCode_NormalClose : + GlobalStatus::Code::No_Error : GlobalStatus::Code::RemoteReader_CloseCode_AbnormalClose); } } diff --git a/src/remote_device/messages/IfdStatus.h b/src/remote_device/messages/IfdStatus.h index 47382cd..a066912 100644 --- a/src/remote_device/messages/IfdStatus.h +++ b/src/remote_device/messages/IfdStatus.h @@ -47,8 +47,6 @@ class IfdStatus { private: friend MockRemoteDispatcher; - friend ::test_RemoteReaderManagerPlugIn; - friend ::test_ServerMessageHandler; friend ::test_IfdStatus; QString mSlotName; diff --git a/src/remote_device/messages/IfdTransmit.cpp b/src/remote_device/messages/IfdTransmit.cpp index 2703c6a..74b743a 100644 --- a/src/remote_device/messages/IfdTransmit.cpp +++ b/src/remote_device/messages/IfdTransmit.cpp @@ -25,7 +25,7 @@ VALUE_NAME(ACCEPTABLE_STATUS_CODES, "AcceptableStatusCodes") } // namespace -void IfdTransmit::parseCommandApdu(QJsonValue pEntry) +void IfdTransmit::parseCommandApdu(const QJsonValue& pEntry) { if (!pEntry.isObject()) { diff --git a/src/remote_device/messages/IfdTransmit.h b/src/remote_device/messages/IfdTransmit.h index f32d56c..e6192c6 100644 --- a/src/remote_device/messages/IfdTransmit.h +++ b/src/remote_device/messages/IfdTransmit.h @@ -18,7 +18,7 @@ class IfdTransmit QString mSlotHandle; QByteArray mInputApdu; - void parseCommandApdu(QJsonValue pEntry); + void parseCommandApdu(const QJsonValue& pEntry); public: IfdTransmit(const QString& pSlotHandle, const QByteArray& pInputApdu); diff --git a/src/remote_device/messages/IfdVersion.cpp b/src/remote_device/messages/IfdVersion.cpp index 3107f59..7f9dd75 100644 --- a/src/remote_device/messages/IfdVersion.cpp +++ b/src/remote_device/messages/IfdVersion.cpp @@ -51,6 +51,7 @@ QString IfdVersion::toString() const } Q_UNREACHABLE(); + return QString(); } diff --git a/src/remote_device/plugin/RemoteCard.cpp b/src/remote_device/plugin/RemoteCard.cpp index da6e250..b7ecf6e 100644 --- a/src/remote_device/plugin/RemoteCard.cpp +++ b/src/remote_device/plugin/RemoteCard.cpp @@ -59,7 +59,7 @@ bool RemoteCard::sendMessage(const QSharedPointer& pMessage } -void RemoteCard::onMessageReceived(RemoteCardMessageType pMessageTpe, const QJsonObject pJsonObject) +void RemoteCard::onMessageReceived(RemoteCardMessageType pMessageTpe, const QJsonObject& pJsonObject) { QMutexLocker locker(&mProcessResponse); @@ -79,7 +79,7 @@ void RemoteCard::onMessageReceived(RemoteCardMessageType pMessageTpe, const QJso void RemoteCard::onDispatcherClosed(GlobalStatus::Code pCloseCode, const QString& pId) { - Q_UNUSED(pId); + Q_UNUSED(pId) QMutexLocker locker(&mProcessResponse); if (mWaitingForAnswer) @@ -174,7 +174,7 @@ bool RemoteCard::isConnected() CardReturnCode RemoteCard::transmit(const CommandApdu& pCommand, ResponseApdu& pResponse) { - const auto& transmitCmd = QSharedPointer::create(mSlotHandle, pCommand.getBuffer()); + const QSharedPointer& transmitCmd = QSharedPointer::create(mSlotHandle, pCommand.getBuffer()); if (sendMessage(transmitCmd, RemoteCardMessageType::IFDTransmitResponse, 5000)) { const IfdTransmitResponse response(mResponse); @@ -195,7 +195,7 @@ CardReturnCode RemoteCard::transmit(const CommandApdu& pCommand, ResponseApdu& p } -CardReturnCode RemoteCard::establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds) +EstablishPaceChannelOutput RemoteCard::establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, quint8 pTimeoutSeconds) { EstablishPaceChannel builder; builder.setPasswordId(pPasswordId); @@ -203,7 +203,7 @@ CardReturnCode RemoteCard::establishPaceChannel(PacePasswordId pPasswordId, cons builder.setCertificateDescription(pCertificateDescription); const QByteArray inputData = builder.createCommandDataCcid().getBuffer(); - const auto& message = QSharedPointer::create(mSlotHandle, inputData); + const QSharedPointer& message = QSharedPointer::create(mSlotHandle, inputData); if (sendMessage(message, RemoteCardMessageType::IFDEstablishPACEChannelResponse, pTimeoutSeconds * 1000)) { const IfdEstablishPaceChannelResponse response(mResponse); @@ -216,8 +216,9 @@ CardReturnCode RemoteCard::establishPaceChannel(PacePasswordId pPasswordId, cons if (!response.resultHasError()) { - pChannelOutput.parseFromCcid(response.getOutputData(), pPasswordId); - return pChannelOutput.getPaceReturnCode(); + EstablishPaceChannelOutput output; + output.parseFromCcid(response.getOutputData(), pPasswordId); + return output; } qCWarning(card_remote) << response.getResultMinor(); } @@ -234,7 +235,7 @@ CardReturnCode RemoteCard::setEidPin(quint8 pTimeoutSeconds, ResponseApdu& pResp PinModify pinModify(pTimeoutSeconds); const QByteArray inputData = pinModify.createCcidForRemote(); - const auto& message = QSharedPointer::create(mSlotHandle, inputData); + const QSharedPointer& message = QSharedPointer::create(mSlotHandle, inputData); if (sendMessage(message, RemoteCardMessageType::IFDModifyPINResponse, pTimeoutSeconds * 1000)) { const IfdModifyPinResponse response(mResponse); @@ -245,7 +246,7 @@ CardReturnCode RemoteCard::setEidPin(quint8 pTimeoutSeconds, ResponseApdu& pResp if (!response.isIncomplete()) { - PinModifyOutput output(response.getOutputData()); + PinModifyOutput output(ResponseApdu(response.getOutputData())); pResponseApdu.setBuffer(output.getResponseApdu().getBuffer()); if (!response.resultHasError()) { diff --git a/src/remote_device/plugin/RemoteCard.h b/src/remote_device/plugin/RemoteCard.h index 9f36c2f..b65f33a 100644 --- a/src/remote_device/plugin/RemoteCard.h +++ b/src/remote_device/plugin/RemoteCard.h @@ -39,7 +39,7 @@ class RemoteCard bool sendMessage(const QSharedPointer& pMessage, RemoteCardMessageType pExpectedAnswer, unsigned long pTimeout); private Q_SLOTS: - void onMessageReceived(RemoteCardMessageType pMessageTpe, const QJsonObject pJsonObject); + void onMessageReceived(RemoteCardMessageType pMessageTpe, const QJsonObject& pJsonObject); void onDispatcherClosed(GlobalStatus::Code pCloseCode, const QString& pId); Q_SIGNALS: @@ -55,7 +55,7 @@ class RemoteCard virtual CardReturnCode transmit(const CommandApdu& pCmd, ResponseApdu& pRes) override; - virtual CardReturnCode establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, EstablishPaceChannelOutput& pChannelOutput, quint8 pTimeoutSeconds = 60) override; + virtual EstablishPaceChannelOutput establishPaceChannel(PacePasswordId pPasswordId, const QByteArray& pChat, const QByteArray& pCertificateDescription, quint8 pTimeoutSeconds = 60) override; virtual CardReturnCode setEidPin(quint8 pTimeoutSeconds, ResponseApdu& pResponseApdu) override; }; diff --git a/src/remote_device/plugin/RemoteReader.cpp b/src/remote_device/plugin/RemoteReader.cpp index f127038..4c31e9b 100644 --- a/src/remote_device/plugin/RemoteReader.cpp +++ b/src/remote_device/plugin/RemoteReader.cpp @@ -33,7 +33,12 @@ RemoteReader::~RemoteReader() Card* RemoteReader::getCard() const { - return mCard.data(); + if (mCard) + { + return mCard.data(); + } + + return nullptr; } @@ -61,8 +66,8 @@ void RemoteReader::update(const IfdStatus& pIfdStatus) if (!pIfdStatus.getCardAvailable()) { qCDebug(card_remote) << "Card removed"; - mReaderInfo.setCardInfo(CardInfo(CardType::NONE)); mCard.reset(); + mReaderInfo.setCardInfo(CardInfo(CardType::NONE)); Q_EMIT fireCardRemoved(getName()); } return; diff --git a/src/remote_device/plugin/RemoteReaderManagerPlugIn.cpp b/src/remote_device/plugin/RemoteReaderManagerPlugIn.cpp index 2347e2c..d6aec31 100644 --- a/src/remote_device/plugin/RemoteReaderManagerPlugIn.cpp +++ b/src/remote_device/plugin/RemoteReaderManagerPlugIn.cpp @@ -71,8 +71,13 @@ void RemoteReaderManagerPlugIn::connectToPairedReaders() void RemoteReaderManagerPlugIn::handleIFDStatus(const QJsonObject& pJsonObject, const QString& pId) { + const auto it = mDispatcherList.find(pId); + if (it == mDispatcherList.end()) + { + return; + } + const auto& remoteDispatcher = *it; IfdStatus ifdStatus(pJsonObject); - const auto& remoteDispatcher = mDispatcherList[pId]; const QString& contextHandle = remoteDispatcher->getContextHandle(); const QString& readerName = ifdStatus.getSlotName() + contextHandle; @@ -168,7 +173,7 @@ void RemoteReaderManagerPlugIn::onContextEstablished(const QString& pIfdName, co else { QMetaObject::invokeMethod(remoteDispatcher.data(), [remoteDispatcher] { - const auto& ifdGetStatus = QSharedPointer::create(); + const QSharedPointer& ifdGetStatus = QSharedPointer::create(); remoteDispatcher->send(ifdGetStatus); }, Qt::QueuedConnection); } @@ -200,7 +205,7 @@ void RemoteReaderManagerPlugIn::onRemoteMessage(RemoteCardMessageType pMessageTy qCWarning(card_remote) << "Received an unexpected message of type:" << pMessageType; const auto& dispatcher = mDispatcherList[pId]; QMetaObject::invokeMethod(dispatcher.data(), [dispatcher] { - const auto& errorMessage = QSharedPointer::create(QString(), ECardApiResult::Minor::AL_Unkown_API_Function); + const QSharedPointer& errorMessage = QSharedPointer::create(QString(), ECardApiResult::Minor::AL_Unkown_API_Function); dispatcher->send(errorMessage); }, Qt::QueuedConnection); break; @@ -263,7 +268,7 @@ void RemoteReaderManagerPlugIn::addRemoteDispatcher(const QSharedPointer::create(QStringLiteral("IFDInterface_WebSocket_v0"), DeviceInfo::getName()); + const QSharedPointer& establishContext = QSharedPointer::create(QStringLiteral("IFDInterface_WebSocket_v0"), DeviceInfo::getName()); pRemoteDispatcher->send(establishContext); }, Qt::QueuedConnection); } @@ -287,12 +292,12 @@ void RemoteReaderManagerPlugIn::startScan(bool pAutoConnect) } -void RemoteReaderManagerPlugIn::stopScan() +void RemoteReaderManagerPlugIn::stopScan(const QString& pError) { const auto remoteClient = Env::getSingleton(); disconnect(remoteClient, &RemoteClient::fireDeviceAppeared, this, &RemoteReaderManagerPlugIn::connectToPairedReaders); mScanTimer.stop(); QMetaObject::invokeMethod(remoteClient, &RemoteClient::stopDetection, Qt::QueuedConnection); removeAllDispatchers(); - ReaderManagerPlugIn::stopScan(); + ReaderManagerPlugIn::stopScan(pError); } diff --git a/src/remote_device/plugin/RemoteReaderManagerPlugIn.h b/src/remote_device/plugin/RemoteReaderManagerPlugIn.h index ccafb81..cecbd31 100644 --- a/src/remote_device/plugin/RemoteReaderManagerPlugIn.h +++ b/src/remote_device/plugin/RemoteReaderManagerPlugIn.h @@ -56,7 +56,7 @@ class RemoteReaderManagerPlugIn virtual QList getReaders() const override; virtual void startScan(bool pAutoConnect) override; - virtual void stopScan() override; + virtual void stopScan(const QString& pError = QString()) override; }; diff --git a/src/secure_storage/SecureStorage.cpp b/src/secure_storage/SecureStorage.cpp index d532491..67a5823 100644 --- a/src/secure_storage/SecureStorage.cpp +++ b/src/secure_storage/SecureStorage.cpp @@ -351,6 +351,12 @@ QMap SecureStorage::readKeySizes(const QJsonObject& pCo { keySizes.insert(QSsl::KeyAlgorithm::Dsa, value); } +#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)) + else if (key == QLatin1String("Dh")) + { + keySizes.insert(QSsl::KeyAlgorithm::Dh, value); + } +#endif else if (key == QLatin1String("Ec")) { keySizes.insert(QSsl::KeyAlgorithm::Ec, value); diff --git a/src/secure_storage/SecureStorage.h b/src/secure_storage/SecureStorage.h index bd884a5..120aa2d 100644 --- a/src/secure_storage/SecureStorage.h +++ b/src/secure_storage/SecureStorage.h @@ -7,6 +7,7 @@ #pragma once +#include "Env.h" #include "TlsConfiguration.h" #include @@ -21,7 +22,7 @@ class test_SecureStorage; - +class MockSecureStorage; namespace governikus { @@ -30,7 +31,10 @@ using SignatureAlgorithmPair = QPair(); - mAppUpdateJsonUrl = VersionNumber::getApplicationVersion().isDeveloperVersion() ? secureStorage.getAppcastBetaUpdateUrl() : secureStorage.getAppcastUpdateUrl(); + mAppUpdateJsonUrl = VersionNumber::getApplicationVersion().isDeveloperVersion() ? secureStorage->getAppcastBetaUpdateUrl() : secureStorage->getAppcastUpdateUrl(); } @@ -45,7 +45,7 @@ void AppUpdater::checkAppUpdate(bool pIgnoreNextVersionskip) mIgnoreNextVersionskip = pIgnoreNextVersionskip; mAppUpdateData = AppUpdateData(); - Downloader* downloader = Env::getSingleton(); + auto* downloader = Env::getSingleton(); connect(downloader, &Downloader::fireDownloadSuccess, this, &AppUpdater::onUpdateDownloadFinished); connect(downloader, &Downloader::fireDownloadFailed, this, &AppUpdater::onUpdateDownloadFailed); connect(downloader, &Downloader::fireDownloadUnnecessary, this, &AppUpdater::onUpdateDownloadUnnecessary); @@ -69,7 +69,7 @@ void AppUpdater::skipVersion(const QString& pVersion) void AppUpdater::onUpdateDownloadFinished(const QUrl& pUpdateUrl, const QDateTime& pNewTimestamp, const QByteArray& pData) { - Q_UNUSED(pNewTimestamp); + Q_UNUSED(pNewTimestamp) if (pUpdateUrl == mAppUpdateJsonUrl) { AppUpdateData newData = AppUpdateData::parse(pData); @@ -146,7 +146,7 @@ void AppUpdater::onUpdateDownloadUnnecessary(const QUrl& pUpdateUrl) void AppUpdater::clearDownloaderConnection() { - Downloader* const downloader = Env::getSingleton(); + auto* const downloader = Env::getSingleton(); disconnect(downloader, &Downloader::fireDownloadSuccess, this, &AppUpdater::onUpdateDownloadFinished); disconnect(downloader, &Downloader::fireDownloadFailed, this, &AppUpdater::onUpdateDownloadFailed); disconnect(downloader, &Downloader::fireDownloadUnnecessary, this, &AppUpdater::onUpdateDownloadUnnecessary); diff --git a/src/services/Service.cpp b/src/services/Service.cpp index 557df28..40afbbb 100644 --- a/src/services/Service.cpp +++ b/src/services/Service.cpp @@ -46,11 +46,15 @@ void Service::updateConfigurations() void Service::updateApp(bool pIgnoreNextVersionskip) { +#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) mExplicitSuccessMessage = pIgnoreNextVersionskip; mTimer.start(mOneDayInMs); QMetaObject::invokeMethod(this, [ = ] { doAppUpdate(pIgnoreNextVersionskip); }, Qt::QueuedConnection); +#else + Q_UNUSED(pIgnoreNextVersionskip) +#endif } diff --git a/src/settings/AppSettings.h b/src/settings/AppSettings.h index c300184..79c4fa1 100644 --- a/src/settings/AppSettings.h +++ b/src/settings/AppSettings.h @@ -29,7 +29,6 @@ class AppSettings { Q_OBJECT friend class Env; - friend class ::test_AppSettings; private: bool mUsedAsSdk; diff --git a/src/settings/GeneralSettings.cpp b/src/settings/GeneralSettings.cpp index 772f3f3..d22943d 100644 --- a/src/settings/GeneralSettings.cpp +++ b/src/settings/GeneralSettings.cpp @@ -12,6 +12,7 @@ #include #include +#include #include @@ -33,14 +34,12 @@ SETTINGS_NAME(SETTINGS_NAME_LANGUAGE, "language") SETTINGS_NAME(SETTINGS_NAME_SELECTED_UI, "selectedUi") SETTINGS_NAME(SETTINGS_NAME_DEVICE_SURVEY_PENDING, "deviceSurveyPending") SETTINGS_NAME(SETTINGS_NAME_LAST_READER_PLUGIN_TYPE, "lastTechnology") - -#if !defined(Q_OS_IOS) +SETTINGS_NAME(SETTINGS_NAME_IN_APP_NOTIFICATIONS, "showInAppNotifications") SETTINGS_NAME(SETTINGS_NAME_REQUEST_STORE_FEEDBACK, "requestStoreFeedback") -#endif - SETTINGS_NAME(SETTINGS_GROUP_NAME_COMMON, "common") SETTINGS_NAME(SETTINGS_NAME_AUTO, "autoUpdateCheck") SETTINGS_NAME(SETTINGS_NAME_KEYLESS_PASSWORD, "keylessPassword") +SETTINGS_NAME(SETTINGS_NAME_SHUFFLE_SCREEN_KEYBOARD, "shuffleScreenKeyboard") } // namespace GeneralSettings::GeneralSettings() @@ -272,6 +271,7 @@ void GeneralSettings::setLanguage(const QLocale::Language pLanguage) if (pLanguage != getLanguage()) { mStoreGeneral->setValue(SETTINGS_NAME_LANGUAGE(), pLanguage == QLocale::C ? QString() : QLocale(pLanguage).bcp47Name()); + Q_EMIT fireLanguageChanged(); Q_EMIT fireSettingsChanged(); } } @@ -279,7 +279,7 @@ void GeneralSettings::setLanguage(const QLocale::Language pLanguage) QString GeneralSettings::getSelectedUi() const { - return QStringLiteral(DEFAULT_UI); + return mStoreGeneral->value(SETTINGS_NAME_SELECTED_UI(), QStringLiteral(DEFAULT_UI)).toString(); } @@ -317,45 +317,23 @@ void GeneralSettings::setDeviceSurveyPending(bool pDeviceSurveyPending) bool GeneralSettings::askForStoreFeedback() const { -#if defined(Q_OS_IOS) - qCWarning(settings) << "STORE FEEDBACK NOT IMPLEMENTED ON IOS"; - return false; - -#else return !mStoreGeneral->contains(SETTINGS_NAME_REQUEST_STORE_FEEDBACK()); - -#endif } bool GeneralSettings::isRequestStoreFeedback() const { -#if defined(Q_OS_IOS) - qCWarning(settings) << "STORE FEEDBACK NOT IMPLEMENTED ON IOS"; - return false; - -#else - return mStoreGeneral->value(SETTINGS_NAME_REQUEST_STORE_FEEDBACK(), false).toBool(); - -#endif } void GeneralSettings::setRequestStoreFeedback(bool pRequest) { -#if defined(Q_OS_IOS) - Q_UNUSED(pRequest); - qCWarning(settings) << "STORE FEEDBACK NOT IMPLEMENTED ON IOS"; - return; - -#else if (askForStoreFeedback() || pRequest != isRequestStoreFeedback()) { mStoreGeneral->setValue(SETTINGS_NAME_REQUEST_STORE_FEEDBACK(), pRequest); Q_EMIT fireSettingsChanged(); } -#endif } @@ -380,18 +358,30 @@ bool GeneralSettings::isAutoUpdateCheck() const if (autoUpdateCheckIsSetByAdmin()) { mStoreCommon->remove(SETTINGS_NAME_AUTO()); + // Start writing the new path since 1.17, too, so that we can rely on it in a future version. + mStoreGeneral->remove(SETTINGS_NAME_AUTO()); } +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + return mStoreCommon->value(SETTINGS_NAME_AUTO(), false).toBool(); + +#else return mStoreCommon->value(SETTINGS_NAME_AUTO(), true).toBool(); + +#endif } bool GeneralSettings::autoUpdateCheckIsSetByAdmin() const { +#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)) + QSettings settings(QSettings::Scope::SystemScope); +#else #ifdef Q_OS_MACOS QSettings settings(QSettings::Scope::SystemScope, QCoreApplication::organizationDomain(), QCoreApplication::applicationName()); #else QSettings settings(QSettings::Scope::SystemScope, QCoreApplication::organizationName(), QCoreApplication::applicationName()); +#endif #endif settings.beginGroup(SETTINGS_GROUP_NAME_COMMON()); @@ -404,6 +394,8 @@ void GeneralSettings::setAutoUpdateCheck(bool pAutoUpdateCheck) if (!autoUpdateCheckIsSetByAdmin() && pAutoUpdateCheck != isAutoUpdateCheck()) { mStoreCommon->setValue(SETTINGS_NAME_AUTO(), pAutoUpdateCheck); + // Start writing the new path since 1.17, too, so that we can rely on it in a future version. + mStoreGeneral->setValue(SETTINGS_NAME_AUTO(), pAutoUpdateCheck); Q_EMIT fireSettingsChanged(); } } @@ -420,6 +412,49 @@ void GeneralSettings::setUseScreenKeyboard(bool pUseScreenKeyboard) if (pUseScreenKeyboard != isUseScreenKeyboard()) { mStoreCommon->setValue(SETTINGS_NAME_KEYLESS_PASSWORD(), pUseScreenKeyboard); + // Start writing the new path since 1.17, too, so that we can rely on it in a future version. + mStoreGeneral->setValue(SETTINGS_NAME_KEYLESS_PASSWORD(), pUseScreenKeyboard); + Q_EMIT fireSettingsChanged(); + } +} + + +bool GeneralSettings::isShuffleScreenKeyboard() const +{ + return mStoreCommon->value(SETTINGS_NAME_SHUFFLE_SCREEN_KEYBOARD(), false).toBool(); +} + + +void GeneralSettings::setShuffleScreenKeyboard(bool pShuffleScreenKeyboard) +{ + if (pShuffleScreenKeyboard != isShuffleScreenKeyboard()) + { + mStoreCommon->setValue(SETTINGS_NAME_SHUFFLE_SCREEN_KEYBOARD(), pShuffleScreenKeyboard); + Q_EMIT fireSettingsChanged(); + } +} + + +bool GeneralSettings::isShowInAppNotifications() const +{ +#if defined(Q_OS_WIN) + return QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows10; + +#elif defined(Q_OS_MACOS) + return false; + +#else + return mStoreGeneral->value(SETTINGS_NAME_IN_APP_NOTIFICATIONS(), true).toBool(); + +#endif +} + + +void GeneralSettings::setShowInAppNotifications(bool pShowInAppNotifications) +{ + if (pShowInAppNotifications != isShowInAppNotifications()) + { + mStoreGeneral->setValue(SETTINGS_NAME_IN_APP_NOTIFICATIONS(), pShowInAppNotifications); Q_EMIT fireSettingsChanged(); } } diff --git a/src/settings/GeneralSettings.h b/src/settings/GeneralSettings.h index dfb56a8..bcbef86 100644 --- a/src/settings/GeneralSettings.h +++ b/src/settings/GeneralSettings.h @@ -36,7 +36,6 @@ class GeneralSettings Q_OBJECT friend class AppSettings; - friend class ::test_GeneralSettings; friend bool operator==(const GeneralSettings& pLeft, const GeneralSettings& pRight); private: @@ -100,6 +99,15 @@ class GeneralSettings bool isUseScreenKeyboard() const; void setUseScreenKeyboard(bool pUseScreenKeyboard); + + bool isShuffleScreenKeyboard() const; + void setShuffleScreenKeyboard(bool pShuffleScreenKeyboard); + + bool isShowInAppNotifications() const; + void setShowInAppNotifications(bool pShowInAppNotifications); + + Q_SIGNALS: + void fireLanguageChanged(); }; diff --git a/src/settings/HistorySettings.h b/src/settings/HistorySettings.h index d6d7f63..5e9f4ba 100644 --- a/src/settings/HistorySettings.h +++ b/src/settings/HistorySettings.h @@ -34,7 +34,6 @@ class HistorySettings { Q_OBJECT friend class AppSettings; - friend class ::test_HistorySettings; private: QSharedPointer mStore; diff --git a/src/settings/RemoteServiceSettings.cpp b/src/settings/RemoteServiceSettings.cpp index 557419e..7d11e67 100644 --- a/src/settings/RemoteServiceSettings.cpp +++ b/src/settings/RemoteServiceSettings.cpp @@ -66,6 +66,7 @@ QString RemoteServiceSettings::getDefaultServerName() QString name = DeviceInfo::getName(); if (name.isEmpty()) { + //: LABEL ALL_PLATFORMS return tr("Remote Reader"); } diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 3eef3e0..2216e76 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -14,11 +14,7 @@ IF(DESKTOP) ADD_SUBDIRECTORY(widget) ENDIF() -IF(DESKTOP) - ADD_SUBDIRECTORY(cli) -ENDIF() - -ADD_SUBDIRECTORY(jsonapi) +ADD_SUBDIRECTORY(json) ADD_SUBDIRECTORY(aidl) ADD_SUBDIRECTORY(websocket) diff --git a/src/ui/aidl/CMakeLists.txt b/src/ui/aidl/CMakeLists.txt index f71a279..a3a33bd 100644 --- a/src/ui/aidl/CMakeLists.txt +++ b/src/ui/aidl/CMakeLists.txt @@ -6,5 +6,5 @@ ADD_PLATFORM_LIBRARY(AusweisAppUiAidl) -TARGET_LINK_LIBRARIES(AusweisAppUiAidl Qt5::Core AusweisAppUiJsonApi AusweisAppGlobal) +TARGET_LINK_LIBRARIES(AusweisAppUiAidl Qt5::Core AusweisAppUiJson AusweisAppGlobal) TARGET_COMPILE_DEFINITIONS(AusweisAppUiAidl PRIVATE QT_STATICPLUGIN) diff --git a/src/ui/aidl/UIPlugInAidl.cpp b/src/ui/aidl/UIPlugInAidl.cpp index 0f9ace3..def477c 100644 --- a/src/ui/aidl/UIPlugInAidl.cpp +++ b/src/ui/aidl/UIPlugInAidl.cpp @@ -32,18 +32,18 @@ QAtomicPointer UIPlugInAidl::instance = nullptr; UIPlugInAidl::UIPlugInAidl() : UIPlugIn() - , mJsonApi(nullptr) + , mJson(nullptr) , mContext() , mWorkflowIsActive() , mInitializationSuccessfull(false) { - if (UILoader::getInstance().load(UIPlugInName::UIPlugInJsonApi)) + if (UILoader::getInstance().load(UIPlugInName::UIPlugInJson)) { - mJsonApi = qobject_cast(UILoader::getInstance().getLoaded(UIPlugInName::UIPlugInJsonApi)); - Q_ASSERT(mJsonApi); - connect(mJsonApi, &UIPlugInJsonApi::fireMessage, this, &UIPlugInAidl::onToSend, Qt::QueuedConnection); + mJson = qobject_cast(UILoader::getInstance().getLoaded(UIPlugInName::UIPlugInJson)); + Q_ASSERT(mJson); + connect(mJson, &UIPlugInJson::fireMessage, this, &UIPlugInAidl::onToSend, Qt::QueuedConnection); - mJsonApi->setEnabled(); + mJson->setEnabled(); mInitializationSuccessfull = true; } else @@ -92,17 +92,17 @@ void UIPlugInAidl::onWorkflowStarted(QSharedPointer pContext) void UIPlugInAidl::onWorkflowFinished(QSharedPointer pContext) { - Q_UNUSED(pContext); + Q_UNUSED(pContext) mContext.clear(); - mJsonApi->blockSignals(false); + mJson->blockSignals(false); mWorkflowIsActive.unlock(); } void UIPlugInAidl::onReceived(const QByteArray& pMessage) { - mJsonApi->doMessageProcessing(pMessage); + mJson->doMessageProcessing(pMessage); } @@ -122,7 +122,7 @@ void UIPlugInAidl::reset() { if (mContext) { - mJsonApi->blockSignals(true); + mJson->blockSignals(true); Q_EMIT mContext->fireCancelWorkflow(); } } @@ -137,7 +137,7 @@ void UIPlugInAidl::onToSend(const QByteArray& pMessage) QAndroidJniObject aidlBinder = QtAndroid::androidService().callObjectMethod("getAidlBinder", "()Lcom/governikus/ausweisapp2/AidlBinder;"); aidlBinder.callMethod("aidlReceive", "(Ljava/lang/String;)V", jsonAndroidString.object()); #else - Q_UNUSED(pMessage); + Q_UNUSED(pMessage) #endif } @@ -156,7 +156,7 @@ extern "C" JNIEXPORT jstring JNICALL Java_com_governikus_ausweisapp2_AidlBinder_resetValidSessionID(JNIEnv* pEnv, jobject pObj) { - Q_UNUSED(pObj); + Q_UNUSED(pObj) UIPlugInAidl* plugin = UIPlugInAidl::getInstance(); if (!plugin->isSuccessfullInitialized()) @@ -178,8 +178,8 @@ JNIEXPORT jstring JNICALL Java_com_governikus_ausweisapp2_AidlBinder_resetValidS JNIEXPORT jboolean JNICALL Java_com_governikus_ausweisapp2_AidlBinder_isSecureRandomPsk(JNIEnv* pEnv, jobject pObj) { - Q_UNUSED(pEnv); - Q_UNUSED(pObj); + Q_UNUSED(pEnv) + Q_UNUSED(pObj) return PskManager::getInstance().isSecureRandomPsk(); } @@ -192,9 +192,9 @@ extern "C" JNIEXPORT void JNICALL Java_com_governikus_ausweisapp2_AidlBinder_aidlSend(JNIEnv* pEnv, jobject pObj, jstring pJson) { - Q_UNUSED(pObj); + Q_UNUSED(pObj) - const char* nativeString = pEnv->GetStringUTFChars(pJson, 0); + const char* const nativeString = pEnv->GetStringUTFChars(pJson, 0); const QString json = QString::fromUtf8(nativeString); pEnv->ReleaseStringUTFChars(pJson, nativeString); diff --git a/src/ui/aidl/UIPlugInAidl.h b/src/ui/aidl/UIPlugInAidl.h index 1f52c55..77d3d63 100644 --- a/src/ui/aidl/UIPlugInAidl.h +++ b/src/ui/aidl/UIPlugInAidl.h @@ -7,7 +7,7 @@ #pragma once #include "UIPlugIn.h" -#include "UIPlugInJsonApi.h" +#include "UIPlugInJson.h" #include #include @@ -23,7 +23,7 @@ class UIPlugInAidl Q_INTERFACES(governikus::UIPlugIn) private: - UIPlugInJsonApi* mJsonApi; + UIPlugInJson* mJson; QSharedPointer mContext; QMutex mWorkflowIsActive; diff --git a/src/ui/aidl/metadata.json b/src/ui/aidl/metadata.json index 54af3dc..ef80e6b 100644 --- a/src/ui/aidl/metadata.json +++ b/src/ui/aidl/metadata.json @@ -1,4 +1,4 @@ { "name" : "UIPlugInAidl", - "dependencies" : ["UIPlugInJsonApi"] + "dependencies" : ["UIPlugInJson"] } diff --git a/src/ui/base/UILoader.h b/src/ui/base/UILoader.h index 9a74ee9..2adf621 100644 --- a/src/ui/base/UILoader.h +++ b/src/ui/base/UILoader.h @@ -16,7 +16,7 @@ namespace governikus { -defineEnumType(UIPlugInName, UIPlugInQml, UIPlugInCli, UIPlugInWidgets, UIPlugInJsonApi, UIPlugInWebSocket, UIPlugInAidl) +defineEnumType(UIPlugInName, UIPlugInQml, UIPlugInWidgets, UIPlugInJson, UIPlugInWebSocket, UIPlugInAidl) class UILoader : public QObject diff --git a/src/ui/base/UIPlugIn.h b/src/ui/base/UIPlugIn.h index 8a1e02f..b0809be 100644 --- a/src/ui/base/UIPlugIn.h +++ b/src/ui/base/UIPlugIn.h @@ -61,6 +61,7 @@ class UIPlugIn void fireShowUserInformation(const QString& pInformationMessage); void fireUiDominationRequest(const UIPlugIn* pUi, const QString& pInformation); void fireUiDominationRelease(); + void fireRestartApplicationRequested(); }; } // namespace governikus diff --git a/src/ui/cli/CMakeLists.txt b/src/ui/cli/CMakeLists.txt deleted file mode 100644 index 3032e8f..0000000 --- a/src/ui/cli/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -##################################################################### -# The cli plugin implements the ui interface for a command line. -# -# It is an experimental interface that can be controled by a -# terminal/console. It is deprecated and should be replaced by -# the WebSocket plugin. -##################################################################### - -ADD_PLATFORM_LIBRARY(AusweisAppUiCli) - -TARGET_LINK_LIBRARIES(AusweisAppUiCli Qt5::Core AusweisAppGlobal AusweisAppCore AusweisAppUi AusweisAppActivationWebservice) -TARGET_COMPILE_DEFINITIONS(AusweisAppUiCli PRIVATE QT_STATICPLUGIN) diff --git a/src/ui/cli/ConsoleReader.cpp b/src/ui/cli/ConsoleReader.cpp deleted file mode 100644 index 01815af..0000000 --- a/src/ui/cli/ConsoleReader.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/*! - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "ConsoleReader.h" - -#include -#include -#include - -Q_DECLARE_LOGGING_CATEGORY(cli) -Q_DECLARE_LOGGING_CATEGORY(stdinput) - -using namespace governikus; - - -#if defined(Q_OS_WIN) - -void ConsoleInputThread::run() -{ - const HANDLE eventHandles = GetStdHandle(STD_INPUT_HANDLE); - while (!isInterruptionRequested()) - { - if (WSA_WAIT_EVENT_0 != WSAWaitForMultipleEvents(1, &eventHandles, FALSE, 200, TRUE)) - { - continue; - } - - QTextStream input(stdin, QIODevice::ReadOnly); - const auto& line = input.readLine(); - qCDebug(stdinput) << line; - Q_EMIT fireText(line); - } -} - - -ConsoleInputThread::~ConsoleInputThread() -{ - requestInterruption(); - wait(); -} - - -ConsoleReader::ConsoleReader(QObject* pParent) - : QObject(pParent) -{ -} - - -void ConsoleReader::init() -{ - mConsoleInputThread.reset(new ConsoleInputThread()); - connect(mConsoleInputThread.data(), &ConsoleInputThread::fireText, this, &ConsoleReader::fireText); - mConsoleInputThread->start(); -} - - -void ConsoleReader::shutdown() -{ - mConsoleInputThread.reset(); -} - - -bool ConsoleReader::isInputOpen() const -{ - return !mConsoleInputThread.isNull(); -} - - -#else - - -ConsoleReader::ConsoleReader(QObject* pParent) - : QObject(pParent) - , mNotifier() - , mInputOpen(false) -{ -} - - -void ConsoleReader::init() -{ - Q_ASSERT(mNotifier.isNull()); - mNotifier.reset(new QSocketNotifier(fileno(stdin), QSocketNotifier::Read)); - connect(mNotifier.data(), &QSocketNotifier::activated, this, &ConsoleReader::onData); - mInputOpen = true; -} - - -void ConsoleReader::onData() -{ - Q_EMIT fireText(readText()); -} - - -QString ConsoleReader::readText() -{ - Q_ASSERT(!mNotifier.isNull()); - - QTextStream input(stdin, QIODevice::ReadOnly); - const QString& line = input.readLine(); - if (input.status() == QTextStream::ReadPastEnd) - { - mInputOpen = false; - } - return line; -} - - -void ConsoleReader::shutdown() -{ - Q_ASSERT(!mNotifier.isNull()); - mInputOpen = false; - mNotifier->setEnabled(false); - - Q_EMIT fireShutdown(); -} - - -bool ConsoleReader::isInputOpen() const -{ - return mInputOpen; -} - - -#endif diff --git a/src/ui/cli/ConsoleReader.h b/src/ui/cli/ConsoleReader.h deleted file mode 100644 index 12cf272..0000000 --- a/src/ui/cli/ConsoleReader.h +++ /dev/null @@ -1,74 +0,0 @@ -/*! - * \brief Helper to read stdin in non-blocking mode. - * - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include -#include - -#if defined(Q_OS_WIN) -#include - -#include -#include -#else -#include -#endif - - -namespace governikus -{ - -#if defined(Q_OS_WIN) - -class ConsoleInputThread - : public QThread -{ - Q_OBJECT - - public: - void run() Q_DECL_OVERRIDE; - virtual ~ConsoleInputThread(); - - Q_SIGNALS: - void fireText(const QString& pData); -}; - -#endif - - -class ConsoleReader - : public QObject -{ - Q_OBJECT - - private: -#if defined(Q_OS_WIN) - QScopedPointer mConsoleInputThread; -#else - QScopedPointer mNotifier; - - bool mInputOpen; - - private Q_SLOTS: - void onData(); -#endif - - public: - ConsoleReader(QObject* pParent = nullptr); - void init(); - void shutdown(); - bool isInputOpen() const; - - QString readText(); - - Q_SIGNALS: - void fireShutdown(); - void fireText(const QString& pData); -}; - - -} // namespace governikus diff --git a/src/ui/cli/UIPlugInCli.cpp b/src/ui/cli/UIPlugInCli.cpp deleted file mode 100644 index 7c321c2..0000000 --- a/src/ui/cli/UIPlugInCli.cpp +++ /dev/null @@ -1,234 +0,0 @@ -/*! - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "UIPlugInCli.h" - -#include "states/StateEnterPacePassword.h" - -#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) -#include "Env.h" -#include "HttpServer.h" -#endif - -#include -#include - -Q_DECLARE_LOGGING_CATEGORY(stdinput) -Q_DECLARE_LOGGING_CATEGORY(cli) - -using namespace governikus; - -UIPlugInCli::UIPlugInCli() - : mReader() - , mAvailableCommands() -{ - addCommand(QStringLiteral("cancel"), &UIPlugInCli::handleCancelWorkflow); - addCommand(QStringLiteral("changepin"), &UIPlugInCli::handleChangePin); - addCommand(QStringLiteral("enter-pin"), &UIPlugInCli::handleEnterPin); - addCommand(QStringLiteral("help"), &UIPlugInCli::handleHelp); - addCommand(QStringLiteral("ping"), &UIPlugInCli::handlePing); - addCommand(QStringLiteral("port"), &UIPlugInCli::handlePort); - addCommand(QStringLiteral("quit"), &UIPlugInCli::handleQuit); - - connect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::doInput); - mReader.init(); -} - - -UIPlugInCli::~UIPlugInCli() -{ -} - - -void UIPlugInCli::onApplicationStarted() -{ - qCInfo(cli) << "ready"; -} - - -void UIPlugInCli::doShutdown() -{ - mReader.shutdown(); -} - - -void UIPlugInCli::onWorkflowStarted(QSharedPointer pContext) -{ - mContext = pContext; - if (!mContext.isNull()) - { - connect(mContext.data(), &WorkflowContext::fireStateChanged, - this, &UIPlugInCli::onStateChanged); - mContext->setReaderPlugInTypes({ReaderManagerPlugInType::PCSC}); - } -} - - -void UIPlugInCli::onWorkflowFinished(QSharedPointer pContext) -{ - Q_UNUSED(pContext); - if (!mContext.isNull()) - { - mContext->disconnect(this); - mContext.reset(); - } -} - - -void UIPlugInCli::onStateChanged(const QString& pState) -{ - Q_UNUSED(pState); - - bool userInteractionRequired = false; - - if (AbstractState::isState(pState) && mContext->getEstablishPaceChannelType() == PacePasswordId::PACE_PIN) - { - userInteractionRequired = true; - qCInfo(cli) << "enter-pin"; - } - - mContext->setStateApproved(!userInteractionRequired); -} - - -void UIPlugInCli::doInput(const QString& pData) -{ - qCInfo(stdinput) << pData; - - const QStringList chunks = pData.split(QLatin1Char(' ')); - auto func = mAvailableCommands.value(chunks.at(0).toLower()); - if (func) - { - mCurrentCommandArgs = chunks.mid(1); - func(); - } - else - { - qCWarning(cli) << "Unknown command:" << pData; - } -} - - -void UIPlugInCli::handleChangePin() -{ - mOldPin.clear(); - mNewPin.clear(); - - qCDebug(cli) << "Change PIN requested"; - qCInfo(cli) << "Please enter old PIN"; - - disconnect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::doInput); - connect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::handleOldPinEntered); -} - - -void UIPlugInCli::handleOldPinEntered(const QString& pLine) -{ - const QRegularExpression regexOldPin(QStringLiteral("^[0-9]{5,6}$")); - if (regexOldPin.match(pLine).hasMatch() && mReader.isInputOpen()) - { - mOldPin = pLine; - qCInfo(cli) << "Please enter new PIN"; - disconnect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::handleOldPinEntered); - connect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::handleNewPinEntered); - } - else - { - qCInfo(cli) << "Please enter old PIN"; - } -} - - -void UIPlugInCli::handleNewPinEntered(const QString& pLine) -{ - const QRegularExpression regexNewPin(QStringLiteral("^[0-9]{6}$")); - if (regexNewPin.match(pLine).hasMatch() && mReader.isInputOpen()) - { - mNewPin = pLine; - qCInfo(cli) << "Please enter new PIN again"; - disconnect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::handleNewPinEntered); - connect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::handleNewPinEnteredAgain); - } - else - { - qCInfo(cli) << "Please enter new PIN"; - } -} - - -void UIPlugInCli::handleNewPinEnteredAgain(const QString& pLine) -{ - if (mNewPin != pLine) - { - qCInfo(cli) << "PINs were not equal"; - qCInfo(cli) << "Please enter new PIN"; - - disconnect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::handleNewPinEnteredAgain); - connect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::handleNewPinEntered); - } - else if (mReader.isInputOpen()) - { - qCDebug(cli) << "Start"; - Q_EMIT fireChangePinRequest(); - connect(&mReader, &ConsoleReader::fireText, this, &UIPlugInCli::doInput); - } -} - - -void UIPlugInCli::handleCancelWorkflow() -{ - if (mContext.isNull()) - { - qCInfo(cli) << "error"; - } - else - { - Q_EMIT mContext->fireCancelWorkflow(); - qCInfo(cli) << "ok"; - } -} - - -void UIPlugInCli::handleEnterPin() -{ - if (mCurrentCommandArgs.size() != 1 || mContext.isNull()) - { - qCInfo(cli) << "error"; - } - else - { - mContext->setPin(mCurrentCommandArgs.at(0)); - mContext->setStateApproved(true); - qCInfo(cli) << "ok"; - } -} - - -void UIPlugInCli::handleHelp() -{ - qCInfo(cli) << "Available commands:" << mAvailableCommands.keys().join(QStringLiteral(" | ")); -} - - -void UIPlugInCli::handlePing() -{ - qCInfo(cli) << "Pong!"; -} - - -void UIPlugInCli::handlePort() -{ -#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) - qCInfo(cli) << "Port:" << Env::getShared()->getServerPort(); -#else - qCInfo(cli) << "Port is undefined"; -#endif -} - - -void UIPlugInCli::handleQuit() -{ - qCInfo(cli) << "Shutdown application..."; - Q_EMIT fireQuitApplicationRequest(); -} diff --git a/src/ui/cli/UIPlugInCli.h b/src/ui/cli/UIPlugInCli.h deleted file mode 100644 index ea0bb85..0000000 --- a/src/ui/cli/UIPlugInCli.h +++ /dev/null @@ -1,72 +0,0 @@ -/*! - * \brief UIPlugIn implementation of CLI. - * - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include "context/WorkflowContext.h" -#include "ConsoleReader.h" -#include "UIPlugIn.h" - -#include -#include - -#include - -namespace governikus -{ - -class UIPlugInCli - : public UIPlugIn -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "governikus.UIPlugIn" FILE "metadata.json") - Q_INTERFACES(governikus::UIPlugIn) - - using MemberFunc = void (UIPlugInCli::*)(); - - private: - QString mOldPin; - QString mNewPin; - ConsoleReader mReader; - QMap > mAvailableCommands; - QSharedPointer mContext; - QStringList mCurrentCommandArgs; - - void addCommand(const QString& pCmd, MemberFunc pFunc) - { - mAvailableCommands.insert(pCmd, std::bind(pFunc, this)); - } - - - void handleCancelWorkflow(); - void handleChangePin(); - void handleEnterPin(); - void handleHelp(); - void handlePing(); - void handlePort(); - void handleQuit(); - - public: - UIPlugInCli(); - virtual ~UIPlugInCli() override; - - public Q_SLOTS: - virtual void onApplicationStarted() override; - - virtual void doShutdown() override; - - private Q_SLOTS: - void doInput(const QString& pData); - virtual void onWorkflowStarted(QSharedPointer pContext) override; - virtual void onWorkflowFinished(QSharedPointer pContext) override; - void onStateChanged(const QString& pState); - - void handleOldPinEntered(const QString& pLine); - void handleNewPinEntered(const QString& pLine); - void handleNewPinEnteredAgain(const QString& pLine); -}; - -} // namespace governikus diff --git a/src/ui/cli/metadata.json b/src/ui/cli/metadata.json deleted file mode 100644 index c850e16..0000000 --- a/src/ui/cli/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name" : "UIPlugInCli", - "dependencies" : [] -} diff --git a/src/ui/common/CMakeLists.txt b/src/ui/common/CMakeLists.txt index d33b64c..fbe6845 100644 --- a/src/ui/common/CMakeLists.txt +++ b/src/ui/common/CMakeLists.txt @@ -4,7 +4,7 @@ ADD_PLATFORM_LIBRARY(AusweisAppUiCommon) -TARGET_LINK_LIBRARIES(AusweisAppUiCommon Qt5::Core Qt5::Gui AusweisAppGlobal) +TARGET_LINK_LIBRARIES(AusweisAppUiCommon Qt5::Core Qt5::Gui AusweisAppGlobal AusweisAppCard AusweisAppRemoteDevice) IF(DESKTOP) TARGET_LINK_LIBRARIES(AusweisAppUiCommon Qt5::Widgets) diff --git a/src/ui/common/Email.cpp b/src/ui/common/Email.cpp new file mode 100644 index 0000000..429486e --- /dev/null +++ b/src/ui/common/Email.cpp @@ -0,0 +1,50 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "Email.h" + +#include "BuildHelper.h" +#include "GlobalStatus.h" +#include "LogHandler.h" + +#include + +namespace governikus +{ + +QString generateMailBody(const GlobalStatus& pStatus) +{ + const auto& logHandler = Env::getSingleton(); + QStringList mailBody(QObject::tr("Please describe the error that occurred.")); + + if (logHandler->useLogfile()) + { + mailBody << QObject::tr("You may want to attach the logfile which can be saved from the error dialog."); + } + + const QString newLine = QLatin1String("\n"); + mailBody << newLine; + + const auto& systemInfo = BuildHelper::getInformationHeader(); + for (const auto& info : systemInfo) + { + const auto first = QString::fromUtf8(QUrl::toPercentEncoding(info.first)); + const auto second = QString::fromUtf8(QUrl::toPercentEncoding(info.second)); + mailBody << first + QStringLiteral(": ") + second; + } + + mailBody << newLine + QObject::tr("Error code") + QLatin1Char(':'); + mailBody << getEnumName(pStatus.getStatusCode()); + + if (logHandler->hasCriticalLog()) + { + const QString criticalMessages = QString::fromUtf8(logHandler->getCriticalLogWindow()); + mailBody << newLine + QObject::tr("Critical errors:") + newLine + criticalMessages; + } + + return mailBody.join(newLine); +} + + +} // namespace governikus diff --git a/src/ui/common/Email.h b/src/ui/common/Email.h new file mode 100644 index 0000000..63beb2c --- /dev/null +++ b/src/ui/common/Email.h @@ -0,0 +1,16 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include + +namespace governikus +{ + +class GlobalStatus; + +QString generateMailBody(const GlobalStatus&); + +} // namespace governikus diff --git a/src/ui/common/HelpAction.cpp b/src/ui/common/HelpAction.cpp index 5286e28..270337c 100644 --- a/src/ui/common/HelpAction.cpp +++ b/src/ui/common/HelpAction.cpp @@ -33,7 +33,8 @@ const QMap HelpAction::mHelpMapping = { {QStringLiteral("generalTab"), QStringLiteral("settings-general.html")}, {QStringLiteral("pinTab"), QStringLiteral("settings-pin-management.html")}, {QStringLiteral("readerDeviceTab"), QStringLiteral("settings-reader-detection.html")}, - {QStringLiteral("stepChooseCardGui"), QStringLiteral("settings-reader-detection.html")} + {QStringLiteral("stepChooseCardGui"), QStringLiteral("settings-reader-detection.html")}, + {QStringLiteral("index"), QStringLiteral("index.html")} }; diff --git a/src/ui/common/ReaderDriverModel.cpp b/src/ui/common/ReaderDriverModel.cpp new file mode 100644 index 0000000..b2c7a47 --- /dev/null +++ b/src/ui/common/ReaderDriverModel.cpp @@ -0,0 +1,298 @@ +/*! + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ReaderDriverModel.h" + +#include "AppSettings.h" +#include "Env.h" +#include "GeneralSettings.h" +#include "HelpAction.h" +#include "LanguageLoader.h" +#include "ReaderConfiguration.h" +#include "ReaderDetector.h" +#include "ReaderManager.h" + +using namespace governikus; + + +ReaderDriverModel::ReaderDriverModel(QObject* pParent) + : QAbstractTableModel(pParent) + , mKnownDrivers() + , mConnectedReaders() + , mConnectedReadersUpdateTime() +{ + const GeneralSettings& generalSettings = Env::getSingleton()->getGeneralSettings(); + connect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &ReaderDriverModel::fireLanguageChanged); + connect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &ReaderDriverModel::onUpdateContent); + + const ReaderManager* const readerManager = Env::getSingleton(); + + connect(readerManager, &ReaderManager::fireReaderAdded, this, &ReaderDriverModel::onUpdateContent); + connect(readerManager, &ReaderManager::fireReaderRemoved, this, &ReaderDriverModel::onUpdateContent); + connect(Env::getSingleton(), &ReaderConfiguration::fireUpdated, this, &ReaderDriverModel::onUpdateContent); + connect(Env::getSingleton(), &ReaderDetector::fireReaderChangeDetected, this, &ReaderDriverModel::onUpdateContent); + connect(Env::getSingleton(), &AppSettings::fireSettingsChanged, this, &ReaderDriverModel::onUpdateContent); + onUpdateContent(); +} + + +void ReaderDriverModel::collectReaderData() +{ + mConnectedReaders.clear(); + + const QVector installedReaders = Env::getSingleton()->getReaderInfos(ReaderFilter({ + ReaderManagerPlugInType::PCSC + , ReaderManagerPlugInType::BLUETOOTH + , ReaderManagerPlugInType::NFC + })); + + for (const auto& installedReader : installedReaders) + { + const auto& readerSettingsInfo = installedReader.getReaderConfigurationInfo(); + if (!readerSettingsInfo.getUrl().isEmpty()) + { + mKnownDrivers += readerSettingsInfo; + mConnectedReaders += readerSettingsInfo; + } + } + + QVector readersWithoutDriver; + const auto& attachedSupportedDevices = Env::getSingleton()->getAttachedSupportedDevices(); + for (const auto& info : attachedSupportedDevices) + { + if (!mConnectedReaders.contains(info)) + { + readersWithoutDriver.append(info); + } + } + mConnectedReaders += readersWithoutDriver; +} + + +bool ReaderDriverModel::indexIsValid(const QModelIndex& pIndex) const +{ + if (!pIndex.isValid()) + { + Q_ASSERT(false && "Invoked with an invalid QModelIndex."); + return false; + } + + if (pIndex.row() >= rowCount() || pIndex.column() >= columnCount()) + { + Q_ASSERT(false && "Invoked with a row or a column which is out of bounds."); + return false; + } + + return true; +} + + +QString ReaderDriverModel::getStatus(const ReaderConfigurationInfo& pReaderConfigurationInfo) const +{ + if (mConnectedReaders.isEmpty()) + { + //: LABEL ALL_PLATFORMS + return tr("Not connected"); + } + + if (mKnownDrivers.contains(pReaderConfigurationInfo)) + { + //: LABEL ALL_PLATFORMS + return tr("Driver installed"); + } + + //: LABEL ALL_PLATFORMS + return tr("No driver installed"); +} + + +void ReaderDriverModel::onUpdateContent() +{ + beginResetModel(); + + collectReaderData(); + mConnectedReadersUpdateTime = QTime::currentTime(); + + endResetModel(); + + Q_EMIT fireModelChanged(); +} + + +QVariant ReaderDriverModel::headerData(int pSection, Qt::Orientation pOrientation, int pRole) const +{ + if (pRole == Qt::DisplayRole && pOrientation == Qt::Horizontal) + { + switch (pSection) + { + case ColumnId::ReaderName: + //: LABEL ALL_PLATFORMS + return tr("Card reader"); + + case ColumnId::ReaderStatus: + //: LABEL ALL_PLATFORMS + return tr("Status"); + + default: + return QVariant(); + } + } + return QVariant(); +} + + +int ReaderDriverModel::rowCount(const QModelIndex&) const +{ + return mConnectedReaders.size(); +} + + +int ReaderDriverModel::columnCount(const QModelIndex&) const +{ + return NUMBER_OF_COLUMNS; +} + + +QVariant ReaderDriverModel::data(const QModelIndex& pIndex, int pRole) const +{ + if (!indexIsValid(pIndex)) + { + return QVariant(); + } + + const auto& reader = mConnectedReaders.at(pIndex.row()); + switch (pRole) + { + case Qt::DisplayRole: + switch (pIndex.column()) + { + case ColumnId::ReaderName: + return reader.getName(); + + case ColumnId::ReaderStatus: + return getStatus(reader); + + default: + return QVariant(); + } + + case READER_NAME: + return reader.getName(); + + case READER_STATUS: + return getStatus(reader); + + case READER_IMAGE_PATH: + return getReaderImageUrl(pIndex); + + case READER_HTML_DESCRIPTION: + return getHTMLDescription(pIndex); + + case READER_DRIVER_URL: + return mConnectedReaders.at(pIndex.row()).getUrl(); + + case READER_INSTALLED_AND_SUPPORTED: + return isInstalledSupportedReader(pIndex); + + default: + return QVariant(); + } +} + + +QHash ReaderDriverModel::roleNames() const +{ + QHash roles = QAbstractTableModel::roleNames(); + roles.insert(READER_NAME, "readerName"); + roles.insert(READER_STATUS, "readerStatus"); + roles.insert(READER_IMAGE_PATH, "readerImagePath"); + roles.insert(READER_HTML_DESCRIPTION, "readerHTMLDescription"); + roles.insert(READER_DRIVER_URL, "readerDriverUrl"); + roles.insert(READER_INSTALLED_AND_SUPPORTED, "readerInstalledAndSupported"); + return roles; +} + + +QString ReaderDriverModel::getNoReaderFoundIconPath() const +{ + return ReaderConfiguration::getNoReaderFoundIconPath(); +} + + +QUrl ReaderDriverModel::getReaderImageUrl(const QModelIndex& pIndex) const +{ + return mConnectedReaders.at(pIndex.row()).getIcon()->lookupUrl(); +} + + +QString ReaderDriverModel::getReaderImagePath(const QModelIndex& pIndex) const +{ + if (!indexIsValid(pIndex)) + { + return QString(); + } + + return mConnectedReaders.at(pIndex.row()).getIcon()->lookupPath(); +} + + +QString ReaderDriverModel::getHTMLDescription(const QModelIndex& pIndex) const +{ + if (!indexIsValid(pIndex)) + { + return QString(); + } + + if (mConnectedReaders.isEmpty()) + { + return QString(); + } + + if (mKnownDrivers.contains(mConnectedReaders.at(pIndex.row()))) + { + //: LABEL ALL_PLATFORMS + return tr("Card reader ready for use."); + } + + //: INFO ALL_PLATFORMS The driver for card reader needs to be installed, the download link is provided in the message. + return tr("Please download and install the driver you can find at: %1"). + arg(QStringLiteral("%1").arg(mConnectedReaders.at(pIndex.row()).getUrl())); +} + + +QString ReaderDriverModel::getEmptyListDescriptionString() const +{ + const QString& url = HelpAction::getOnlineUrl(QStringLiteral("readerDeviceTab")); + //: Is embedded in a sentence. + const QString& hyperlink = QStringLiteral("%2").arg(url, tr("online help")); + //: INFO ALL_PLATFORMS No card reader was found, the message contains a link to the installation section of the manual. + return tr("No connected card reader found. See %1 for installation of card readers.").arg(hyperlink); +} + + +bool ReaderDriverModel::isInstalledSupportedReader(const QModelIndex& pIndex) const +{ + if (!indexIsValid(pIndex)) + { + return false; + } + + const auto& readerSettingsInfo = mConnectedReaders.at(pIndex.row()); + const bool knownDriver = mKnownDrivers.contains(readerSettingsInfo); + const bool knownReader = readerSettingsInfo.isKnownReader(); + return knownDriver && knownReader; +} + + +QString ReaderDriverModel::getLastUpdatedInformation() const +{ + if (!mConnectedReadersUpdateTime.isValid()) + { + return QString(); + } + + const auto& updateTime = LanguageLoader::getInstance().getUsedLocale().toString(mConnectedReadersUpdateTime, tr("hh:mm:ss AP")); + //: LABEL ALL_PLATFORMS + return tr("The list of card readers was last updated at %1.").arg(updateTime); +} diff --git a/src/ui/widget/ReaderDriverModel.h b/src/ui/common/ReaderDriverModel.h similarity index 58% rename from src/ui/widget/ReaderDriverModel.h rename to src/ui/common/ReaderDriverModel.h index d983760..67cd23b 100644 --- a/src/ui/widget/ReaderDriverModel.h +++ b/src/ui/common/ReaderDriverModel.h @@ -9,7 +9,9 @@ #include "ReaderDetector.h" #include +#include #include +#include #include @@ -21,38 +23,60 @@ class ReaderDriverModel { Q_OBJECT + Q_PROPERTY(QString noReaderFoundIconPath READ getNoReaderFoundIconPath CONSTANT) + Q_PROPERTY(QString emptyListDescriptionString READ getEmptyListDescriptionString NOTIFY fireLanguageChanged) + Q_PROPERTY(QString lastUpdatedInformation READ getLastUpdatedInformation NOTIFY fireModelChanged) + private: const int NUMBER_OF_COLUMNS = 2; QSet mKnownDrivers; QVector mConnectedReaders; + QTime mConnectedReadersUpdateTime; QString getStatus(const ReaderConfigurationInfo& pReaderConfigurationInfo) const; void collectReaderData(); + bool indexIsValid(const QModelIndex& pIndex) const; + + QUrl getReaderImageUrl(const QModelIndex& pIndex) const; + public: enum ColumnId : int { ReaderName = 0, ReaderStatus = 1 }; + enum UserRoles + { + READER_NAME = Qt::UserRole + 1, + READER_STATUS, + READER_IMAGE_PATH, + READER_HTML_DESCRIPTION, + READER_DRIVER_URL, + READER_INSTALLED_AND_SUPPORTED + }; ReaderDriverModel(QObject* pParent = nullptr); virtual QVariant headerData(int pSection, Qt::Orientation pOrientation, int pRole) const override; virtual int rowCount(const QModelIndex& pParent = QModelIndex()) const override; virtual int columnCount(const QModelIndex& pParent = QModelIndex()) const override; virtual QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const override; + QHash roleNames() const override; - const ReaderConfigurationInfo& getReaderConfigurationInfo(const QModelIndex& pIndex) const; + QString getReaderImagePath(const QModelIndex& pIndex) const; + QString getNoReaderFoundIconPath() const; QString getHTMLDescription(const QModelIndex& pIndex) const; + QString getEmptyListDescriptionString() const; bool isInstalledSupportedReader(const QModelIndex& pIndex) const; + QString getLastUpdatedInformation() const; public Q_SLOTS: void onUpdateContent(); Q_SIGNALS: void fireModelChanged(); - + void fireLanguageChanged(); }; diff --git a/src/remote_device/RemoteDeviceModel.cpp b/src/ui/common/RemoteDeviceModel.cpp similarity index 69% rename from src/remote_device/RemoteDeviceModel.cpp rename to src/ui/common/RemoteDeviceModel.cpp index 5661495..901fa0b 100644 --- a/src/remote_device/RemoteDeviceModel.cpp +++ b/src/ui/common/RemoteDeviceModel.cpp @@ -5,6 +5,9 @@ #include "RemoteDeviceModel.h" #include "AppSettings.h" +#include "Env.h" +#include "GeneralSettings.h" +#include "HelpAction.h" #include "LanguageLoader.h" #include "RemoteClient.h" @@ -13,7 +16,7 @@ using namespace governikus; -RemoteDeviceModelEntry::RemoteDeviceModelEntry(const QString pDeviceName, const QString pId, QSharedPointer& pRemoteDeviceListEntry) +RemoteDeviceModelEntry::RemoteDeviceModelEntry(const QString& pDeviceName, const QString& pId, QSharedPointer& pRemoteDeviceListEntry) : mDeviceName(pDeviceName) , mId(pId) , mPaired(false) @@ -25,19 +28,19 @@ RemoteDeviceModelEntry::RemoteDeviceModelEntry(const QString pDeviceName, const } -RemoteDeviceModelEntry::RemoteDeviceModelEntry(const QString pDeviceName, const QString pId, bool pPaired, bool pNetworkVisible, bool pSupported, const QDateTime& pLastConnected) +RemoteDeviceModelEntry::RemoteDeviceModelEntry(const QString& pDeviceName, const QString& pId, bool pPaired, bool pNetworkVisible, bool pSupported, const QDateTime& pLastConnected, QSharedPointer& pRemoteDeviceListEntry) : mDeviceName(pDeviceName) , mId(pId) , mPaired(pPaired) , mNetworkVisible(pNetworkVisible) , mSupported(pSupported) , mLastConnected(pLastConnected) - , mRemoteDeviceListEntry(nullptr) + , mRemoteDeviceListEntry(pRemoteDeviceListEntry) { } -RemoteDeviceModelEntry::RemoteDeviceModelEntry(const QString pDeviceName) +RemoteDeviceModelEntry::RemoteDeviceModelEntry(const QString& pDeviceName) : mDeviceName(pDeviceName) , mId() , mPaired(false) @@ -79,7 +82,7 @@ const QString& RemoteDeviceModelEntry::getId() const } -void RemoteDeviceModelEntry::setId(QString pId) +void RemoteDeviceModelEntry::setId(const QString& pId) { mId = pId; } @@ -91,6 +94,16 @@ bool RemoteDeviceModelEntry::isNetworkVisible() const } +int RemoteDeviceModelEntry::getLinkQuality() const +{ + if (mRemoteDeviceListEntry.isNull()) + { + return 0; + } + return mRemoteDeviceListEntry->getPercentSeen(); +} + + bool RemoteDeviceModelEntry::isSupported() const { return mSupported; @@ -121,14 +134,22 @@ RemoteDeviceModel::RemoteDeviceModel(QObject* pParent, bool pShowPairedReaders, , mAllRemoteReaders() , mShowPairedReaders(pShowPairedReaders) , mShowUnpairedReaders(pShowUnpairedReaders) + , mTimer() { - RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); + AppSettings* const appSettings = Env::getSingleton(); + + const GeneralSettings& generalSettings = appSettings->getGeneralSettings(); + connect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &RemoteDeviceModel::fireLanguageChanged); + connect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &RemoteDeviceModel::onKnownRemoteReadersChanged); + + const RemoteServiceSettings& settings = appSettings->getRemoteServiceSettings(); connect(&settings, &RemoteServiceSettings::fireTrustedRemoteInfosChanged, this, &RemoteDeviceModel::onKnownRemoteReadersChanged); onKnownRemoteReadersChanged(); const auto& remoteClient = Env::getSingleton(); - connect(remoteClient, &RemoteClient::fireDeviceAppeared, this, &RemoteDeviceModel::constructReaderList); - connect(remoteClient, &RemoteClient::fireDeviceVanished, this, &RemoteDeviceModel::constructReaderList); + connect(remoteClient, &RemoteClient::fireDeviceAppeared, this, &RemoteDeviceModel::onConstructReaderList); + connect(remoteClient, &RemoteClient::fireDeviceUpdated, this, &RemoteDeviceModel::onConstructReaderList); + connect(remoteClient, &RemoteClient::fireDeviceVanished, this, &RemoteDeviceModel::onConstructReaderList); } @@ -136,18 +157,40 @@ QHash RemoteDeviceModel::roleNames() const { QHash roles = QAbstractItemModel::roleNames(); roles.insert(REMOTE_DEVICE_NAME, QByteArrayLiteral("remoteDeviceName")); + roles.insert(REMOTE_DEVICE_STATUS, QByteArrayLiteral("remoteDeviceStatus")); roles.insert(LAST_CONNECTED, QByteArrayLiteral("lastConnected")); roles.insert(DEVICE_ID, QByteArrayLiteral("deviceId")); roles.insert(IS_NETWORK_VISIBLE, QByteArrayLiteral("isNetworkVisible")); roles.insert(IS_SUPPORTED, QByteArrayLiteral("isSupported")); + roles.insert(IS_PAIRED, QByteArrayLiteral("isPaired")); + roles.insert(LINK_QUALITY, QByteArrayLiteral("linkQualityInPercent")); return roles; } +bool RemoteDeviceModel::indexIsValid(const QModelIndex& pIndex) const +{ + if (!pIndex.isValid()) + { + Q_ASSERT(false && "Invoked with an invalid QModelIndex."); + return false; + } + + if (pIndex.row() >= rowCount() || pIndex.column() >= columnCount()) + { + Q_ASSERT(false && "Invoked with a row or a column which is out of bounds."); + return false; + } + + return true; +} + + QString RemoteDeviceModel::getStatus(const RemoteDeviceModelEntry& pRemoteDeviceModelEntry) const { if (mAllRemoteReaders.isEmpty()) { + //: LABEL ALL_PLATFORMS return tr("Not connected"); } @@ -157,18 +200,23 @@ QString RemoteDeviceModel::getStatus(const RemoteDeviceModelEntry& pRemoteDevice { if (pRemoteDeviceModelEntry.isSupported()) { - return tr("Paired and available"); + //: LABEL ALL_PLATFORMS + return tr("Available"); } + //: LABEL ALL_PLATFORMS return tr("Paired, but unsupported"); } + //: LABEL ALL_PLATFORMS return tr("Paired, but unavailable"); } if (!pRemoteDeviceModelEntry.isSupported()) { - return tr("Unsupported version"); + //: LABEL ALL_PLATFORMS + return tr("Unsupported"); } + //: LABEL ALL_PLATFORMS return tr("Not paired"); } @@ -180,9 +228,11 @@ QVariant RemoteDeviceModel::headerData(int pSection, Qt::Orientation pOrientatio switch (pSection) { case ColumnId::ReaderName: + //: LABEL ALL_PLATFORMS return tr("Device"); case ColumnId::ReaderStatus: + //: LABEL ALL_PLATFORMS return tr("Status"); default: @@ -207,6 +257,11 @@ int RemoteDeviceModel::columnCount(const QModelIndex&) const QVariant RemoteDeviceModel::data(const QModelIndex& pIndex, int pRole) const { + if (!indexIsValid(pIndex)) + { + return QVariant(); + } + const auto& reader = mAllRemoteReaders.at(pIndex.row()); switch (pRole) { @@ -223,6 +278,9 @@ QVariant RemoteDeviceModel::data(const QModelIndex& pIndex, int pRole) const case REMOTE_DEVICE_NAME: return reader.getDeviceName(); + case REMOTE_DEVICE_STATUS: + return getStatus(reader); + case LAST_CONNECTED: { const auto& locale = LanguageLoader::getInstance().getUsedLocale(); @@ -239,27 +297,30 @@ QVariant RemoteDeviceModel::data(const QModelIndex& pIndex, int pRole) const case IS_SUPPORTED: return reader.isSupported(); - default: - return QVariant(); + case IS_PAIRED: + return isPaired(pIndex); + + case LINK_QUALITY: + return reader.getLinkQuality(); } - Q_UNREACHABLE(); + return QVariant(); } const QSharedPointer RemoteDeviceModel::getRemoteDeviceListEntry(const QModelIndex& pIndex) const { - const int row = pIndex.row(); - if (row < 0 || row >= mAllRemoteReaders.size()) + if (!indexIsValid(pIndex)) { return QSharedPointer(); } + const int row = pIndex.row(); return mAllRemoteReaders.at(row).getRemoteDeviceListEntry(); } -const QSharedPointer RemoteDeviceModel::getRemoteDeviceListEntry(QString pDeviceId) const +const QSharedPointer RemoteDeviceModel::getRemoteDeviceListEntry(const QString& pDeviceId) const { for (const auto& device : mAllRemoteReaders) { @@ -274,17 +335,27 @@ const QSharedPointer RemoteDeviceModel::getRemoteDeviceLi bool RemoteDeviceModel::isPaired(const QModelIndex& pIndex) const { + if (!indexIsValid(pIndex)) + { + return false; + } + return mAllRemoteReaders.at(pIndex.row()).isPaired(); } bool RemoteDeviceModel::isSupported(const QModelIndex& pIndex) const { + if (!indexIsValid(pIndex)) + { + return false; + } + return mAllRemoteReaders.at(pIndex.row()).isSupported(); } -void RemoteDeviceModel::onWidgetShown() +void RemoteDeviceModel::onUiShown() { if (!mShowUnpairedReaders) { @@ -293,11 +364,11 @@ void RemoteDeviceModel::onWidgetShown() qDebug() << "Starting Remote Device Detection"; Env::getSingleton()->startDetection(); - constructReaderList(); + onConstructReaderList(); } -void RemoteDeviceModel::onWidgetHidden() +void RemoteDeviceModel::onUiHidden() { if (!mShowUnpairedReaders) { @@ -306,7 +377,7 @@ void RemoteDeviceModel::onWidgetHidden() qDebug() << "Stopping Remote Device Detection"; Env::getSingleton()->stopDetection(); - constructReaderList(); + onConstructReaderList(); } @@ -321,16 +392,16 @@ void RemoteDeviceModel::onKnownRemoteReadersChanged() mPairedReaders[reader.getFingerprint()] = reader; } - constructReaderList(); + onConstructReaderList(); } -void RemoteDeviceModel::constructReaderList() +void RemoteDeviceModel::onConstructReaderList() { beginResetModel(); mAllRemoteReaders.clear(); - RemoteClient* const remoteClient = Env::getSingleton(); + auto* const remoteClient = Env::getSingleton(); if (mShowPairedReaders) { @@ -340,12 +411,15 @@ void RemoteDeviceModel::constructReaderList() { bool networkVisible = false; bool supported = true; + QSharedPointer deviceListEntry; + for (const auto& announcingDevice : announcingDevices) { if (announcingDevice && announcingDevice->getRemoteDeviceDescriptor().getIfdId() == pairedReader.getFingerprint()) { networkVisible = true; supported = announcingDevice->getRemoteDeviceDescriptor().isSupported(); + deviceListEntry = announcingDevice; break; } @@ -371,7 +445,8 @@ void RemoteDeviceModel::constructReaderList() , true , networkVisible , supported - , pairedReader.getLastConnected()); + , pairedReader.getLastConnected() + , deviceListEntry); mAllRemoteReaders.append(newEntry); } } @@ -401,6 +476,11 @@ void RemoteDeviceModel::constructReaderList() void RemoteDeviceModel::forgetDevice(const QModelIndex& pIndex) { + if (!indexIsValid(pIndex)) + { + return; + } + auto& modelEntry = mAllRemoteReaders.at(pIndex.row()); const QString& id = modelEntry.getId(); @@ -415,9 +495,19 @@ void RemoteDeviceModel::forgetDevice(const QString& pDeviceId) } +QString RemoteDeviceModel::getEmptyListDescriptionString() const +{ + const QString& url = HelpAction::getOnlineUrl(QStringLiteral("readerDeviceTab")); + //: Is embedded in a sentence. + const QString& hyperlink = QStringLiteral("%2").arg(url, tr("online help")); + //: INFO ALL_PLATFORMS No smartphone with enabled remote service was found on the same network. + return tr("No smartphone with enabled remote service found. See %1 for details of use.").arg(hyperlink); +} + + void RemoteDeviceModel::onDeviceDisconnected(GlobalStatus::Code pCloseCode, const QString& pId) { - Q_UNUSED(pCloseCode); - Q_UNUSED(pId); - constructReaderList(); + Q_UNUSED(pCloseCode) + Q_UNUSED(pId) + onConstructReaderList(); } diff --git a/src/remote_device/RemoteDeviceModel.h b/src/ui/common/RemoteDeviceModel.h similarity index 75% rename from src/remote_device/RemoteDeviceModel.h rename to src/ui/common/RemoteDeviceModel.h index 09588a3..e958118 100644 --- a/src/remote_device/RemoteDeviceModel.h +++ b/src/ui/common/RemoteDeviceModel.h @@ -36,15 +36,16 @@ class RemoteDeviceModelEntry QSharedPointer mRemoteDeviceListEntry; public: - RemoteDeviceModelEntry(const QString pDeviceName, const QString mId, QSharedPointer& pRemoteDeviceListEntry); - RemoteDeviceModelEntry(const QString pDeviceName, const QString mId, bool pPaired, bool pNetworkVisible, bool pSupported, const QDateTime& pLastConnected); - RemoteDeviceModelEntry(const QString pDeviceName = QStringLiteral("UnknownReader")); + RemoteDeviceModelEntry(const QString& pDeviceName, const QString& mId, QSharedPointer& pRemoteDeviceListEntry); + RemoteDeviceModelEntry(const QString& pDeviceName, const QString& mId, bool pPaired, bool pNetworkVisible, bool pSupported, const QDateTime& pLastConnected, QSharedPointer& pRemoteDeviceListEntry); + RemoteDeviceModelEntry(const QString& pDeviceName = QStringLiteral("UnknownReader")); bool isPaired() const; void setPaired(bool pPaired); const QString& getId() const; - void setId(QString pId); + void setId(const QString& pId); bool isNetworkVisible() const; + int getLinkQuality() const; bool isSupported() const; void setNetworkVisible(bool pNetworkVisible); const QDateTime& getLastConnected() const; @@ -60,6 +61,8 @@ class RemoteDeviceModel { Q_OBJECT + Q_PROPERTY(QString emptyListDescriptionString READ getEmptyListDescriptionString NOTIFY fireLanguageChanged) + private: friend class ::test_RemoteDeviceModel; @@ -69,18 +72,26 @@ class RemoteDeviceModel QVector mAllRemoteReaders; const bool mShowPairedReaders; const bool mShowUnpairedReaders; + QTimer mTimer; + + bool indexIsValid(const QModelIndex& pIndex) const; QString getStatus(const RemoteDeviceModelEntry& pRemoteDeviceModelEntry) const; - void constructReaderList(); + + private Q_SLOTS: + void onConstructReaderList(); public: enum SettingsRemoteRoles { REMOTE_DEVICE_NAME = Qt::UserRole + 1, + REMOTE_DEVICE_STATUS, LAST_CONNECTED, DEVICE_ID, IS_NETWORK_VISIBLE, - IS_SUPPORTED + IS_SUPPORTED, + IS_PAIRED, + LINK_QUALITY }; enum ColumnId : int @@ -98,21 +109,23 @@ class RemoteDeviceModel virtual QHash roleNames() const override; const QSharedPointer getRemoteDeviceListEntry(const QModelIndex& pIndex) const; - const QSharedPointer getRemoteDeviceListEntry(QString pDeviceId) const; + const QSharedPointer getRemoteDeviceListEntry(const QString& pDeviceId) const; bool isPaired(const QModelIndex& pIndex) const; bool isSupported(const QModelIndex& pIndex) const; void forgetDevice(const QModelIndex& pIndex); void forgetDevice(const QString& pDeviceId); + QString getEmptyListDescriptionString() const; + public Q_SLOTS: - void onWidgetShown(); - void onWidgetHidden(); + void onUiShown(); + void onUiHidden(); void onKnownRemoteReadersChanged(); void onDeviceDisconnected(GlobalStatus::Code pCloseCode, const QString& pId); Q_SIGNALS: void fireModelChanged(); - + void fireLanguageChanged(); }; diff --git a/src/ui/common/TrayIcon.cpp b/src/ui/common/TrayIcon.cpp index 660f7dd..46c0d5b 100644 --- a/src/ui/common/TrayIcon.cpp +++ b/src/ui/common/TrayIcon.cpp @@ -60,6 +60,12 @@ TrayIcon::~TrayIcon() } +const QIcon& TrayIcon::getIcon() const +{ + return mIcon; +} + + void TrayIcon::create() { #if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) @@ -71,12 +77,14 @@ void TrayIcon::create() const auto trayIconMenu = new QMenu(nullptr); #if defined(Q_OS_MACOS) + //: LABEL DESKTOP QAction* showApplicationAction = new QAction(tr("Open"), trayIconMenu); connect(showApplicationAction, &QAction::triggered, this, &TrayIcon::fireShow); trayIconMenu->addAction(showApplicationAction); trayIconMenu->addSeparator(); #endif + //: LABEL DESKTOP const auto quitAction = new QAction(tr("Exit AusweisApp2"), trayIconMenu); connect(quitAction, &QAction::triggered, this, &TrayIcon::fireQuit); trayIconMenu->addAction(quitAction); @@ -89,7 +97,8 @@ void TrayIcon::create() mTrayIcon->setToolTip(QCoreApplication::applicationName()); mTrayIcon->show(); - mTrayIcon->showMessage(QString(), tr("AusweisApp2 was started."), mIcon, 3000); + //: LABEL DESKTOP + showMessage(QString(), tr("AusweisApp2 was started.")); #endif } @@ -103,3 +112,14 @@ void TrayIcon::hide() } #endif } + + +void TrayIcon::showMessage(const QString& pTitle, const QString& pMessage) +{ +#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) + mTrayIcon->showMessage(pTitle, pMessage, mIcon, 3000); +#else + Q_UNUSED(pTitle); + Q_UNUSED(pMessage); +#endif +} diff --git a/src/ui/common/TrayIcon.h b/src/ui/common/TrayIcon.h index 26af8f1..c67611d 100644 --- a/src/ui/common/TrayIcon.h +++ b/src/ui/common/TrayIcon.h @@ -34,9 +34,12 @@ class TrayIcon TrayIcon(); ~TrayIcon(); + const QIcon& getIcon() const; void create(); void hide(); + void showMessage(const QString& pTitle, const QString& pMessage); + Q_SIGNALS: void fireShow(); void fireQuit(); diff --git a/src/ui/jsonapi/CMakeLists.txt b/src/ui/json/CMakeLists.txt similarity index 50% rename from src/ui/jsonapi/CMakeLists.txt rename to src/ui/json/CMakeLists.txt index 4dfe294..0e50bc4 100644 --- a/src/ui/jsonapi/CMakeLists.txt +++ b/src/ui/json/CMakeLists.txt @@ -1,12 +1,12 @@ ##################################################################### -# The jsonapi plugin implements the ui interface for internal usage. +# The json plugin implements the ui interface for internal usage. # # This plugin will be used by other ui plugins like AIDL or WebSocket # to provide the SDK functionality. It provides no possibility for # direct user control. ##################################################################### -ADD_PLATFORM_LIBRARY(AusweisAppUiJsonApi) +ADD_PLATFORM_LIBRARY(AusweisAppUiJson) -TARGET_LINK_LIBRARIES(AusweisAppUiJsonApi Qt5::Core AusweisAppCore AusweisAppGlobal AusweisAppActivationInternal) -TARGET_COMPILE_DEFINITIONS(AusweisAppUiJsonApi PRIVATE QT_STATICPLUGIN) +TARGET_LINK_LIBRARIES(AusweisAppUiJson Qt5::Core AusweisAppCore AusweisAppGlobal AusweisAppActivationInternal) +TARGET_COMPILE_DEFINITIONS(AusweisAppUiJson PRIVATE QT_STATICPLUGIN) diff --git a/src/ui/jsonapi/MessageDispatcher.cpp b/src/ui/json/MessageDispatcher.cpp similarity index 81% rename from src/ui/jsonapi/MessageDispatcher.cpp rename to src/ui/json/MessageDispatcher.cpp index 619f7ce..71d4694 100644 --- a/src/ui/jsonapi/MessageDispatcher.cpp +++ b/src/ui/json/MessageDispatcher.cpp @@ -16,15 +16,17 @@ #include "messages/MsgHandlerInsertCard.h" #include "messages/MsgHandlerInternalError.h" #include "messages/MsgHandlerInvalid.h" +#include "messages/MsgHandlerLog.h" #include "messages/MsgHandlerReader.h" #include "messages/MsgHandlerReaderList.h" #include "messages/MsgHandlerUnknownCommand.h" #include -Q_DECLARE_LOGGING_CATEGORY(jsonapi) +Q_DECLARE_LOGGING_CATEGORY(json) -#define HANDLE_CURRENT_STATE(msgType, msgHandler) handleCurrentState(requestType, msgType, [&] {return msgHandler;}); +#define HANDLE_CURRENT_STATE(msgType, msgHandler) handleCurrentState(requestType, msgType, [&] {return msgHandler;}) +#define HANDLE_INTERNAL_ONLY(msgHandler) handleInternalOnly(requestType, [&] {return msgHandler;}) using namespace governikus; @@ -35,12 +37,12 @@ MessageDispatcher::MessageDispatcher() } -QByteArray MessageDispatcher::init(const QSharedPointer& pContext) +QByteArray MessageDispatcher::init(const QSharedPointer& pWorkflowContext) { Q_ASSERT(!mContext.isActiveWorkflow()); reset(); - mContext.setWorkflowContext(pContext); + mContext.setWorkflowContext(pWorkflowContext); if (mContext.getAuthContext()) { @@ -82,7 +84,7 @@ QByteArray MessageDispatcher::processStateChange(const QString& pState) { if (!mContext.isActiveWorkflow() || pState.isEmpty()) { - qCCritical(jsonapi) << "Unexpected condition:" << mContext.getWorkflowContext() << "|" << pState; + qCCritical(json) << "Unexpected condition:" << mContext.getWorkflowContext() << '|' << pState; return MsgHandlerInternalError(QLatin1String("Unexpected condition")).getOutput(); } @@ -118,19 +120,19 @@ MsgHandler MessageDispatcher::createForStateChange(MsgType pStateType) } -QByteArray MessageDispatcher::processCommand(const QByteArray& pMsg) +MessageDispatcher::Msg MessageDispatcher::processCommand(const QByteArray& pMsg) { QJsonParseError jsonError; const auto& json = QJsonDocument::fromJson(pMsg, &jsonError); if (jsonError.error != QJsonParseError::NoError) { - return MsgHandlerInvalid(jsonError).getOutput(); + return MsgHandlerInvalid(jsonError); } const auto& obj = json.object(); auto msg = createForCommand(obj); msg.setRequest(obj); - return msg.getOutput(); + return msg; } @@ -143,7 +145,7 @@ MsgHandler MessageDispatcher::createForCommand(const QJsonObject& pObj) } auto requestType = Enum::fromString(cmd, MsgCmdType::UNDEFINED); - qCDebug(jsonapi) << "Process type:" << requestType; + qCDebug(json) << "Process type:" << requestType; switch (requestType) { case MsgCmdType::UNDEFINED: @@ -167,6 +169,9 @@ MsgHandler MessageDispatcher::createForCommand(const QJsonObject& pObj) case MsgCmdType::GET_READER_LIST: return MsgHandlerReaderList(); + case MsgCmdType::GET_LOG: + return HANDLE_INTERNAL_ONLY(MsgHandlerLog()); + case MsgCmdType::GET_INFO: return MsgHandlerInfo(); @@ -196,6 +201,20 @@ MsgHandler MessageDispatcher::createForCommand(const QJsonObject& pObj) } +MsgHandler MessageDispatcher::handleInternalOnly(MsgCmdType pCmdType, const std::function& pFunc) +{ +#ifdef QT_NO_DEBUG + Q_UNUSED(pFunc) + return MsgHandlerUnknownCommand(getEnumName(pCmdType)); + +#else + Q_UNUSED(pCmdType) + return pFunc(); + +#endif +} + + MsgHandler MessageDispatcher::handleCurrentState(MsgCmdType pCmdType, MsgType pMsgType, const std::function& pFunc) { if (mContext.getLastStateMsg() == pMsgType) @@ -229,3 +248,22 @@ MsgHandler MessageDispatcher::accept() return MsgHandlerBadState(MsgCmdType::ACCEPT); } + + +MessageDispatcher::Msg::Msg(const MsgHandler& pHandler) + : mType(pHandler.getType()) + , mData(pHandler.getOutput()) +{ +} + + +MessageDispatcher::Msg::operator QByteArray() const +{ + return mData; +} + + +MessageDispatcher::Msg::operator MsgType() const +{ + return mType; +} diff --git a/src/ui/jsonapi/MessageDispatcher.h b/src/ui/json/MessageDispatcher.h similarity index 68% rename from src/ui/jsonapi/MessageDispatcher.h rename to src/ui/json/MessageDispatcher.h index f05bdc2..bb25cbd 100644 --- a/src/ui/jsonapi/MessageDispatcher.h +++ b/src/ui/json/MessageDispatcher.h @@ -34,14 +34,28 @@ class MessageDispatcher MsgHandler cancel(); MsgHandler accept(); MsgHandler handleCurrentState(MsgCmdType pCmdType, MsgType pMsgType, const std::function& pFunc); + MsgHandler handleInternalOnly(MsgCmdType pCmdType, const std::function& pFunc); public: + class Msg final + { + friend class MessageDispatcher; + const MsgType mType; + const QByteArray mData; + + Msg(const MsgHandler& pHandler); + + public: + operator QByteArray() const; + operator MsgType() const; + }; + MessageDispatcher(); - QByteArray init(const QSharedPointer& pContext); + QByteArray init(const QSharedPointer& pWorkflowContext); QByteArray finish(); void reset(); - QByteArray processCommand(const QByteArray& pMsg); + Msg processCommand(const QByteArray& pMsg); QByteArray processStateChange(const QString& pState); QByteArray createMsgReader(const QString& pName) const; diff --git a/src/ui/jsonapi/UIPlugInJsonApi.cpp b/src/ui/json/UIPlugInJson.cpp similarity index 56% rename from src/ui/jsonapi/UIPlugInJsonApi.cpp rename to src/ui/json/UIPlugInJson.cpp index 7bd9316..3c87720 100644 --- a/src/ui/jsonapi/UIPlugInJsonApi.cpp +++ b/src/ui/json/UIPlugInJson.cpp @@ -2,18 +2,19 @@ * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany */ -#include "UIPlugInJsonApi.h" +#include "UIPlugInJson.h" +#include "messages/MsgTypes.h" #include "ReaderManager.h" #include #include -Q_DECLARE_LOGGING_CATEGORY(jsonapi) +Q_DECLARE_LOGGING_CATEGORY(json) using namespace governikus; -UIPlugInJsonApi::UIPlugInJsonApi() +UIPlugInJson::UIPlugInJson() : UIPlugIn() , mMessageDispatcher() , mEnabled(false) @@ -21,45 +22,48 @@ UIPlugInJsonApi::UIPlugInJsonApi() } -void UIPlugInJsonApi::setEnabled(bool pEnable) +void UIPlugInJson::setEnabled(bool pEnable) { mEnabled = pEnable; const auto readerManager = Env::getSingleton(); if (mEnabled) { - connect(readerManager, &ReaderManager::fireReaderAdded, this, &UIPlugInJsonApi::onReaderEvent); - connect(readerManager, &ReaderManager::fireReaderRemoved, this, &UIPlugInJsonApi::onReaderEvent); - connect(readerManager, &ReaderManager::fireCardInserted, this, &UIPlugInJsonApi::onReaderEvent); - connect(readerManager, &ReaderManager::fireCardRemoved, this, &UIPlugInJsonApi::onReaderEvent); + connect(readerManager, &ReaderManager::fireReaderAdded, this, &UIPlugInJson::onReaderEvent); + connect(readerManager, &ReaderManager::fireReaderRemoved, this, &UIPlugInJson::onReaderEvent); + connect(readerManager, &ReaderManager::fireCardInserted, this, &UIPlugInJson::onReaderEvent); + connect(readerManager, &ReaderManager::fireCardRemoved, this, &UIPlugInJson::onReaderEvent); } else { - disconnect(readerManager, &ReaderManager::fireReaderAdded, this, &UIPlugInJsonApi::onReaderEvent); - disconnect(readerManager, &ReaderManager::fireReaderRemoved, this, &UIPlugInJsonApi::onReaderEvent); - disconnect(readerManager, &ReaderManager::fireCardInserted, this, &UIPlugInJsonApi::onReaderEvent); - disconnect(readerManager, &ReaderManager::fireCardRemoved, this, &UIPlugInJsonApi::onReaderEvent); + disconnect(readerManager, &ReaderManager::fireReaderAdded, this, &UIPlugInJson::onReaderEvent); + disconnect(readerManager, &ReaderManager::fireReaderRemoved, this, &UIPlugInJson::onReaderEvent); + disconnect(readerManager, &ReaderManager::fireCardInserted, this, &UIPlugInJson::onReaderEvent); + disconnect(readerManager, &ReaderManager::fireCardRemoved, this, &UIPlugInJson::onReaderEvent); } } -bool UIPlugInJsonApi::isEnabled() const +bool UIPlugInJson::isEnabled() const { return mEnabled; } -void UIPlugInJsonApi::callFireMessage(const QByteArray& pMsg) +void UIPlugInJson::callFireMessage(const QByteArray& pMsg, bool pLogging) { if (!pMsg.isEmpty()) { - qCDebug(jsonapi).noquote() << "Fire message:" << pMsg; + if (Q_LIKELY(pLogging)) + { + qCDebug(json).noquote() << "Fire message:" << pMsg; + } Q_EMIT fireMessage(pMsg); } } -void UIPlugInJsonApi::onWorkflowStarted(QSharedPointer pContext) +void UIPlugInJson::onWorkflowStarted(QSharedPointer pContext) { if (!mEnabled) { @@ -68,14 +72,14 @@ void UIPlugInJsonApi::onWorkflowStarted(QSharedPointer pContext if (pContext.objectCast()) { - connect(pContext.data(), &WorkflowContext::fireStateChanged, this, &UIPlugInJsonApi::onStateChanged); + connect(pContext.data(), &WorkflowContext::fireStateChanged, this, &UIPlugInJson::onStateChanged); } callFireMessage(mMessageDispatcher.init(pContext)); } -void UIPlugInJsonApi::onWorkflowFinished(QSharedPointer ) +void UIPlugInJson::onWorkflowFinished(QSharedPointer ) { if (!mEnabled) { @@ -87,29 +91,30 @@ void UIPlugInJsonApi::onWorkflowFinished(QSharedPointer ) } -void UIPlugInJsonApi::onReaderEvent(const QString& pName) +void UIPlugInJson::onReaderEvent(const QString& pName) { callFireMessage(mMessageDispatcher.createMsgReader(pName)); } -void UIPlugInJsonApi::onStateChanged(const QString& pNewState) +void UIPlugInJson::onStateChanged(const QString& pNewState) { callFireMessage(mMessageDispatcher.processStateChange(pNewState)); } -void UIPlugInJsonApi::doMessageProcessing(const QByteArray& pMsg) +void UIPlugInJson::doMessageProcessing(const QByteArray& pMsg) { if (!mEnabled) { return; } - callFireMessage(mMessageDispatcher.processCommand(pMsg)); + const auto& msg = mMessageDispatcher.processCommand(pMsg); + callFireMessage(msg, msg != MsgType::LOG); } -void UIPlugInJsonApi::doShutdown() +void UIPlugInJson::doShutdown() { } diff --git a/src/ui/jsonapi/UIPlugInJsonApi.h b/src/ui/json/UIPlugInJson.h similarity index 86% rename from src/ui/jsonapi/UIPlugInJsonApi.h rename to src/ui/json/UIPlugInJson.h index 54c4b62..de8bb1c 100644 --- a/src/ui/jsonapi/UIPlugInJsonApi.h +++ b/src/ui/json/UIPlugInJson.h @@ -13,7 +13,7 @@ namespace governikus { -class UIPlugInJsonApi +class UIPlugInJson : public UIPlugIn { Q_OBJECT @@ -24,11 +24,11 @@ class UIPlugInJsonApi MessageDispatcher mMessageDispatcher; bool mEnabled; - inline void callFireMessage(const QByteArray& pMsg); + inline void callFireMessage(const QByteArray& pMsg, bool pLogging = true); public: - UIPlugInJsonApi(); - virtual ~UIPlugInJsonApi() override = default; + UIPlugInJson(); + virtual ~UIPlugInJson() override = default; void setEnabled(bool pEnable = true); bool isEnabled() const; diff --git a/src/ui/jsonapi/messages/MsgContext.cpp b/src/ui/json/messages/MsgContext.cpp similarity index 97% rename from src/ui/jsonapi/messages/MsgContext.cpp rename to src/ui/json/messages/MsgContext.cpp index 786ae93..908cf0c 100644 --- a/src/ui/jsonapi/messages/MsgContext.cpp +++ b/src/ui/json/messages/MsgContext.cpp @@ -8,8 +8,6 @@ #include -Q_DECLARE_LOGGING_CATEGORY(jsonapi) - using namespace governikus; diff --git a/src/ui/jsonapi/messages/MsgContext.h b/src/ui/json/messages/MsgContext.h similarity index 100% rename from src/ui/jsonapi/messages/MsgContext.h rename to src/ui/json/messages/MsgContext.h diff --git a/src/ui/jsonapi/messages/MsgHandler.cpp b/src/ui/json/messages/MsgHandler.cpp similarity index 88% rename from src/ui/jsonapi/messages/MsgHandler.cpp rename to src/ui/json/messages/MsgHandler.cpp index 8ece08e..4dd753f 100644 --- a/src/ui/jsonapi/messages/MsgHandler.cpp +++ b/src/ui/json/messages/MsgHandler.cpp @@ -64,14 +64,14 @@ MsgHandler::MsgHandler(MsgType pType) } -MsgHandler::MsgHandler(MsgType pType, const char* pKey, const QString& pValue) +MsgHandler::MsgHandler(MsgType pType, const char* const pKey, const QString& pValue) : MsgHandler(pType) { setValue(pKey, pValue); } -MsgHandler::MsgHandler(MsgType pType, const char* pKey, const QLatin1String pValue) +MsgHandler::MsgHandler(MsgType pType, const char* const pKey, const QLatin1String pValue) : MsgHandler(pType) { setValue(pKey, pValue); @@ -120,7 +120,7 @@ void MsgHandler::setRequest(const QJsonObject& pRequest) } -void MsgHandler::setValue(const char* pKey, const QString& pValue) +void MsgHandler::setValue(const char* const pKey, const QString& pValue) { setValue(QLatin1String(pKey), pValue); } @@ -135,7 +135,7 @@ void MsgHandler::setValue(const QLatin1String pKey, const QLatin1String pValue) } -void MsgHandler::setValue(const char* pKey, const QLatin1String pValue) +void MsgHandler::setValue(const char* const pKey, const QLatin1String pValue) { setValue(QLatin1String(pKey), pValue); } diff --git a/src/ui/jsonapi/messages/MsgHandler.h b/src/ui/json/messages/MsgHandler.h similarity index 75% rename from src/ui/jsonapi/messages/MsgHandler.h rename to src/ui/json/messages/MsgHandler.h index 4190250..bf879a2 100644 --- a/src/ui/jsonapi/messages/MsgHandler.h +++ b/src/ui/json/messages/MsgHandler.h @@ -24,14 +24,14 @@ class MsgHandler protected: QJsonObject mJsonObject; - MsgHandler(MsgType pType); - MsgHandler(MsgType pType, const char* pKey, const QString& pValue); - MsgHandler(MsgType pType, const char* pKey, const QLatin1String pValue); + explicit MsgHandler(MsgType pType); + explicit MsgHandler(MsgType pType, const char* const pKey, const QString& pValue); + explicit MsgHandler(MsgType pType, const char* const pKey, const QLatin1String pValue); void setValue(const QLatin1String pKey, const QString& pValue); - void setValue(const char* pKey, const QString& pValue); + void setValue(const char* const pKey, const QString& pValue); void setValue(const QLatin1String pKey, const QLatin1String pValue); - void setValue(const char* pKey, const QLatin1String pValue); + void setValue(const char* const pKey, const QLatin1String pValue); void setVoid(bool pVoid = true); diff --git a/src/ui/jsonapi/messages/MsgHandlerAccessRights.cpp b/src/ui/json/messages/MsgHandlerAccessRights.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerAccessRights.cpp rename to src/ui/json/messages/MsgHandlerAccessRights.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerAccessRights.h b/src/ui/json/messages/MsgHandlerAccessRights.h similarity index 83% rename from src/ui/jsonapi/messages/MsgHandlerAccessRights.h rename to src/ui/json/messages/MsgHandlerAccessRights.h index 206bdec..b1c50fc 100644 --- a/src/ui/jsonapi/messages/MsgHandlerAccessRights.h +++ b/src/ui/json/messages/MsgHandlerAccessRights.h @@ -27,8 +27,8 @@ class MsgHandlerAccessRights QJsonObject getAuxiliaryData(const QSharedPointer& pContext); public: - MsgHandlerAccessRights(const MsgContext& pContext); - MsgHandlerAccessRights(const QJsonObject& pObj, MsgContext& pContext); + explicit MsgHandlerAccessRights(const MsgContext& pContext); + explicit MsgHandlerAccessRights(const QJsonObject& pObj, MsgContext& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerApiLevel.cpp b/src/ui/json/messages/MsgHandlerApiLevel.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerApiLevel.cpp rename to src/ui/json/messages/MsgHandlerApiLevel.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerApiLevel.h b/src/ui/json/messages/MsgHandlerApiLevel.h similarity index 75% rename from src/ui/jsonapi/messages/MsgHandlerApiLevel.h rename to src/ui/json/messages/MsgHandlerApiLevel.h index f8b8ade..523420e 100644 --- a/src/ui/jsonapi/messages/MsgHandlerApiLevel.h +++ b/src/ui/json/messages/MsgHandlerApiLevel.h @@ -21,8 +21,8 @@ class MsgHandlerApiLevel void setAvailableLevel(); public: - MsgHandlerApiLevel(const MsgContext& pContext); - MsgHandlerApiLevel(const QJsonObject& pObj, MsgContext& pContext); + explicit MsgHandlerApiLevel(const MsgContext& pContext); + explicit MsgHandlerApiLevel(const QJsonObject& pObj, MsgContext& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerAuth.cpp b/src/ui/json/messages/MsgHandlerAuth.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerAuth.cpp rename to src/ui/json/messages/MsgHandlerAuth.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerAuth.h b/src/ui/json/messages/MsgHandlerAuth.h similarity index 78% rename from src/ui/jsonapi/messages/MsgHandlerAuth.h rename to src/ui/json/messages/MsgHandlerAuth.h index 988dbec..8724ca2 100644 --- a/src/ui/jsonapi/messages/MsgHandlerAuth.h +++ b/src/ui/json/messages/MsgHandlerAuth.h @@ -23,8 +23,8 @@ class MsgHandlerAuth public: MsgHandlerAuth(); - MsgHandlerAuth(const QJsonObject& pObj); - MsgHandlerAuth(const QSharedPointer& pContext); + explicit MsgHandlerAuth(const QJsonObject& pObj); + explicit MsgHandlerAuth(const QSharedPointer& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerBadState.cpp b/src/ui/json/messages/MsgHandlerBadState.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerBadState.cpp rename to src/ui/json/messages/MsgHandlerBadState.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerBadState.h b/src/ui/json/messages/MsgHandlerBadState.h similarity index 79% rename from src/ui/jsonapi/messages/MsgHandlerBadState.h rename to src/ui/json/messages/MsgHandlerBadState.h index b332887..446a787 100644 --- a/src/ui/jsonapi/messages/MsgHandlerBadState.h +++ b/src/ui/json/messages/MsgHandlerBadState.h @@ -15,7 +15,7 @@ class MsgHandlerBadState : public MsgHandler { public: - MsgHandlerBadState(MsgCmdType pType = MsgCmdType::UNDEFINED); + explicit MsgHandlerBadState(MsgCmdType pType = MsgCmdType::UNDEFINED); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerCertificate.cpp b/src/ui/json/messages/MsgHandlerCertificate.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerCertificate.cpp rename to src/ui/json/messages/MsgHandlerCertificate.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerCertificate.h b/src/ui/json/messages/MsgHandlerCertificate.h similarity index 83% rename from src/ui/jsonapi/messages/MsgHandlerCertificate.h rename to src/ui/json/messages/MsgHandlerCertificate.h index 4a4051e..a59b2ec 100644 --- a/src/ui/jsonapi/messages/MsgHandlerCertificate.h +++ b/src/ui/json/messages/MsgHandlerCertificate.h @@ -16,7 +16,7 @@ class MsgHandlerCertificate : public MsgHandler { public: - MsgHandlerCertificate(const MsgContext& pContext); + explicit MsgHandlerCertificate(const MsgContext& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterCan.cpp b/src/ui/json/messages/MsgHandlerEnterCan.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerEnterCan.cpp rename to src/ui/json/messages/MsgHandlerEnterCan.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterCan.h b/src/ui/json/messages/MsgHandlerEnterCan.h similarity index 70% rename from src/ui/jsonapi/messages/MsgHandlerEnterCan.h rename to src/ui/json/messages/MsgHandlerEnterCan.h index 9679d11..1cac03d 100644 --- a/src/ui/jsonapi/messages/MsgHandlerEnterCan.h +++ b/src/ui/json/messages/MsgHandlerEnterCan.h @@ -16,8 +16,8 @@ class MsgHandlerEnterCan : public MsgHandlerEnterNumber { public: - MsgHandlerEnterCan(const MsgContext& pContext); - MsgHandlerEnterCan(const QJsonObject& pObj, MsgContext& pContext); + explicit MsgHandlerEnterCan(const MsgContext& pContext); + explicit MsgHandlerEnterCan(const QJsonObject& pObj, MsgContext& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterNumber.cpp b/src/ui/json/messages/MsgHandlerEnterNumber.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerEnterNumber.cpp rename to src/ui/json/messages/MsgHandlerEnterNumber.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterNumber.h b/src/ui/json/messages/MsgHandlerEnterNumber.h similarity index 89% rename from src/ui/jsonapi/messages/MsgHandlerEnterNumber.h rename to src/ui/json/messages/MsgHandlerEnterNumber.h index 6aa5dc3..54d6e94 100644 --- a/src/ui/jsonapi/messages/MsgHandlerEnterNumber.h +++ b/src/ui/json/messages/MsgHandlerEnterNumber.h @@ -23,7 +23,7 @@ class MsgHandlerEnterNumber void setReader(const QSharedPointer& pContext); protected: - MsgHandlerEnterNumber(MsgType pType, const MsgContext& pContext); + explicit MsgHandlerEnterNumber(MsgType pType, const MsgContext& pContext); void parseValue(const QJsonObject& pObj, const MsgContext& pContext, diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterPin.cpp b/src/ui/json/messages/MsgHandlerEnterPin.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerEnterPin.cpp rename to src/ui/json/messages/MsgHandlerEnterPin.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterPin.h b/src/ui/json/messages/MsgHandlerEnterPin.h similarity index 70% rename from src/ui/jsonapi/messages/MsgHandlerEnterPin.h rename to src/ui/json/messages/MsgHandlerEnterPin.h index ee845d4..c1fe819 100644 --- a/src/ui/jsonapi/messages/MsgHandlerEnterPin.h +++ b/src/ui/json/messages/MsgHandlerEnterPin.h @@ -16,8 +16,8 @@ class MsgHandlerEnterPin : public MsgHandlerEnterNumber { public: - MsgHandlerEnterPin(const MsgContext& pContext); - MsgHandlerEnterPin(const QJsonObject& pObj, MsgContext& pContext); + explicit MsgHandlerEnterPin(const MsgContext& pContext); + explicit MsgHandlerEnterPin(const QJsonObject& pObj, MsgContext& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterPuk.cpp b/src/ui/json/messages/MsgHandlerEnterPuk.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerEnterPuk.cpp rename to src/ui/json/messages/MsgHandlerEnterPuk.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerEnterPuk.h b/src/ui/json/messages/MsgHandlerEnterPuk.h similarity index 70% rename from src/ui/jsonapi/messages/MsgHandlerEnterPuk.h rename to src/ui/json/messages/MsgHandlerEnterPuk.h index 8924e72..ce89f24 100644 --- a/src/ui/jsonapi/messages/MsgHandlerEnterPuk.h +++ b/src/ui/json/messages/MsgHandlerEnterPuk.h @@ -16,8 +16,8 @@ class MsgHandlerEnterPuk : public MsgHandlerEnterNumber { public: - MsgHandlerEnterPuk(const MsgContext& pContext); - MsgHandlerEnterPuk(const QJsonObject& pObj, MsgContext& pContext); + explicit MsgHandlerEnterPuk(const MsgContext& pContext); + explicit MsgHandlerEnterPuk(const QJsonObject& pObj, MsgContext& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerInfo.cpp b/src/ui/json/messages/MsgHandlerInfo.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerInfo.cpp rename to src/ui/json/messages/MsgHandlerInfo.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerInfo.h b/src/ui/json/messages/MsgHandlerInfo.h similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerInfo.h rename to src/ui/json/messages/MsgHandlerInfo.h diff --git a/src/ui/jsonapi/messages/MsgHandlerInsertCard.cpp b/src/ui/json/messages/MsgHandlerInsertCard.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerInsertCard.cpp rename to src/ui/json/messages/MsgHandlerInsertCard.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerInsertCard.h b/src/ui/json/messages/MsgHandlerInsertCard.h similarity index 84% rename from src/ui/jsonapi/messages/MsgHandlerInsertCard.h rename to src/ui/json/messages/MsgHandlerInsertCard.h index 8b7c85a..1afd725 100644 --- a/src/ui/jsonapi/messages/MsgHandlerInsertCard.h +++ b/src/ui/json/messages/MsgHandlerInsertCard.h @@ -16,7 +16,7 @@ class MsgHandlerInsertCard : public MsgHandler { public: - MsgHandlerInsertCard(MsgContext& pContext); + explicit MsgHandlerInsertCard(MsgContext& pContext); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerInternalError.cpp b/src/ui/json/messages/MsgHandlerInternalError.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerInternalError.cpp rename to src/ui/json/messages/MsgHandlerInternalError.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerInternalError.h b/src/ui/json/messages/MsgHandlerInternalError.h similarity index 67% rename from src/ui/jsonapi/messages/MsgHandlerInternalError.h rename to src/ui/json/messages/MsgHandlerInternalError.h index 513a336..396442a 100644 --- a/src/ui/jsonapi/messages/MsgHandlerInternalError.h +++ b/src/ui/json/messages/MsgHandlerInternalError.h @@ -15,8 +15,8 @@ class MsgHandlerInternalError : public MsgHandler { public: - MsgHandlerInternalError(const QString& pError = QString()); - MsgHandlerInternalError(const QLatin1String pError); + explicit MsgHandlerInternalError(const QString& pError = QString()); + explicit MsgHandlerInternalError(const QLatin1String pError); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerInvalid.cpp b/src/ui/json/messages/MsgHandlerInvalid.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerInvalid.cpp rename to src/ui/json/messages/MsgHandlerInvalid.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerInvalid.h b/src/ui/json/messages/MsgHandlerInvalid.h similarity index 62% rename from src/ui/jsonapi/messages/MsgHandlerInvalid.h rename to src/ui/json/messages/MsgHandlerInvalid.h index 49030c7..3fb022f 100644 --- a/src/ui/jsonapi/messages/MsgHandlerInvalid.h +++ b/src/ui/json/messages/MsgHandlerInvalid.h @@ -17,9 +17,9 @@ class MsgHandlerInvalid : public MsgHandler { public: - MsgHandlerInvalid(const QString& pError = QString()); - MsgHandlerInvalid(const QLatin1String pError); - MsgHandlerInvalid(const QJsonParseError& pError); + explicit MsgHandlerInvalid(const QString& pError = QString()); + explicit MsgHandlerInvalid(const QLatin1String pError); + explicit MsgHandlerInvalid(const QJsonParseError& pError); }; diff --git a/src/ui/json/messages/MsgHandlerLog.cpp b/src/ui/json/messages/MsgHandlerLog.cpp new file mode 100644 index 0000000..d0f9f40 --- /dev/null +++ b/src/ui/json/messages/MsgHandlerLog.cpp @@ -0,0 +1,17 @@ +/*! + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "MsgHandlerLog.h" + +#include "Env.h" +#include "LogHandler.h" + +using namespace governikus; + +MsgHandlerLog::MsgHandlerLog() + : MsgHandler(MsgType::LOG) +{ + const auto& data = Env::getSingleton()->getBacklog(); + mJsonObject[QLatin1String("data")] = QString::fromUtf8(data); +} diff --git a/src/ui/json/messages/MsgHandlerLog.h b/src/ui/json/messages/MsgHandlerLog.h new file mode 100644 index 0000000..ac6142c --- /dev/null +++ b/src/ui/json/messages/MsgHandlerLog.h @@ -0,0 +1,22 @@ +/*! + * \brief Message Log of JSON API. + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "MsgHandler.h" + +namespace governikus +{ + +class MsgHandlerLog + : public MsgHandler +{ + public: + MsgHandlerLog(); +}; + + +} // namespace governikus diff --git a/src/ui/jsonapi/messages/MsgHandlerReader.cpp b/src/ui/json/messages/MsgHandlerReader.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerReader.cpp rename to src/ui/json/messages/MsgHandlerReader.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerReader.h b/src/ui/json/messages/MsgHandlerReader.h similarity index 83% rename from src/ui/jsonapi/messages/MsgHandlerReader.h rename to src/ui/json/messages/MsgHandlerReader.h index 664ba9c..4919b2e 100644 --- a/src/ui/jsonapi/messages/MsgHandlerReader.h +++ b/src/ui/json/messages/MsgHandlerReader.h @@ -24,8 +24,8 @@ class MsgHandlerReader public: static QJsonObject createReaderInfo(const ReaderInfo& pInfo); - MsgHandlerReader(const QJsonObject& pObj); - MsgHandlerReader(const QString& pName); + explicit MsgHandlerReader(const QJsonObject& pObj); + explicit MsgHandlerReader(const QString& pName); }; diff --git a/src/ui/jsonapi/messages/MsgHandlerReaderList.cpp b/src/ui/json/messages/MsgHandlerReaderList.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerReaderList.cpp rename to src/ui/json/messages/MsgHandlerReaderList.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerReaderList.h b/src/ui/json/messages/MsgHandlerReaderList.h similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerReaderList.h rename to src/ui/json/messages/MsgHandlerReaderList.h diff --git a/src/ui/jsonapi/messages/MsgHandlerUnknownCommand.cpp b/src/ui/json/messages/MsgHandlerUnknownCommand.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgHandlerUnknownCommand.cpp rename to src/ui/json/messages/MsgHandlerUnknownCommand.cpp diff --git a/src/ui/jsonapi/messages/MsgHandlerUnknownCommand.h b/src/ui/json/messages/MsgHandlerUnknownCommand.h similarity index 83% rename from src/ui/jsonapi/messages/MsgHandlerUnknownCommand.h rename to src/ui/json/messages/MsgHandlerUnknownCommand.h index 6a7885e..ab78375 100644 --- a/src/ui/jsonapi/messages/MsgHandlerUnknownCommand.h +++ b/src/ui/json/messages/MsgHandlerUnknownCommand.h @@ -15,7 +15,7 @@ class MsgHandlerUnknownCommand : public MsgHandler { public: - MsgHandlerUnknownCommand(const QString& pName); + explicit MsgHandlerUnknownCommand(const QString& pName); }; diff --git a/src/ui/jsonapi/messages/MsgTypes.cpp b/src/ui/json/messages/MsgTypes.cpp similarity index 100% rename from src/ui/jsonapi/messages/MsgTypes.cpp rename to src/ui/json/messages/MsgTypes.cpp diff --git a/src/ui/jsonapi/messages/MsgTypes.h b/src/ui/json/messages/MsgTypes.h similarity index 97% rename from src/ui/jsonapi/messages/MsgTypes.h rename to src/ui/json/messages/MsgTypes.h index 33a39a6..0b3a04e 100644 --- a/src/ui/jsonapi/messages/MsgTypes.h +++ b/src/ui/json/messages/MsgTypes.h @@ -16,6 +16,7 @@ defineEnumType(MsgType, INVALID, UNKNOWN_COMMAND, INTERNAL_ERROR, + LOG, INFO, API_LEVEL, READER, @@ -33,6 +34,7 @@ defineEnumType(MsgCmdType, UNDEFINED, ACCEPT, CANCEL, + GET_LOG, GET_INFO, GET_API_LEVEL, SET_API_LEVEL, diff --git a/src/ui/json/metadata.json b/src/ui/json/metadata.json new file mode 100644 index 0000000..bc62536 --- /dev/null +++ b/src/ui/json/metadata.json @@ -0,0 +1,4 @@ +{ + "name" : "UIPlugInJson", + "dependencies" : [] +} diff --git a/src/ui/jsonapi/metadata.json b/src/ui/jsonapi/metadata.json deleted file mode 100644 index 040d7eb..0000000 --- a/src/ui/jsonapi/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name" : "UIPlugInJsonApi", - "dependencies" : [] -} diff --git a/src/ui/qml/AppUpdateDataModel.cpp b/src/ui/qml/AppUpdateDataModel.cpp new file mode 100644 index 0000000..365dca4 --- /dev/null +++ b/src/ui/qml/AppUpdateDataModel.cpp @@ -0,0 +1,79 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "AppUpdateDataModel.h" + +#include "Env.h" +#include "Service.h" +#include "SingletonHelper.h" + +using namespace governikus; + +defineSingleton(AppUpdateDataModel) + +AppUpdateDataModel::AppUpdateDataModel() + : QObject() + , mAppUpdateData(Env::getSingleton()->getUpdateData()) +{ +} + + +AppUpdateDataModel& AppUpdateDataModel::getInstance() +{ + return *Instance; +} + + +bool AppUpdateDataModel::isValid() const +{ + return mAppUpdateData.isValid(); +} + + +const QDateTime AppUpdateDataModel::getDate() const +{ + return mAppUpdateData.getDate(); +} + + +const QString& AppUpdateDataModel::getVersion() const +{ + return mAppUpdateData.getVersion(); +} + + +const QUrl& AppUpdateDataModel::getUrl() const +{ + return mAppUpdateData.getUrl(); +} + + +int AppUpdateDataModel::getSize() const +{ + return mAppUpdateData.getSize(); +} + + +const QUrl& AppUpdateDataModel::getChecksumUrl() const +{ + return mAppUpdateData.getChecksumUrl(); +} + + +const QUrl& AppUpdateDataModel::getNotesUrl() const +{ + return mAppUpdateData.getNotesUrl(); +} + + +const QString& AppUpdateDataModel::getNotes() const +{ + return mAppUpdateData.getNotes(); +} + + +void AppUpdateDataModel::onAppUpdateFinished(bool, const GlobalStatus&) +{ + mAppUpdateData = Env::getSingleton()->getUpdateData(); +} diff --git a/src/ui/qml/AppUpdateDataModel.h b/src/ui/qml/AppUpdateDataModel.h new file mode 100644 index 0000000..f98320a --- /dev/null +++ b/src/ui/qml/AppUpdateDataModel.h @@ -0,0 +1,53 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "AppUpdateData.h" +#include "Env.h" +#include "GlobalStatus.h" + + +namespace governikus +{ +class AppUpdateDataModel + : public QObject +{ + Q_OBJECT + friend class Env; + + Q_PROPERTY(bool valid READ isValid NOTIFY fireAppUpdateDataChanged) + Q_PROPERTY(QDateTime date READ getDate NOTIFY fireAppUpdateDataChanged) + Q_PROPERTY(QString version READ getVersion NOTIFY fireAppUpdateDataChanged) + Q_PROPERTY(QUrl url READ getUrl NOTIFY fireAppUpdateDataChanged) + Q_PROPERTY(int size READ getSize NOTIFY fireAppUpdateDataChanged) + Q_PROPERTY(QUrl checksumUrl READ getChecksumUrl NOTIFY fireAppUpdateDataChanged) + Q_PROPERTY(QUrl notesUrl READ getNotesUrl() NOTIFY fireAppUpdateDataChanged) + Q_PROPERTY(QString notes READ getNotes() NOTIFY fireAppUpdateDataChanged) + + private: + AppUpdateData mAppUpdateData; + + protected: + AppUpdateDataModel(); + static AppUpdateDataModel& getInstance(); + + public: + bool isValid() const; + const QDateTime getDate() const; + const QString& getVersion() const; + const QUrl& getUrl() const; + int getSize() const; + const QUrl& getChecksumUrl() const; + const QUrl& getNotesUrl() const; + const QString& getNotes() const; + + public Q_SLOTS: + void onAppUpdateFinished(bool, const GlobalStatus&); + + Q_SIGNALS: + void fireAppUpdateDataChanged(); +}; + +} // namespace governikus diff --git a/src/ui/qml/ApplicationModel.cpp b/src/ui/qml/ApplicationModel.cpp index 8b697f2..2100385 100644 --- a/src/ui/qml/ApplicationModel.cpp +++ b/src/ui/qml/ApplicationModel.cpp @@ -12,26 +12,35 @@ #include "BuildHelper.h" #include "DpiCalculator.h" #include "Env.h" +#include "HelpAction.h" #include "ReaderInfo.h" #include "ReaderManager.h" #include "RemoteClient.h" #include "SingletonHelper.h" -#if !defined(QT_NO_DEBUG) || defined(Q_OS_ANDROID) -#include "SurveyHandler.h" +#if !defined(Q_OS_WINRT) && !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) +#include "PdfExporter.h" #endif +#include + #if (defined(Q_OS_LINUX) && !defined(QT_NO_DEBUG)) || defined(Q_OS_ANDROID) || defined(Q_OS_IOS) #include #endif #ifdef Q_OS_ANDROID +#include +#include +#include #include #endif using namespace governikus; +Q_DECLARE_LOGGING_CATEGORY(qml) +Q_DECLARE_LOGGING_CATEGORY(feedback) + defineSingleton(ApplicationModel) @@ -45,6 +54,7 @@ void ApplicationModel::onStatusChanged(const ReaderManagerPlugInInfo& pInfo) else if (pInfo.getPlugInType() == ReaderManagerPlugInType::NFC) { Q_EMIT fireNfcEnabledChanged(); + Q_EMIT fireNfcRunningChanged(); } } @@ -56,6 +66,12 @@ ApplicationModel::ApplicationModel() , mWifiInfo() , mWifiEnabled(false) , mBluetoothResponding(true) + , mFeedback() + , mFeedbackTimer() + , mFeedbackDisplayLength(3500) +#ifdef Q_OS_IOS + , mPrivate(new Private) +#endif { const auto readerManager = Env::getSingleton(); connect(readerManager, &ReaderManager::fireReaderAdded, this, &ApplicationModel::fireBluetoothReaderChanged); @@ -69,8 +85,11 @@ ApplicationModel::ApplicationModel() onWifiEnabledChanged(); - RemoteClient* const remoteClient = Env::getSingleton(); + auto* const remoteClient = Env::getSingleton(); connect(remoteClient, &RemoteClient::fireCertificateRemoved, this, &ApplicationModel::fireCertificateRemoved); + + mFeedbackTimer.setSingleShot(true); + connect(&mFeedbackTimer, &QTimer::timeout, this, &ApplicationModel::onShowNextFeedback, Qt::QueuedConnection); } @@ -84,6 +103,9 @@ void ApplicationModel::resetContext(const QSharedPointer& pCont if ((mContext = pContext)) { connect(mContext.data(), &WorkflowContext::fireReaderPlugInTypesChanged, this, &ApplicationModel::fireSelectedReaderChanged); + connect(mContext.data(), &WorkflowContext::fireReaderNameChanged, this, &ApplicationModel::fireSelectedReaderChanged); + connect(mContext.data(), &WorkflowContext::fireReaderNameChanged, this, &ApplicationModel::fireReaderPropertiesUpdated); + connect(mContext.data(), &WorkflowContext::fireReaderInfoChanged, this, &ApplicationModel::fireReaderPropertiesUpdated); } Q_EMIT fireCurrentWorkflowChanged(); } @@ -139,17 +161,51 @@ bool ApplicationModel::isNfcEnabled() const } +bool ApplicationModel::isNfcRunning() const +{ + return Env::getSingleton()->isScanRunning(ReaderManagerPlugInType::NFC); +} + + +void ApplicationModel::setNfcRunning(bool pRunning) +{ + const auto& readerManager = Env::getSingleton(); + if (pRunning) + { + readerManager->startScan(ReaderManagerPlugInType::NFC); + return; + } + + readerManager->stopScan(ReaderManagerPlugInType::NFC); +} + + bool ApplicationModel::isExtendedLengthApdusUnsupported() const { - if (mContext && !mContext->getReaderName().isEmpty()) + + if (mContext) { - ReaderInfo readerInfo = Env::getSingleton()->getReaderInfo(mContext->getReaderName()); - return !readerInfo.sufficientApduLength(); + if (mContext->currentReaderHasEidCardButInsufficientApduLength()) + { + return true; + } + if (!mContext->getReaderName().isEmpty()) + { + ReaderInfo readerInfo = Env::getSingleton()->getReaderInfo(mContext->getReaderName()); + return !readerInfo.sufficientApduLength(); + } } return false; } +void ApplicationModel::stopNfcScanWithError(const QString& pError) const +{ + const auto readerManager = Env::getSingleton(); + readerManager->stopScan(ReaderManagerPlugInType::NFC, pError); +} + + bool ApplicationModel::isBluetoothAvailable() const { return getFirstPlugInInfo(ReaderManagerPlugInType::BLUETOOTH).isAvailable(); @@ -201,6 +257,18 @@ bool ApplicationModel::locationPermissionRequired() const } +bool ApplicationModel::isWifiEnabled() const +{ + return mWifiEnabled; +} + + +qreal ApplicationModel::getDpiScale() const +{ + return mDpiScale; +} + + qreal ApplicationModel::getScaleFactor() const { return mScaleFactor; @@ -244,33 +312,212 @@ bool ApplicationModel::foundSelectedReader() const return false; } - return Env::getSingleton()->getReaderInfos(mContext->getReaderPlugInTypes()).size() > 0; + return !Env::getSingleton()->getReaderInfos(ReaderFilter(mContext->getReaderPlugInTypes())).isEmpty(); } -bool ApplicationModel::areStoreFeedbackDialogConditionsMet() const +bool ApplicationModel::isReaderTypeAvailable(ReaderManagerPlugInType pPlugInType) const { - if (!getCurrentWorkflow().isEmpty()) + if (!mContext) { return false; } -#ifdef Q_OS_ANDROID - const bool startedByAuth = QAndroidJniObject::callStaticMethod("com/governikus/ausweisapp2/MainActivity", "isStartedByAuth"); - if (startedByAuth) + if (!mContext->getReaderName().isEmpty()) { - return false; + return Env::getSingleton()->getReaderInfo(mContext->getReaderName()).getPlugInType() == pPlugInType; } + + return !Env::getSingleton()->getReaderInfos(ReaderFilter({pPlugInType})).isEmpty(); +} + + +void ApplicationModel::showSettings(const ApplicationModel::Settings& pAction) +{ +#ifdef Q_OS_ANDROID + const auto& androidQ = QOperatingSystemVersion(QOperatingSystemVersion::Android, 10); + + switch (pAction) + { + case Settings::SETTING_NETWORK: + if (QOperatingSystemVersion::current() >= androidQ) + { + showSettings(QStringLiteral("android.settings.panel.action.INTERNET_CONNECTIVITY")); + } + else + { + showSettings(QStringLiteral("android.settings.WIRELESS_SETTINGS")); + } + break; + + case Settings::SETTING_NFC: + if (QOperatingSystemVersion::current() >= androidQ) + { + showSettings(QStringLiteral("android.settings.panel.action.NFC")); + } + else + { + showSettings(QStringLiteral("android.settings.NFC_SETTINGS")); + } + + break; + + case Settings::SETTING_BLUETOOTH: + showSettings(QStringLiteral("android.settings.BLUETOOTH_SETTINGS")); + break; + } +#else + qCWarning(qml) << "NOT IMPLEMENTED:" << pAction; +#endif +} + + +void ApplicationModel::showSettings(const QString& pAction) +{ +#ifdef Q_OS_ANDROID + QAndroidJniEnvironment env; + + const QAndroidJniObject& jAction = QAndroidJniObject::fromString(pAction); + QAndroidJniObject intent("android/content/Intent", "(Ljava/lang/String;)V", jAction.object()); + const jint flag = QAndroidJniObject::getStaticField("android/content/Intent", "FLAG_ACTIVITY_NEW_TASK"); + intent.callObjectMethod("setFlags", "(I)V", flag); + + if (intent.isValid()) + { + qCCritical(qml) << "Call action:" << pAction; + QtAndroid::startActivity(intent, 0); + } + + if (env->ExceptionCheck()) + { + qCCritical(qml) << "Cannot call an action as activity:" << pAction; + env->ExceptionDescribe(); + env->ExceptionClear(); + } +#else + qCWarning(qml) << "NOT IMPLEMENTED:" << pAction; +#endif +} + + +#ifndef Q_OS_IOS +bool ApplicationModel::isScreenReaderRunning() const +{ +#ifdef Q_OS_ANDROID + const jboolean result = QtAndroid::androidActivity().callMethod("isScreenReaderRunning", "()Z"); + return result != JNI_FALSE; + +#else + qCWarning(qml) << "NOT IMPLEMENTED"; + return false; + +#endif +} + + #endif - const auto& settings = Env::getSingleton()->getGeneralSettings(); - return settings.isRequestStoreFeedback(); +QString ApplicationModel::getFeedback() const +{ + return mFeedback.isEmpty() ? QString() : mFeedback.first(); } -void ApplicationModel::hideFutureStoreFeedbackDialogs() +void ApplicationModel::onShowNextFeedback() { - Env::getSingleton()->getGeneralSettings().setRequestStoreFeedback(false); + mFeedback.removeFirst(); + if (!mFeedback.isEmpty() && !isScreenReaderRunning()) + { + mFeedbackTimer.start(mFeedbackDisplayLength); + } + + Q_EMIT fireFeedbackChanged(); +} + + +void ApplicationModel::showFeedback(const QString& pMessage, bool pReplaceExisting) +{ + qCInfo(feedback).noquote() << pMessage; + +#if defined(Q_OS_ANDROID) + Q_UNUSED(pReplaceExisting) + // Wait for toast activation synchronously so that the app can not be deactivated + // in the meantime and all used Java objects are still alive when accessed. + QtAndroid::runOnAndroidThreadSync([pMessage](){ + QAndroidJniEnvironment env; + + const QAndroidJniObject& jMessage = QAndroidJniObject::fromString(pMessage); + const QAndroidJniObject& toast = QAndroidJniObject::callStaticObjectMethod( + "android/widget/Toast", + "makeText", + "(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;", + QtAndroid::androidActivity().object(), + jMessage.object(), + jint(1)); + toast.callMethod("show"); + + if (env->ExceptionCheck()) + { + qCCritical(qml) << "Suppressing an unexpected exception."; + env->ExceptionDescribe(); + env->ExceptionClear(); + // The toast was probably not displayed (e.g. DeadObjectException). We halt on error + // since it is used to display information to the user as required by the TR. + Q_ASSERT(false); + } + }); +#else + if (pReplaceExisting) + { + mFeedbackTimer.stop(); + mFeedback.clear(); + } + + const bool initial = mFeedback.isEmpty(); + mFeedback << pMessage; + if (initial) + { + if (!isScreenReaderRunning()) + { + mFeedbackTimer.start(mFeedbackDisplayLength); + } + Q_EMIT fireFeedbackChanged(); + } +#endif +} + + +#ifndef Q_OS_IOS +void ApplicationModel::keepScreenOn(bool pActive) +{ +#if defined(Q_OS_ANDROID) + QtAndroid::runOnAndroidThread([pActive](){ + QtAndroid::androidActivity().callMethod("keepScreenOn", "(Z)V", pActive); + QAndroidJniEnvironment env; + if (env->ExceptionCheck()) + { + qCCritical(qml) << "Exception calling java native function."; + env->ExceptionDescribe(); + env->ExceptionClear(); + } + }); + +#else + qCWarning(qml) << "NOT IMPLEMENTED:" << pActive; +#endif +} + + +#endif + + +void ApplicationModel::openOnlineHelp(const QString& pHelpSectionName) +{ +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) + qCWarning(qml) << "NOT IMPLEMENTED:" << pHelpSectionName; +#else + HelpAction::openContextHelp(pHelpSectionName); +#endif } @@ -291,3 +538,9 @@ ApplicationModel& ApplicationModel::getInstance() { return *Instance; } + + +QString ApplicationModel::stripHtmlTags(QString pString) const +{ + return pString.remove(QRegularExpression(QStringLiteral("<[^>]*>"))); +} diff --git a/src/ui/qml/ApplicationModel.h b/src/ui/qml/ApplicationModel.h index 45677c0..e1e1382 100644 --- a/src/ui/qml/ApplicationModel.h +++ b/src/ui/qml/ApplicationModel.h @@ -7,6 +7,7 @@ #pragma once #include "context/WorkflowContext.h" +#include "Env.h" #include "ReaderInfo.h" #include "ReaderManagerPlugInInfo.h" #include "WifiInfo.h" @@ -14,7 +15,12 @@ #include #include #include -#include +#include +#include + +#ifdef Q_OS_IOS +Q_FORWARD_DECLARE_OBJC_CLASS(VoiceOverObserver); +#endif namespace governikus { @@ -23,11 +29,13 @@ class ApplicationModel : public QObject { Q_OBJECT + friend class Env; Q_PROPERTY(QString packageName READ getPackageName CONSTANT) Q_PROPERTY(bool nfcEnabled READ isNfcEnabled NOTIFY fireNfcEnabledChanged) Q_PROPERTY(bool nfcAvailable READ isNfcAvailable CONSTANT) + Q_PROPERTY(bool nfcRunning READ isNfcRunning WRITE setNfcRunning NOTIFY fireNfcRunningChanged) Q_PROPERTY(bool extendedLengthApdusUnsupported READ isExtendedLengthApdusUnsupported NOTIFY fireReaderPropertiesUpdated) Q_PROPERTY(bool bluetoothEnabled READ isBluetoothEnabled WRITE setBluetoothEnabled NOTIFY fireBluetoothEnabledChanged) @@ -35,12 +43,15 @@ class ApplicationModel Q_PROPERTY(bool bluetoothAvailable READ isBluetoothAvailable CONSTANT) Q_PROPERTY(bool locationPermissionRequired READ locationPermissionRequired NOTIFY fireBluetoothReaderChanged) + Q_PROPERTY(qreal dpiScale READ getDpiScale CONSTANT) Q_PROPERTY(qreal scaleFactor READ getScaleFactor WRITE setScaleFactor NOTIFY fireScaleFactorChanged) - Q_PROPERTY(bool wifiEnabled MEMBER mWifiEnabled NOTIFY fireWifiEnabledChanged) + Q_PROPERTY(bool wifiEnabled READ isWifiEnabled NOTIFY fireWifiEnabledChanged) Q_PROPERTY(QString currentWorkflow READ getCurrentWorkflow NOTIFY fireCurrentWorkflowChanged) Q_PROPERTY(bool foundSelectedReader READ foundSelectedReader NOTIFY fireSelectedReaderChanged) + Q_PROPERTY(QString feedback READ getFeedback NOTIFY fireFeedbackChanged) + QSharedPointer mContext; void onStatusChanged(const ReaderManagerPlugInInfo& pInfo); @@ -52,6 +63,18 @@ class ApplicationModel WifiInfo mWifiInfo; bool mWifiEnabled; bool mBluetoothResponding; + QStringList mFeedback; + QTimer mFeedbackTimer; + const int mFeedbackDisplayLength; +#ifdef Q_OS_IOS + struct Private + { + Private(); + ~Private(); + VoiceOverObserver* const mObserver; + }; + const QScopedPointer mPrivate; +#endif private Q_SLOTS: void onWifiEnabledChanged(); @@ -59,14 +82,25 @@ class ApplicationModel protected: ApplicationModel(); ~ApplicationModel() override = default; + static ApplicationModel& getInstance(); public: + enum class Settings + { + SETTING_NETWORK, + SETTING_NFC, + SETTING_BLUETOOTH + }; + Q_ENUM(Settings) + void resetContext(const QSharedPointer& pContext = QSharedPointer()); QString getPackageName() const; bool isNfcAvailable() const; bool isNfcEnabled() const; + bool isNfcRunning() const; + void setNfcRunning(bool pRunning); bool isExtendedLengthApdusUnsupported() const; bool isBluetoothAvailable() const; @@ -75,20 +109,40 @@ class ApplicationModel void setBluetoothEnabled(bool pEnabled); bool locationPermissionRequired() const; + bool isWifiEnabled() const; + qreal getDpiScale() const; qreal getScaleFactor() const; void setScaleFactor(qreal pScaleFactor); QString getCurrentWorkflow() const; bool foundSelectedReader() const; - Q_INVOKABLE void enableWifi(); - Q_INVOKABLE bool areStoreFeedbackDialogConditionsMet() const; - Q_INVOKABLE void hideFutureStoreFeedbackDialogs(); + QString getFeedback() const; - static ApplicationModel& getInstance(); + Q_INVOKABLE bool isScreenReaderRunning() const; + + Q_INVOKABLE void stopNfcScanWithError(const QString& pError) const; + + Q_INVOKABLE bool isReaderTypeAvailable(ReaderManagerPlugInType pPlugInType) const; + + Q_INVOKABLE void enableWifi(); + + Q_INVOKABLE void showSettings(const Settings& pAction); + Q_INVOKABLE void showSettings(const QString& pAction); + Q_INVOKABLE void showFeedback(const QString& pMessage, bool pReplaceExisting = false); + Q_INVOKABLE void keepScreenOn(bool pActive); + Q_INVOKABLE void openOnlineHelp(const QString& pHelpSectionName); + Q_INVOKABLE QString stripHtmlTags(QString pString) const; +#ifdef Q_OS_IOS + Q_INVOKABLE void showAppStoreRatingDialog(); +#endif + + public Q_SLOTS: + Q_INVOKABLE void onShowNextFeedback(); Q_SIGNALS: void fireNfcEnabledChanged(); + void fireNfcRunningChanged(); void fireReaderPropertiesUpdated(); void fireBluetoothEnabledChanged(); @@ -100,7 +154,9 @@ class ApplicationModel void fireScaleFactorChanged(); void fireWifiEnabledChanged(); - void fireCertificateRemoved(QString pDeviceName); + void fireCertificateRemoved(const QString& pDeviceName); + + void fireFeedbackChanged(); }; diff --git a/src/ui/qml/ApplicationModel_ios.mm b/src/ui/qml/ApplicationModel_ios.mm new file mode 100644 index 0000000..59da1d1 --- /dev/null +++ b/src/ui/qml/ApplicationModel_ios.mm @@ -0,0 +1,98 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ApplicationModel.h" + +#include + +#import +#import + +Q_DECLARE_LOGGING_CATEGORY(feedback) + +using namespace governikus; + +@interface VoiceOverObserver + : NSObject +@property BOOL mRunning; +- (instancetype) init; +- (void) dealloc; +- (void) receiveNotification: (NSNotification*) notification; +@end + +@implementation VoiceOverObserver + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; +} + + +- (instancetype)init { + self = [super init]; + if (!self) + { + return nil; + } + + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(receiveNotification:) + name:UIAccessibilityVoiceOverStatusDidChangeNotification + object:nil]; + + self.mRunning = UIAccessibilityIsVoiceOverRunning(); + + return self; +} + + +- (void)receiveNotification:(NSNotification*)notification { + if ([notification.name + isEqualToString: + UIAccessibilityVoiceOverStatusDidChangeNotification]) + { + self.mRunning = UIAccessibilityIsVoiceOverRunning(); + } +} + + +@end + + +ApplicationModel::Private::Private() : mObserver([[VoiceOverObserver alloc] init]) +{ +} + + +ApplicationModel::Private::~Private() +{ + [mObserver dealloc]; +} + + +bool ApplicationModel::isScreenReaderRunning() const +{ + return mPrivate->mObserver.mRunning; +} + + +void ApplicationModel::keepScreenOn(bool pActive) +{ + if (pActive) + { + [[UIApplication sharedApplication]setIdleTimerDisabled:YES]; + } + else + { + [[UIApplication sharedApplication]setIdleTimerDisabled:NO]; + } +} + + +void ApplicationModel::showAppStoreRatingDialog() +{ + qCDebug(feedback) << "Requesting iOS AppStore review"; + [SKStoreReviewController requestReview]; +} diff --git a/src/ui/qml/AuthModel.cpp b/src/ui/qml/AuthModel.cpp index 6fe0142..bd1530f 100644 --- a/src/ui/qml/AuthModel.cpp +++ b/src/ui/qml/AuthModel.cpp @@ -4,7 +4,6 @@ #include "AuthModel.h" -#include "Env.h" #include "ReaderManagerPlugInInfo.h" #include "SingletonHelper.h" @@ -29,6 +28,7 @@ void AuthModel::resetContext(const QSharedPointer& pContext) if (mContext) { connect(mContext.data(), &AuthContext::fireDidAuthenticateEac1Changed, this, &AuthModel::onDidAuthenticateEac1Changed); + connect(mContext.data(), &AuthContext::fireProgressChanged, this, &AuthModel::fireProgressChanged); } if (!mTransactionInfo.isEmpty()) @@ -37,6 +37,8 @@ void AuthModel::resetContext(const QSharedPointer& pContext) Q_EMIT fireTransactionInfoChanged(); } + + Q_EMIT fireProgressChanged(); } @@ -46,6 +48,28 @@ const QString& AuthModel::getTransactionInfo() const } +int AuthModel::getProgressValue() const +{ + if (mContext) + { + return mContext->getProgressValue(); + } + + return 0; +} + + +const QString AuthModel::getProgressMessage() const +{ + if (mContext) + { + return mContext->getProgressMessage(); + } + + return QString(); +} + + AuthModel& AuthModel::getInstance() { return *Instance; diff --git a/src/ui/qml/AuthModel.h b/src/ui/qml/AuthModel.h index 83e125e..c218c43 100644 --- a/src/ui/qml/AuthModel.h +++ b/src/ui/qml/AuthModel.h @@ -7,6 +7,7 @@ #pragma once #include "context/AuthContext.h" +#include "Env.h" #include "WorkflowModel.h" #include @@ -14,8 +15,6 @@ #include #include -class test_AuthModel; - namespace governikus { @@ -23,32 +22,36 @@ class AuthModel : public WorkflowModel { Q_OBJECT + friend class Env; Q_PROPERTY(QString transactionInfo READ getTransactionInfo NOTIFY fireTransactionInfoChanged) + Q_PROPERTY(int progressValue READ getProgressValue NOTIFY fireProgressChanged) + Q_PROPERTY(QString progressMessage READ getProgressMessage NOTIFY fireProgressChanged) private: - friend class ::test_AuthModel; QSharedPointer mContext; QString mTransactionInfo; protected: AuthModel(); ~AuthModel() override = default; + static AuthModel& getInstance(); public: void resetContext(const QSharedPointer& pContext = QSharedPointer()); const QString& getTransactionInfo() const; - - static AuthModel& getInstance(); + int getProgressValue() const; + const QString getProgressMessage() const; Q_INVOKABLE void setSkipRedirect(bool pSkipRedirect); - public Q_SLOTS: + private Q_SLOTS: void onDidAuthenticateEac1Changed(); Q_SIGNALS: void fireTransactionInfoChanged(); + void fireProgressChanged(); }; diff --git a/src/ui/qml/CMakeLists.txt b/src/ui/qml/CMakeLists.txt index f767236..98087cb 100644 --- a/src/ui/qml/CMakeLists.txt +++ b/src/ui/qml/CMakeLists.txt @@ -4,7 +4,8 @@ ADD_PLATFORM_LIBRARY(AusweisAppUiQml) -TARGET_LINK_LIBRARIES(AusweisAppUiQml Qt5::Core Qt5::Svg Qt5::Qml Qt5::Quick Qt5::QuickControls2 AusweisAppGlobal AusweisAppCore AusweisAppUi AusweisAppRemoteDevice AusweisAppUiCommon) +TARGET_LINK_LIBRARIES(AusweisAppUiQml Qt5::Core Qt5::Svg Qt5::Qml Qt5::Quick Qt5::QuickControls2) +TARGET_LINK_LIBRARIES(AusweisAppUiQml AusweisAppGlobal AusweisAppCore AusweisAppUi AusweisAppRemoteDevice AusweisAppUiCommon AusweisAppExport) IF(ANDROID) TARGET_LINK_LIBRARIES(AusweisAppUiQml AusweisAppWhitelistClient) @@ -12,10 +13,6 @@ ELSE() TARGET_LINK_LIBRARIES(AusweisAppUiQml debug AusweisAppWhitelistClient) ENDIF() -IF(DESKTOP) - TARGET_LINK_LIBRARIES(AusweisAppUiQml AusweisAppExport) -ENDIF() - IF(TARGET Qt5::Bluetooth) TARGET_LINK_LIBRARIES(AusweisAppUiQml Qt5::Bluetooth) ENDIF() diff --git a/src/ui/qml/CertificateDescriptionModel.cpp b/src/ui/qml/CertificateDescriptionModel.cpp index 0a3686b..8784bff 100644 --- a/src/ui/qml/CertificateDescriptionModel.cpp +++ b/src/ui/qml/CertificateDescriptionModel.cpp @@ -44,21 +44,28 @@ void CertificateDescriptionModel::initModelData(const QSharedPointergetTermsOfUsage().remove(QLatin1Char('\r')).replace(QLatin1Char('\t'), QLatin1Char(' ')); const bool showDetailedProviderInfo = !(serviceProviderAddress.isEmpty() || purpose.isEmpty() || dataSecurityOfficer.isEmpty()); + //: LABEL ALL_PLATFORMS mData += QPair(tr("Service provider"), getSubjectName() + QLatin1Char('\n') + getSubjectUrl()); + //: LABEL ALL_PLATFORMS mData += QPair(tr("Certificate issuer"), pCertDescription->getIssuerName() + QLatin1Char('\n') + pCertDescription->getIssuerUrl()); if (showDetailedProviderInfo) { + //: LABEL ALL_PLATFORMS mData += QPair(tr("Name, address and mail address of the service provider"), serviceProviderAddress); + //: LABEL ALL_PLATFORMS mData += QPair(tr("Purpose"), purpose); + //: LABEL ALL_PLATFORMS mData += QPair(tr("Indication of the bodies responsible for the service provider, " "that verify the compliance with data security regulations"), dataSecurityOfficer); } else if (!termsOfUsage.isEmpty()) { + //: LABEL ALL_PLATFORMS mData += QPair(tr("Service provider information"), termsOfUsage); } if (!getValidity().isEmpty()) { + //: LABEL ALL_PLATFORMS mData += QPair(tr("Validity"), getValidity()); } } diff --git a/src/ui/qml/CertificateDescriptionModel.h b/src/ui/qml/CertificateDescriptionModel.h index 1cbce36..8c66b76 100644 --- a/src/ui/qml/CertificateDescriptionModel.h +++ b/src/ui/qml/CertificateDescriptionModel.h @@ -28,13 +28,6 @@ class CertificateDescriptionModel QVector > mData; QSharedPointer mContext; - enum UserRoles - { - LABEL = Qt::UserRole + 1, - TEXT - }; - - inline QSharedPointer getCertificateDescription() const; inline QString getValidity() const; void initModelData(const QSharedPointer& pCertDescription); @@ -43,6 +36,12 @@ class CertificateDescriptionModel void onDidAuthenticateEac1Changed(); public: + enum UserRoles + { + LABEL = Qt::UserRole + 1, + TEXT + }; + CertificateDescriptionModel(QObject* pParent = nullptr); void resetContext(const QSharedPointer& pContext = QSharedPointer()); diff --git a/src/ui/qml/ChangePinModel.cpp b/src/ui/qml/ChangePinModel.cpp index 9c8ac6f..0600af1 100644 --- a/src/ui/qml/ChangePinModel.cpp +++ b/src/ui/qml/ChangePinModel.cpp @@ -4,12 +4,12 @@ #include "ChangePinModel.h" -#include "Env.h" #include "ReaderManager.h" #include "SingletonHelper.h" using namespace governikus; + defineSingleton(ChangePinModel) @@ -21,6 +21,7 @@ void ChangePinModel::resetContext(const QSharedPointer& pConte if (mContext) { connect(mContext.data(), &ChangePinContext::fireSuccessMessageChanged, this, &WorkflowModel::fireResultChanged); + connect(mContext.data(), &ChangePinContext::firePaceResultUpdated, this, &ChangePinModel::onPaceResultUpdated); Q_EMIT fireNewContextSet(); } @@ -42,3 +43,12 @@ ChangePinModel& ChangePinModel::getInstance() { return *Instance; } + + +void ChangePinModel::onPaceResultUpdated() +{ + if (mContext->getLastPaceResult() == CardReturnCode::OK_PUK) + { + Q_EMIT fireOnPinUnlocked(); + } +} diff --git a/src/ui/qml/ChangePinModel.h b/src/ui/qml/ChangePinModel.h index 5ccf805..ad828ce 100644 --- a/src/ui/qml/ChangePinModel.h +++ b/src/ui/qml/ChangePinModel.h @@ -7,6 +7,7 @@ #pragma once #include "context/ChangePinContext.h" +#include "Env.h" #include "WorkflowModel.h" #include @@ -14,8 +15,6 @@ #include #include -class test_ChangePinModel; - namespace governikus { @@ -23,24 +22,27 @@ class ChangePinModel : public WorkflowModel { Q_OBJECT + friend class Env; private: - friend class ::test_ChangePinModel; QSharedPointer mContext; protected: ChangePinModel() = default; ~ChangePinModel() override = default; + static ChangePinModel& getInstance(); public: void resetContext(const QSharedPointer& pContext = QSharedPointer()); virtual QString getResultString() const override; - static ChangePinModel& getInstance(); + private Q_SLOTS: + void onPaceResultUpdated(); Q_SIGNALS: void fireNewContextSet(); + void fireOnPinUnlocked(); }; diff --git a/src/ui/qml/ConnectivityManager.cpp b/src/ui/qml/ConnectivityManager.cpp index d8f2b2b..041b63f 100644 --- a/src/ui/qml/ConnectivityManager.cpp +++ b/src/ui/qml/ConnectivityManager.cpp @@ -25,7 +25,7 @@ ConnectivityManager::ConnectivityManager(QObject* pParent) ConnectivityManager::~ConnectivityManager() { - if (mTimerId) + if (mTimerId != 0) { killTimer(mTimerId); } @@ -105,7 +105,7 @@ bool ConnectivityManager::isNetworkInterfaceActive() const void ConnectivityManager::startWatching() { - if (mTimerId) + if (mTimerId != 0) { qCWarning(network) << "Already started, skip"; return; @@ -117,7 +117,7 @@ void ConnectivityManager::startWatching() void ConnectivityManager::stopWatching() { - if (!mTimerId) + if (mTimerId == 0) { qCWarning(network) << "Already stopped, skip"; return; diff --git a/src/ui/qml/DpiCalculator_generic.cpp b/src/ui/qml/DpiCalculator.cpp similarity index 50% rename from src/ui/qml/DpiCalculator_generic.cpp rename to src/ui/qml/DpiCalculator.cpp index a341848..61707f6 100644 --- a/src/ui/qml/DpiCalculator_generic.cpp +++ b/src/ui/qml/DpiCalculator.cpp @@ -22,13 +22,30 @@ qreal DpiCalculator::getDpi() auto screen = app->primaryScreen(); if (screen) { +#if defined(Q_OS_ANDROID) + auto envDpi = qgetenv("QT_ANDROID_THEME_DISPLAY_DPI"); + bool ok; + dpi = envDpi.toDouble(&ok); + if (!ok) + { + qCCritical(qml) << "Cannot get screen dpi"; + dpi = -1.0; + } +#elif defined(Q_OS_MACOS) || defined(Q_OS_IOS) + // The physical DPI changes on Apple devices with screen scaling, on other platforms it behaves the other way around. + dpi = screen->physicalDotsPerInch(); +#else dpi = screen->logicalDotsPerInch(); +#endif + qCInfo(qml) << "Determined dpi:" + << screen->logicalDotsPerInch() << "(logical)," + << screen->physicalDotsPerInch() << "(physical)"; } - qCInfo(qml) << "Determined dpi" << dpi; + qCInfo(qml) << "Using dpi" << dpi; #ifndef QT_NO_DEBUG - const char* overrideDpi = "OVERRIDE_DPI"; + const char* const overrideDpi = "OVERRIDE_DPI"; if (!qEnvironmentVariableIsEmpty(overrideDpi)) { dpi = qEnvironmentVariableIntValue(overrideDpi); diff --git a/src/ui/qml/DpiCalculator_android.cpp b/src/ui/qml/DpiCalculator_android.cpp deleted file mode 100644 index e5e02f9..0000000 --- a/src/ui/qml/DpiCalculator_android.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "DpiCalculator.h" - -#include -#include - - -using namespace governikus; - - -Q_DECLARE_LOGGING_CATEGORY(qml) - - -qreal DpiCalculator::getDpi() -{ - auto qtDpi = qgetenv("QT_ANDROID_THEME_DISPLAY_DPI"); - bool ok; - qreal dpi = qtDpi.toDouble(&ok); - if (!ok) - { - qCCritical(qml) << "Cannot get screen dpi"; - return -1.0; - } - - qCInfo(qml) << "Determined dpi" << dpi; - - return dpi; -} diff --git a/src/ui/qml/DpiCalculator_ios.mm b/src/ui/qml/DpiCalculator_ios.mm deleted file mode 100644 index ad907a4..0000000 --- a/src/ui/qml/DpiCalculator_ios.mm +++ /dev/null @@ -1,64 +0,0 @@ -/*! - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "DpiCalculator.h" - -#include -#include -#import - - -Q_DECLARE_LOGGING_CATEGORY(qml) - -using namespace governikus; - -#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) -#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) -#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0) - -// screen height is orientation dependent -#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) -#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) -#define SCREEN_MAX_LENGTH (qMax(SCREEN_WIDTH, SCREEN_HEIGHT)) - -#define IS_IPHONE_4 (IS_IPHONE && SCREEN_MAX_LENGTH == 480.0 && IS_RETINA) -#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0) -#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0) -#define IS_IPHONE_6PLUS (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0) - - -qreal DpiCalculator::getDpi() -{ - qreal dpi; - qreal renderFactor = [UIScreen mainScreen].scale; - - if (IS_IPHONE_4 || IS_IPHONE_5 || IS_IPHONE_6) - { - dpi = 326.0; - } - else if (IS_IPHONE_6PLUS) - { - dpi = 401.0; - renderFactor /= 1.15; // the iPhone 6 plus is downsampled - } - else if (IS_IPAD) - { - dpi = 264.0; - } - else - { - qCCritical(qml) << "Unknown iOS device, cannot determine dpi"; - return -1.0; - } - - /* - * For some reason on iOS the unit is interpreted per point, not per pixel. - * Therefore we adapt it to points per inch by dividing by the render factor. - * See: http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions - */ - dpi /= renderFactor; - - qCInfo(qml) << "Determined dpi" << dpi; - return dpi; -} diff --git a/src/ui/qml/HistoryModel.cpp b/src/ui/qml/HistoryModel.cpp index 5fcd7ff..196d2fe 100644 --- a/src/ui/qml/HistoryModel.cpp +++ b/src/ui/qml/HistoryModel.cpp @@ -7,113 +7,28 @@ #include "HistoryModel.h" #include "asn1/AccessRoleAndRight.h" +#include "AppSettings.h" +#include "Env.h" + +#include "PdfExporter.h" #include "ProviderConfiguration.h" #include "ProviderModel.h" -#include #include -#include using namespace governikus; -namespace +auto& HistoryModel::getHistorySettings() { -bool matchProviderWithSubjectUrl(const ProviderConfigurationInfo& pProvider, const QString& pSubjectUrl) -{ - const QString subjectUrlHost = QUrl(pSubjectUrl).host(); - - // Check provider address host. - if (QUrl(pProvider.getAddress()).host() == subjectUrlHost) - { - return true; - } - - // Check subject urls. - for (const auto& subjectUrl : pProvider.getSubjectUrls()) - { - if (QUrl(subjectUrl).host() == subjectUrlHost) - { - return true; - } - } - - return false; + return Env::getSingleton()->getHistorySettings(); } -} // namespace - - -HistoryProxyModel::HistoryProxyModel() -{ -} - - -HistoryProxyModel::~HistoryProxyModel() -{ -} - - -bool HistoryProxyModel::removeRows(int pRow, int pCount, const QModelIndex& pParent) -{ - return QSortFilterProxyModel::removeRows(pRow, pCount, pParent); -} - - -bool ProviderNameFilterModel::filterAcceptsRow(int pSourceRow, const QModelIndex& /* pSourceParent */) const -{ - HistoryModel* const dataSourceModel = qobject_cast(sourceModel()); - if (dataSourceModel == nullptr) - { - return false; - } - - auto entry = mHistorySettings->getHistoryInfos()[pSourceRow]; - - return matchProviderWithSubjectUrl(mProvider, entry.getSubjectUrl()); -} - - -ProviderNameFilterModel::ProviderNameFilterModel(HistorySettings* pHistorySettings) - : mHistorySettings(pHistorySettings) -{ -} - - -ProviderNameFilterModel::~ProviderNameFilterModel() -{ -} - - -void ProviderNameFilterModel::setProviderAddress(const QString& pProviderAddress) -{ - if (mProvider.getAddress() != pProviderAddress) - { - const auto& providers = Env::getSingleton()->getProviderConfigurationInfos(); - for (const auto& provider : providers) - { - if (provider.getAddress() == pProviderAddress) - { - mProvider = provider; - - invalidateFilter(); - - return; - } - } - - // If we get here, no provider for pProviderAddress was found in the settings. - qWarning() << "Cannot select provider with address" << pProviderAddress; - } -} - - -HistoryModel::HistoryModel(HistorySettings* pHistorySettings, QObject* pParent) +HistoryModel::HistoryModel(QObject* pParent) : QAbstractListModel(pParent) - , mHistorySettings(pHistorySettings) , mFilterModel() - , mNameFilterModel(pHistorySettings) + , mNameFilterModel() , mHistoryModelSearchFilter() { updateConnections(); @@ -121,8 +36,10 @@ HistoryModel::HistoryModel(HistorySettings* pHistorySettings, QObject* pParent) mFilterModel.setFilterCaseSensitivity(Qt::CaseInsensitive); mNameFilterModel.setSourceModel(this); mHistoryModelSearchFilter.setSourceModel(this); - connect(mHistorySettings.data(), &HistorySettings::fireHistoryInfosChanged, this, &HistoryModel::onHistoryEntriesChanged); - connect(mHistorySettings.data(), &HistorySettings::fireEnabledChanged, this, &HistoryModel::fireEnabledChanged); + + const auto& historySettings = getHistorySettings(); + connect(&historySettings, &HistorySettings::fireHistoryInfosChanged, this, &HistoryModel::onHistoryEntriesChanged); + connect(&historySettings, &HistorySettings::fireEnabledChanged, this, &HistoryModel::fireEnabledChanged); connect(Env::getSingleton(), &ProviderConfiguration::fireUpdated, this, &HistoryModel::onProvidersChanged); QQmlEngine::setObjectOwnership(&mFilterModel, QQmlEngine::CppOwnership); @@ -144,7 +61,7 @@ void HistoryModel::updateConnections() } mConnections.clear(); - const auto& historyEntries = mHistorySettings->getHistoryInfos(); + const auto& historyEntries = getHistorySettings().getHistoryInfos(); mConnections.reserve(historyEntries.size() * 2); for (int i = 0; i < historyEntries.size(); i++) { @@ -192,7 +109,7 @@ void HistoryModel::onProvidersChanged() int HistoryModel::rowCount(const QModelIndex&) const { - return mHistorySettings->getHistoryInfos().size(); + return getHistorySettings().getHistoryInfos().size(); } @@ -200,7 +117,8 @@ QVariant HistoryModel::data(const QModelIndex& pIndex, int pRole) const { if (pIndex.isValid() && pIndex.row() < rowCount()) { - auto entry = mHistorySettings->getHistoryInfos()[pIndex.row()]; + const auto& infos = getHistorySettings().getHistoryInfos(); + const auto& entry = infos[pIndex.row()]; if (pRole == Qt::DisplayRole || pRole == SUBJECT) { return entry.getSubjectName(); @@ -215,7 +133,8 @@ QVariant HistoryModel::data(const QModelIndex& pIndex, int pRole) const } if (pRole == TERMSOFUSAGE) { - return entry.getTermOfUsage(); + auto tos = entry.getTermOfUsage(); + return tos.remove(QLatin1Char('\r')).replace(QLatin1Char('\t'), QLatin1Char(' ')); } if (pRole == REQUESTEDDATA) { @@ -308,7 +227,7 @@ ProviderConfigurationInfo HistoryModel::determineProviderFor(const HistoryInfo& const auto& providers = Env::getSingleton()->getProviderConfigurationInfos(); for (const auto& provider : providers) { - if (matchProviderWithSubjectUrl(provider, pHistoryInfo.getSubjectUrl())) + if (provider.matchWithSubjectUrl(pHistoryInfo.getSubjectUrl())) { matchingProviders += provider; } @@ -323,7 +242,7 @@ ProviderConfigurationInfo HistoryModel::determineProviderFor(const HistoryInfo& bool HistoryModel::isEnabled() const { - return mHistorySettings->isEnabled(); + return getHistorySettings().isEnabled(); } @@ -331,8 +250,9 @@ void HistoryModel::setEnabled(bool pEnabled) { if (pEnabled != isEnabled()) { - mHistorySettings->setEnabled(pEnabled); - mHistorySettings->save(); + auto& historySettings = getHistorySettings(); + historySettings.setEnabled(pEnabled); + historySettings.save(); } } @@ -366,17 +286,22 @@ QHash HistoryModel::roleNames() const bool HistoryModel::removeRows(int pRow, int pCount, const QModelIndex& pParent) { + if (pCount <= 0) + { + return false; + } beginRemoveRows(pParent, pRow, pRow + pCount - 1); - auto entries = mHistorySettings->getHistoryInfos(); + auto& historySettings = getHistorySettings(); + auto entries = historySettings.getHistoryInfos(); entries.remove(pRow, pCount); // disconnect the signal, otherwise this model gets reset - disconnect(mHistorySettings.data(), &HistorySettings::fireHistoryInfosChanged, this, &HistoryModel::onHistoryEntriesChanged); - mHistorySettings->setHistoryInfos(entries); - connect(mHistorySettings.data(), &HistorySettings::fireHistoryInfosChanged, this, &HistoryModel::onHistoryEntriesChanged); + disconnect(&historySettings, &HistorySettings::fireHistoryInfosChanged, this, &HistoryModel::onHistoryEntriesChanged); + historySettings.setHistoryInfos(entries); + connect(&historySettings, &HistorySettings::fireHistoryInfosChanged, this, &HistoryModel::onHistoryEntriesChanged); - mHistorySettings->save(); + historySettings.save(); endRemoveRows(); return true; @@ -399,3 +324,10 @@ HistoryModelSearchFilter* HistoryModel::getHistoryModelSearchFilter() { return &mHistoryModelSearchFilter; } + + +void HistoryModel::exportHistory(const QUrl& pFilename) const +{ + PdfExporter exporter(pFilename.toLocalFile()); + exporter.exportHistory(); +} diff --git a/src/ui/qml/HistoryModel.h b/src/ui/qml/HistoryModel.h index 830019b..ddf1b39 100644 --- a/src/ui/qml/HistoryModel.h +++ b/src/ui/qml/HistoryModel.h @@ -7,53 +7,19 @@ #pragma once #include "HistoryModelSearchFilter.h" +#include "HistoryProxyModel.h" #include "HistorySettings.h" #include "ProviderConfigurationInfo.h" +#include "ProviderNameFilterModel.h" #include -#include -#include + + +class test_HistoryModel; namespace governikus { -class HistoryProxyModel - : public QSortFilterProxyModel -{ - Q_OBJECT - - public: - Q_INVOKABLE bool removeRows(int pRow, int pCount, const QModelIndex& pParent = QModelIndex()) override; - - HistoryProxyModel(); - - virtual ~HistoryProxyModel() override; -}; - - -class ProviderNameFilterModel - : public QSortFilterProxyModel -{ - Q_OBJECT - - private: - QPointer mHistorySettings; - - ProviderConfigurationInfo mProvider; - - protected: - bool filterAcceptsRow(int pSourceRow, const QModelIndex& pSourceParent) const override; - - public: - ProviderNameFilterModel(HistorySettings* pHistorySettings); - - virtual ~ProviderNameFilterModel() override; - - Q_INVOKABLE void setProviderAddress(const QString& pProviderAddress); - -}; - - class HistoryModel : public QAbstractListModel { @@ -63,15 +29,16 @@ class HistoryModel Q_PROPERTY(HistoryModelSearchFilter * searchFilter READ getHistoryModelSearchFilter CONSTANT) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY fireEnabledChanged) - QPointer mHistorySettings; HistoryProxyModel mFilterModel; ProviderNameFilterModel mNameFilterModel; HistoryModelSearchFilter mHistoryModelSearchFilter; private: + friend class ::test_HistoryModel; QVector mConnections; ProviderConfigurationInfo determineProviderFor(const HistoryInfo& pHistoryInfo) const; + static auto& getHistorySettings(); bool isEnabled() const; void setEnabled(bool pEnabled); @@ -85,7 +52,7 @@ class HistoryModel void fireEnabledChanged(bool pValue); public: - HistoryModel(HistorySettings* pHistorySettings, QObject* pParent = nullptr); + explicit HistoryModel(QObject* pParent = nullptr); virtual ~HistoryModel() override; enum HistoryRoles @@ -120,6 +87,8 @@ class HistoryModel Q_INVOKABLE HistoryProxyModel* getFilterModel(); Q_INVOKABLE ProviderNameFilterModel* getNameFilterModel(); HistoryModelSearchFilter* getHistoryModelSearchFilter(); + + Q_INVOKABLE void exportHistory(const QUrl& pFilename) const; }; } // namespace governikus diff --git a/src/ui/qml/HistoryProxyModel.cpp b/src/ui/qml/HistoryProxyModel.cpp new file mode 100644 index 0000000..796066f --- /dev/null +++ b/src/ui/qml/HistoryProxyModel.cpp @@ -0,0 +1,23 @@ +/*! + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "HistoryProxyModel.h" + +using namespace governikus; + + +HistoryProxyModel::HistoryProxyModel() +{ +} + + +HistoryProxyModel::~HistoryProxyModel() +{ +} + + +bool HistoryProxyModel::removeRows(int pRow, int pCount, const QModelIndex& pParent) +{ + return QSortFilterProxyModel::removeRows(pRow, pCount, pParent); +} diff --git a/src/ui/qml/HistoryProxyModel.h b/src/ui/qml/HistoryProxyModel.h new file mode 100644 index 0000000..9142715 --- /dev/null +++ b/src/ui/qml/HistoryProxyModel.h @@ -0,0 +1,26 @@ +/*! + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include + +namespace governikus +{ + +class HistoryProxyModel + : public QSortFilterProxyModel +{ + Q_OBJECT + + public: + Q_INVOKABLE bool removeRows(int pRow, int pCount, const QModelIndex& pParent = QModelIndex()) override; + + HistoryProxyModel(); + + virtual ~HistoryProxyModel() override; +}; + + +} // namespace governikus diff --git a/src/ui/qml/LogModel.cpp b/src/ui/qml/LogModel.cpp index 1ae770a..b92d436 100644 --- a/src/ui/qml/LogModel.cpp +++ b/src/ui/qml/LogModel.cpp @@ -6,8 +6,11 @@ #include "LanguageLoader.h" #include "LogHandler.h" +#include "PlatformHelper.h" +#include "SettingsModel.h" #include "SingletonHelper.h" +#include #include @@ -17,42 +20,6 @@ using namespace governikus; defineSingleton(LogModel) -double LogModel::getSizeRatio() const -{ - if (mLogEntries.isEmpty()) - { - return 1.0; - } - - return mCount / static_cast(mLogEntries.size()); -} - - -double LogModel::getPosition() const -{ - if (mLogEntries.isEmpty()) - { - return 0.0; - } - - return mIndex / static_cast(mLogEntries.size()); -} - - -void LogModel::setPosition(double pPosition) -{ - beginResetModel(); - - const int newIndex = qFloor(mLogEntries.size() * pPosition); - const int maxIndex = mLogEntries.size() - mCount; - mIndex = newIndex < maxIndex ? newIndex : maxIndex; - - endResetModel(); - - Q_EMIT fireVisibleAreaChanged(); -} - - void LogModel::addLogEntry(const QString& mEntry) { const int cutIndex = mEntry.indexOf(QLatin1String(" : ")); @@ -79,12 +46,7 @@ void LogModel::setLogEntries(QTextStream& pTextStream) addLogEntry(pTextStream.readLine()); } - mIndex = 0; - mCount = mLogEntries.size() < 80 ? mLogEntries.size() : 80; - endResetModel(); - - Q_EMIT fireVisibleAreaChanged(); } @@ -93,28 +55,21 @@ void LogModel::onNewLogMsg(const QString& pMsg) if (mSelectedLogFile == 0) { const int oldSize = mLogEntries.size(); - const bool flickDown = (mIndex + mCount == oldSize); addLogEntry(pMsg); - Q_EMIT fireVisibleAreaChanged(); - - if (flickDown && mAutoFlick) - { - moveView(mLogEntries.size() - oldSize); - Q_EMIT fireNewLogMsg(); - } + beginInsertRows(QModelIndex(), oldSize, mLogEntries.size() - 1); + endInsertRows(); + Q_EMIT fireNewLogMsg(); } } LogModel::LogModel() : QAbstractListModel() - , mIndex(0) - , mCount(0) , mLogFiles() , mSelectedLogFile(0) , mLogEntries() - , mAutoFlick(false) { + connect(Env::getSingleton(), &SettingsModel::fireLanguageChanged, this, &LogModel::fireLogFilesChanged); // needed to translate the "Current log" entry on language change } @@ -131,6 +86,7 @@ QStringList LogModel::getLogfiles() const auto& logHandler = Env::getSingleton(); QStringList logFileNames; + //: LABEL ALL_PLATFORMS logFileNames += tr("Current log"); const auto& logFiles = logHandler->getOtherLogfiles(); for (const auto& entry : logFiles) @@ -144,6 +100,17 @@ QStringList LogModel::getLogfiles() } +QDateTime LogModel::getCurrentLogfileDate() const +{ + if (mSelectedLogFile == 0) + { + return Env::getSingleton()->getCurrentLogfileDate(); + } + + return LogHandler::getFileDate(QFileInfo(mLogFiles.at(mSelectedLogFile))); +} + + void LogModel::removeOtherLogfiles() { if (Env::getSingleton()->removeOtherLogfiles()) @@ -186,72 +153,39 @@ void LogModel::setLogfile(int pIndex) } -void LogModel::moveView(int pDistance) +void LogModel::saveCurrentLogfile(const QUrl& pFilename) const { - if (pDistance == 0) + const QString logfilePath = mLogFiles.at(mSelectedLogFile); + + if (logfilePath.isEmpty()) { - return; + const auto& logHandler = Env::getSingleton(); + logHandler->copy(pFilename.toLocalFile()); } - - int newIndex = mIndex + pDistance; - if (newIndex < 0) + else { - newIndex = 0; - } - - const int maxIndex = mLogEntries.size() - mCount; - if (newIndex > maxIndex) - { - newIndex = maxIndex; - } - - if (newIndex != mIndex) - { - pDistance = newIndex - mIndex; - - if (pDistance < 0) - { - if (mCount + pDistance >= 0) - { - beginRemoveRows(QModelIndex(), mCount + pDistance, mCount - 1); - mCount += pDistance; - endRemoveRows(); - } - - beginInsertRows(QModelIndex(), 0, -pDistance - 1); - mCount -= pDistance; - mIndex += pDistance; - endInsertRows(); - } - else - { - if (mCount - pDistance >= 0) - { - beginRemoveRows(QModelIndex(), 0, pDistance - 1); - mCount -= pDistance; - mIndex += pDistance; - endRemoveRows(); - } - - beginInsertRows(QModelIndex(), mCount, mCount + pDistance - 1); - mCount += pDistance; - endInsertRows(); - } - - Q_EMIT fireVisibleAreaChanged(); + QFile::copy(logfilePath, pFilename.toLocalFile()); } } int LogModel::rowCount(const QModelIndex& pIndex) const { - Q_UNUSED(pIndex); - return mCount; + Q_UNUSED(pIndex) + return mLogEntries.size(); } QVariant LogModel::data(const QModelIndex& pIndex, int pRole) const { - Q_UNUSED(pRole); - return mLogEntries.at(mIndex + pIndex.row()); + Q_UNUSED(pRole) + return mLogEntries.at(pIndex.row()); +} + + +QString LogModel::createLogFileName(const QDateTime& pDateTime) +{ + QString dateFormat = QStringLiteral("yyyy-MM-dd_HH-mm"); + QString logFileDate = pDateTime.toString(dateFormat); + return QStringLiteral("%1-%2.log").arg(QCoreApplication::applicationName(), logFileDate); } diff --git a/src/ui/qml/LogModel.h b/src/ui/qml/LogModel.h index 659edf5..eb0f657 100644 --- a/src/ui/qml/LogModel.h +++ b/src/ui/qml/LogModel.h @@ -4,11 +4,16 @@ #pragma once +#include "Env.h" + #include +#include #include +#include #include #include #include +#include class test_LogModel; @@ -19,24 +24,16 @@ class LogModel : public QAbstractListModel { Q_OBJECT + friend class Env; - Q_PROPERTY(bool autoFlick MEMBER mAutoFlick) Q_PROPERTY(QStringList logFiles READ getLogfiles NOTIFY fireLogFilesChanged) - Q_PROPERTY(double heightRatio READ getSizeRatio NOTIFY fireVisibleAreaChanged) - Q_PROPERTY(double yPosition READ getPosition WRITE setPosition NOTIFY fireVisibleAreaChanged) private: friend class ::test_LogModel; - int mIndex; - int mCount; QStringList mLogFiles; int mSelectedLogFile; QStringList mLogEntries; - bool mAutoFlick; - double getSizeRatio() const; - double getPosition() const; - void setPosition(double pPosition); void addLogEntry(const QString& mEntry); void setLogEntries(QTextStream& pTextStream); @@ -45,26 +42,28 @@ class LogModel protected: LogModel(); - - public: static LogModel& getInstance(); + public: QStringList getLogfiles(); + Q_INVOKABLE QDateTime getCurrentLogfileDate() const; Q_INVOKABLE void removeOtherLogfiles(); Q_INVOKABLE void removeCurrentLogfile(); Q_INVOKABLE void setLogfile(int pIndex); - Q_INVOKABLE void moveView(int pDistance); + Q_INVOKABLE void saveCurrentLogfile(const QUrl& pFilename) const; Q_INVOKABLE void mailLog(const QString& pEmail = tr("support.ausweisapp2@governikus.de"), - const QString& pSubject = tr("Android log file"), + const QString& pSubject = tr("Mobile log file"), const QString& pMsg = tr("")); - Q_INVOKABLE void shareLog(); + + /// \a popupPosition will be used on an iPad as the origin of the share bubble + Q_INVOKABLE void shareLog(QPoint popupPosition); int rowCount(const QModelIndex& pIndex = QModelIndex()) const override; QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const override; + static QString createLogFileName(const QDateTime& pDateTime = QDateTime::currentDateTime()); Q_SIGNALS: - void fireVisibleAreaChanged(); void fireLogFilesChanged(); void fireNewLogMsg(); }; diff --git a/src/ui/qml/LogModel_android.cpp b/src/ui/qml/LogModel_android.cpp index 56f31e9..c6408d6 100644 --- a/src/ui/qml/LogModel_android.cpp +++ b/src/ui/qml/LogModel_android.cpp @@ -63,8 +63,7 @@ static QString getPublicLogFileName(QAndroidJniEnvironment& env, const QAndroidJ return QString(); } - const auto& nowAsISO = pDateTime.toString(QStringLiteral("yyyy-MM-dd'T'HH:mm:ss-t")); - return QStringLiteral("%1/AusweisApp2-%2.txt").arg(jFilesDirPath.toString(), nowAsISO); + return QStringLiteral("%1/%2").arg(jFilesDirPath.toString(), LogModel::createLogFileName(pDateTime)); } @@ -83,6 +82,7 @@ void LogModel::mailLog(const QString& pEmail, const QString& pSubject, const QSt const auto& jEmail = QAndroidJniObject::fromString(pEmail); const auto& jSubject = QAndroidJniObject::fromString(pSubject); const auto& jMsg = QAndroidJniObject::fromString(pMsg); + //: LABEL ANDROID const auto& jChooserTitle = QAndroidJniObject::fromString(tr("Send application log per email...")); const auto& publicLogFile = getPublicLogFileName(env, javaActivity, external); const auto& jPublicLogFile = QAndroidJniObject::fromString(publicLogFile); @@ -112,7 +112,7 @@ void LogModel::mailLog(const QString& pEmail, const QString& pSubject, const QSt } -void LogModel::shareLog() +void LogModel::shareLog(const QPoint /*popupPosition*/) { QAndroidJniEnvironment env; const QAndroidJniObject javaActivity(QtAndroid::androidActivity()); @@ -150,6 +150,7 @@ void LogModel::shareLog() } } + //: LABEL ANDROID const auto& jChooserTitle = QAndroidJniObject::fromString(tr("Share application log...")); const auto& jPublicLogFile = QAndroidJniObject::fromString(publicLogFile); diff --git a/src/ui/qml/LogModel_generic.cpp b/src/ui/qml/LogModel_generic.cpp index e45cd85..b5b6a1d 100644 --- a/src/ui/qml/LogModel_generic.cpp +++ b/src/ui/qml/LogModel_generic.cpp @@ -15,15 +15,15 @@ using namespace governikus; void LogModel::mailLog(const QString& pEmail, const QString& pSubject, const QString& pMsg) { - Q_UNUSED(pEmail); - Q_UNUSED(pSubject); - Q_UNUSED(pMsg); + Q_UNUSED(pEmail) + Q_UNUSED(pSubject) + Q_UNUSED(pMsg) qCWarning(qml) << "NOT IMPLEMENTED"; } -void LogModel::shareLog() +void LogModel::shareLog(const QPoint /*popupPosition*/) { qCWarning(qml) << "NOT IMPLEMENTED"; } diff --git a/src/ui/qml/LogModel_ios.mm b/src/ui/qml/LogModel_ios.mm new file mode 100644 index 0000000..b44b5b6 --- /dev/null +++ b/src/ui/qml/LogModel_ios.mm @@ -0,0 +1,141 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "LogModel.h" + +#include "ApplicationModel.h" +#include "LogHandler.h" + +#import +#import + +#include +#include + +#include + + +Q_DECLARE_LOGGING_CATEGORY(qml) + + +using namespace governikus; + +@interface MailComposeController + : MFMailComposeViewController +- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error; +@end + +@implementation MailComposeController + +- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { + + Q_UNUSED(result) + Q_UNUSED(error) + + [controller dismissViewControllerAnimated: true completion:nil]; +} + + +@end + + +static std::optional getTemporaryLogFile(std::optional pSourceFile = std::nullopt) +{ + LogHandler* logHandler = Env::getSingleton(); + + QString destinationFileName; + if (pSourceFile) + { + destinationFileName = LogModel::createLogFileName(logHandler->getFileDate(QFileInfo(pSourceFile.value()))); + } + else + { + destinationFileName = LogModel::createLogFileName(); + } + + QString destinationFilePath = QString::fromNSString([NSTemporaryDirectory() stringByAppendingPathComponent: destinationFileName.toNSString()]); + + if (QFile::exists(destinationFilePath)) + { + QFile::remove(destinationFilePath); + } + + if (pSourceFile) + { + if (!QFile::copy(pSourceFile.value(), destinationFilePath)) + { + qCCritical(qml) << "Cannot copy log file to" << destinationFilePath; + return std::nullopt; + } + } + else + { + logHandler->copy(destinationFilePath); + } + + return destinationFilePath; +} + + +void LogModel::mailLog(const QString& pEmail, const QString& pSubject, const QString& pMsg) +{ + if (![MFMailComposeViewController canSendMail]) + { + qCWarning(qml) << "Email not configured, cannot send mail."; + Env::getSingleton()->showFeedback(tr("Could not send log! Please configure your mail client first.")); + return; + } + + QString fileName = LogModel::createLogFileName(); + std::optional logFile = getTemporaryLogFile(); + if (!logFile) + { + return; + } + + NSData* fileContent = [NSData dataWithContentsOfFile: logFile.value().toNSString()]; + + UIViewController* rootController = [[UIApplication sharedApplication].windows[0] rootViewController]; + + auto* mailComposeController = [[MailComposeController alloc] init]; + mailComposeController.mailComposeDelegate = mailComposeController; + + [mailComposeController setToRecipients:@[pEmail.toNSString()]]; + [mailComposeController setSubject: pSubject.toNSString()]; + [mailComposeController setMessageBody: pMsg.toNSString() isHTML:NO]; + [mailComposeController addAttachmentData: fileContent mimeType: @"text/plain" fileName: fileName.toNSString()]; + + [rootController presentViewController:mailComposeController animated:YES completion:nil]; +} + + +void LogModel::shareLog(const QPoint popupPosition) +{ + std::optional logFile; + if (mSelectedLogFile == 0) + { + logFile = getTemporaryLogFile(); + } + else + { + logFile = getTemporaryLogFile(mLogFiles.at(mSelectedLogFile)); + } + if (!logFile) + { + return; + } + + NSURL* logFileURL = [NSURL fileURLWithPath: logFile.value().toNSString()]; + + NSArray* shareItems = @[logFileURL]; + + UIActivityViewController* shareController = [[UIActivityViewController alloc]initWithActivityItems: shareItems applicationActivities:nil]; + + UIViewController* rootController = [[UIApplication sharedApplication].windows[0] rootViewController]; + + shareController.popoverPresentationController.sourceView = rootController.view; + shareController.popoverPresentationController.sourceRect = CGRectMake(popupPosition.x(), popupPosition.y(), 0, 0); + + [rootController presentViewController:shareController animated:YES completion: nil]; +} diff --git a/src/ui/qml/NotificationModel.cpp b/src/ui/qml/NotificationModel.cpp new file mode 100644 index 0000000..b73e817 --- /dev/null +++ b/src/ui/qml/NotificationModel.cpp @@ -0,0 +1,100 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "NotificationModel.h" + +#include "LogHandler.h" +#include "SingletonHelper.h" + +#include + + +using namespace governikus; + + +defineSingleton(NotificationModel) + + +QString NotificationModel::getLastType() const +{ + if (mNotificationEntries.isEmpty()) + { + return QString(); + } + + return qAsConst(mNotificationEntries).last().mType; +} + + +void NotificationModel::onNewLogMsg(const QString& pMsg, const QString& pCategoryName) +{ + if (pCategoryName == QLatin1String("developermode") || pCategoryName == QLatin1String("feedback")) + { + if (mNotificationEntries.isFull()) + { + beginRemoveRows(QModelIndex(), 0, 0); + mNotificationEntries.removeFirst(); + endRemoveRows(); + } + + beginInsertRows(QModelIndex(), mNotificationEntries.size(), mNotificationEntries.size()); + const auto& time = QTime::currentTime().toString(tr("hh:mm:ss")); + mNotificationEntries.append({pCategoryName, time, pMsg}); + endInsertRows(); + + Q_EMIT fireLastTypeChanged(); + } +} + + +NotificationModel::NotificationModel() + : QAbstractListModel() + , mNotificationEntries(20) +{ + connect(Env::getSingleton(), &LogHandler::fireRawLog, this, &NotificationModel::onNewLogMsg, Qt::QueuedConnection); +} + + +NotificationModel& NotificationModel::getInstance() +{ + return *Instance; +} + + +int NotificationModel::rowCount(const QModelIndex& pIndex) const +{ + Q_UNUSED(pIndex) + return mNotificationEntries.count(); +} + + +QVariant NotificationModel::data(const QModelIndex& pIndex, int pRole) const +{ + if (mNotificationEntries.isEmpty() || pIndex.row() >= mNotificationEntries.size()) + { + return QVariant(); + } + const auto& notification = qAsConst(mNotificationEntries).at(mNotificationEntries.firstIndex() + pIndex.row()); + switch (pRole) + { + case TYPE: + return notification.mType; + + case TIME: + return notification.mTime; + + default: + return notification.mText; + } +} + + +QHash NotificationModel::roleNames() const +{ + QHash roles = QAbstractListModel::roleNames(); + roles.insert(TYPE, "type"); + roles.insert(TIME, "time"); + roles.insert(TEXT, "text"); + return roles; +} diff --git a/src/ui/qml/NotificationModel.h b/src/ui/qml/NotificationModel.h new file mode 100644 index 0000000..0ee43c2 --- /dev/null +++ b/src/ui/qml/NotificationModel.h @@ -0,0 +1,65 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "Env.h" + +#include +#include +#include +#include +#include +#include + +class test_NotificationModel; + +namespace governikus +{ + +class NotificationModel + : public QAbstractListModel +{ + Q_OBJECT + friend class Env; + friend class ::test_NotificationModel; + + Q_PROPERTY(QString lastType READ getLastType NOTIFY fireLastTypeChanged) + + enum UserRoles + { + TYPE = Qt::UserRole + 1, + TIME, + TEXT + }; + + struct NotificationEntry + { + QString mType; + QString mTime; + QString mText; + }; + + private: + QContiguousCache mNotificationEntries; + + QString getLastType() const; + + private Q_SLOTS: + void onNewLogMsg(const QString& pMsg, const QString& pCategoryName); + + protected: + NotificationModel(); + static NotificationModel& getInstance(); + + public: + int rowCount(const QModelIndex& pIndex) const override; + QVariant data(const QModelIndex& pIndex, int pRole) const override; + QHash roleNames() const override; + + Q_SIGNALS: + void fireLastTypeChanged(); +}; + +} // namespace governikus diff --git a/src/ui/qml/NumberModel.cpp b/src/ui/qml/NumberModel.cpp index a3849ec..ad8ba63 100644 --- a/src/ui/qml/NumberModel.cpp +++ b/src/ui/qml/NumberModel.cpp @@ -21,6 +21,7 @@ NumberModel::NumberModel() : QObject() , mContext() , mRequestTransportPin(false) + , mRequestNewPin(false) { const auto readerManager = Env::getSingleton(); connect(readerManager, &ReaderManager::fireReaderPropertiesUpdated, this, &NumberModel::onReaderInfoChanged); @@ -45,6 +46,7 @@ void NumberModel::resetContext(const QSharedPointer& pContext) connect(mContext.data(), &WorkflowContext::fireCanChanged, this, &NumberModel::fireCanChanged); connect(mContext.data(), &WorkflowContext::firePinChanged, this, &NumberModel::firePinChanged); connect(mContext.data(), &WorkflowContext::fireCanAllowedModeChanged, this, &NumberModel::fireCanAllowedModeChanged); + connect(mContext.data(), &WorkflowContext::firePasswordTypeChanged, this, &NumberModel::firePasswordTypeChanged); const auto changePinContext = mContext.objectCast(); if (changePinContext) @@ -55,7 +57,8 @@ void NumberModel::resetContext(const QSharedPointer& pContext) connect(mContext.data(), &WorkflowContext::fireCardConnectionChanged, this, &NumberModel::onCardConnectionChanged); connect(mContext.data(), &WorkflowContext::fireReaderNameChanged, this, &NumberModel::fireReaderInfoChanged); - connect(mContext.data(), &WorkflowContext::fireLastPaceResultChanged, this, &NumberModel::fireInputErrorChanged); + connect(mContext.data(), &WorkflowContext::fireReaderNameChanged, this, &NumberModel::fireInputErrorChanged); + connect(mContext.data(), &WorkflowContext::firePaceResultUpdated, this, &NumberModel::fireInputErrorChanged); // The length of the pin doesn't matter for the core. Requesting // a 5 or 6 digits PIN is only part of the gui. Therefore we handle @@ -71,6 +74,7 @@ void NumberModel::resetContext(const QSharedPointer& pContext) { mRequestTransportPin = false; } + mRequestNewPin = false; Q_EMIT fireCanChanged(); Q_EMIT firePinChanged(); @@ -80,12 +84,48 @@ void NumberModel::resetContext(const QSharedPointer& pContext) Q_EMIT fireReaderInfoChanged(); Q_EMIT fireCanAllowedModeChanged(); Q_EMIT fireRequestTransportPinChanged(); + Q_EMIT firePasswordTypeChanged(); } -PacePasswordId NumberModel::getEstablishPaceChannelType() const +NumberModel::QmlPasswordType NumberModel::getPasswordType() const { - return mContext ? mContext->getEstablishPaceChannelType() : PacePasswordId::UNKNOWN; + if (!mContext) + { + return QmlPasswordType::PASSWORD_PIN; + } + + if (mRequestNewPin) + { + return QmlPasswordType::PASSWORD_NEW_PIN; + } + + switch (mContext->getEstablishPaceChannelType()) + { + case PacePasswordId::UNKNOWN: + case PacePasswordId::PACE_MRZ: + case PacePasswordId::PACE_PIN: + return QmlPasswordType::PASSWORD_PIN; + + case PacePasswordId::PACE_CAN: + return QmlPasswordType::PASSWORD_CAN; + + case PacePasswordId::PACE_PUK: + return QmlPasswordType::PASSWORD_PUK; + } + + Q_UNREACHABLE(); + return QmlPasswordType::PASSWORD_PIN; +} + + +void NumberModel::requestNewPin() +{ + if (!mRequestNewPin) + { + mRequestNewPin = true; + Q_EMIT firePasswordTypeChanged(); + } } @@ -140,6 +180,9 @@ void NumberModel::setNewPin(const QString& pNewPin) { remoteServiceContext->setNewPin(pNewPin); } + + mRequestNewPin = false; + Q_EMIT firePasswordTypeChanged(); } @@ -158,12 +201,18 @@ void NumberModel::setPuk(const QString& pPuk) } -bool NumberModel::hasError() +bool NumberModel::hasError() const { return getInputErrorCode() != CardReturnCode::OK || Env::getSingleton()->isExtendedLengthApdusUnsupported() || isPinDeactivated(); } +bool NumberModel::hasPasswordError() const +{ + return CardReturnCodeUtil::equalsWrongPacePassword(getInputErrorCode()); +} + + CardReturnCode NumberModel::getInputErrorCode() const { if (mContext.isNull() @@ -187,22 +236,27 @@ QString NumberModel::getInputError() const return QString(); case CardReturnCode::INVALID_PIN: + //: INFO ALL_PLATFORMS The wrong PIN was entered on the first attempt. return tr("The given PIN is not correct. You have 2 tries to enter the correct PIN."); case CardReturnCode::INVALID_PIN_2: + //: INFO ALL_PLATFORMS The wrong PIN was entered twice, the next attempt requires the CAN for additional verification. return tr("You have entered the wrong PIN twice. " "Prior to a third attempt, you have to enter your six-digit card access number first. " "You can find your card access number on the front of your ID card."); case CardReturnCode::INVALID_PIN_3: + //: INFO ALL_PLATFORMS The PIN was entered wrongfully three times, the id card needs to be unlocked using the PUK. return tr("You have entered a wrong PIN three times. " "Your PIN is now blocked. " "You have to enter the PUK now for unblocking."); case CardReturnCode::INVALID_CAN: + //: INFO ALL_PLATFORMS The CAN was entered wrongfully and needs to be supplied again. return tr("You have entered a wrong CAN, please try again."); case CardReturnCode::INVALID_PUK: + //: INFO ALL_PLATFORMS The PUK entered wrongfully and needs to be supplied again. return tr("You have entered a wrong PUK. " "Please try again."); diff --git a/src/ui/qml/NumberModel.h b/src/ui/qml/NumberModel.h index 9d7f46d..4288917 100644 --- a/src/ui/qml/NumberModel.h +++ b/src/ui/qml/NumberModel.h @@ -13,8 +13,6 @@ #include #include -class test_NumberModel; - namespace governikus { @@ -23,14 +21,14 @@ class NumberModel { Q_OBJECT friend class Env; - friend class ::test_NumberModel; - Q_PROPERTY(governikus::PacePasswordId establishPaceChannelType READ getEstablishPaceChannelType) + Q_PROPERTY(QmlPasswordType passwordType READ getPasswordType NOTIFY firePasswordTypeChanged) Q_PROPERTY(QString can READ getCan WRITE setCan NOTIFY fireCanChanged) Q_PROPERTY(QString pin READ getPin WRITE setPin NOTIFY firePinChanged) Q_PROPERTY(QString newPin READ getNewPin WRITE setNewPin NOTIFY fireNewPinChanged) Q_PROPERTY(QString puk READ getPuk WRITE setPuk NOTIFY firePukChanged) - Q_PROPERTY(bool hasError READ hasError NOTIFY fireReaderInfoChanged) + Q_PROPERTY(bool hasError READ hasError NOTIFY fireInputErrorChanged) + Q_PROPERTY(bool hasPasswordError READ hasPasswordError NOTIFY fireInputErrorChanged) Q_PROPERTY(CardReturnCode inputErrorCode READ getInputErrorCode NOTIFY fireInputErrorChanged) Q_PROPERTY(QString inputError READ getInputError NOTIFY fireInputErrorChanged) Q_PROPERTY(int retryCounter READ getRetryCounter NOTIFY fireReaderInfoChanged) @@ -41,6 +39,7 @@ class NumberModel private: QSharedPointer mContext; bool mRequestTransportPin; + bool mRequestNewPin; private Q_SLOTS: void onCardConnectionChanged(); @@ -51,9 +50,16 @@ class NumberModel static NumberModel& getInstance(); public: + enum class QmlPasswordType + { + PASSWORD_PIN, PASSWORD_CAN, PASSWORD_PUK, PASSWORD_NEW_PIN, PASSWORD_REMOTE_PIN + }; + Q_ENUM(QmlPasswordType) + void resetContext(const QSharedPointer& pContext = QSharedPointer()); - PacePasswordId getEstablishPaceChannelType() const; + QmlPasswordType getPasswordType() const; + Q_INVOKABLE void requestNewPin(); QString getCan() const; void setCan(const QString& pCan); @@ -67,7 +73,8 @@ class NumberModel QString getPuk() const; void setPuk(const QString& pPuk); - bool hasError(); + bool hasError() const; + bool hasPasswordError() const; CardReturnCode getInputErrorCode() const; QString getInputError() const; @@ -90,6 +97,7 @@ class NumberModel void fireReaderInfoChanged(); void fireCanAllowedModeChanged(); void fireRequestTransportPinChanged(); + void firePasswordTypeChanged(); }; diff --git a/src/ui/qml/PlatformHelper.cpp b/src/ui/qml/PlatformHelper.cpp new file mode 100644 index 0000000..d42b7d3 --- /dev/null +++ b/src/ui/qml/PlatformHelper.cpp @@ -0,0 +1,61 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "PlatformHelper.h" + +#include +#include +#include +#include + +namespace governikus +{ + +bool isPlatform(const QObject& object, const Platform selector) +{ + if (const QQmlContext* const context = QQmlEngine::contextForObject(&object)) + { + // The UI could have been changed using OVERRIDE_PLATFORM_SELECTOR + if (QQmlEngine* const engine = context->engine()) + { + const QStringList selectors = QQmlFileSelector::get(engine)->selector()->extraSelectors(); + switch (selector) + { + case Platform::ANDROID: + return selectors.contains(QLatin1String("android")); + + case Platform::IOS: + return selectors.contains(QLatin1String("ios")); + + case Platform::MOBILE: + return selectors.contains(QLatin1String("mobile")); + + case Platform::DESKTOP: + return selectors.contains(QLatin1String("desktop")); + } + } + } +#ifdef Q_OS_IOS + if (selector == Platform::MOBILE || selector == Platform::IOS) + { + return true; + } +#endif +#ifdef Q_OS_ANDROID + if (selector == Platform::MOBILE || selector == Platform::ANDROID) + { + return true; + } +#endif +#if ((!defined(Q_OS_ANDROID) && defined(Q_OS_LINUX)) || defined(Q_OS_WIN) || defined(Q_OS_MACOS) || defined(Q_OS_FREEBSD)) + if (selector == Platform::DESKTOP) + { + return true; + } +#endif + return false; +} + + +} // namespace governikus diff --git a/src/ui/qml/PlatformHelper.h b/src/ui/qml/PlatformHelper.h new file mode 100644 index 0000000..8a31149 --- /dev/null +++ b/src/ui/qml/PlatformHelper.h @@ -0,0 +1,23 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "EnumHelper.h" + +#include + +namespace governikus +{ + +defineEnumType(Platform, + ANDROID, + IOS, + MOBILE, + DESKTOP) + +/// Determine platform at runtime. Use this instead of the preprocessor to allow running the mobile UI on the desktop. +bool isPlatform(const QObject&, Platform selector); + +} // namespace governikus diff --git a/src/ui/qml/ProviderCategoryFilterModel.cpp b/src/ui/qml/ProviderCategoryFilterModel.cpp index 7493ffd..764228f 100644 --- a/src/ui/qml/ProviderCategoryFilterModel.cpp +++ b/src/ui/qml/ProviderCategoryFilterModel.cpp @@ -7,18 +7,6 @@ using namespace governikus; -namespace -{ -const QStringList& getCategories() -{ - static QStringList cats({QStringLiteral("citizen"), QStringLiteral("insurance"), QStringLiteral("finance"), QStringLiteral("other")}); - return cats; -} - - -} // namespace - - QString ProviderCategoryFilterModel::getSearchString() const { return mSearchString; @@ -45,35 +33,26 @@ QStringList ProviderCategoryFilterModel::getSelectedCategories() const int ProviderCategoryFilterModel::getAdditionalResultCount() const { - int results = 0; - for (const QString& p : getCategories()) - { - results += matchesForExcludedCategory(p); - } - return results; -} - - -int ProviderCategoryFilterModel::matchesForExcludedCategory(const QString& pCategory) const -{ - if (mSearchString.isEmpty() || mSelectedCategories.isEmpty() || mSelectedCategories.contains(pCategory)) + if (mSearchString.isEmpty()) { return 0; } - QAbstractItemModel* const model = sourceModel(); - const int count = model->rowCount(); - int matchCount = 0; - for (int sourceRow = 0; sourceRow < count; ++sourceRow) - { - const QModelIndex idx = model->index(sourceRow, 0, QModelIndex()); - const QString dt = model->data(idx, Qt::DisplayRole).toString(); - if (!dt.contains(mSearchString, Qt::CaseInsensitive)) - { - continue; - } + auto excludedCategories = ProviderModel::getProviderCategories() - mSelectedCategories; + return resultCountForFilter(excludedCategories, mSearchString); +} - if (pCategory.toLower() == model->data(idx, ProviderModel::CATEGORY).toString().toLower()) + +int ProviderCategoryFilterModel::resultCountForFilter(const QSet& pCategories, const QString& pSearchString) const +{ + QAbstractItemModel* const model = sourceModel(); + Q_ASSERT(model != nullptr); + const int rowCount = model->rowCount(); + + int matchCount = 0; + for (int sourceRow = 0; sourceRow < rowCount; ++sourceRow) + { + if (rowMatchesFilter(sourceRow, QModelIndex(), pCategories, pSearchString)) { matchCount++; } @@ -84,22 +63,45 @@ int ProviderCategoryFilterModel::matchesForExcludedCategory(const QString& pCate bool ProviderCategoryFilterModel::filterAcceptsRow(int pSourceRow, const QModelIndex& pSourceParent) const +{ + return rowMatchesFilter(pSourceRow, pSourceParent, mSelectedCategories, mSearchString); +} + + +bool ProviderCategoryFilterModel::rowMatchesFilter(int pSourceRow, const QModelIndex& pSourceParent, const QSet& pSelectedCategories, const QString& pSearchString) const { QAbstractItemModel* const model = sourceModel(); Q_ASSERT(model != nullptr); const QModelIndex idx = model->index(pSourceRow, 0, pSourceParent); - if (!mSearchString.isEmpty()) + bool isRowInSelectedCategory = pSelectedCategories.isEmpty() || + pSelectedCategories.contains(QLatin1String("all")) || + pSelectedCategories.contains(model->data(idx, ProviderModel::CATEGORY).toString().toLower()); + + if (!isRowInSelectedCategory) { - const QString dt = model->data(idx, Qt::DisplayRole).toString(); - if (!dt.contains(mSearchString, Qt::CaseInsensitive)) - { - return false; - } + return false; + } + else if (pSearchString.isEmpty()) + { + return true; } - return mSelectedCategories.isEmpty() || mSelectedCategories.contains(QStringLiteral("all")) || - mSelectedCategories.contains(model->data(idx, ProviderModel::CATEGORY).toString().toLower()); + const QString display = model->data(idx, Qt::DisplayRole).toString(); + const QString shortname = model->data(idx, ProviderModel::SHORTNAME).toString(); + const QString longname = model->data(idx, ProviderModel::LONGNAME).toString(); + const QString address = model->data(idx, ProviderModel::ADDRESS).toString(); + const QString homepage = model->data(idx, ProviderModel::HOMEPAGE).toString(); + const QString shortdescription = model->data(idx, ProviderModel::SHORTDESCRIPTION).toString(); + const QString longdescription = model->data(idx, ProviderModel::LONGDESCRIPTION).toString(); + + return display.contains(pSearchString, Qt::CaseInsensitive) || + shortname.contains(pSearchString, Qt::CaseInsensitive) || + longname.contains(pSearchString, Qt::CaseInsensitive) || + address.contains(pSearchString, Qt::CaseInsensitive) || + homepage.contains(pSearchString, Qt::CaseInsensitive) || + shortdescription.contains(pSearchString, Qt::CaseInsensitive) || + longdescription.contains(pSearchString, Qt::CaseInsensitive); } @@ -160,16 +162,18 @@ void ProviderCategoryFilterModel::updateCategorySelection(const QString& pCatego void ProviderCategoryFilterModel::addAdditionalResultCategories() { - bool needUpdate = false; - for (const QString& p : getCategories()) + bool filterChanged = false; + const auto excludedCategories = ProviderModel::getProviderCategories() - mSelectedCategories; + for (const QString& category : excludedCategories) { - if (matchesForExcludedCategory(p) > 0) + if (resultCountForFilter(QSet({category}), mSearchString) > 0) { - needUpdate = true; - mSelectedCategories += p; + filterChanged = true; + mSelectedCategories += category; } } - if (needUpdate) + + if (filterChanged) { invalidateFilter(); Q_EMIT fireCriteriaChanged(); diff --git a/src/ui/qml/ProviderCategoryFilterModel.h b/src/ui/qml/ProviderCategoryFilterModel.h index 610f7d0..8001351 100644 --- a/src/ui/qml/ProviderCategoryFilterModel.h +++ b/src/ui/qml/ProviderCategoryFilterModel.h @@ -38,7 +38,8 @@ class ProviderCategoryFilterModel void updateSearchString(const QString& pSearchString); QStringList getSelectedCategories() const; int getAdditionalResultCount() const; - int matchesForExcludedCategory(const QString& pCategory) const; + int resultCountForFilter(const QSet& pCategories, const QString& pSearchString) const; + bool rowMatchesFilter(int pSourceRow, const QModelIndex& pSourceParent, const QSet& pSelectedCategories, const QString& pSearchString) const; protected: bool filterAcceptsRow(int pSourceRow, const QModelIndex& pSourceParent) const override; diff --git a/src/ui/qml/ProviderModel.cpp b/src/ui/qml/ProviderModel.cpp index 114aaad..dd1424f 100644 --- a/src/ui/qml/ProviderModel.cpp +++ b/src/ui/qml/ProviderModel.cpp @@ -14,10 +14,12 @@ QString ProviderModel::createCostString(double pCostsPerMinute, double pCostsPer { if (pCostsPerMinute > 0.0) { + //: INFO ALL_PLATFORMS Unit for expenses for calling the hotline (per minute). return tr("%1/min").arg(createAmountString(pCostsPerMinute)); } if (pCostsPerCall > 0.0) { + //: INFO ALL_PLATFORMS Unit for expenses for calling the hotline (per call). return tr("%1/call").arg(createAmountString(pCostsPerCall)); } return QString(); @@ -26,6 +28,7 @@ QString ProviderModel::createCostString(double pCostsPerMinute, double pCostsPer QString ProviderModel::createAmountString(double pCents) { + //: INFO ALL_PLATFORMS Currency unit for expenses for calling the hotline (Euro/Cent). return pCents > 100 ? tr("%1 EUR").arg(pCents / 100.0) : tr("%1 ct").arg(pCents); } @@ -192,6 +195,13 @@ QHash ProviderModel::roleNames() const } +const QSet& ProviderModel::getProviderCategories() +{ + static QSet cats({QStringLiteral("citizen"), QStringLiteral("insurance"), QStringLiteral("finance"), QStringLiteral("other")}); + return cats; +} + + QString ProviderModel::createCostString(const CallCost& pCosts) { if (pCosts.isNull()) @@ -202,10 +212,13 @@ QString ProviderModel::createCostString(const CallCost& pCosts) QString msg; if (pCosts.getFreeSeconds() > 0) { + //: INFO ALL_PLATFORMS Free of charge seconds when calling the hotline. msg += tr("%1 seconds free, afterwards ").arg(pCosts.getFreeSeconds()); } + //: INFO ALL_PLATFORMS Land line charges when calling the hotline. msg += tr("landline costs %1; ").arg(createCostString(pCosts.getLandlineCentsPerMinute(), pCosts.getLandlineCentsPerCall())); const auto mobileCosts = createCostString(pCosts.getMobileCentsPerMinute(), pCosts.getMobileCentsPerCall()); + //: INFO ALL_PLATFORMS Cell phone charges when calling the hotline. msg += mobileCosts.isEmpty() ? tr("mobile costs may vary.") : tr("mobile costs %1").arg(mobileCosts); return msg; } diff --git a/src/ui/qml/ProviderModel.h b/src/ui/qml/ProviderModel.h index aae2c18..4a64c40 100644 --- a/src/ui/qml/ProviderModel.h +++ b/src/ui/qml/ProviderModel.h @@ -9,19 +9,16 @@ #include "CallCost.h" #include +#include #include -class test_ProviderModel; - - namespace governikus { class ProviderModel : public QAbstractListModel { - friend class ::test_ProviderModel; Q_OBJECT @@ -64,6 +61,8 @@ class ProviderModel QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const override; QHash roleNames() const override; + static const QSet& getProviderCategories(); + static QString createCostString(const CallCost& pCosts); }; diff --git a/src/ui/qml/ProviderNameFilterModel.cpp b/src/ui/qml/ProviderNameFilterModel.cpp new file mode 100644 index 0000000..8fe41c9 --- /dev/null +++ b/src/ui/qml/ProviderNameFilterModel.cpp @@ -0,0 +1,60 @@ +/*! + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ProviderNameFilterModel.h" + +#include "AppSettings.h" +#include "Env.h" +#include "HistoryModel.h" +#include "HistorySettings.h" +#include "ProviderConfiguration.h" +#include "ProviderModel.h" + +#include + +using namespace governikus; + + +bool ProviderNameFilterModel::filterAcceptsRow(int pSourceRow, const QModelIndex& /* pSourceParent */) const +{ + auto* const dataSourceModel = qobject_cast(sourceModel()); + if (dataSourceModel == nullptr) + { + return false; + } + + const auto& infos = Env::getSingleton()->getHistorySettings().getHistoryInfos(); + const auto& entry = infos[pSourceRow]; + + return mProvider.matchWithSubjectUrl(entry.getSubjectUrl()); +} + + +ProviderNameFilterModel::ProviderNameFilterModel() + : mProvider() +{ +} + + +void ProviderNameFilterModel::setProviderAddress(const QString& pProviderAddress) +{ + if (mProvider.getAddress() != pProviderAddress) + { + const auto& providers = Env::getSingleton()->getProviderConfigurationInfos(); + for (const auto& provider : providers) + { + if (provider.getAddress() == pProviderAddress) + { + mProvider = provider; + + invalidateFilter(); + + return; + } + } + + // If we get here, no provider for pProviderAddress was found in the settings. + qWarning() << "Cannot select provider with address" << pProviderAddress; + } +} diff --git a/src/ui/qml/ProviderNameFilterModel.h b/src/ui/qml/ProviderNameFilterModel.h new file mode 100644 index 0000000..1af6db9 --- /dev/null +++ b/src/ui/qml/ProviderNameFilterModel.h @@ -0,0 +1,37 @@ +/*! + * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "ProviderConfigurationInfo.h" + +#include +#include + +class test_ProviderNameFilterModel; + +namespace governikus +{ + + +class ProviderNameFilterModel + : public QSortFilterProxyModel +{ + Q_OBJECT + + private: + friend class ::test_ProviderNameFilterModel; + ProviderConfigurationInfo mProvider; + + protected: + bool filterAcceptsRow(int pSourceRow, const QModelIndex& pSourceParent) const override; + + public: + ProviderNameFilterModel(); + + + Q_INVOKABLE void setProviderAddress(const QString& pProviderAddress); +}; + +} // namespace governikus diff --git a/src/ui/qml/QmlExtension.h b/src/ui/qml/QmlExtension.h deleted file mode 100644 index 550162c..0000000 --- a/src/ui/qml/QmlExtension.h +++ /dev/null @@ -1,28 +0,0 @@ -/*! - * \brief Utility for sharing text. - * - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include -#include - -namespace governikus -{ - -class QmlExtension - : public QObject -{ - Q_OBJECT - - public: - Q_INVOKABLE void showSettings(const QString& pAction); - Q_INVOKABLE void showFeedback(const QString& pMessage); - Q_INVOKABLE bool exportHistory(const QString& pPdfUrl) const; - Q_INVOKABLE void keepScreenOn(bool pActive); - Q_INVOKABLE void openOnlineHelp(const QString& pHelpSectionName); -}; - -} // namespace governikus diff --git a/src/ui/qml/QmlExtension_android.cpp b/src/ui/qml/QmlExtension_android.cpp deleted file mode 100644 index 2661982..0000000 --- a/src/ui/qml/QmlExtension_android.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/*! - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "QmlExtension.h" - -#include "LogHandler.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -Q_DECLARE_LOGGING_CATEGORY(qml) - - -using namespace governikus; - -void QmlExtension::showSettings(const QString& pAction) -{ - QAndroidJniEnvironment env; - - const QAndroidJniObject& jAction = QAndroidJniObject::fromString(pAction); - QAndroidJniObject intent("android/content/Intent", "(Ljava/lang/String;)V", jAction.object()); - const jint flag = QAndroidJniObject::getStaticField("android/content/Intent", "FLAG_ACTIVITY_NEW_TASK"); - intent.callObjectMethod("setFlags", "(I)V", flag); - - if (intent.isValid()) - { - qCCritical(qml) << "Call action:" << pAction; - QtAndroid::startActivity(intent, 0); - } - - if (env->ExceptionCheck()) - { - qCCritical(qml) << "Cannot call an action as activity:" << pAction; - env->ExceptionDescribe(); - env->ExceptionClear(); - } -} - - -void QmlExtension::showFeedback(const QString& pMessage) -{ - // Wait for toast activation synchronously so that the app can not be deactivated - // in the meantime and all used Java objects are still alive when accessed. - QtAndroid::runOnAndroidThreadSync([pMessage](){ - QAndroidJniEnvironment env; - - const QAndroidJniObject& jMessage = QAndroidJniObject::fromString(pMessage); - const QAndroidJniObject& toast = QAndroidJniObject::callStaticObjectMethod( - "android/widget/Toast", - "makeText", - "(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;", - QtAndroid::androidActivity().object(), - jMessage.object(), - jint(1)); - toast.callMethod("show"); - - if (env->ExceptionCheck()) - { - qCCritical(qml) << "Suppressing an unexpected exception."; - env->ExceptionDescribe(); - env->ExceptionClear(); - // The toast was probably not displayed (e.g. DeadObjectException). We halt on error - // since it is used to display information to the user as required by the TR. - Q_ASSERT(false); - } - }); -} - - -bool QmlExtension::exportHistory(const QString&) const -{ - qCWarning(qml) << "NOT IMPLEMENTED"; - return false; -} - - -void QmlExtension::keepScreenOn(bool pActive) -{ - QtAndroid::runOnAndroidThread([pActive](){ - QtAndroid::androidActivity().callMethod("keepScreenOn", "(Z)V", pActive); - QAndroidJniEnvironment env; - if (env->ExceptionCheck()) - { - qCCritical(qml) << "Exception calling java native function."; - env->ExceptionDescribe(); - env->ExceptionClear(); - } - }); -} - - -void QmlExtension::openOnlineHelp(const QString& pHelpSectionName) -{ - Q_UNUSED(pHelpSectionName); - qCWarning(qml) << "NOT IMPLEMENTED"; -} - - -#include "moc_QmlExtension.cpp" diff --git a/src/ui/qml/QmlExtension_generic.cpp b/src/ui/qml/QmlExtension_generic.cpp deleted file mode 100644 index 764ba18..0000000 --- a/src/ui/qml/QmlExtension_generic.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/*! - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "QmlExtension.h" - -#ifndef Q_OS_WINRT -#include "PdfExporter.h" -#endif - -#include "HelpAction.h" - -#include -#include - -Q_DECLARE_LOGGING_CATEGORY(qml) - -using namespace governikus; - - -void QmlExtension::showSettings(const QString&) -{ - qCWarning(qml) << "NOT IMPLEMENTED"; -} - - -void QmlExtension::showFeedback(const QString&) -{ - qCWarning(qml) << "NOT IMPLEMENTED"; -} - - -bool QmlExtension::exportHistory(const QString& pPdfUrl) const -{ -#ifdef Q_OS_WINRT - return false; - -#else - PdfExporter exporter(QUrl(pPdfUrl).toLocalFile()); - return exporter.exportHistory(); - -#endif -} - - -void QmlExtension::keepScreenOn(bool) -{ - qCWarning(qml) << "NOT IMPLEMENTED"; -} - - -void QmlExtension::openOnlineHelp(const QString& pHelpSectionName) -{ - HelpAction::openContextHelp(pHelpSectionName); -} - - -#include "moc_QmlExtension.cpp" diff --git a/src/ui/qml/QmlExtension_ios.mm b/src/ui/qml/QmlExtension_ios.mm deleted file mode 100644 index 68cce36..0000000 --- a/src/ui/qml/QmlExtension_ios.mm +++ /dev/null @@ -1,65 +0,0 @@ -/*! - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "QmlExtension.h" - -#include -#import - -Q_DECLARE_LOGGING_CATEGORY(qml) - -using namespace governikus; - - -void QmlExtension::showSettings(const QString&) -{ - qCWarning(qml) << "NOT IMPLEMENTED"; -} - - -void QmlExtension::showFeedback(const QString& pMessage) -{ - NSString* msg = pMessage.toNSString(); - - UIAlertController* alert = [UIAlertController - alertControllerWithTitle:msg - message:@"" - preferredStyle:UIAlertControllerStyleAlert]; - - UIViewController* rootController = [[UIApplication sharedApplication].keyWindow rootViewController]; - [rootController presentViewController:alert animated:YES completion:nil]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, static_cast(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [alert dismissViewControllerAnimated:YES completion:nil]; - }); -} - - -bool QmlExtension::exportHistory(const QString&) const -{ - qCWarning(qml) << "NOT IMPLEMENTED"; - return false; -} - - -void QmlExtension::keepScreenOn(bool pActive) -{ - if (pActive) - { - [[UIApplication sharedApplication]setIdleTimerDisabled:YES]; - } - else - { - [[UIApplication sharedApplication]setIdleTimerDisabled:NO]; - } -} - - -void QmlExtension::openOnlineHelp(const QString& pHelpSectionName) -{ - Q_UNUSED(pHelpSectionName); - qCWarning(qml) << "NOT IMPLEMENTED"; -} - - -#include "moc_QmlExtension.cpp" diff --git a/src/ui/qml/ReaderScanEnabler.cpp b/src/ui/qml/ReaderScanEnabler.cpp new file mode 100644 index 0000000..669004d --- /dev/null +++ b/src/ui/qml/ReaderScanEnabler.cpp @@ -0,0 +1,61 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ReaderScanEnabler.h" + +#include "Env.h" +#include "ReaderManager.h" + +#include +#include + +Q_DECLARE_LOGGING_CATEGORY(qml) + +using namespace governikus; + + +ReaderScanEnabler::ReaderScanEnabler(QQuickItem* pParent) + : QQuickItem(pParent) + , mObligedToStopScan(false) +{ + if (isVisible()) + { + enableScan(true); + } +} + + +ReaderScanEnabler::~ReaderScanEnabler() +{ + enableScan(false); +} + + +void ReaderScanEnabler::enableScan(const bool pEnable) +{ + const auto manager = Env::getSingleton(); + if (pEnable && !manager->isScanRunning()) + { + qCDebug(qml) << "Starting scan."; + mObligedToStopScan = true; + manager->startScanAll(false); + } + else if (mObligedToStopScan) + { + qCDebug(qml) << "Stopping scan."; + mObligedToStopScan = false; + manager->stopScanAll(); + } +} + + +void ReaderScanEnabler::itemChange(QQuickItem::ItemChange pChange, const QQuickItem::ItemChangeData& pValue) +{ + if (pChange == QQuickItem::ItemVisibleHasChanged) + { + enableScan(pValue.boolValue); + } + + QQuickItem::itemChange(pChange, pValue); +} diff --git a/src/ui/qml/ReaderScanEnabler.h b/src/ui/qml/ReaderScanEnabler.h new file mode 100644 index 0000000..28fd0fc --- /dev/null +++ b/src/ui/qml/ReaderScanEnabler.h @@ -0,0 +1,30 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include + +namespace governikus +{ + +class ReaderScanEnabler + : public QQuickItem +{ + Q_OBJECT + + private: + bool mObligedToStopScan; + + void enableScan(const bool pEnable); + + public: + explicit ReaderScanEnabler(QQuickItem* pParent = nullptr); + ~ReaderScanEnabler() override; + + void itemChange(QQuickItem::ItemChange pChange, const QQuickItem::ItemChangeData& pValue) override; +}; + + +} // namespace governikus diff --git a/src/ui/qml/RemoteServiceModel.cpp b/src/ui/qml/RemoteServiceModel.cpp index f8e693a..494b3b7 100644 --- a/src/ui/qml/RemoteServiceModel.cpp +++ b/src/ui/qml/RemoteServiceModel.cpp @@ -5,7 +5,6 @@ #include "RemoteServiceModel.h" #include "AppSettings.h" -#include "Env.h" #include "EstablishPaceChannelParser.h" #include "NumberModel.h" #include "RemoteClientImpl.h" @@ -27,7 +26,8 @@ RemoteServiceModel::RemoteServiceModel() , mPsk() , mAvailableRemoteDevices(this, false, true) , mKnownDevices(this, true, false) - , mConnectedClientDeviceName() + , mCombinedDevices(this, true, true) + , mConnectionInfo() , mConnectedServerDeviceNames() , mIsSaCPinChangeWorkflow() , mRememberedServerEntry() @@ -39,7 +39,7 @@ RemoteServiceModel::RemoteServiceModel() connect(readerManager, &ReaderManager::fireReaderRemoved, this, &RemoteServiceModel::onEnvironmentChanged); connect(&mWifiInfo, &WifiInfo::fireWifiEnabledChanged, this, &RemoteServiceModel::onEnvironmentChanged); - RemoteClient* const remoteClient = Env::getSingleton(); + auto* const remoteClient = Env::getSingleton(); connect(remoteClient, &RemoteClient::fireDetectionChanged, this, &RemoteServiceModel::fireDetectionChanged); connect(remoteClient, &RemoteClient::fireNewRemoteDispatcher, this, &RemoteServiceModel::onConnectedDevicesChanged); connect(remoteClient, &RemoteClient::fireDispatcherDestroyed, this, &RemoteServiceModel::onConnectedDevicesChanged); @@ -64,7 +64,7 @@ void RemoteServiceModel::onEnvironmentChanged() nfcPluginEnabled |= pluginInfo.isEnabled(); } - bool readerAvailable = (Env::getSingleton()->getReaderInfos().length() > 0); + bool readerAvailable = !(Env::getSingleton()->getReaderInfos(ReaderManagerPlugInType::NFC).isEmpty()); const bool wifiEnabled = mWifiInfo.isWifiEnabled(); const bool runnable = readerAvailable && wifiEnabled; @@ -124,17 +124,28 @@ RemoteDeviceModel* RemoteServiceModel::getKnownDevices() } +RemoteDeviceModel* RemoteServiceModel::getCombinedDevices() +{ + return &mCombinedDevices; +} + + void RemoteServiceModel::setDetectRemoteDevices(bool pNewStatus) { + if (pNewStatus == Env::getSingleton()->isDetecting()) + { + return; + } + if (pNewStatus) { - mAvailableRemoteDevices.onWidgetShown(); - mKnownDevices.onWidgetShown(); + mAvailableRemoteDevices.onUiShown(); + mKnownDevices.onUiShown(); } else { - mAvailableRemoteDevices.onWidgetHidden(); - mKnownDevices.onWidgetHidden(); + mAvailableRemoteDevices.onUiHidden(); + mKnownDevices.onUiHidden(); } } @@ -149,7 +160,7 @@ void RemoteServiceModel::connectToRememberedServer(const QString& pServerPsk) { if (!pServerPsk.isEmpty() && !mRememberedServerEntry.isNull()) { - RemoteClient* const remoteClient = Env::getSingleton(); + auto* const remoteClient = Env::getSingleton(); connect(remoteClient, &RemoteClient::fireEstablishConnectionDone, this, &RemoteServiceModel::onEstablishConnectionDone); qDebug() << "Starting to pair."; @@ -167,8 +178,8 @@ bool RemoteServiceModel::rememberServer(const QString& pDeviceId) void RemoteServiceModel::onEstablishConnectionDone(const QSharedPointer& pEntry, const GlobalStatus& pStatus) { - Q_UNUSED(pEntry); - RemoteClient* const remoteClient = Env::getSingleton(); + Q_UNUSED(pEntry) + auto* const remoteClient = Env::getSingleton(); disconnect(remoteClient, &RemoteClient::fireEstablishConnectionDone, this, &RemoteServiceModel::onEstablishConnectionDone); qDebug() << "Pairing finished:" << pStatus; if (pStatus.isError()) @@ -178,16 +189,26 @@ void RemoteServiceModel::onEstablishConnectionDone(const QSharedPointer()->getRemoteServiceSettings(); - const QString peerName = settings.getRemoteInfo(getCurrentFingerprint()).getName(); - mConnectedClientDeviceName = peerName; - Q_EMIT fireConnectedClientDeviceNameChanged(); + if (pConnected) + { + const RemoteServiceSettings& settings = Env::getSingleton()->getRemoteServiceSettings(); + const QString peerName = settings.getRemoteInfo(getCurrentFingerprint()).getName(); + //: INFO ANDROID IOS The smartphone is connected as card reader (SaK) and currently processing an authentication request. The user is asked to pay attention the its screen. + mConnectionInfo = tr("Please pay attention to the display on your other device \"%1\".").arg(peerName); + Q_EMIT fireConnectionInfoChanged(); + } Q_EMIT fireConnectedChanged(pConnected); } +void RemoteServiceModel::onCardConnectionEstablished(const QSharedPointer& pConnection) +{ + pConnection->setProgressMessage(mConnectionInfo); +} + + void RemoteServiceModel::resetContext(const QSharedPointer& pContext) { mContext = pContext; @@ -196,7 +217,6 @@ void RemoteServiceModel::resetContext(const QSharedPointer mPsk.clear(); onEstablishPaceChannelMessageUpdated(QSharedPointer()); - mContext = pContext; if (mContext) { connect(mContext.data(), &WorkflowContext::fireStateChanged, this, &RemoteServiceModel::fireIsRunningChanged); @@ -204,7 +224,8 @@ void RemoteServiceModel::resetContext(const QSharedPointer mPsk = pPsk; }); connect(mContext->getRemoteServer().data(), &RemoteServer::firePskChanged, this, &RemoteServiceModel::firePskChanged); - connect(mContext->getRemoteServer().data(), &RemoteServer::fireConnectedChanged, this, &RemoteServiceModel::onClientConnectedChanged); + connect(mContext->getRemoteServer().data(), &RemoteServer::fireConnectedChanged, this, &RemoteServiceModel::onConnectionInfoChanged); + connect(mContext.data(), &RemoteServiceContext::fireCardConnectionEstablished, this, &RemoteServiceModel::onCardConnectionEstablished); connect(mContext.data(), &RemoteServiceContext::fireEstablishPaceChannelMessageUpdated, this, &RemoteServiceModel::onEstablishPaceChannelMessageUpdated); } @@ -249,13 +270,49 @@ bool RemoteServiceModel::isSaCPinChangeWorkflow() const } +bool RemoteServiceModel::isRunnable() const +{ + return mRunnable; +} + + +bool RemoteServiceModel::isCanEnableNfc() const +{ + return mCanEnableNfc; +} + + +QString RemoteServiceModel::getErrorMessage() const +{ + return mErrorMessage; +} + + +QByteArray RemoteServiceModel::getPsk() const +{ + return mPsk; +} + + +QString RemoteServiceModel::getConnectionInfo() const +{ + return mConnectionInfo; +} + + +QString RemoteServiceModel::getConnectedServerDeviceNames() const +{ + return mConnectedServerDeviceNames; +} + + bool RemoteServiceModel::pinPadModeOn() { return Env::getSingleton()->getRemoteServiceSettings().getPinPadMode(); } -QString RemoteServiceModel::getPacePasswordId() const +QString RemoteServiceModel::getPasswordType() const { if (mContext.isNull()) { @@ -290,14 +347,17 @@ QString RemoteServiceModel::getErrorMessage(bool pNfcPluginAvailable, bool pNfcP { if (!pNfcPluginAvailable) { + //: INFO ALL_PLATFORMS The device does not offer NFC. return tr("NFC is not available on your device."); } if (!pNfcPluginEnabled) { + //: INFO ALL_PLATFORMS NFC is available but not active. return tr("Please enable NFC to use the remote service."); } if (!pWifiEnabled) { + //: INFO ALL_PLATFORMS The wifi feature is not enabled but required to use the smartphone as a card reader (SaK). return tr("Please connect your WiFi to use the remote service."); } @@ -328,7 +388,7 @@ RemoteServiceModel& RemoteServiceModel::getInstance() void RemoteServiceModel::onConnectedDevicesChanged() { - RemoteClient* const remoteClient = Env::getSingleton(); + auto* const remoteClient = Env::getSingleton(); const auto deviceInfos = remoteClient->getConnectedDeviceInfos(); QStringList deviceNames; for (const auto& info : deviceInfos) diff --git a/src/ui/qml/RemoteServiceModel.h b/src/ui/qml/RemoteServiceModel.h index fffcb51..a4242ee 100644 --- a/src/ui/qml/RemoteServiceModel.h +++ b/src/ui/qml/RemoteServiceModel.h @@ -7,6 +7,7 @@ #pragma once #include "context/RemoteServiceContext.h" +#include "Env.h" #include "ReaderManager.h" #include "RemoteDeviceModel.h" #include "WifiInfo.h" @@ -15,8 +16,6 @@ #include #include -class test_RemoteServiceModel; - namespace governikus { @@ -24,24 +23,24 @@ class RemoteServiceModel : public WorkflowModel { Q_OBJECT + friend class Env; Q_PROPERTY(bool running READ isRunning WRITE setRunning NOTIFY fireIsRunningChanged) - Q_PROPERTY(bool runnable MEMBER mRunnable NOTIFY fireEnvironmentChanged) - Q_PROPERTY(bool canEnableNfc MEMBER mCanEnableNfc NOTIFY fireEnvironmentChanged) - Q_PROPERTY(QString errorMessage MEMBER mErrorMessage NOTIFY fireEnvironmentChanged) - Q_PROPERTY(QByteArray psk MEMBER mPsk NOTIFY firePskChanged) + Q_PROPERTY(bool runnable READ isRunnable NOTIFY fireEnvironmentChanged) + Q_PROPERTY(bool canEnableNfc READ isCanEnableNfc NOTIFY fireEnvironmentChanged) + Q_PROPERTY(QString errorMessage READ getErrorMessage NOTIFY fireEnvironmentChanged) + Q_PROPERTY(QByteArray psk READ getPsk NOTIFY firePskChanged) Q_PROPERTY(QString currentFingerprint READ getCurrentFingerprint NOTIFY fireConnectedChanged) Q_PROPERTY(bool connected READ isConnected NOTIFY fireConnectedChanged) - Q_PROPERTY(QString connectedClientDeviceName MEMBER mConnectedClientDeviceName NOTIFY fireConnectedClientDeviceNameChanged) - Q_PROPERTY(QString connectedServerDeviceNames MEMBER mConnectedServerDeviceNames NOTIFY fireConnectedServerDeviceNamesChanged) + Q_PROPERTY(QString connectionInfo READ getConnectionInfo NOTIFY fireConnectionInfoChanged) + Q_PROPERTY(QString connectedServerDeviceNames READ getConnectedServerDeviceNames NOTIFY fireConnectedServerDeviceNamesChanged) Q_PROPERTY(RemoteDeviceModel * availableRemoteDevices READ getAvailableRemoteDevices CONSTANT) Q_PROPERTY(RemoteDeviceModel * knownDevices READ getKnownDevices CONSTANT) + Q_PROPERTY(RemoteDeviceModel * combinedDevices READ getCombinedDevices CONSTANT) Q_PROPERTY(bool detectRemoteDevices READ detectRemoteDevices WRITE setDetectRemoteDevices NOTIFY fireDetectionChanged) Q_PROPERTY(bool isSaCPinChangeWorkflow READ isSaCPinChangeWorkflow NOTIFY fireEstablishPaceChannelMessageUpdated) private: - friend class ::test_RemoteServiceModel; - QSharedPointer mContext; WifiInfo mWifiInfo; bool mRunnable; @@ -50,7 +49,8 @@ class RemoteServiceModel QByteArray mPsk; RemoteDeviceModel mAvailableRemoteDevices; RemoteDeviceModel mKnownDevices; - QString mConnectedClientDeviceName; + RemoteDeviceModel mCombinedDevices; + QString mConnectionInfo; QString mConnectedServerDeviceNames; bool mIsSaCPinChangeWorkflow; QSharedPointer mRememberedServerEntry; @@ -60,13 +60,15 @@ class RemoteServiceModel private Q_SLOTS: void onEstablishConnectionDone(const QSharedPointer& pEntry, const GlobalStatus& pStatus); - void onClientConnectedChanged(bool pConnected); + void onConnectionInfoChanged(bool pConnected); + void onCardConnectionEstablished(const QSharedPointer& pConnection); void onConnectedDevicesChanged(); void onEstablishPaceChannelMessageUpdated(const QSharedPointer& pMessage); protected: RemoteServiceModel(); ~RemoteServiceModel() override = default; + static RemoteServiceModel& getInstance(); public: bool isRunning() const; @@ -74,6 +76,7 @@ class RemoteServiceModel RemoteDeviceModel* getAvailableRemoteDevices(); RemoteDeviceModel* getKnownDevices(); + RemoteDeviceModel* getCombinedDevices(); void setDetectRemoteDevices(bool pNewStatus); bool detectRemoteDevices(); Q_INVOKABLE bool rememberServer(const QString& pDeviceId); @@ -84,14 +87,18 @@ class RemoteServiceModel QString getCurrentFingerprint() const; bool isConnected() const; bool isSaCPinChangeWorkflow() const; + bool isRunnable() const; + bool isCanEnableNfc() const; + QString getErrorMessage() const; + QByteArray getPsk() const; + QString getConnectionInfo() const; + QString getConnectedServerDeviceNames() const; Q_INVOKABLE bool pinPadModeOn(); - Q_INVOKABLE QString getPacePasswordId() const; + Q_INVOKABLE QString getPasswordType() const; Q_INVOKABLE void forgetDevice(const QString& pId); Q_INVOKABLE void cancelPasswordRequest(); - static RemoteServiceModel& getInstance(); - Q_SIGNALS: void fireIsRunningChanged(); void fireEnvironmentChanged(); @@ -100,7 +107,7 @@ class RemoteServiceModel void fireServerPskChanged(); void fireDetectionChanged(); void firePairingFailed(); - void fireConnectedClientDeviceNameChanged(); + void fireConnectionInfoChanged(); void fireConnectedServerDeviceNamesChanged(); void fireEstablishPaceChannelMessageUpdated(); }; diff --git a/src/ui/qml/SelfAuthModel.cpp b/src/ui/qml/SelfAuthModel.cpp index d5d57d7..12d7810 100644 --- a/src/ui/qml/SelfAuthModel.cpp +++ b/src/ui/qml/SelfAuthModel.cpp @@ -5,11 +5,14 @@ #include "SelfAuthModel.h" #include "context/SelfAuthContext.h" -#include "LanguageLoader.h" +#include "SingletonHelper.h" using namespace governikus; +defineSingleton(SelfAuthModel) + + void SelfAuthModel::onSelfAuthenticationDataChanged() { beginResetModel(); @@ -46,6 +49,12 @@ SelfAuthModel::SelfAuthModel(QObject* pParent) } +SelfAuthModel& SelfAuthModel::getInstance() +{ + return *Instance; +} + + void SelfAuthModel::resetContext(const QSharedPointer& pContext) { mContext = pContext; diff --git a/src/ui/qml/SelfAuthModel.h b/src/ui/qml/SelfAuthModel.h index 254d0d5..a6f39b3 100644 --- a/src/ui/qml/SelfAuthModel.h +++ b/src/ui/qml/SelfAuthModel.h @@ -6,6 +6,7 @@ #pragma once +#include "Env.h" #include "SelfAuthenticationData.h" #include @@ -13,8 +14,6 @@ #include #include -class test_SelfAuthModel; - namespace governikus { @@ -24,22 +23,25 @@ class SelfAuthModel : public QAbstractListModel { Q_OBJECT + friend class Env; QSharedPointer mContext; SelfAuthenticationData::OrderedSelfData mSelfData; - enum DataRoles - { - NAME = Qt::UserRole + 1, - VALUE - }; - private Q_SLOTS: - friend class ::test_SelfAuthModel; void onSelfAuthenticationDataChanged(); - public: + protected: SelfAuthModel(QObject* pParent = nullptr); + static SelfAuthModel& getInstance(); + + public: + enum DataRoles + { + NAME = Qt::UserRole + 1, + VALUE + }; + void resetContext(const QSharedPointer& pContext = QSharedPointer()); Q_INVOKABLE void startWorkflow(); diff --git a/src/ui/qml/SelfDiagnosisModel.cpp b/src/ui/qml/SelfDiagnosisModel.cpp new file mode 100644 index 0000000..75be0f8 --- /dev/null +++ b/src/ui/qml/SelfDiagnosisModel.cpp @@ -0,0 +1,81 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "SelfDiagnosisModel.h" + +#include "AppSettings.h" +#include "GeneralSettings.h" +#include "SingletonHelper.h" + +#include +#include +#include + + +using namespace governikus; + +defineSingleton(SelfDiagnosisModel) + + +SelfDiagnosisModel::SelfDiagnosisModel(QObject* pParent) + : QObject(pParent) + , mDiagnosisContext(new DiagnosisContext) + , mDiagnosisModel(mDiagnosisContext) +{ + const GeneralSettings& generalSettings = Env::getSingleton()->getGeneralSettings(); + connect(&generalSettings, &GeneralSettings::fireLanguageChanged, this, &SelfDiagnosisModel::fireSectionContentModelChanged); +} + + +void SelfDiagnosisModel::saveToFile(const QUrl& pFilename) const +{ + QFile file(pFilename.toLocalFile()); + if (file.open(QIODevice::WriteOnly)) + { + QString diagnosisLog = mDiagnosisModel.getAsPlaintext(); + file.write(diagnosisLog.toUtf8()); + } +} + + +QString SelfDiagnosisModel::getCreationTimeString() const +{ + return mDiagnosisModel.getCreationTimeString(); +} + + +SelfDiagnosisModel& SelfDiagnosisModel::getInstance() +{ + return *Instance; +} + + +QAbstractListModel* SelfDiagnosisModel::getSectionsModel() +{ + return &mDiagnosisModel; +} + + +QAbstractListModel* SelfDiagnosisModel::getSectionContentModel(const QString& pSection) +{ + const auto model = mDiagnosisModel.getSectionContent(pSection); + QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); + return model; +} + + +void SelfDiagnosisModel::startController() +{ + if (mDiagnosisController.isNull()) + { + mDiagnosisController.reset(new DiagnosisController(mDiagnosisContext)); + mDiagnosisController->run(); + } +} + + +void SelfDiagnosisModel::stopController() +{ + mDiagnosisController.reset(); +} diff --git a/src/ui/qml/SelfDiagnosisModel.h b/src/ui/qml/SelfDiagnosisModel.h new file mode 100644 index 0000000..12b6070 --- /dev/null +++ b/src/ui/qml/SelfDiagnosisModel.h @@ -0,0 +1,51 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include "context/DiagnosisContext.h" +#include "controller/DiagnosisController.h" +#include "DiagnosisModel.h" +#include "Env.h" + +#include +#include +#include +#include + + +namespace governikus +{ + +class SelfDiagnosisModel + : public QObject +{ + Q_OBJECT + friend class Env; + + Q_PROPERTY(QAbstractListModel * sectionsModel READ getSectionsModel CONSTANT) + + private: + QSharedPointer mDiagnosisContext; + DiagnosisModel mDiagnosisModel; + QScopedPointer mDiagnosisController; + + protected: + explicit SelfDiagnosisModel(QObject* pParent = nullptr); + static SelfDiagnosisModel& getInstance(); + + public: + QAbstractListModel* getSectionsModel(); + Q_INVOKABLE QAbstractListModel* getSectionContentModel(const QString& pSection); + Q_INVOKABLE void startController(); + Q_INVOKABLE void stopController(); + Q_INVOKABLE void saveToFile(const QUrl& pFilename) const; + Q_INVOKABLE QString getCreationTimeString() const; + + Q_SIGNALS: + void fireSectionContentModelChanged(); + void fireCurrentSectionChanged(); +}; + +} // namespace governikus diff --git a/src/ui/qml/SettingsModel.cpp b/src/ui/qml/SettingsModel.cpp index a61e662..3ccd326 100644 --- a/src/ui/qml/SettingsModel.cpp +++ b/src/ui/qml/SettingsModel.cpp @@ -7,6 +7,10 @@ #include "AppSettings.h" #include "HistorySettings.h" #include "LanguageLoader.h" +#include "PlatformHelper.h" +#include "Service.h" +#include "SingletonHelper.h" + #ifdef Q_OS_ANDROID #include @@ -15,30 +19,33 @@ using namespace governikus; +defineSingleton(SettingsModel) + + SettingsModel::SettingsModel() - : mShowTutorialOnStart(false) + : QObject() + , mIsStartedByAuth(false) { const HistorySettings& settings = Env::getSingleton()->getHistorySettings(); connect(&settings, &HistorySettings::fireEnabledChanged, this, &SettingsModel::fireHistoryEnabledChanged); + const auto* service = Env::getSingleton(); + const auto* dataModel = Env::getSingleton(); + connect(service, &Service::fireAppUpdateFinished, dataModel, &AppUpdateDataModel::onAppUpdateFinished); + connect(service, &Service::fireAppUpdateFinished, this, &SettingsModel::fireAppUpdateDataChanged); #ifdef Q_OS_ANDROID - auto& generalSettings = Env::getSingleton()->getGeneralSettings(); - if (generalSettings.isShowSetupAssistant()) - { - generalSettings.setShowSetupAssistant(false); - generalSettings.save(); - - bool startedByAuth = QAndroidJniObject::callStaticMethod("com/governikus/ausweisapp2/MainActivity", "isStartedByAuth"); - if (!startedByAuth) - { - mShowTutorialOnStart = true; - } - } + mIsStartedByAuth = QAndroidJniObject::callStaticMethod("com/governikus/ausweisapp2/MainActivity", "isStartedByAuth"); #endif } +SettingsModel& SettingsModel::getInstance() +{ + return *Instance; +} + + QString SettingsModel::getEmptyString() { return QString(); @@ -53,11 +60,13 @@ QString SettingsModel::getLanguage() const void SettingsModel::setLanguage(const QString& pLanguage) { - GeneralSettings& settings = Env::getSingleton()->getGeneralSettings(); - settings.setLanguage(QLocale(pLanguage).language()); - settings.save(); - - Q_EMIT fireLanguageChanged(); + if (getLanguage() != pLanguage) + { + GeneralSettings& settings = Env::getSingleton()->getGeneralSettings(); + settings.setLanguage(QLocale(pLanguage).language()); + settings.save(); + Q_EMIT fireLanguageChanged(); + } } @@ -69,14 +78,13 @@ bool SettingsModel::isDeveloperMode() const void SettingsModel::setDeveloperMode(bool pEnable) { - if (isDeveloperMode() == pEnable) + if (isDeveloperMode() != pEnable) { - return; + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setDeveloperMode(pEnable); + settings.save(); + Q_EMIT fireDeveloperModeChanged(); } - - Env::getSingleton()->getGeneralSettings().setDeveloperMode(pEnable); - Env::getSingleton()->getGeneralSettings().save(); - Q_EMIT fireDeveloperModeChanged(); } @@ -88,14 +96,13 @@ bool SettingsModel::useSelfauthenticationTestUri() const void SettingsModel::setUseSelfauthenticationTestUri(bool pUse) { - if (useSelfauthenticationTestUri() == pUse) + if (useSelfauthenticationTestUri() != pUse) { - return; + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setUseSelfauthenticationTestUri(pUse); + settings.save(); + Q_EMIT fireUseSelfauthenticationTestUriChanged(); } - - Env::getSingleton()->getGeneralSettings().setUseSelfauthenticationTestUri(pUse); - Env::getSingleton()->getGeneralSettings().save(); - Q_EMIT fireUseSelfauthenticationTestUriChanged(); } @@ -125,6 +132,15 @@ void SettingsModel::removeTrustedCertificate(const QString& pFingerprint) } +int SettingsModel::removeHistory(const QString& pPeriodToRemove) +{ + HistorySettings& settings = Env::getSingleton()->getHistorySettings(); + int removedItemCount = settings.deleteSettings(Enum::fromString(pPeriodToRemove, TimePeriod::UNKNOWN)); + settings.save(); + return removedItemCount; +} + + bool SettingsModel::getPinPadMode() const { return Env::getSingleton()->getRemoteServiceSettings().getPinPadMode(); @@ -148,23 +164,127 @@ bool SettingsModel::isHistoryEnabled() const void SettingsModel::setHistoryEnabled(bool pEnabled) { - HistorySettings& settings = Env::getSingleton()->getHistorySettings(); - settings.setEnabled(pEnabled); - settings.save(); + if (isHistoryEnabled() != pEnabled) + { + HistorySettings& settings = Env::getSingleton()->getHistorySettings(); + settings.setEnabled(pEnabled); + settings.save(); + } } -int SettingsModel::removeHistory(const QString& pPeriodToRemove) +int SettingsModel::removeEntireHistory() { HistorySettings& settings = Env::getSingleton()->getHistorySettings(); - int removedItemCount = settings.deleteSettings(Enum::fromString(pPeriodToRemove, TimePeriod::UNKNOWN)); - settings.save(); - return removedItemCount; + return settings.deleteSettings(TimePeriod::ALL_HISTORY); +} + + +bool SettingsModel::isUseScreenKeyboard() const +{ + return Env::getSingleton()->getGeneralSettings().isUseScreenKeyboard(); +} + + +void SettingsModel::setUseScreenKeyboard(bool pUseScreenKeyboard) +{ + if (isUseScreenKeyboard() != pUseScreenKeyboard) + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setUseScreenKeyboard(pUseScreenKeyboard); + settings.save(); + Q_EMIT fireScreenKeyboardChanged(); + } +} + + +bool SettingsModel::isShuffleScreenKeyboard() const +{ + return Env::getSingleton()->getGeneralSettings().isShuffleScreenKeyboard(); +} + + +void SettingsModel::setShuffleScreenKeyboard(bool pShuffleScreenKeyboard) +{ + if (isShuffleScreenKeyboard() != pShuffleScreenKeyboard) + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setShuffleScreenKeyboard(pShuffleScreenKeyboard); + settings.save(); + Q_EMIT fireScreenKeyboardChanged(); + } +} + + +bool SettingsModel::isShowSetupAssistantOnStart() const +{ + auto& generalSettings = Env::getSingleton()->getGeneralSettings(); + return generalSettings.isShowSetupAssistant() && !mIsStartedByAuth; +} + + +void SettingsModel::setShowSetupAssistantOnStart(bool pShowSetupAssistantOnStart) +{ + if (isShowSetupAssistantOnStart() != pShowSetupAssistantOnStart) + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setShowSetupAssistant(pShowSetupAssistantOnStart); + settings.save(); + Q_EMIT fireShowSetupAssistantOnStartChanged(); + } +} + + +bool SettingsModel::isAutoStart() const +{ + return Env::getSingleton()->getGeneralSettings().isAutoStart(); +} + + +bool SettingsModel::autoStartIsSetByAdmin() const +{ + return Env::getSingleton()->getGeneralSettings().autoStartIsSetByAdmin(); +} + + +void SettingsModel::setAutoStart(bool pEnabled) +{ + if (isAutoStart() != pEnabled) + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setAutoStart(pEnabled); + settings.save(); + Q_EMIT fireAutoStartChanged(); + } +} + + +bool SettingsModel::requestStoreFeedback() const +{ +#ifdef Q_OS_ANDROID + const bool startedByAuth = QAndroidJniObject::callStaticMethod("com/governikus/ausweisapp2/MainActivity", "isStartedByAuth"); + if (startedByAuth) + { + return false; + } +#endif + + return Env::getSingleton()->getGeneralSettings().isRequestStoreFeedback(); +} + + +void SettingsModel::hideFutureStoreFeedbackDialogs() +{ + Env::getSingleton()->getGeneralSettings().setRequestStoreFeedback(false); } bool SettingsModel::askForDeviceSurvey() const { + if (isPlatform(*this, Platform::IOS)) + { + return false; + } return Env::getSingleton()->getGeneralSettings().askForDeviceSurvey(); } @@ -173,3 +293,96 @@ void SettingsModel::setDeviceSurveyPending(bool pDeviceSurveyPending) { Env::getSingleton()->getGeneralSettings().setDeviceSurveyPending(pDeviceSurveyPending); } + + +bool SettingsModel::isAutoCloseWindowAfterAuthentication() const +{ + return Env::getSingleton()->getGeneralSettings().isAutoCloseWindowAfterAuthentication(); +} + + +void SettingsModel::setAutoCloseWindowAfterAuthentication(bool pEnabled) +{ + if (isAutoCloseWindowAfterAuthentication() != pEnabled) + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setAutoCloseWindowAfterAuthentication(pEnabled); + settings.save(); + Q_EMIT fireAutoCloseWindowAfterAuthenticationChanged(); + } +} + + +bool SettingsModel::isAutoUpdateCheck() const +{ + return Env::getSingleton()->getGeneralSettings().isAutoUpdateCheck(); +} + + +bool SettingsModel::autoUpdateCheckIsSetByAdmin() const +{ + return Env::getSingleton()->getGeneralSettings().autoUpdateCheckIsSetByAdmin(); +} + + +void SettingsModel::setAutoUpdateCheck(bool pAutoUpdateCheck) +{ + if (isAutoUpdateCheck() != pAutoUpdateCheck) + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setAutoUpdateCheck(pAutoUpdateCheck); + settings.save(); + Q_EMIT fireAutoUpdateCheckChanged(); + } +} + + +bool SettingsModel::isRemindUserToClose() const +{ + return Env::getSingleton()->getGeneralSettings().isRemindUserToClose(); +} + + +void SettingsModel::setRemindUserToClose(bool pRemindUser) +{ + if (isRemindUserToClose() != pRemindUser) + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setRemindUserToClose(pRemindUser); + settings.save(); + Q_EMIT fireRemindUserToCloseChanged(); + } +} + + +bool SettingsModel::isShowInAppNotifications() const +{ + + return Env::getSingleton()->getGeneralSettings().isShowInAppNotifications(); +} + + +void SettingsModel::setShowInAppNotifications(bool pShowInAppNotifications) +{ + if (isShowInAppNotifications() != pShowInAppNotifications) + { + + auto& settings = Env::getSingleton()->getGeneralSettings(); + settings.setShowInAppNotifications(pShowInAppNotifications); + settings.save(); + Q_EMIT fireShowInAppNotificationsChanged(); + } +} + + +void SettingsModel::updateApp() +{ + Env::getSingleton()->updateApp(true); +} + + +AppUpdateDataModel* SettingsModel::getAppUpdateData() const +{ + auto* dataModel = Env::getSingleton(); + return dataModel; +} diff --git a/src/ui/qml/SettingsModel.h b/src/ui/qml/SettingsModel.h index 95662f5..e858e9e 100644 --- a/src/ui/qml/SettingsModel.h +++ b/src/ui/qml/SettingsModel.h @@ -6,6 +6,9 @@ #pragma once +#include "AppUpdateDataModel.h" +#include "Env.h" + #include namespace governikus @@ -15,6 +18,8 @@ class SettingsModel : public QObject { Q_OBJECT + friend class Env; + Q_PROPERTY(QString translationTrigger READ getEmptyString NOTIFY fireLanguageChanged) Q_PROPERTY(QString language READ getLanguage WRITE setLanguage NOTIFY fireLanguageChanged) Q_PROPERTY(bool developerMode READ isDeveloperMode WRITE setDeveloperMode NOTIFY fireDeveloperModeChanged) @@ -22,14 +27,27 @@ class SettingsModel Q_PROPERTY(bool pinPadMode READ getPinPadMode WRITE setPinPadMode NOTIFY firePinPadModeChanged) Q_PROPERTY(QString serverName READ getServerName WRITE setServerName NOTIFY fireDeviceNameChanged) Q_PROPERTY(bool historyEnabled READ isHistoryEnabled WRITE setHistoryEnabled NOTIFY fireHistoryEnabledChanged) - Q_PROPERTY(bool showTutorialOnStart MEMBER mShowTutorialOnStart CONSTANT) + Q_PROPERTY(bool useScreenKeyboard READ isUseScreenKeyboard WRITE setUseScreenKeyboard NOTIFY fireScreenKeyboardChanged) + Q_PROPERTY(bool shuffleScreenKeyboard READ isShuffleScreenKeyboard WRITE setShuffleScreenKeyboard NOTIFY fireScreenKeyboardChanged) + Q_PROPERTY(bool showSetupAssistantOnStart READ isShowSetupAssistantOnStart WRITE setShowSetupAssistantOnStart NOTIFY fireShowSetupAssistantOnStartChanged) + Q_PROPERTY(bool autoStartApp READ isAutoStart WRITE setAutoStart NOTIFY fireAutoStartChanged) + Q_PROPERTY(bool autoStartSetByAdmin READ autoStartIsSetByAdmin CONSTANT) + Q_PROPERTY(bool autoCloseWindowAfterAuthentication READ isAutoCloseWindowAfterAuthentication WRITE setAutoCloseWindowAfterAuthentication NOTIFY fireAutoCloseWindowAfterAuthenticationChanged) + Q_PROPERTY(bool autoUpdateCheck READ isAutoUpdateCheck WRITE setAutoUpdateCheck NOTIFY fireAutoUpdateCheckChanged) + Q_PROPERTY(bool autoUpdateCheckSetByAdmin READ autoUpdateCheckIsSetByAdmin CONSTANT) + Q_PROPERTY(bool remindUserToClose READ isRemindUserToClose WRITE setRemindUserToClose NOTIFY fireRemindUserToCloseChanged) + Q_PROPERTY(bool showInAppNotifications READ isShowInAppNotifications WRITE setShowInAppNotifications NOTIFY fireShowInAppNotificationsChanged) + Q_PROPERTY(AppUpdateDataModel * appUpdateData READ getAppUpdateData NOTIFY fireAppUpdateDataChanged) private: - bool mShowTutorialOnStart; + bool mIsStartedByAuth; + + protected: + SettingsModel(); + ~SettingsModel() override = default; + static SettingsModel& getInstance(); public: - SettingsModel(); - QString getEmptyString(); QString getLanguage() const; void setLanguage(const QString& pLanguage); @@ -46,6 +64,7 @@ class SettingsModel Q_INVOKABLE void removeTrustedCertificate(const QString& pFingerprint); Q_INVOKABLE int removeHistory(const QString& pPeriodToRemove); + Q_INVOKABLE int removeEntireHistory(); bool getPinPadMode() const; void setPinPadMode(bool pPinPadMode); @@ -53,9 +72,42 @@ class SettingsModel bool isHistoryEnabled() const; void setHistoryEnabled(bool pEnabled); + bool isUseScreenKeyboard() const; + void setUseScreenKeyboard(bool pUseScreenKeyboard); + + bool isShuffleScreenKeyboard() const; + void setShuffleScreenKeyboard(bool pShuffleScreenKeyboard); + + bool isShowSetupAssistantOnStart() const; + void setShowSetupAssistantOnStart(bool pShowSetupAssistantOnStart); + + bool isAutoStart() const; + bool autoStartIsSetByAdmin() const; + void setAutoStart(bool pEnabled); + + bool isAutoCloseWindowAfterAuthentication() const; + void setAutoCloseWindowAfterAuthentication(bool pEnabled); + + bool isAutoUpdateCheck() const; + bool autoUpdateCheckIsSetByAdmin() const; + void setAutoUpdateCheck(bool pAutoUpdateCheck); + + bool isRemindUserToClose() const; + void setRemindUserToClose(bool pRemindUser); + + bool isShowInAppNotifications() const; + void setShowInAppNotifications(bool pShowInAppNotifications); + + Q_INVOKABLE bool requestStoreFeedback() const; + Q_INVOKABLE void hideFutureStoreFeedbackDialogs(); + Q_INVOKABLE bool askForDeviceSurvey() const; Q_INVOKABLE void setDeviceSurveyPending(bool pDeviceSurveyPending); + Q_INVOKABLE void updateApp(); + + AppUpdateDataModel* getAppUpdateData() const; + Q_SIGNALS: void fireLanguageChanged(); void fireDeveloperModeChanged(); @@ -63,6 +115,15 @@ class SettingsModel void fireDeviceNameChanged(); void firePinPadModeChanged(); void fireHistoryEnabledChanged(); + void fireScreenKeyboardChanged(); + void fireShowSetupAssistantOnStartChanged(); + void fireAutoStartChanged(); + void fireAutoCloseWindowAfterAuthenticationChanged(); + void fireAutoUpdateCheckChanged(); + void fireRemindUserToCloseChanged(); + void fireAppUpdateDataChanged(bool pUpdateAvailable, const GlobalStatus& pStatus); + void fireShowInAppNotificationsChanged(); + }; } // namespace governikus diff --git a/src/ui/qml/StatusBarUtil.cpp b/src/ui/qml/StatusBarUtil.cpp deleted file mode 100644 index 2e44c9b..0000000 --- a/src/ui/qml/StatusBarUtil.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * \brief Utility for changing the color of the status bar. - * - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "StatusBarUtil.h" - -#include -#include -#include -#ifdef Q_OS_ANDROID - #include - #include - #include - #define FLAG_TRANSLUCENT_STATUS 0x04000000 - #define FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 0x80000000 - #define HSV_VALUE_REDUCTION (255 * 20 / 100) -#endif - - -using namespace governikus; - - -bool StatusBarUtil::catchJavaExceptions() const -{ -#ifdef Q_OS_ANDROID - QAndroidJniEnvironment env; - if (env->ExceptionCheck()) - { - env->ExceptionDescribe(); - env->ExceptionClear(); - qWarning() << "Exception occurred while setting status bar color"; - return true; - } -#endif - return false; -} - - -void StatusBarUtil::setStatusBarColor(const QString& pColor) -{ -#ifdef Q_OS_ANDROID - if (QtAndroid::androidSdkVersion() < 21) - { - return; - } - - QColor color(pColor); - int newValue = color.value() >= HSV_VALUE_REDUCTION ? color.value() - HSV_VALUE_REDUCTION : 0; - color.setHsv(color.hue(), color.saturation(), newValue); - - QtAndroid::runOnAndroidThread([ = ](){ - QAndroidJniObject window = QtAndroid::androidActivity().callObjectMethod("getWindow", "()Landroid/view/Window;"); - if (catchJavaExceptions()) - { - return; - } - - window.callMethod("addFlags", "(I)V", FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.callMethod("clearFlags", "(I)V", FLAG_TRANSLUCENT_STATUS); - window.callMethod("setStatusBarColor", "(I)V", color.rgba()); - catchJavaExceptions(); - }); - -#else - Q_UNUSED(pColor) -#endif -} diff --git a/src/ui/qml/StatusBarUtil.h b/src/ui/qml/StatusBarUtil.h deleted file mode 100644 index 75035e1..0000000 --- a/src/ui/qml/StatusBarUtil.h +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * \brief Utility for changing the color of the status bar. - * - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include -#include -#include - -namespace governikus -{ - -class StatusBarUtil - : public QObject -{ - Q_OBJECT - - private: - bool catchJavaExceptions() const; - - public: - StatusBarUtil() = default; - ~StatusBarUtil() override = default; - - Q_INVOKABLE void setStatusBarColor(const QString& pColor); -}; - -} // namespace governikus diff --git a/src/ui/qml/UIPlugInQml.cpp b/src/ui/qml/UIPlugInQml.cpp index 65546a1..539b691 100644 --- a/src/ui/qml/UIPlugInQml.cpp +++ b/src/ui/qml/UIPlugInQml.cpp @@ -12,15 +12,25 @@ #include "context/SelfAuthContext.h" #include "CardReturnCode.h" #include "ChangePinModel.h" -#include "DpiCalculator.h" #include "Env.h" #include "FileDestination.h" +#include "Initializer.h" +#include "LogHandler.h" #include "LogModel.h" +#include "NotificationModel.h" #include "PlatformTools.h" #include "ProviderCategoryFilterModel.h" +#include "ReaderScanEnabler.h" #include "RemoteServiceModel.h" +#include "SelfAuthModel.h" +#include "SelfDiagnosisModel.h" #include "Service.h" -#include "StatusBarUtil.h" +#include "SingletonHelper.h" +#include "SurveyModel.h" + +#if defined(Q_OS_WIN) || (defined(Q_OS_BSD4) && !defined(Q_OS_IOS)) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) +#include "ReaderDriverModel.h" +#endif #if defined(Q_OS_ANDROID) #include @@ -31,8 +41,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -44,6 +56,11 @@ Q_DECLARE_LOGGING_CATEGORY(qml) using namespace governikus; +static Initializer::Entry X([] { + qRegisterMetaType >("QList"); + }); + + template QObject* provideQmlType(QQmlEngine* pEngine, QJSEngine* pScriptEngine) { @@ -57,7 +74,7 @@ QObject* provideQmlType(QQmlEngine* pEngine, QJSEngine* pScriptEngine) template static QObject* provideSingletonQmlType(QQmlEngine* pEngine, QJSEngine* pScriptEngine) { - Q_UNUSED(pScriptEngine); + Q_UNUSED(pScriptEngine) const auto model = Env::getSingleton(); pEngine->setObjectOwnership(model, QQmlEngine::CppOwnership); @@ -66,7 +83,7 @@ static QObject* provideSingletonQmlType(QQmlEngine* pEngine, QJSEngine* pScriptE template -static void registerQmlType(QObject* (*pTypeProvider)(QQmlEngine*, QJSEngine*)) +static void registerQmlSingletonType(QObject* (*pTypeProvider)(QQmlEngine*, QJSEngine*)) { QByteArray qmlName(T::staticMetaObject.className()); qmlName.replace(QByteArrayLiteral("governikus::"), QByteArray()); @@ -77,29 +94,48 @@ static void registerQmlType(QObject* (*pTypeProvider)(QQmlEngine*, QJSEngine*)) } +template +static void registerQmlType() +{ + QByteArray qmlName(T::staticMetaObject.className()); + qmlName.replace(QByteArrayLiteral("governikus::"), QByteArray()); + + const QByteArray url = QByteArrayLiteral("Governikus.Type.") + qmlName; + + qmlRegisterType(url.constData(), 1, 0, qmlName.constData()); +} + + UIPlugInQml::UIPlugInQml() : mEngine() - , mHistoryModel(&Env::getSingleton()->getHistorySettings()) + , mQmlEngineWarningCount(0) , mVersionInformationModel() - , mQmlExtension() - , mSelfAuthModel() - , mSettingsModel() , mCertificateDescriptionModel() , mChatModel() , mExplicitPlatformStyle(getPlatformSelectors()) , mConnectivityManager() , mTrayIcon() +#if defined(Q_OS_MACOS) + , mMenuBar() +#endif { #if defined(Q_OS_ANDROID) QGuiApplication::setFont(QFont(QStringLiteral("Roboto"))); #endif +#ifdef Q_OS_WIN + QQuickWindow::setTextRenderType(QQuickWindow::NativeTextRendering); +#endif + + QGuiApplication::setWindowIcon(mTrayIcon.getIcon()); + connect(&mTrayIcon, &TrayIcon::fireShow, this, &UIPlugInQml::show); connect(&mTrayIcon, &TrayIcon::fireQuit, this, &UIPlugInQml::fireQuitApplicationRequest); connect(Env::getSingleton(), &ChangePinModel::fireStartWorkflow, this, &UIPlugIn::fireChangePinRequest); - connect(&mSelfAuthModel, &SelfAuthModel::fireStartWorkflow, this, &UIPlugIn::fireSelfAuthenticationRequested); + connect(Env::getSingleton(), &SelfAuthModel::fireStartWorkflow, this, &UIPlugIn::fireSelfAuthenticationRequested); connect(Env::getSingleton(), &RemoteServiceModel::fireStartWorkflow, this, &UIPlugIn::fireRemoteServiceRequested); + connect(Env::getSingleton(), &LogHandler::fireRawLog, this, &UIPlugInQml::onRawLog, Qt::QueuedConnection); connect(this, &UIPlugIn::fireShowUserInformation, this, &UIPlugInQml::onShowUserInformation); init(); } @@ -110,17 +146,26 @@ void UIPlugInQml::registerQmlTypes() qmlRegisterUncreatableType("Governikus.Type.UiModule", 1, 0, "UiModule", QStringLiteral("Not creatable as it is an enum type")); qmlRegisterUncreatableType("Governikus.Type.ReaderPlugIn", 1, 0, "ReaderPlugIn", QStringLiteral("Not creatable as it is an enum type")); qmlRegisterUncreatableType("Governikus.Type.CardReturnCode", 1, 0, "CardReturnCode", QStringLiteral("Not creatable as it is an enum type")); - qmlRegisterUncreatableType("Governikus.Type.PacePasswordId", 1, 0, "PacePasswordId", QStringLiteral("Not creatable as it is an enum type")); - registerQmlType(&provideQmlType ); - registerQmlType(&provideQmlType ); + registerQmlType(); - registerQmlType(&provideSingletonQmlType ); - registerQmlType(&provideSingletonQmlType ); - registerQmlType(&provideSingletonQmlType ); - registerQmlType(&provideSingletonQmlType ); - registerQmlType(&provideSingletonQmlType ); - registerQmlType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideQmlType ); + registerQmlSingletonType(&provideQmlType ); +#if defined(Q_OS_WIN) || (defined(Q_OS_BSD4) && !defined(Q_OS_IOS)) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) + registerQmlSingletonType(&provideQmlType ); +#endif + + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); + registerQmlSingletonType(&provideSingletonQmlType ); } @@ -130,17 +175,17 @@ void UIPlugInQml::init() qputenv("QML_DISABLE_DISK_CACHE", "true"); #endif + logRenderingEnvironment(); + mEngine.reset(new QQmlApplicationEngine()); + connect(mEngine.data(), &QQmlApplicationEngine::warnings, this, &UIPlugInQml::onQmlWarnings, Qt::QueuedConnection); + connect(mEngine.data(), &QQmlApplicationEngine::objectCreated, this, &UIPlugInQml::onQmlObjectCreated, Qt::QueuedConnection); + mEngine->rootContext()->setContextProperty(QStringLiteral("plugin"), this); QQmlFileSelector::get(mEngine.data())->setExtraSelectors(mExplicitPlatformStyle.split(QLatin1Char(','))); - mEngine->rootContext()->setContextProperty(QStringLiteral("screenDpiScale"), DpiCalculator::getDpiScale()); - mEngine->rootContext()->setContextProperty(QStringLiteral("historyModel"), &mHistoryModel); mEngine->rootContext()->setContextProperty(QStringLiteral("versionInformationModel"), &mVersionInformationModel); - mEngine->rootContext()->setContextProperty(QStringLiteral("qmlExtension"), &mQmlExtension); - mEngine->rootContext()->setContextProperty(QStringLiteral("selfAuthModel"), &mSelfAuthModel); - mEngine->rootContext()->setContextProperty(QStringLiteral("settingsModel"), &mSettingsModel); mEngine->rootContext()->setContextProperty(QStringLiteral("certificateDescriptionModel"), &mCertificateDescriptionModel); mEngine->rootContext()->setContextProperty(QStringLiteral("chatModel"), &mChatModel); mEngine->rootContext()->setContextProperty(QStringLiteral("connectivityManager"), &mConnectivityManager); @@ -161,10 +206,40 @@ void UIPlugInQml::hide() } +void UIPlugInQml::switchUi() +{ + auto& generalSettings = Env::getSingleton()->getGeneralSettings(); + generalSettings.setSelectedUi(QStringLiteral("widgets")); + generalSettings.save(); + + Q_EMIT fireRestartApplicationRequested(); +} + + +void UIPlugInQml::logRenderingEnvironment() const +{ + QString openGLContext = QStringLiteral("Unknown"); + switch (QOpenGLContext::openGLModuleType()) + { + case QOpenGLContext::LibGL: + openGLContext = QStringLiteral("OpenGL"); + break; + + case QOpenGLContext::LibGLES: + openGLContext = QStringLiteral("OpenGL ES 2.0 or higher"); + break; + } + qCDebug(qml).noquote() << "QOpenGLContext:" << openGLContext; + + // Activate logging of Qt scenegraph information on startup, e.g. GL_RENDERER, GL_VERSION, ... + qputenv("QSG_INFO", "1"); +} + + QString UIPlugInQml::getPlatformSelectors() const { #ifndef QT_NO_DEBUG - const char* overrideSelector = "OVERRIDE_PLATFORM_SELECTOR"; + const char* const overrideSelector = "OVERRIDE_PLATFORM_SELECTOR"; if (!qEnvironmentVariableIsEmpty(overrideSelector)) { const auto& platform = QString::fromLocal8Bit(qgetenv(overrideSelector)); @@ -177,35 +252,12 @@ QString UIPlugInQml::getPlatformSelectors() const } #endif -#if defined(Q_OS_ANDROID) - const jboolean result = QtAndroid::androidActivity().callMethod("isTablet", "()Z"); - const bool isTablet = result != JNI_FALSE; -#else - // A device with a screen diagnonal above 6 inches is considered a tablet. - static const double MAX_SMARTPHONE_DIAGONAL_IN = 6.0; - static const double MAX_SMARTPHONE_DIAGONAL_MM = 25.4 * MAX_SMARTPHONE_DIAGONAL_IN; - - const QList screens = QGuiApplication::screens(); - - Q_ASSERT(!screens.isEmpty()); - - QScreen* const mainScreen = screens.first(); - Q_ASSERT(mainScreen != nullptr); - - const QSizeF size = mainScreen->physicalSize(); - const double width = size.width(); - const double height = size.height(); - const double diagonal = sqrt(width * width + height * height); - const bool isTablet = diagonal > MAX_SMARTPHONE_DIAGONAL_MM; -#endif - #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) const QString platform = QStringLiteral("mobile,"); - const QString tablet = (isTablet ? QStringLiteral("tablet,") : QStringLiteral("phone,")); + const QString tablet = (isTablet() ? QStringLiteral("tablet,") : QStringLiteral("phone,")); const QString brand = QGuiApplication::platformName(); #else const QString platform = QStringLiteral("desktop,"); - Q_UNUSED(isTablet); const QString tablet; #if defined(Q_OS_MAC) const QString brand = QStringLiteral("mac"); @@ -220,19 +272,19 @@ QString UIPlugInQml::getPlatformSelectors() const void UIPlugInQml::onWorkflowStarted(QSharedPointer pContext) { - onShowUi(UiModule::IDENTIFY); - mQmlExtension.keepScreenOn(true); - + Env::getSingleton()->keepScreenOn(true); Env::getSingleton()->resetContext(pContext); Env::getSingleton()->resetContext(pContext); if (auto changePinContext = pContext.objectCast()) { + onShowUi(UiModule::PINMANAGEMENT); Env::getSingleton()->resetContext(changePinContext); } if (auto authContext = pContext.objectCast()) { + onShowUi(UiModule::IDENTIFY); mConnectivityManager.startWatching(); Env::getSingleton()->resetContext(authContext); mCertificateDescriptionModel.resetContext(authContext); @@ -241,7 +293,8 @@ void UIPlugInQml::onWorkflowStarted(QSharedPointer pContext) if (auto authContext = pContext.objectCast()) { - mSelfAuthModel.resetContext(authContext); + onShowUi(UiModule::IDENTIFY); + Env::getSingleton()->resetContext(authContext); } if (auto remoteServiceContext = pContext.objectCast()) @@ -253,8 +306,7 @@ void UIPlugInQml::onWorkflowStarted(QSharedPointer pContext) void UIPlugInQml::onWorkflowFinished(QSharedPointer pContext) { - mQmlExtension.keepScreenOn(false); - + Env::getSingleton()->keepScreenOn(false); Env::getSingleton()->resetContext(); Env::getSingleton()->resetContext(); @@ -269,11 +321,17 @@ void UIPlugInQml::onWorkflowFinished(QSharedPointer pContext) Env::getSingleton()->resetContext(); mCertificateDescriptionModel.resetContext(); mChatModel.resetContext(); + + const auto& generalSettings = Env::getSingleton()->getGeneralSettings(); + if (!pContext.objectCast() && generalSettings.isAutoCloseWindowAfterAuthentication()) + { + Q_EMIT fireHideRequest(); + } } if (pContext.objectCast()) { - mSelfAuthModel.resetContext(); + Env::getSingleton()->resetContext(); } if (pContext.objectCast()) @@ -286,7 +344,17 @@ void UIPlugInQml::onWorkflowFinished(QSharedPointer pContext) void UIPlugInQml::onApplicationStarted() { mTrayIcon.create(); - show(); + +#if defined(Q_OS_WIN) || (defined(Q_OS_BSD4) && !defined(Q_OS_IOS)) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) + if (!QSystemTrayIcon::isSystemTrayAvailable() + || Env::getSingleton()->getGeneralSettings().isShowSetupAssistant() + || Env::getSingleton()->getGeneralSettings().isDeveloperMode()) +#endif + { + QMetaObject::invokeMethod(this, &UIPlugInQml::show, Qt::QueuedConnection); + } + + Q_EMIT fireSafeAreaMarginsChanged(); } @@ -297,15 +365,47 @@ void UIPlugInQml::onShowUi(UiModule pModule) } +void UIPlugInQml::onHideUi() +{ + Q_EMIT fireHideRequest(); +} + + +void UIPlugInQml::onUiDomination(const UIPlugIn* pUi, const QString& pInformation, bool pAccepted) +{ + if (pUi == this) + { + return; + } + + if (pAccepted) + { + mDominator = pInformation.isEmpty() ? QLatin1String("") : pInformation; + Q_EMIT fireDominatorChanged(); + } +} + + +void UIPlugInQml::onUiDominationReleased() +{ + if (!mDominator.isNull()) + { + mDominator.clear(); + Q_EMIT fireDominatorChanged(); + } +} + + void UIPlugInQml::onShowUserInformation(const QString& pMessage) { - mQmlExtension.showFeedback(pMessage); + Env::getSingleton()->showFeedback(pMessage); } void UIPlugInQml::show() { onShowUi(UiModule::CURRENT); + Env::getSingleton()->runUpdateIfNeeded(); } @@ -335,6 +435,46 @@ QUrl UIPlugInQml::getPath(const QString& pRelativePath, bool pQrc) } +#ifndef Q_OS_IOS +bool UIPlugInQml::isTablet() const +{ +#ifdef Q_OS_ANDROID + const jboolean result = QtAndroid::androidActivity().callMethod("isTablet", "()Z"); + return result != JNI_FALSE; + +#else + return false; + +#endif +} + + +#endif + + +void UIPlugInQml::onQmlWarnings(const QList& pWarnings) +{ + mQmlEngineWarningCount += pWarnings.size(); +} + + +void UIPlugInQml::onQmlObjectCreated(QObject* pObject) +{ + const bool fatalErrors = pObject == nullptr; + const QString result = fatalErrors ? QStringLiteral("fatal errors.") : QStringLiteral("%1 warnings.").arg(mQmlEngineWarningCount); + qCDebug(qml).noquote() << "QML engine initialization finished with" << result; +} + + +void UIPlugInQml::onRawLog(const QString& pMessage, const QString& pCategoryName) +{ + if (pCategoryName == QLatin1String("developermode") || pCategoryName == QLatin1String("feedback")) + { + mTrayIcon.showMessage(QCoreApplication::applicationName(), pMessage); + } +} + + void UIPlugInQml::doRefresh() { qCDebug(qml) << "Reload qml files"; @@ -342,28 +482,12 @@ void UIPlugInQml::doRefresh() } -bool UIPlugInQml::useFlatStyleOnDesktop() const -{ - return QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::Windows8); -} - - QString UIPlugInQml::getPlatformStyle() const { return mExplicitPlatformStyle; } -void UIPlugInQml::applyPlatformStyle(const QString& pPlatformStyle) -{ - if (mExplicitPlatformStyle != pPlatformStyle) - { - mExplicitPlatformStyle = pPlatformStyle; - doRefresh(); - } -} - - bool UIPlugInQml::isDeveloperBuild() const { #ifndef QT_NO_DEBUG @@ -374,3 +498,50 @@ bool UIPlugInQml::isDeveloperBuild() const #endif } + + +QString UIPlugInQml::getDominator() const +{ + return mDominator; +} + + +bool UIPlugInQml::isDominated() const +{ + return !mDominator.isNull(); +} + + +#ifndef Q_OS_IOS +QVariantMap UIPlugInQml::getSafeAreaMargins() const +{ + QVariantMap marginMap; + +#ifdef Q_OS_ANDROID + auto screen = QGuiApplication::primaryScreen(); + marginMap[QStringLiteral("top")] = QtAndroid::androidActivity().callMethod("getStatusBarHeight", "()I") / screen->devicePixelRatio(); + marginMap[QStringLiteral("right")] = 0; + marginMap[QStringLiteral("bottom")] = 0; + marginMap[QStringLiteral("left")] = 0; +#else + marginMap[QStringLiteral("top")] = 0; + marginMap[QStringLiteral("right")] = 0; + marginMap[QStringLiteral("bottom")] = 0; + marginMap[QStringLiteral("left")] = 0; +#endif + + return marginMap; +} + + +#endif + + +void UIPlugInQml::applyPlatformStyle(const QString& pPlatformStyle) +{ + if (mExplicitPlatformStyle != pPlatformStyle) + { + mExplicitPlatformStyle = pPlatformStyle; + doRefresh(); + } +} diff --git a/src/ui/qml/UIPlugInQml.h b/src/ui/qml/UIPlugInQml.h index 637fa63..42ac3ed 100644 --- a/src/ui/qml/UIPlugInQml.h +++ b/src/ui/qml/UIPlugInQml.h @@ -11,8 +11,6 @@ #include "ConnectivityManager.h" #include "HistoryModel.h" #include "NumberModel.h" -#include "QmlExtension.h" -#include "SelfAuthModel.h" #include "SettingsModel.h" #include "TrayIcon.h" #include "UIPlugIn.h" @@ -20,6 +18,9 @@ #include #include +#if defined (Q_OS_MACOS) +#include +#endif namespace governikus { @@ -32,23 +33,28 @@ class UIPlugInQml Q_INTERFACES(governikus::UIPlugIn) Q_PROPERTY(QString platformStyle READ getPlatformStyle CONSTANT) Q_PROPERTY(bool developerBuild READ isDeveloperBuild CONSTANT) + Q_PROPERTY(QString dominator READ getDominator NOTIFY fireDominatorChanged) + Q_PROPERTY(bool dominated READ isDominated NOTIFY fireDominatorChanged) + Q_PROPERTY(QVariantMap safeAreaMargins READ getSafeAreaMargins NOTIFY fireSafeAreaMarginsChanged) private: QScopedPointer mEngine; - HistoryModel mHistoryModel; + int mQmlEngineWarningCount; VersionInformationModel mVersionInformationModel; - QmlExtension mQmlExtension; - SelfAuthModel mSelfAuthModel; - SettingsModel mSettingsModel; CertificateDescriptionModel mCertificateDescriptionModel; ChatModel mChatModel; QString mExplicitPlatformStyle; ConnectivityManager mConnectivityManager; TrayIcon mTrayIcon; + QString mDominator; +#if defined(Q_OS_MACOS) + QMenuBar mMenuBar; +#endif + void logRenderingEnvironment() const; QString getPlatformSelectors() const; static QUrl getPath(const QString& pRelativePath, bool pQrc = true); - void createTrayIcon(); + bool isTablet() const; public: UIPlugInQml(); @@ -56,15 +62,22 @@ class UIPlugInQml static void registerQmlTypes(); - Q_INVOKABLE bool useFlatStyleOnDesktop() const; QString getPlatformStyle() const; + bool isDeveloperBuild() const; + QString getDominator() const; + bool isDominated() const; + QVariantMap getSafeAreaMargins() const; + Q_INVOKABLE void applyPlatformStyle(const QString& pPlatformStyle); - Q_INVOKABLE bool isDeveloperBuild() const; Q_INVOKABLE void init(); Q_INVOKABLE void hide(); + Q_INVOKABLE void switchUi(); Q_SIGNALS: void fireShowRequest(UiModule pModule); + void fireHideRequest(); + void fireDominatorChanged(); + void fireSafeAreaMarginsChanged(); private Q_SLOTS: void show(); @@ -73,8 +86,16 @@ class UIPlugInQml virtual void onWorkflowFinished(QSharedPointer pContext) override; virtual void onApplicationStarted() override; virtual void onShowUi(UiModule pModule) override; + virtual void onHideUi() override; + virtual void onUiDomination(const UIPlugIn* pUi, const QString& pInformation, bool pAccepted) override; + virtual void onUiDominationReleased() override; void onShowUserInformation(const QString& pMessage); + void onQmlWarnings(const QList& pWarnings); + void onQmlObjectCreated(QObject* pObject); + + void onRawLog(const QString& pMessage, const QString& pCategoryName); + public Q_SLOTS: void doRefresh(); }; diff --git a/src/ui/qml/UIPlugInQml_ios.mm b/src/ui/qml/UIPlugInQml_ios.mm new file mode 100644 index 0000000..3a10622 --- /dev/null +++ b/src/ui/qml/UIPlugInQml_ios.mm @@ -0,0 +1,32 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "UIPlugInQml.h" + +#import + +using namespace governikus; + + +bool UIPlugInQml::isTablet() const +{ + return [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad; +} + + +QVariantMap UIPlugInQml::getSafeAreaMargins() const +{ + UIViewController* rootController = [[UIApplication sharedApplication].windows[0] rootViewController]; + + UIEdgeInsets safeAreaInsets = [rootController view].safeAreaInsets; + + QVariantMap insetMap; + + insetMap[QStringLiteral("top")] = safeAreaInsets.top; + insetMap[QStringLiteral("right")] = safeAreaInsets.right; + insetMap[QStringLiteral("bottom")] = safeAreaInsets.bottom; + insetMap[QStringLiteral("left")] = safeAreaInsets.left; + + return insetMap; +} diff --git a/src/ui/qml/VersionInformationModel.cpp b/src/ui/qml/VersionInformationModel.cpp index 686f29b..a4b3964 100644 --- a/src/ui/qml/VersionInformationModel.cpp +++ b/src/ui/qml/VersionInformationModel.cpp @@ -56,7 +56,7 @@ QVariant VersionInformationModel::data(const QModelIndex& pIndex, int pRole) con { if (pIndex.isValid() && pIndex.row() < rowCount()) { - auto entry = mData[pIndex.row()]; + const auto& entry = qAsConst(mData).at(pIndex.row()); if (pRole == LABEL) { return entry.first; diff --git a/src/ui/qml/WorkflowModel.cpp b/src/ui/qml/WorkflowModel.cpp index da6ad54..63522bc 100644 --- a/src/ui/qml/WorkflowModel.cpp +++ b/src/ui/qml/WorkflowModel.cpp @@ -5,11 +5,14 @@ #include "WorkflowModel.h" #include "AppSettings.h" +#include "Email.h" #include "FuncUtils.h" #include "GeneralSettings.h" #include "ReaderConfiguration.h" #include "ReaderManager.h" +#include + using namespace governikus; @@ -161,8 +164,15 @@ bool WorkflowModel::getNextWorkflowPending() const } +QString WorkflowModel::getReaderImage() const +{ + return mReaderImage; +} + + void WorkflowModel::setInitialPluginType() { +#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) const GeneralSettings& settings = Env::getSingleton()->getGeneralSettings(); const QString& lastReaderPluginTypeString = settings.getLastReaderPluginType(); @@ -170,16 +180,17 @@ void WorkflowModel::setInitialPluginType() if (lastReaderPluginType == ReaderManagerPlugInType::UNKNOWN) { -#if defined(Q_OS_ANDROID) setReaderPlugInType(ReaderManagerPlugInType::NFC); -#elif defined(Q_OS_IOS) - setReaderPlugInType(ReaderManagerPlugInType::BLUETOOTH); -#else - setReaderPlugInType(ReaderManagerPlugInType::PCSC); -#endif return; } setReaderPlugInType(lastReaderPluginType); +#else + if (!mContext) + { + return; + } + mContext->setReaderPlugInTypes({ReaderManagerPlugInType::PCSC, ReaderManagerPlugInType::REMOTE}); +#endif } @@ -193,6 +204,41 @@ bool WorkflowModel::selectedReaderHasCard() const } +bool WorkflowModel::shouldSkipResultView() const +{ + if (!mContext) + { + return false; + } + // We deliberately don't want to use GlobalStatus::isCancellationByUser(), because that would also skip the + // ResultView when the user pressed Cancel on his card reader. + return mContext->getStatus().getStatusCode() == GlobalStatus::Code::Workflow_Cancellation_By_User; +} + + +bool WorkflowModel::isCancellationByUser() const +{ + if (!mContext) + { + return false; + } + return mContext->getStatus().isCancellationByUser(); +} + + +void WorkflowModel::sendResultMail() const +{ + Q_ASSERT(mContext); + const GlobalStatus status = mContext->getStatus(); + //: Subject from error report mail + QString mailSubject = tr("AusweisApp2 error report - %1").arg(status.toErrorDescription()); + QString mailBody = generateMailBody(status); + QString url = QStringLiteral("mailto:support@ausweisapp.de?subject=%1&body=%2").arg(mailSubject, mailBody); + + QDesktopServices::openUrl(url); +} + + void WorkflowModel::onReaderManagerSignal() { QString newReaderImage; @@ -200,11 +246,11 @@ void WorkflowModel::onReaderManagerSignal() const auto& readersWithNPA = filter([](const ReaderInfo& i){return i.hasEidCard();}, readerInfos); if (readersWithNPA.size() == 1) { - newReaderImage = readersWithNPA.at(0).getReaderConfigurationInfo().getIconWithNPA()->lookupPath(); + newReaderImage = readersWithNPA.at(0).getReaderConfigurationInfo().getIconWithNPA()->lookupUrl().toString(); } else if (readerInfos.size() == 1) { - newReaderImage = readerInfos.at(0).getReaderConfigurationInfo().getIcon()->lookupPath(); + newReaderImage = readerInfos.at(0).getReaderConfigurationInfo().getIcon()->lookupUrl().toString(); } else if (readerInfos.size() > 1) { diff --git a/src/ui/qml/WorkflowModel.h b/src/ui/qml/WorkflowModel.h index 368f376..8670824 100644 --- a/src/ui/qml/WorkflowModel.h +++ b/src/ui/qml/WorkflowModel.h @@ -28,7 +28,7 @@ class WorkflowModel Q_PROPERTY(bool errorIsMasked READ isMaskedError NOTIFY fireResultChanged) Q_PROPERTY(ReaderManagerPlugInType readerPlugInType READ getReaderPlugInType WRITE setReaderPlugInType NOTIFY fireReaderPlugInTypeChanged) Q_PROPERTY(bool isBasicReader READ isBasicReader NOTIFY fireIsBasicReaderChanged) - Q_PROPERTY(QString readerImage MEMBER mReaderImage NOTIFY fireReaderImageChanged) + Q_PROPERTY(QString readerImage READ getReaderImage NOTIFY fireReaderImageChanged) Q_PROPERTY(bool hasNextWorkflowPending READ getNextWorkflowPending NOTIFY fireNextWorkflowPendingChanged) private: @@ -55,6 +55,8 @@ class WorkflowModel bool getNextWorkflowPending() const; + QString getReaderImage() const; + Q_INVOKABLE void startWorkflow(); Q_INVOKABLE void cancelWorkflow(); Q_INVOKABLE void cancelWorkflowOnPinBlocked(); @@ -62,6 +64,9 @@ class WorkflowModel Q_INVOKABLE void continueWorkflow(); Q_INVOKABLE void setInitialPluginType(); Q_INVOKABLE bool selectedReaderHasCard() const; + Q_INVOKABLE bool shouldSkipResultView() const; + Q_INVOKABLE bool isCancellationByUser() const; + Q_INVOKABLE void sendResultMail() const; public Q_SLOTS: void onReaderManagerSignal(); diff --git a/src/ui/websocket/CMakeLists.txt b/src/ui/websocket/CMakeLists.txt index 2d39144..9797813 100644 --- a/src/ui/websocket/CMakeLists.txt +++ b/src/ui/websocket/CMakeLists.txt @@ -8,6 +8,6 @@ IF(TARGET Qt5::WebSockets) ADD_PLATFORM_LIBRARY(AusweisAppUiWebsocket) - TARGET_LINK_LIBRARIES(AusweisAppUiWebsocket Qt5::Core Qt5::WebSockets AusweisAppUi AusweisAppUiJsonApi AusweisAppNetwork AusweisAppGlobal) + TARGET_LINK_LIBRARIES(AusweisAppUiWebsocket Qt5::Core Qt5::WebSockets AusweisAppUi AusweisAppUiJson AusweisAppNetwork AusweisAppGlobal) TARGET_COMPILE_DEFINITIONS(AusweisAppUiWebsocket PRIVATE QT_STATICPLUGIN) ENDIF() diff --git a/src/ui/websocket/UIPlugInWebSocket.cpp b/src/ui/websocket/UIPlugInWebSocket.cpp index 14282c5..8fee203 100644 --- a/src/ui/websocket/UIPlugInWebSocket.cpp +++ b/src/ui/websocket/UIPlugInWebSocket.cpp @@ -27,18 +27,18 @@ UIPlugInWebSocket::UIPlugInWebSocket() , mServer(QCoreApplication::applicationName() + QLatin1Char('/') + QCoreApplication::applicationVersion(), QWebSocketServer::NonSecureMode) , mConnection(nullptr) , mRequest() - , mJsonApi(nullptr) + , mJson(nullptr) , mContext() , mUiDomination(false) { - if (!UILoader::getInstance().load(UIPlugInName::UIPlugInJsonApi)) + if (!UILoader::getInstance().load(UIPlugInName::UIPlugInJson)) { qCWarning(websocket) << "Cannot start WebSocket because JSON-API is missing"; return; } - mJsonApi = qobject_cast(UILoader::getInstance().getLoaded(UIPlugInName::UIPlugInJsonApi)); - Q_ASSERT(mJsonApi); + mJson = qobject_cast(UILoader::getInstance().getLoaded(UIPlugInName::UIPlugInJson)); + Q_ASSERT(mJson); mHttpServer = Env::getShared(); if (mHttpServer->isListening()) @@ -67,7 +67,7 @@ void UIPlugInWebSocket::onWorkflowStarted(QSharedPointer pConte void UIPlugInWebSocket::onWorkflowFinished(QSharedPointer pContext) { - Q_UNUSED(pContext); + Q_UNUSED(pContext) mContext.clear(); } @@ -101,7 +101,7 @@ void UIPlugInWebSocket::onUiDomination(const UIPlugIn* pUi, const QString& pInfo void UIPlugInWebSocket::onUiDominationReleased() { mUiDomination = false; - mJsonApi->setEnabled(false); + mJson->setEnabled(false); Env::getSingleton()->stopScanAll(); Env::getSingleton()->setUsedAsSDK(false); } @@ -136,10 +136,10 @@ void UIPlugInWebSocket::onNewConnection() if (mServer.hasPendingConnections()) { mConnection.reset(mServer.nextPendingConnection()); - connect(mJsonApi, &UIPlugInJsonApi::fireMessage, this, &UIPlugInWebSocket::onJsonApiMessage); + connect(mJson, &UIPlugInJson::fireMessage, this, &UIPlugInWebSocket::onJsonMessage); connect(mConnection.data(), &QWebSocket::textMessageReceived, this, &UIPlugInWebSocket::onTextMessageReceived); connect(mConnection.data(), &QWebSocket::disconnected, this, &UIPlugInWebSocket::onClientDisconnected); - mJsonApi->setEnabled(); + mJson->setEnabled(); } else { @@ -156,13 +156,13 @@ void UIPlugInWebSocket::onClientDisconnected() if (mContext && mUiDomination) { - const QSignalBlocker blocker(mJsonApi); + const QSignalBlocker blocker(mJson); Q_EMIT mContext->fireCancelWorkflow(); } mConnection.reset(); mRequest.reset(); - disconnect(mJsonApi, &UIPlugInJsonApi::fireMessage, this, &UIPlugInWebSocket::onJsonApiMessage); + disconnect(mJson, &UIPlugInJson::fireMessage, this, &UIPlugInWebSocket::onJsonMessage); Q_EMIT fireUiDominationRelease(); } @@ -171,12 +171,12 @@ void UIPlugInWebSocket::onTextMessageReceived(const QString& pMessage) { if (mConnection) { - mJsonApi->doMessageProcessing(pMessage.toUtf8()); + mJson->doMessageProcessing(pMessage.toUtf8()); } } -void UIPlugInWebSocket::onJsonApiMessage(const QByteArray& pMessage) +void UIPlugInWebSocket::onJsonMessage(const QByteArray& pMessage) { if (mConnection) { diff --git a/src/ui/websocket/UIPlugInWebSocket.h b/src/ui/websocket/UIPlugInWebSocket.h index d483f7a..bd247e1 100644 --- a/src/ui/websocket/UIPlugInWebSocket.h +++ b/src/ui/websocket/UIPlugInWebSocket.h @@ -9,7 +9,7 @@ #include "HttpRequest.h" #include "HttpServer.h" #include "UIPlugIn.h" -#include "UIPlugInJsonApi.h" +#include "UIPlugInJson.h" #include #include @@ -32,7 +32,7 @@ class UIPlugInWebSocket QWebSocketServer mServer; QScopedPointer mConnection; QSharedPointer mRequest; - UIPlugInJsonApi* mJsonApi; + UIPlugInJson* mJson; QSharedPointer mContext; bool mUiDomination; @@ -46,7 +46,7 @@ class UIPlugInWebSocket void onNewConnection(); void onClientDisconnected(); void onTextMessageReceived(const QString& pMessage); - void onJsonApiMessage(const QByteArray& pMessage); + void onJsonMessage(const QByteArray& pMessage); public: UIPlugInWebSocket(); diff --git a/src/ui/widget/AboutDialog.cpp b/src/ui/widget/AboutDialog.cpp index ef47707..781ff00 100644 --- a/src/ui/widget/AboutDialog.cpp +++ b/src/ui/widget/AboutDialog.cpp @@ -23,8 +23,8 @@ AboutDialog::AboutDialog(QWidget* pParent) layout()->setSizeConstraint(QLayout::SetFixedSize); // For platform != Windows: Disable maximize button setWindowModality(Qt::WindowModal); // For platform == macOS: Make dialog slide in from the top - const SecureStorage& storage = SecureStorage::getInstance(); - const auto& url = VersionNumber::getApplicationVersion().isDeveloperVersion() ? storage.getAppcastBetaUpdateUrl() : storage.getAppcastUpdateUrl(); + const auto* storage = Env::getSingleton(); + const auto& url = VersionNumber::getApplicationVersion().isDeveloperVersion() ? storage->getAppcastBetaUpdateUrl() : storage->getAppcastUpdateUrl(); const auto& releaseNotes = url.adjusted(QUrl::RemoveFilename).toString() + QStringLiteral("ReleaseNotes.html"); setWindowTitle(tr("About %1 - %2").arg(QCoreApplication::applicationName(), QCoreApplication::organizationName())); diff --git a/src/ui/widget/AboutDialog.ui b/src/ui/widget/AboutDialog.ui index 2c3f7d4..db14727 100644 --- a/src/ui/widget/AboutDialog.ui +++ b/src/ui/widget/AboutDialog.ui @@ -106,7 +106,7 @@ - AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Ministry of the Interior, Building and Community. + AusweisApp2 is a product of Governikus GmbH & Co. KG - on behalf of the Federal Office for Information Security. Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop diff --git a/src/ui/widget/AppQtGui.cpp b/src/ui/widget/AppQtGui.cpp index 77bb636..36d6edf 100644 --- a/src/ui/widget/AppQtGui.cpp +++ b/src/ui/widget/AppQtGui.cpp @@ -38,7 +38,6 @@ Q_DECLARE_LOGGING_CATEGORY(gui) AppQtGui::AppQtGui() : QObject() , mMainWidget(new AppQtMainWidget()) - , mIcon(QStringLiteral(":/images/npa.svg")) , mTrayIcon() , mActiveWorkflowUi() , mSetupAssistantGui(nullptr) @@ -46,13 +45,15 @@ AppQtGui::AppQtGui() , mUpdateInfo(new QMessageBox(mMainWidget)) , mCertificateInfo(new QMessageBox(mMainWidget)) , mLockedInfo(new QMessageBox(mMainWidget)) + , mSwitchUiInquiry(new QMessageBox(mMainWidget)) , mUpdateWindow(new UpdateWindow(mMainWidget)) , mAggressiveToForeground(false) { loadStyleSheet(); - mMainWidget->setWindowIcon(mIcon); + mMainWidget->setWindowIcon(mTrayIcon.getIcon()); connect(mMainWidget, &AppQtMainWidget::fireCloseActiveDialogs, this, &AppQtGui::onCloseActiveDialogs); + connect(mMainWidget, &AppQtMainWidget::fireSwitchUiRequested, this, &AppQtGui::onSwitchUiRequested); connect(&mTrayIcon, &TrayIcon::fireShow, this, [this] { AppQtGui::show(); @@ -60,7 +61,7 @@ AppQtGui::AppQtGui() connect(&mTrayIcon, &TrayIcon::fireQuit, this, &AppQtGui::quitApplicationRequested); mUpdateInfo->setWindowTitle(QApplication::applicationName() + QStringLiteral(" - ") + tr("Updates")); - mUpdateInfo->setWindowIcon(mIcon); + mUpdateInfo->setWindowIcon(mTrayIcon.getIcon()); mUpdateInfo->setWindowModality(Qt::WindowModal); mUpdateInfo->setStandardButtons(QMessageBox::Ok); mUpdateInfo->button(QMessageBox::Ok)->setFocus(); @@ -81,13 +82,19 @@ AppQtGui::AppQtGui() mLockedInfo->setWindowTitle(QCoreApplication::applicationName() + QStringLiteral(" - ") + tr("SDK")); mLockedInfo->setWindowFlags(mLockedInfo->windowFlags() & ~Qt::WindowCloseButtonHint& ~Qt::WindowContextHelpButtonHint& ~Qt::WindowMinMaxButtonsHint); - mLockedInfo->setWindowIcon(mIcon); + mLockedInfo->setWindowIcon(mTrayIcon.getIcon()); mLockedInfo->setWindowModality(Qt::WindowModal); mLockedInfo->setIcon(QMessageBox::Information); mLockedInfo->setText(tr("Another application uses AusweisApp2.")); mLockedInfo->setStandardButtons(QMessageBox::NoButton); - Service* service = Env::getSingleton(); + mSwitchUiInquiry->setWindowTitle(QCoreApplication::applicationName() + QStringLiteral(" - ") + tr("Switch UI")); + mSwitchUiInquiry->setIcon(QMessageBox::Information); + mSwitchUiInquiry->setText(tr("Do you want to switch to the new beta UI? You can switch back to the old UI in \"Settings\".")); + mSwitchUiInquiry->setStandardButtons(QMessageBox::Yes | QMessageBox::No); + mSwitchUiInquiry->button(QMessageBox::Yes)->setFocus(); + + auto* service = Env::getSingleton(); connect(service, &Service::fireAppUpdateFinished, this, &AppQtGui::onAppUpdateReady); connect(service, &Service::fireUpdateScheduled, this, &AppQtGui::onUpdateScheduled); } @@ -222,7 +229,7 @@ void AppQtGui::onSetupAssistantWizardRequest() { Env::getSingleton()->runUpdateIfNeeded(); - if (!mSetupAssistantGui) + if (mSetupAssistantGui == nullptr) { mSetupAssistantGui = new SetupAssistantGui(mMainWidget); connect(mSetupAssistantGui, &SetupAssistantGui::fireChangePinButtonClicked, mMainWidget, &AppQtMainWidget::onChangePinButtonClicked); @@ -264,7 +271,7 @@ void AppQtGui::onDeveloperModeQuestion() void AppQtGui::onDiagnosisRequested() { - if (!mDiagnosisGui) + if (mDiagnosisGui == nullptr) { mDiagnosisGui = new DiagnosisGui(mMainWidget); } @@ -309,7 +316,7 @@ bool AppQtGui::eventFilter(QObject* /*pObject*/, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_F1) { HelpAction::openContextHelp(); @@ -365,6 +372,10 @@ void AppQtGui::closeDialogs() { mDiagnosisGui->deactivate(); } + if (mSwitchUiInquiry) + { + mSwitchUiInquiry->reject(); + } } @@ -410,6 +421,21 @@ void AppQtGui::onCloseWindowRequested(bool* pDoClose) } +void AppQtGui::onSwitchUiRequested() +{ + if (mSwitchUiInquiry->exec() != QMessageBox::Yes) + { + return; + } + + auto& generalSettings = Env::getSingleton()->getGeneralSettings(); + generalSettings.setSelectedUi(QStringLiteral("qml")); + generalSettings.save(); + + Q_EMIT fireRestartApplicationRequested(); +} + + void AppQtGui::onCloseActiveDialogs() { if (mSetupAssistantGui != nullptr) @@ -571,7 +597,7 @@ void AppQtGui::onUpdateScheduled() } -void AppQtGui::onCertificateRemoved(QString pDeviceName) +void AppQtGui::onCertificateRemoved(const QString& pDeviceName) { mCertificateInfo->setText(tr("The device \"%1\" was unpaired because it does not react to connection attempts. Retry the pairing process if you want to use this device to authenticate yourself.").arg(pDeviceName)); mCertificateInfo->show(); diff --git a/src/ui/widget/AppQtGui.h b/src/ui/widget/AppQtGui.h index 7426057..a32f5bf 100644 --- a/src/ui/widget/AppQtGui.h +++ b/src/ui/widget/AppQtGui.h @@ -69,11 +69,11 @@ class AppQtGui void onDiagnosisRequested(); void onAppUpdateReady(bool pSuccess, const GlobalStatus& pError); void onUpdateScheduled(); - void onCertificateRemoved(QString pDeviceName); + void onCertificateRemoved(const QString& pDeviceName); + void onSwitchUiRequested(); private: AppQtMainWidget* mMainWidget; - QIcon mIcon; TrayIcon mTrayIcon; QSharedPointer mActiveWorkflowUi; SetupAssistantGui* mSetupAssistantGui; @@ -81,6 +81,7 @@ class AppQtGui QMessageBox* mUpdateInfo; QMessageBox* mCertificateInfo; QMessageBox* mLockedInfo; + QMessageBox* mSwitchUiInquiry; UpdateWindow* mUpdateWindow; bool mAggressiveToForeground; @@ -90,6 +91,7 @@ class AppQtGui void fireChangePinRequested(); void selfAuthenticationRequested(); void quitApplicationRequested(); + void fireRestartApplicationRequested(); void fireCloseActiveDialogs(); }; diff --git a/src/ui/widget/AppQtMainWidget.cpp b/src/ui/widget/AppQtMainWidget.cpp index b1cf089..130ad66 100644 --- a/src/ui/widget/AppQtMainWidget.cpp +++ b/src/ui/widget/AppQtMainWidget.cpp @@ -55,7 +55,7 @@ AppQtMainWidget::AppQtMainWidget() mUi->appLogoWidget->setAttribute(Qt::WA_TransparentForMouseEvents); - QStackedLayout* centralStackLayout = qobject_cast(mUi->centralWidget->layout()); + auto* centralStackLayout = qobject_cast(mUi->centralWidget->layout()); centralStackLayout->setStackingMode(QStackedLayout::StackAll); centralStackLayout->setCurrentIndex(1); @@ -92,6 +92,7 @@ AppQtMainWidget::AppQtMainWidget() connect(mUi->settingsPage, &SettingsWidget::changePinRequested, this, &AppQtMainWidget::fireChangePinRequested); connect(mUi->settingsPage, &SettingsWidget::diagnosisRequested, this, &AppQtMainWidget::fireDiagnosisRequested); connect(mUi->settingsPage, &SettingsWidget::settingsDone, this, &AppQtMainWidget::onSettingsDone); + connect(mUi->settingsPage, &SettingsWidget::fireSwitchUiRequested, this, &AppQtMainWidget::fireSwitchUiRequested); connect(mUi->germanButton, &QPushButton::clicked, this, [&]() { @@ -168,7 +169,7 @@ AppQtMainWidget::~AppQtMainWidget() void AppQtMainWidget::showEvent(QShowEvent* pEvent) { - Q_UNUSED(pEvent); + Q_UNUSED(pEvent) mCloseWithoutConfirmation = false; } @@ -251,7 +252,7 @@ void AppQtMainWidget::workflowActivated(WorkflowWidgetParent pParent, const QStr while (containingWidget != nullptr) { QWidget* containerParent = containingWidget->parentWidget(); - if (QStackedWidget* stackedWidget = qobject_cast(containerParent)) + if (auto* stackedWidget = qobject_cast(containerParent)) { mSelectedPagesBeforeWorkflow += stackedWidget->currentWidget(); stackedWidget->setCurrentWidget(containingWidget); @@ -275,7 +276,7 @@ void AppQtMainWidget::workflowDeactivated() for (auto widget : qAsConst(mSelectedPagesBeforeWorkflow)) { - if (QStackedWidget* stackedWidget = qobject_cast(widget->parentWidget())) + if (auto* stackedWidget = qobject_cast(widget->parentWidget())) { stackedWidget->setCurrentWidget(widget); } @@ -492,7 +493,7 @@ void AppQtMainWidget::onTabButtonToggled(QAbstractButton* pButton, bool pChecked void AppQtMainWidget::onTabActionTriggered() { - if (QAction* action = qobject_cast(sender())) + if (auto* action = qobject_cast(sender())) { if (QAbstractButton* button = mTabAction2Button.value(action)) { @@ -542,7 +543,7 @@ void AppQtMainWidget::onContentActionClicked() QString name = mUi->stackedWidget->widget(mUi->stackedWidget->currentIndex())->objectName(); if (name.startsWith(QLatin1String("settingsPage"))) { - SettingsWidget* settingsWidget = static_cast(mUi->stackedWidget->widget(mUi->stackedWidget->currentIndex())); + auto* settingsWidget = static_cast(mUi->stackedWidget->widget(mUi->stackedWidget->currentIndex())); HelpAction::openContextHelp(settingsWidget->getActiveTabObjectName()); } else @@ -554,7 +555,7 @@ void AppQtMainWidget::onContentActionClicked() void AppQtMainWidget::onAboutActionClicked() { - AboutDialog* dialog = new AboutDialog(this); + auto* dialog = new AboutDialog(this); dialog->show(); } diff --git a/src/ui/widget/AppQtMainWidget.h b/src/ui/widget/AppQtMainWidget.h index 5cec676..aed709a 100644 --- a/src/ui/widget/AppQtMainWidget.h +++ b/src/ui/widget/AppQtMainWidget.h @@ -104,9 +104,11 @@ class AppQtMainWidget void fireCloseWindowRequested(bool* pDoClose); void fireSelfAuthenticationRequested(); void fireQuitApplicationRequested(); + void fireRestartApplicationRequested(); void fireChangeHighContrast(bool* pHighContrastOn); void fireAskUserToConfirmClosing(); void fireCloseActiveDialogs(); + void fireSwitchUiRequested(); private: QScopedPointer mUi; diff --git a/src/ui/widget/DeleteHistoryDialog.cpp b/src/ui/widget/DeleteHistoryDialog.cpp index 8f39c06..373076f 100644 --- a/src/ui/widget/DeleteHistoryDialog.cpp +++ b/src/ui/widget/DeleteHistoryDialog.cpp @@ -43,7 +43,7 @@ DeleteHistoryDialog::DeleteHistoryDialog(QWidget* pParent) mComboBox->addItem(tr("Last four weeks"), static_cast(TimePeriod::LAST_FOUR_WEEKS)); mComboBox->addItem(tr("All history"), static_cast(TimePeriod::ALL_HISTORY)); - QSpacerItem* verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); + auto* verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding); layout()->addItem(verticalSpacer); QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); @@ -55,7 +55,7 @@ DeleteHistoryDialog::DeleteHistoryDialog(QWidget* pParent) QRadioButton* DeleteHistoryDialog::createRadioButtonAndAppendToGroup(const QString& pText, TimePeriod pTimePeriod) { - QRadioButton* button = new QRadioButton(this); + auto* button = new QRadioButton(this); button->setText(pText); button->setProperty("TimePeriod", Enum::getValue(pTimePeriod)); button->setObjectName(QStringLiteral("button%1").arg(QString::number(mRadioButtonGroup->buttons().count()))); diff --git a/src/ui/widget/DetailDialog.cpp b/src/ui/widget/DetailDialog.cpp index 4adafb9..d21dfb1 100644 --- a/src/ui/widget/DetailDialog.cpp +++ b/src/ui/widget/DetailDialog.cpp @@ -47,7 +47,7 @@ bool DetailDialog::eventFilter(QObject* pObject, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_F1) { HelpAction::openContextHelp(); diff --git a/src/ui/widget/DeveloperSettingsWidget.ui b/src/ui/widget/DeveloperSettingsWidget.ui index 9e940f8..f623471 100644 --- a/src/ui/widget/DeveloperSettingsWidget.ui +++ b/src/ui/widget/DeveloperSettingsWidget.ui @@ -38,7 +38,7 @@ Qt::TabFocus - Self authentication test URI: + Self-authentication test URI: diff --git a/src/ui/widget/DiagnosisDialog.cpp b/src/ui/widget/DiagnosisDialog.cpp index 17dafd0..6bbe315 100644 --- a/src/ui/widget/DiagnosisDialog.cpp +++ b/src/ui/widget/DiagnosisDialog.cpp @@ -19,7 +19,7 @@ using namespace governikus; DiagnosisDialog::DiagnosisDialog(const QSharedPointer& pContext, QWidget* pParent) : QDialog(pParent) , mUi(new Ui::DiagnosisDialog) - , mDiagnosisModel(new DiagnosisModel(pContext)) + , mDiagnosisModel(new DiagnosisTreeModel(pContext)) , mTreeView(new QTreeView(this)) { mUi->setupUi(this); @@ -84,7 +84,7 @@ bool DiagnosisDialog::eventFilter(QObject* pObject, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_F1) { HelpAction::openContextHelp(); diff --git a/src/ui/widget/DiagnosisDialog.h b/src/ui/widget/DiagnosisDialog.h index 6e06603..3b2e116 100644 --- a/src/ui/widget/DiagnosisDialog.h +++ b/src/ui/widget/DiagnosisDialog.h @@ -6,7 +6,7 @@ #pragma once -#include "DiagnosisModel.h" +#include "DiagnosisTreeModel.h" #include #include @@ -30,7 +30,7 @@ class DiagnosisDialog private: QScopedPointer mUi; - QScopedPointer mDiagnosisModel; + QScopedPointer mDiagnosisModel; QTreeView* mTreeView; private Q_SLOTS: diff --git a/src/ui/widget/DiagnosisGui.cpp b/src/ui/widget/DiagnosisGui.cpp index cfd3f48..eb1fb76 100644 --- a/src/ui/widget/DiagnosisGui.cpp +++ b/src/ui/widget/DiagnosisGui.cpp @@ -38,7 +38,7 @@ void DiagnosisGui::activate() } QWidget* dialogParent = qobject_cast(parent()); - if (!dialogParent) + if (dialogParent == nullptr) { return; } diff --git a/src/ui/widget/GeneralSettingsWidget.cpp b/src/ui/widget/GeneralSettingsWidget.cpp index a34d9f1..8e70e7e 100644 --- a/src/ui/widget/GeneralSettingsWidget.cpp +++ b/src/ui/widget/GeneralSettingsWidget.cpp @@ -42,7 +42,8 @@ GeneralSettingsWidget::GeneralSettingsWidget(QWidget* pParent) connect(mUi->regularlyUpdateCheckBox, &QCheckBox::stateChanged, this, &GeneralSettingsWidget::onCheckBoxStateChanged); connect(mUi->closeWindowCheckBox, &QCheckBox::stateChanged, this, &GeneralSettingsWidget::onCheckBoxStateChanged); connect(mUi->saveHistoryCheckBox, &QCheckBox::stateChanged, this, &GeneralSettingsWidget::onCheckBoxStateChanged); - connect(mUi->updateCheckButton, &QCheckBox::clicked, this, &GeneralSettingsWidget::onUpdateCheckButtonClicked); + connect(mUi->updateCheckButton, &QPushButton::clicked, this, &GeneralSettingsWidget::onUpdateCheckButtonClicked); + connect(mUi->switchToBetaUiButton, &QPushButton::clicked, this, &GeneralSettingsWidget::fireSwitchUiRequested); connect(mUi->keylessPasswordCheckBox, &QCheckBox::stateChanged, this, &GeneralSettingsWidget::onCheckBoxStateChanged); } diff --git a/src/ui/widget/GeneralSettingsWidget.h b/src/ui/widget/GeneralSettingsWidget.h index 942d688..ec8ae10 100644 --- a/src/ui/widget/GeneralSettingsWidget.h +++ b/src/ui/widget/GeneralSettingsWidget.h @@ -44,6 +44,7 @@ class GeneralSettingsWidget Q_SIGNALS: void settingsChanged(); + void fireSwitchUiRequested(); }; } // namespace governikus diff --git a/src/ui/widget/GeneralSettingsWidget.ui b/src/ui/widget/GeneralSettingsWidget.ui index fad6039..90f4863 100644 --- a/src/ui/widget/GeneralSettingsWidget.ui +++ b/src/ui/widget/GeneralSettingsWidget.ui @@ -194,6 +194,52 @@ + + + + Qt::Horizontal + + + + + + + Qt::TabFocus + + + Try out the new beta UI: + + + + + + + true + + + + 0 + 0 + + + + Switch UI + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/src/ui/widget/HistoryWidget.cpp b/src/ui/widget/HistoryWidget.cpp index 3fa21fe..d6b3fde 100644 --- a/src/ui/widget/HistoryWidget.cpp +++ b/src/ui/widget/HistoryWidget.cpp @@ -17,7 +17,12 @@ #include "generic/ListItemTitle.h" #include "LanguageLoader.h" #include "PdfExporter.h" + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) +#include +#else #include "ScopeGuard.h" +#endif #include #include @@ -100,7 +105,7 @@ void HistoryWidget::updateTable() { const auto& items = Env::getSingleton()->getHistorySettings().getHistoryInfos(); - const ScopeGuard guard([this] { + const auto guard = qScopeGuard([this] { mUi->historyTableWidget->setUpdatesEnabled(true); }); @@ -129,7 +134,7 @@ void HistoryWidget::updateTable() //details column with needed properties QWidget* centralWidget = new QWidget(); - QFormLayout* centralLayout = new QFormLayout(centralWidget); + auto* centralLayout = new QFormLayout(centralWidget); centralLayout->setSpacing(6); centralLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); @@ -178,7 +183,7 @@ bool HistoryWidget::eventFilter(QObject* pObject, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* pressed = static_cast(pEvent); + auto* pressed = static_cast(pEvent); if ((pressed->key() == Qt::Key_Enter) || (pressed->key() == Qt::Key_Return) || (pressed->key() == Qt::Key_Space)) { const auto selectedIndexes = mUi->historyTableWidget->selectionModel()->selectedIndexes(); @@ -199,7 +204,7 @@ bool HistoryWidget::eventFilter(QObject* pObject, QEvent* pEvent) void HistoryWidget::deleteHistory() { - DeleteHistoryDialog* deleteHistoryDialog = new DeleteHistoryDialog(this); + auto* deleteHistoryDialog = new DeleteHistoryDialog(this); if (deleteHistoryDialog->exec() == QDialog::Rejected) { return; diff --git a/src/ui/widget/LogFilesDialog.cpp b/src/ui/widget/LogFilesDialog.cpp index 6bb0611..73a9039 100644 --- a/src/ui/widget/LogFilesDialog.cpp +++ b/src/ui/widget/LogFilesDialog.cpp @@ -173,7 +173,7 @@ bool LogFilesDialog::eventFilter(QObject* pObject, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_F1) { HelpAction::openContextHelp(); diff --git a/src/ui/widget/PinSettingsWidget.cpp b/src/ui/widget/PinSettingsWidget.cpp index 331a298..5c03234 100644 --- a/src/ui/widget/PinSettingsWidget.cpp +++ b/src/ui/widget/PinSettingsWidget.cpp @@ -712,20 +712,13 @@ void PinSettingsWidget::setupChangePinHeader(int pRetryCounter, bool pIsBasicRea break; default: - if (mMode == Mode::AfterPinUnblock) + if (pIsBasicReader) { - mUi->headerStackedWidget->setCurrentWidget(mUi->pinUnblockedHeaderPage); + mUi->headerStackedWidget->setCurrentWidget(mUi->changePinBasicHeaderPage); } else { - if (pIsBasicReader) - { - mUi->headerStackedWidget->setCurrentWidget(mUi->changePinBasicHeaderPage); - } - else - { - mUi->headerStackedWidget->setCurrentWidget(mUi->changePinComfortHeaderPage); - } + mUi->headerStackedWidget->setCurrentWidget(mUi->changePinComfortHeaderPage); } break; } @@ -751,7 +744,7 @@ void PinSettingsWidget::onRandomPinButtonClicked() mRandomPinDialog = new RandomPinDialog(6, selectedReaderName, this); if (mRandomPinDialog->exec() == QDialog::Accepted && !mRandomPinDialog->getPin().isEmpty()) { - QToolButton* pinButton = qobject_cast(sender()); + auto* pinButton = qobject_cast(sender()); if (pinButton == nullptr) { qCCritical(gui) << "sender == nullptr"; diff --git a/src/ui/widget/PinSettingsWidget.h b/src/ui/widget/PinSettingsWidget.h index e23bb20..2cbe45d 100644 --- a/src/ui/widget/PinSettingsWidget.h +++ b/src/ui/widget/PinSettingsWidget.h @@ -33,8 +33,7 @@ class PinSettingsWidget enum class Mode { Normal, - AfterPinChange, - AfterPinUnblock, + AfterPinChange }; public: diff --git a/src/ui/widget/PinSettingsWidget.ui b/src/ui/widget/PinSettingsWidget.ui index 0e4d299..52ca4a0 100644 --- a/src/ui/widget/PinSettingsWidget.ui +++ b/src/ui/widget/PinSettingsWidget.ui @@ -183,58 +183,6 @@ Please note that you can only use the PUK to unblock the eID function. If you ha - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 20 - - - 20 - - - - - - - - :/images/Icon_Checked.svg - - - - - - - Qt::TabFocus - - - <h4>PUK entry successful</h4><p>Your ID card is unblocked. You now have three more tries to change your PIN.</p> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - diff --git a/src/ui/widget/RandomPinDialog.cpp b/src/ui/widget/RandomPinDialog.cpp index dfdb170..fff864d 100644 --- a/src/ui/widget/RandomPinDialog.cpp +++ b/src/ui/widget/RandomPinDialog.cpp @@ -99,7 +99,7 @@ QString RandomPinDialog::getPin() void RandomPinDialog::onPosButtonClicked() { - QToolButton* posButton = qobject_cast(sender()); + auto* posButton = qobject_cast(sender()); if (posButton) { mUi->pin->setText(mUi->pin->text() + posButton->property(PIN).toString()); @@ -129,7 +129,7 @@ bool RandomPinDialog::eventFilter(QObject* pObject, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_F1) { HelpAction::openContextHelp(); diff --git a/src/ui/widget/ReaderDeviceDialog.cpp b/src/ui/widget/ReaderDeviceDialog.cpp index ef3f5b8..ecb4747 100644 --- a/src/ui/widget/ReaderDeviceDialog.cpp +++ b/src/ui/widget/ReaderDeviceDialog.cpp @@ -40,7 +40,7 @@ bool ReaderDeviceDialog::eventFilter(QObject* pObject, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* const keyEvent = static_cast(pEvent); + auto* const keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_F1) { HelpAction::openContextHelp(); diff --git a/src/ui/widget/ReaderDeviceGui.cpp b/src/ui/widget/ReaderDeviceGui.cpp index fa04c47..e9e03c2 100644 --- a/src/ui/widget/ReaderDeviceGui.cpp +++ b/src/ui/widget/ReaderDeviceGui.cpp @@ -24,10 +24,10 @@ ReaderDeviceGui::~ReaderDeviceGui() void ReaderDeviceGui::activate() { - if (!mDialog) + if (mDialog == nullptr) { QWidget* dialogParent = qobject_cast(parent()); - if (!dialogParent) + if (dialogParent == nullptr) { return; } @@ -42,7 +42,7 @@ void ReaderDeviceGui::activate() void ReaderDeviceGui::deactivate() { - if (mDialog) + if (mDialog != nullptr) { mDialog->close(); } @@ -51,7 +51,7 @@ void ReaderDeviceGui::deactivate() void ReaderDeviceGui::reactToReaderCount(int pReaderCount) { - if (mDialog && pReaderCount > 0) + if (mDialog != nullptr && pReaderCount > 0) { mDialog->close(); } @@ -75,7 +75,7 @@ void ReaderDeviceGui::reactivate() void ReaderDeviceGui::onFinished(int result) { - Q_UNUSED(result); + Q_UNUSED(result) mDialog = nullptr; } diff --git a/src/ui/widget/ReaderDeviceWidget.cpp b/src/ui/widget/ReaderDeviceWidget.cpp index 2697c68..05167f0 100644 --- a/src/ui/widget/ReaderDeviceWidget.cpp +++ b/src/ui/widget/ReaderDeviceWidget.cpp @@ -5,8 +5,6 @@ #include "ReaderDeviceWidget.h" #include "ui_ReaderDeviceWidget.h" -#include "HelpAction.h" -#include "LanguageLoader.h" #include "ReaderConfiguration.h" #include "RemoteClient.h" #include "RemotePinInputDialog.h" @@ -60,7 +58,7 @@ ReaderDeviceWidget::ReaderDeviceWidget(QWidget* pParent) connect(mUi->forgetRemote, &QPushButton::clicked, this, &ReaderDeviceWidget::onForgetClicked); connect(mUi->tableViewRemote, &QTableView::doubleClicked, this, &ReaderDeviceWidget::onRemoteDoubleClicked); - RemoteClient* const remoteClient = Env::getSingleton(); + auto* const remoteClient = Env::getSingleton(); connect(remoteClient, &RemoteClient::fireDispatcherDestroyed, &mRemoteReaderDataModel, &RemoteDeviceModel::onDeviceDisconnected); } @@ -113,15 +111,11 @@ void ReaderDeviceWidget::onUpdateInfo() void ReaderDeviceWidget::setDisplayText() { - const QString& url = HelpAction::getOnlineUrl(QStringLiteral("readerDeviceTab")); - //: Is embedded in a sentence. - const QString hyperlink = QStringLiteral("%2").arg(url, tr("online help")); - - const QString remoteEmptyListDescriptionString = tr("No smartphone with enabled remote service found. See %1 for details of use.").arg(hyperlink); + const QString& remoteEmptyListDescriptionString = mRemoteReaderDataModel.getEmptyListDescriptionString(); mUi->remoteEmptyListDescription->setText(remoteEmptyListDescriptionString); mUi->remoteEmptyListDescription->setAccessibleName(remoteEmptyListDescriptionString); - const QString localEmptyListDescriptionString = tr("No connected card reader found. See %1 for installation of card readers.").arg(hyperlink); + const QString& localEmptyListDescriptionString = mLocalReaderDataModel.getEmptyListDescriptionString(); mUi->localEmptyListDescription->setText(localEmptyListDescriptionString); mUi->localEmptyListDescription->setAccessibleDescription(localEmptyListDescriptionString); } @@ -135,12 +129,12 @@ void ReaderDeviceWidget::updateInfoIcon() QPixmap pixmap; if (selectionList.isEmpty()) { - pixmap = QPixmap(ReaderConfiguration::getNoReaderFoundIconPath()); + pixmap = QPixmap(mLocalReaderDataModel.getNoReaderFoundIconPath()); } else { const QModelIndex& index = selectionList.at(0); - const QString& path = mLocalReaderDataModel.getReaderConfigurationInfo(index).getIcon()->lookupPath(); + const QString& path = mLocalReaderDataModel.getReaderImagePath(index); pixmap = QPixmap(path); if (mLocalReaderDataModel.isInstalledSupportedReader(index)) { @@ -167,7 +161,7 @@ void ReaderDeviceWidget::updateInfoText() { if (mLocalReaderDataModel.rowCount() == 0) { - infoText = tr("Please connect suitable card reader."); + infoText = tr("Please connect a suitable card reader."); } else { @@ -194,10 +188,7 @@ void ReaderDeviceWidget::updateInfoText() void ReaderDeviceWidget::updateInfoUpdate() { - const auto& now = LanguageLoader::getInstance().getUsedLocale().toString(QTime::currentTime(), tr("hh:mm:ss AP")); - const QString& text = tr("The list of card readers was last updated at %1."); - - mUi->updateTimeLabel->setText(text.arg(now)); + mUi->updateTimeLabel->setText(mLocalReaderDataModel.getLastUpdatedInformation()); } @@ -310,7 +301,7 @@ void ReaderDeviceWidget::onConnectClicked() const QString pin = RemotePinInputDialog::getPin(this); if (!pin.isEmpty()) { - RemoteClient* const remoteClient = Env::getSingleton(); + auto* const remoteClient = Env::getSingleton(); connect(remoteClient, &RemoteClient::fireEstablishConnectionDone, this, &ReaderDeviceWidget::onEstablishConnectionDone); remoteClient->establishConnection(remoteDeviceListEntry, pin); } @@ -322,8 +313,8 @@ void ReaderDeviceWidget::onConnectClicked() void ReaderDeviceWidget::onEstablishConnectionDone(const QSharedPointer& pEntry, const GlobalStatus& pStatus) { - Q_UNUSED(pEntry); - RemoteClient* const remoteClient = Env::getSingleton(); + Q_UNUSED(pEntry) + auto* const remoteClient = Env::getSingleton(); disconnect(remoteClient, &RemoteClient::fireEstablishConnectionDone, this, &ReaderDeviceWidget::onEstablishConnectionDone); if (pStatus.isError()) { diff --git a/src/ui/widget/ReaderDriverModel.cpp b/src/ui/widget/ReaderDriverModel.cpp deleted file mode 100644 index 89d3a93..0000000 --- a/src/ui/widget/ReaderDriverModel.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/*! - * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "ReaderDriverModel.h" - -#include "AppSettings.h" -#include "ReaderConfiguration.h" -#include "ReaderDetector.h" -#include "ReaderManager.h" - - -using namespace governikus; - - -ReaderDriverModel::ReaderDriverModel(QObject* pParent) - : QAbstractTableModel(pParent) - , mKnownDrivers() - , mConnectedReaders() -{ - const ReaderManager* const readerManager = Env::getSingleton(); - - connect(readerManager, &ReaderManager::fireReaderAdded, this, &ReaderDriverModel::onUpdateContent); - connect(readerManager, &ReaderManager::fireReaderRemoved, this, &ReaderDriverModel::onUpdateContent); - connect(Env::getSingleton(), &ReaderConfiguration::fireUpdated, this, &ReaderDriverModel::onUpdateContent); - connect(Env::getSingleton(), &ReaderDetector::fireReaderChangeDetected, this, &ReaderDriverModel::onUpdateContent); - connect(Env::getSingleton(), &AppSettings::fireSettingsChanged, this, &ReaderDriverModel::onUpdateContent); - onUpdateContent(); -} - - -void ReaderDriverModel::collectReaderData() -{ - mConnectedReaders.clear(); - - const QVector installedReaders = Env::getSingleton()->getReaderInfos(ReaderFilter({ - ReaderManagerPlugInType::PCSC - , ReaderManagerPlugInType::BLUETOOTH - , ReaderManagerPlugInType::NFC - })); - - for (const auto& installedReader : installedReaders) - { - const auto& readerSettingsInfo = installedReader.getReaderConfigurationInfo(); - if (!readerSettingsInfo.getUrl().isEmpty()) - { - mKnownDrivers += readerSettingsInfo; - mConnectedReaders += readerSettingsInfo; - } - } - - QVector readersWithoutDriver; - const auto& attachedSupportedDevices = Env::getSingleton()->getAttachedSupportedDevices(); - for (const auto& info : attachedSupportedDevices) - { - if (!mConnectedReaders.contains(info)) - { - readersWithoutDriver.append(info); - } - } - mConnectedReaders += readersWithoutDriver; -} - - -QString ReaderDriverModel::getStatus(const ReaderConfigurationInfo& pReaderConfigurationInfo) const -{ - if (mConnectedReaders.isEmpty()) - { - return tr("Not connected"); - } - - if (mKnownDrivers.contains(pReaderConfigurationInfo)) - { - return tr("Driver installed"); - } - - return tr("No driver installed"); -} - - -void ReaderDriverModel::onUpdateContent() -{ - beginResetModel(); - collectReaderData(); - endResetModel(); - - Q_EMIT fireModelChanged(); -} - - -QVariant ReaderDriverModel::headerData(int pSection, Qt::Orientation pOrientation, int pRole) const -{ - if (pRole == Qt::DisplayRole && pOrientation == Qt::Horizontal) - { - switch (pSection) - { - case ColumnId::ReaderName: - return tr("Device"); - - case ColumnId::ReaderStatus: - return tr("Status"); - - default: - return QVariant(); - } - } - return QVariant(); -} - - -int ReaderDriverModel::rowCount(const QModelIndex&) const -{ - return mConnectedReaders.size(); -} - - -int ReaderDriverModel::columnCount(const QModelIndex&) const -{ - return NUMBER_OF_COLUMNS; -} - - -QVariant ReaderDriverModel::data(const QModelIndex& pIndex, int pRole) const -{ - if (pRole == Qt::DisplayRole) - { - const auto& reader = mConnectedReaders.at(pIndex.row()); - switch (pIndex.column()) - { - case ColumnId::ReaderName: - return reader.getName(); - - case ColumnId::ReaderStatus: - return getStatus(reader); - } - } - - return QVariant(); -} - - -const ReaderConfigurationInfo& ReaderDriverModel::getReaderConfigurationInfo(const QModelIndex& pIndex) const -{ - return mConnectedReaders.at(pIndex.row()); -} - - -QString ReaderDriverModel::getHTMLDescription(const QModelIndex& pIndex) const -{ - if (mConnectedReaders.isEmpty()) - { - return QString(); - } - - if (mKnownDrivers.contains(mConnectedReaders.at(pIndex.row()))) - { - return tr("Card reader ready for use."); - } - - return tr("Please download and install the driver you can find at: %1"). - arg(QStringLiteral("%1").arg(mConnectedReaders.at(pIndex.row()).getUrl())); -} - - -bool ReaderDriverModel::isInstalledSupportedReader(const QModelIndex& pIndex) const -{ - const auto& readerSettingsInfo = mConnectedReaders.at(pIndex.row()); - const bool knownDriver = mKnownDrivers.contains(readerSettingsInfo); - const bool knownReader = readerSettingsInfo.isKnownReader(); - return knownDriver && knownReader; -} diff --git a/src/ui/widget/RemotePinInputDialog.cpp b/src/ui/widget/RemotePinInputDialog.cpp index a45c849..dc6ac75 100644 --- a/src/ui/widget/RemotePinInputDialog.cpp +++ b/src/ui/widget/RemotePinInputDialog.cpp @@ -40,8 +40,7 @@ RemotePinInputDialog::~RemotePinInputDialog() const QString RemotePinInputDialog::getPin(QWidget* pParent) { RemotePinInputDialog dialog(pParent); - int result = dialog.exec(); - if (!result) + if (dialog.exec() == QDialog::Rejected) { return QString(); } diff --git a/src/ui/widget/RemotePinInputDialog.h b/src/ui/widget/RemotePinInputDialog.h index e0a5c1a..f7c726e 100644 --- a/src/ui/widget/RemotePinInputDialog.h +++ b/src/ui/widget/RemotePinInputDialog.h @@ -28,7 +28,7 @@ class RemotePinInputDialog void onOkClicked(); public: - RemotePinInputDialog(QWidget* pParent = 0); + RemotePinInputDialog(QWidget* pParent = nullptr); virtual ~RemotePinInputDialog() override; static const QString getPin(QWidget* pParent); diff --git a/src/ui/widget/SettingsWidget.cpp b/src/ui/widget/SettingsWidget.cpp index 66cdd92..b88a681 100644 --- a/src/ui/widget/SettingsWidget.cpp +++ b/src/ui/widget/SettingsWidget.cpp @@ -28,6 +28,7 @@ SettingsWidget::SettingsWidget(QWidget* pParent) connect(mUi->diagnosisButton, &QAbstractButton::clicked, this, &SettingsWidget::diagnosisRequested); connect(mUi->generalTab, &GeneralSettingsWidget::settingsChanged, this, &SettingsWidget::onSettingsChanged); + connect(mUi->generalTab, &GeneralSettingsWidget::fireSwitchUiRequested, this, &SettingsWidget::fireSwitchUiRequested); connect(mUi->pinTab, &PinSettingsWidget::fireButtonEnabledUpdated, this, &SettingsWidget::onUpdateButtonState); connect(mUi->pinTab, &PinSettingsWidget::fireButtonEnabledUpdated, this, &SettingsWidget::onUpdateApplyButtonText); diff --git a/src/ui/widget/SettingsWidget.h b/src/ui/widget/SettingsWidget.h index 85c74f5..a6c5c4b 100644 --- a/src/ui/widget/SettingsWidget.h +++ b/src/ui/widget/SettingsWidget.h @@ -84,6 +84,7 @@ class SettingsWidget void diagnosisRequested(); void settingsDone(); void fireBackspacePressedOnApply(); + void fireSwitchUiRequested(); }; } // namespace governikus diff --git a/src/ui/widget/SetupAssistantGui.cpp b/src/ui/widget/SetupAssistantGui.cpp index a2af51e..66246e8 100644 --- a/src/ui/widget/SetupAssistantGui.cpp +++ b/src/ui/widget/SetupAssistantGui.cpp @@ -30,7 +30,7 @@ void SetupAssistantGui::activate() if (!mWizard) { QWidget* dialogParent = qobject_cast(parent()); - if (!dialogParent) + if (dialogParent == nullptr) { return; } diff --git a/src/ui/widget/SetupAssistantWizard.cpp b/src/ui/widget/SetupAssistantWizard.cpp index 756a94d..426d037 100644 --- a/src/ui/widget/SetupAssistantWizard.cpp +++ b/src/ui/widget/SetupAssistantWizard.cpp @@ -27,7 +27,7 @@ CardReaderPage::CardReaderPage(const QString& pTitle, const QString& pAccessible setTitle(pTitle); mWidget->prependAccessibleName(pAccessibleName); - QVBoxLayout* cardReaderPageVLayout = new QVBoxLayout(this); + auto* cardReaderPageVLayout = new QVBoxLayout(this); cardReaderPageVLayout->addWidget(mWidget); } @@ -94,7 +94,7 @@ QString SetupAssistantWizard::createDescription(const QString& pTitle, const QSt QWizardPage* SetupAssistantWizard::createWizardInitialPinPage() { - QWizardPage* initialPinPage = new QWizardPage; + auto* initialPinPage = new QWizardPage; const auto& introduction = tr("Introduction"); initialPinPage->setTitle(createTitle(introduction)); @@ -106,7 +106,7 @@ QWizardPage* SetupAssistantWizard::createWizardInitialPinPage() label->setFocusPolicy(Qt::TabFocus); label->setAccessibleName(createAccessibleName(introduction, welcome)); - QVBoxLayout* initialPinPageLayout = new QVBoxLayout; + auto* initialPinPageLayout = new QVBoxLayout; initialPinPageLayout->addWidget(label); const auto& historyTitle = tr("History"); @@ -126,7 +126,7 @@ QWizardPage* SetupAssistantWizard::createWizardInitialPinPage() saveHistorySizePolicy.setHeightForWidth(saveHistoryWidget->sizePolicy().hasHeightForWidth()); saveHistoryWidget->setSizePolicy(saveHistorySizePolicy); - QFormLayout* saveHistoryFormLayout = new QFormLayout(saveHistoryWidget); + auto* saveHistoryFormLayout = new QFormLayout(saveHistoryWidget); saveHistoryFormLayout->setHorizontalSpacing(30); saveHistoryFormLayout->setContentsMargins(11, 11, 11, 11); saveHistoryFormLayout->setContentsMargins(0, 5, 0, 20); @@ -161,11 +161,11 @@ QWizardPage* SetupAssistantWizard::createWizardCardReaderPage() QWizardPage* SetupAssistantWizard::createConclusionPage() { - QWizardPage* conclusionPage = new QWizardPage; + auto* conclusionPage = new QWizardPage; const auto& almostDone = tr("Almost done!"); conclusionPage->setTitle(createTitle(almostDone)); - QVBoxLayout* conclusionPageVLayout = new QVBoxLayout(conclusionPage); + auto* conclusionPageVLayout = new QVBoxLayout(conclusionPage); const auto& title = tr("Personal 6 - digit PIN"); const auto& desc = tr("Prior to the first use of the online identification function, you have to replace the transport PIN by an individual 6-digit PIN. " @@ -202,7 +202,7 @@ QWizardPage* SetupAssistantWizard::createConclusionPage() conclusionPageVLayout->addWidget(conclusionDescLabel); - QSpacerItem* verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); + auto* verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding); conclusionPageVLayout->addItem(verticalSpacer); return conclusionPage; @@ -232,7 +232,7 @@ bool SetupAssistantWizard::eventFilter(QObject* pObject, QEvent* pEvent) { if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_F1) { HelpAction::openContextHelp(objectName()); diff --git a/src/ui/widget/UIPlugInWidgets.cpp b/src/ui/widget/UIPlugInWidgets.cpp index e754288..c3a87b6 100644 --- a/src/ui/widget/UIPlugInWidgets.cpp +++ b/src/ui/widget/UIPlugInWidgets.cpp @@ -18,6 +18,7 @@ UIPlugInWidgets::UIPlugInWidgets() connect(&mGui, &AppQtGui::fireChangePinRequested, this, &UIPlugIn::fireChangePinRequest); connect(&mGui, &AppQtGui::selfAuthenticationRequested, this, &UIPlugIn::fireSelfAuthenticationRequested); connect(&mGui, &AppQtGui::fireCloseReminderFinished, this, &UIPlugInWidgets::fireCloseReminderFinished); + connect(&mGui, &AppQtGui::fireRestartApplicationRequested, this, &UIPlugIn::fireRestartApplicationRequested); connect(this, &UIPlugIn::fireShowUserInformation, &mGui, &AppQtGui::onShowUserInformation); mGui.init(); } diff --git a/src/ui/widget/generic/BusyOverlay.cpp b/src/ui/widget/generic/BusyOverlay.cpp index bbfec46..bea53fb 100644 --- a/src/ui/widget/generic/BusyOverlay.cpp +++ b/src/ui/widget/generic/BusyOverlay.cpp @@ -25,7 +25,7 @@ BusyOverlay::BusyOverlay(bool pStart, QWidget* pParent) setStyleSheet(QStringLiteral("background-color: white;")); - QGraphicsOpacityEffect* opacity = new QGraphicsOpacityEffect(this); + auto* opacity = new QGraphicsOpacityEffect(this); opacity->setOpacity(0.9); setGraphicsEffect(opacity); diff --git a/src/ui/widget/generic/BusyOverlayContainer.cpp b/src/ui/widget/generic/BusyOverlayContainer.cpp index 3e42ce9..b99bdf3 100644 --- a/src/ui/widget/generic/BusyOverlayContainer.cpp +++ b/src/ui/widget/generic/BusyOverlayContainer.cpp @@ -19,7 +19,7 @@ BusyOverlayContainer::BusyOverlayContainer(QWidget* pWidgetToOverlay, bool pStar QBoxLayout* overlayContainerLayout = new QVBoxLayout(busyOverlayContainer); overlayContainerLayout->addWidget(mOverlay, 0, Qt::AlignHCenter | Qt::AlignVCenter); - QStackedLayout* stackLayout = qobject_cast(layout()); + auto* stackLayout = qobject_cast(layout()); stackLayout->setStackingMode(QStackedLayout::StackAll); stackLayout->addWidget(pWidgetToOverlay); diff --git a/src/ui/widget/generic/ExclusiveButtonGroup.cpp b/src/ui/widget/generic/ExclusiveButtonGroup.cpp index 0ac3293..31cf3c1 100644 --- a/src/ui/widget/generic/ExclusiveButtonGroup.cpp +++ b/src/ui/widget/generic/ExclusiveButtonGroup.cpp @@ -51,7 +51,7 @@ void ExclusiveButtonGroup::removeButton(QAbstractButton* pButton) bool ExclusiveButtonGroup::eventFilter(QObject* pWatched, QEvent* pEvent) { - if (QAbstractButton* button = qobject_cast(pWatched)) + if (auto* button = qobject_cast(pWatched)) { if (pEvent->type() == QEvent::MouseButtonPress && button->isChecked()) { @@ -60,7 +60,7 @@ bool ExclusiveButtonGroup::eventFilter(QObject* pWatched, QEvent* pEvent) if (pEvent->type() == QEvent::KeyPress) { - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); if (keyEvent->key() == Qt::Key_Select || keyEvent->key() == Qt::Key_Space) { return true; @@ -74,7 +74,7 @@ bool ExclusiveButtonGroup::eventFilter(QObject* pWatched, QEvent* pEvent) void ExclusiveButtonGroup::onButtonClicked(bool /*pChecked*/) { - if (QAbstractButton* button = qobject_cast(sender())) + if (auto* button = qobject_cast(sender())) { Q_EMIT buttonClicked(button); } @@ -83,7 +83,7 @@ void ExclusiveButtonGroup::onButtonClicked(bool /*pChecked*/) void ExclusiveButtonGroup::onButtonPressed() { - if (QAbstractButton* button = qobject_cast(sender())) + if (auto* button = qobject_cast(sender())) { Q_EMIT buttonPressed(button); } @@ -92,7 +92,7 @@ void ExclusiveButtonGroup::onButtonPressed() void ExclusiveButtonGroup::onButtonReleased() { - if (QAbstractButton* button = qobject_cast(sender())) + if (auto* button = qobject_cast(sender())) { Q_EMIT buttonReleased(button); } @@ -101,7 +101,7 @@ void ExclusiveButtonGroup::onButtonReleased() void ExclusiveButtonGroup::onButtonToggled(bool pChecked) { - if (QAbstractButton* button = qobject_cast(sender())) + if (auto* button = qobject_cast(sender())) { if (pChecked) { diff --git a/src/ui/widget/generic/GuiUtils.cpp b/src/ui/widget/generic/GuiUtils.cpp index 6408a88..51e0c7e 100644 --- a/src/ui/widget/generic/GuiUtils.cpp +++ b/src/ui/widget/generic/GuiUtils.cpp @@ -107,3 +107,20 @@ bool GuiUtils::showWrongPinBlockedDialog(QWidget* pParent) return messageBox.exec() == QMessageBox::Yes; } + + +bool GuiUtils::showPinUnlockedDialog(QWidget* pParent) +{ + QMessageBox messageBox(pParent); + + QString title = tr("PIN successfully unblocked"); + QString text = tr("Your ID card is unblocked. You now have three more tries to change your PIN"); + messageBox.setWindowTitle(QCoreApplication::applicationName() + QStringLiteral(" - ") + title); + messageBox.setWindowModality(Qt::WindowModal); + messageBox.setText(QStringLiteral("

    %1

    %2

    ").arg(title, text)); + messageBox.setIconPixmap(QIcon(QStringLiteral(":/images/Icon_Checked.svg")).pixmap(32, 32)); + messageBox.setStandardButtons(QMessageBox::Ok); + messageBox.button(QMessageBox::Ok)->setFocus(); + + return messageBox.exec() == QMessageBox::Yes; +} diff --git a/src/ui/widget/generic/GuiUtils.h b/src/ui/widget/generic/GuiUtils.h index 0c62b45..34e2ce7 100644 --- a/src/ui/widget/generic/GuiUtils.h +++ b/src/ui/widget/generic/GuiUtils.h @@ -21,6 +21,7 @@ class GuiUtils public: static bool showPinCanPukErrorDialog(CardReturnCode pReturnCode, bool pCanAllowedMode, QWidget* pParent); static bool showWrongPinBlockedDialog(QWidget* pParent); + static bool showPinUnlockedDialog(QWidget* pParent); }; } // namespace governikus diff --git a/src/ui/widget/generic/PasswordEdit.cpp b/src/ui/widget/generic/PasswordEdit.cpp index 726c1da..5eeec94 100644 --- a/src/ui/widget/generic/PasswordEdit.cpp +++ b/src/ui/widget/generic/PasswordEdit.cpp @@ -5,7 +5,11 @@ #include "PasswordEdit.h" +#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0)) +#include +#else #include "ScopeGuard.h" +#endif #include #include @@ -40,7 +44,7 @@ class RegExValidator if (state == State::Invalid && !mInvalidValueToolTip.isNull()) { - QWidget* parentWidget = static_cast(parent()); + auto* parentWidget = static_cast(parent()); QToolTip::showText(parentWidget->mapToGlobal(QPoint(0, 0)), mInvalidValueToolTip, parentWidget, QRect(), 3000); } @@ -70,7 +74,7 @@ int PasswordEdit::determindeWidth(int pNumChars) QLineEdit* const lineEdit = mUi->lineEdit; const QString currentText = lineEdit->text(); - const ScopeGuard resetText([lineEdit, currentText] { + const auto resetText = qScopeGuard([lineEdit, currentText] { lineEdit->setText(currentText); }); diff --git a/src/ui/widget/generic/TabButtonGroup.cpp b/src/ui/widget/generic/TabButtonGroup.cpp index 2376560..9aef2a9 100644 --- a/src/ui/widget/generic/TabButtonGroup.cpp +++ b/src/ui/widget/generic/TabButtonGroup.cpp @@ -108,7 +108,7 @@ bool TabButtonGroup::eventFilter(QObject* pWatched, QEvent* pEvent) return false; } - QAbstractButton* button = qobject_cast(pWatched); + auto* button = qobject_cast(pWatched); if (button == nullptr) { return false; @@ -120,7 +120,7 @@ bool TabButtonGroup::eventFilter(QObject* pWatched, QEvent* pEvent) bool cycle = false; bool next = true; - QKeyEvent* keyEvent = static_cast(pEvent); + auto* keyEvent = static_cast(pEvent); switch (keyEvent->key()) { case Qt::Key_Up: diff --git a/src/ui/widget/step/StepAuthenticationEac1Gui.cpp b/src/ui/widget/step/StepAuthenticationEac1Gui.cpp index 4a8124b..cb87f24 100644 --- a/src/ui/widget/step/StepAuthenticationEac1Gui.cpp +++ b/src/ui/widget/step/StepAuthenticationEac1Gui.cpp @@ -124,24 +124,22 @@ void StepAuthenticationEac1Gui::onPinUpdated(const QString& pPin) { if (mContext->isCanAllowedMode()) { - mCan = pPin; + mContext->setCan(pPin); } else { - mPin = pPin; + mContext->setPin(pPin); } } void StepAuthenticationEac1Gui::onCanUpdated(const QString& pCan) { - mCan = pCan; + mContext->setCan(pCan); } void StepAuthenticationEac1Gui::onUiFinished() { - mContext->setCan(mCan); - mContext->setPin(mPin); mContext->setStateApproved(); } diff --git a/src/ui/widget/step/StepAuthenticationEac1Gui.h b/src/ui/widget/step/StepAuthenticationEac1Gui.h index 63ece51..99a1b2a 100644 --- a/src/ui/widget/step/StepAuthenticationEac1Gui.h +++ b/src/ui/widget/step/StepAuthenticationEac1Gui.h @@ -27,8 +27,6 @@ class StepAuthenticationEac1Gui StepAuthenticationEac1Widget* mWidget; StepAuthenticationEac1Widget::State mState; QPointer mPayAttentionToReaderMsgBox; - QString mPin; - QString mCan; bool mActive; public: diff --git a/src/ui/widget/step/StepAuthenticationEac1Widget.cpp b/src/ui/widget/step/StepAuthenticationEac1Widget.cpp index 38bdd80..fdfde69 100644 --- a/src/ui/widget/step/StepAuthenticationEac1Widget.cpp +++ b/src/ui/widget/step/StepAuthenticationEac1Widget.cpp @@ -251,19 +251,19 @@ void StepAuthenticationEac1Widget::updateWidget() case State::AUTHENTICATING_ESERVICE: Q_EMIT setCancelButtonState(ButtonState::ENABLED); - updateProgressPanel(1, tr("Service provider is verified")); + updateProgressPanel(); break; case State::AUTHENTICATING_CARD: - updateProgressPanel(2, tr("Card is being verified")); + updateProgressPanel(); break; case State::READING_CARD_DATA: - updateProgressPanel(3, tr("Reading data")); + updateProgressPanel(); break; case State::REDIRECTING_BROWSER: - updateProgressPanel(4, tr("Service provider is being verified")); + updateProgressPanel(); break; case State::FINISHED: @@ -345,7 +345,7 @@ void StepAuthenticationEac1Widget::addChatRightToGui(AccessRight pRight, bool pO { displayText += QStringLiteral(" (%1)").arg(mContext->getDidAuthenticateEac1()->getAuthenticatedAuxiliaryData()->getRequiredAge()); } - QCheckBox* cb = new QCheckBox(displayText); + auto* cb = new QCheckBox(displayText); cb->setEnabled(pOptional); cb->setChecked(mContext->getEffectiveAccessRights().contains(pRight)); @@ -353,7 +353,7 @@ void StepAuthenticationEac1Widget::addChatRightToGui(AccessRight pRight, bool pO connect(cb, &QCheckBox::stateChanged, this, &StepAuthenticationEac1Widget::checkBoxChanged); - QListWidgetItem* item = new QListWidgetItem(); + auto* item = new QListWidgetItem(); item->setSizeHint(QSize(0, 20)); item->setData(Qt::AccessibleTextRole, displayText); if (mUi->listWidgetWest->count() < pListSize) @@ -373,7 +373,7 @@ void StepAuthenticationEac1Widget::createBasicReaderWidget() { QWidget* basicReaderWidget = new QWidget(); - QHBoxLayout* basicReaderWidgetLayout = new QHBoxLayout(basicReaderWidget); + auto* basicReaderWidgetLayout = new QHBoxLayout(basicReaderWidget); const auto& allowedDigitsMsg = tr("Only digits (0-9) are permitted."); QRegularExpression onlyNumbersExpression(QStringLiteral("[0-9]*")); @@ -393,7 +393,7 @@ void StepAuthenticationEac1Widget::createBasicReaderWidget() if (Env::getSingleton()->getGeneralSettings().isUseScreenKeyboard()) { - QToolButton* button = new QToolButton(); + auto* button = new QToolButton(); button->setObjectName(QStringLiteral("canRandomButton")); button->setAccessibleName(tr("open on screen keyboard")); button->setAutoRaise(true); @@ -426,7 +426,7 @@ void StepAuthenticationEac1Widget::createBasicReaderWidget() if (Env::getSingleton()->getGeneralSettings().isUseScreenKeyboard()) { - QToolButton* button = new QToolButton(); + auto* button = new QToolButton(); button->setObjectName(QStringLiteral("pinRandomButton")); button->setAccessibleName(tr("open on screen keyboard")); button->setAutoRaise(true); @@ -443,21 +443,24 @@ void StepAuthenticationEac1Widget::createBasicReaderWidget() } -void StepAuthenticationEac1Widget::updateProgressPanel(int pProgressValue, const QString& pProgressText) +void StepAuthenticationEac1Widget::updateProgressPanel() { - if (pProgressValue > 0) + const int progressValue = mContext->getProgressValue(); + const QString& progressText = mContext->getProgressMessage(); + + if (progressValue > 0) { if (mProgressBar == nullptr) { clearPinWidgetLayout(); QWidget* progressWidget = new QWidget(); - QVBoxLayout* progressWidgetLayout = new QVBoxLayout(progressWidget); + auto* progressWidgetLayout = new QVBoxLayout(progressWidget); progressWidgetLayout->setMargin(0); mUi->pinWidgetLayout->addWidget(progressWidget); mProgressBar = new QProgressBar(); mProgressBar->setTextVisible(false); - mProgressBar->setRange(0, 4); + mProgressBar->setRange(0, 100); progressWidgetLayout->addWidget(mProgressBar); mProgressBarLabel = new QLabel(); @@ -467,15 +470,15 @@ void StepAuthenticationEac1Widget::updateProgressPanel(int pProgressValue, const mUi->pinGroupBox->setVisible(true); } - mProgressBar->setValue(pProgressValue); - mProgressBarLabel->setText(pProgressText); + mProgressBar->setValue(progressValue); + mProgressBarLabel->setText(progressText); } else { const bool cancelled = mContext->getStatus().isCancellationByUser(); clearPinWidgetLayout(); QWidget* doneWidget = new QWidget(); - QHBoxLayout* doneWidgetLayout = new QHBoxLayout(doneWidget); + auto* doneWidgetLayout = new QHBoxLayout(doneWidget); doneWidgetLayout->setMargin(0); mUi->pinWidgetLayout->addWidget(doneWidget); @@ -494,7 +497,7 @@ void StepAuthenticationEac1Widget::updateProgressPanel(int pProgressValue, const if (mTaskbarButton) { auto progress = mTaskbarButton->progress(); - progress->setValue(pProgressValue == 0 ? progress->maximum() : pProgressValue); + progress->setValue(progressValue == 0 ? progress->maximum() : progressValue); } #endif } @@ -502,7 +505,7 @@ void StepAuthenticationEac1Widget::updateProgressPanel(int pProgressValue, const void StepAuthenticationEac1Widget::checkBoxChanged(int pCheckState) { - QCheckBox* cb = qobject_cast(sender()); + auto* cb = qobject_cast(sender()); if (cb != nullptr) { if (pCheckState == Qt::Unchecked) @@ -526,7 +529,7 @@ void StepAuthenticationEac1Widget::onRandomButtonClicked() RandomPinDialog randomPinDialog(6, mContext->getReaderName(), this); if (randomPinDialog.exec() == QDialog::Accepted && !randomPinDialog.getPin().isEmpty()) { - QToolButton* pinButton = qobject_cast(sender()); + auto* pinButton = qobject_cast(sender()); if (pinButton == nullptr) { qCCritical(gui) << "sender == nullptr"; diff --git a/src/ui/widget/step/StepAuthenticationEac1Widget.h b/src/ui/widget/step/StepAuthenticationEac1Widget.h index 2fe2bc2..ace4e34 100644 --- a/src/ui/widget/step/StepAuthenticationEac1Widget.h +++ b/src/ui/widget/step/StepAuthenticationEac1Widget.h @@ -46,8 +46,9 @@ class StepAuthenticationEac1Widget REDIRECTING_BROWSER, FINISHED, }; - Q_ENUM(State); + Q_ENUM(State) + public: StepAuthenticationEac1Widget(QWidget* pParent = nullptr); virtual ~StepAuthenticationEac1Widget() override; @@ -84,7 +85,7 @@ class StepAuthenticationEac1Widget void updateWidget(); void setupChatView(); void prepareChatsForGui(); - void updateProgressPanel(int pProgressValue = 0, const QString& pProgressText = QString()); + void updateProgressPanel(); void addChatRightToGui(AccessRight pRight, bool pOptional, int pListSize); void clearPinWidgetLayout(); void createBasicReaderWidget(); diff --git a/src/ui/widget/step/StepChooseCardGui.cpp b/src/ui/widget/step/StepChooseCardGui.cpp index 1f7c241..b28c664 100644 --- a/src/ui/widget/step/StepChooseCardGui.cpp +++ b/src/ui/widget/step/StepChooseCardGui.cpp @@ -7,6 +7,7 @@ #include "HelpAction.h" #include "ReaderConfiguration.h" #include "RemoteClient.h" +#include "states/StateUnfortunateCardPosition.h" #include "step/AuthenticateStepsWidget.h" #include @@ -29,6 +30,7 @@ StepChooseCardGui::StepChooseCardGui(const QSharedPointer& pCon , mReaderDeviceGui(new ReaderDeviceGui(pParent)) , mCancelButton(nullptr) , mDeviceButton(nullptr) + , mRetryButton(nullptr) , mSubDialogOpen(false) { const auto& widget = qobject_cast(pParent); @@ -43,8 +45,11 @@ StepChooseCardGui::StepChooseCardGui(const QSharedPointer& pCon mCancelButton = mInformationMessageBox->addButton(tr("Cancel"), QMessageBox::NoRole); mDeviceButton = mInformationMessageBox->addButton(tr("Settings"), QMessageBox::YesRole); mDeviceButton->setFocus(); + mRetryButton = mInformationMessageBox->addButton(tr("Retry connection"), QMessageBox::YesRole); + mRetryButton->hide(); connect(mReaderDeviceGui.data(), &ReaderDeviceGui::fireFinished, this, &StepChooseCardGui::onSubDialogFinished); + connect(mContext.data(), &WorkflowContext::fireCancelWorkflow, mInformationMessageBox.data(), &QMessageBox::reject); } @@ -101,16 +106,19 @@ QString StepChooseCardGui::formatErrorMessages(const QString& pMessage1, const Q } -void StepChooseCardGui::updateErrorMessage(const QString& pTitle, const QString& pMessage1, const QString& pMessage2, bool closeErrorMessage) +void StepChooseCardGui::updateErrorMessage(const QString& pTitle, const QString& pMessage1, const QString& pMessage2, bool pCloseErrorMessage, const QString& pIconPath) { - if (closeErrorMessage || mContext->getStatus().isError()) + if (pCloseErrorMessage || mContext->getStatus().isError()) { mReaderDeviceGui->deactivate(); mInformationMessageBox->done(QMessageBox::InvalidRole); + Q_EMIT fireDeactivated(); return; } QString iconPath = getCurrentReaderImage(Env::getSingleton()->getReaderInfos(ReaderFilter::UniqueReaderTypes)); + iconPath = pIconPath.isEmpty() ? iconPath : pIconPath; + if (iconPath.isEmpty()) { mInformationMessageBox->setIcon(QMessageBox::Information); @@ -135,9 +143,16 @@ void StepChooseCardGui::updateErrorMessage(const QString& pTitle, const QString& return; } - mSubDialogOpen = true; + if (mInformationMessageBox->clickedButton() == mRetryButton) + { + mContext->setStateApproved(true); + Q_EMIT fireDeactivated(); + return; + } + if (mInformationMessageBox->clickedButton() == mDeviceButton) { + mSubDialogOpen = true; mReaderDeviceGui->activate(); } } @@ -156,7 +171,7 @@ void StepChooseCardGui::onSubDialogFinished() const QString StepChooseCardGui::connectedRemoteReaderNames() const { - RemoteClient* remoteClient = Env::getSingleton(); + auto* remoteClient = Env::getSingleton(); const auto deviceInfos = remoteClient->getConnectedDeviceInfos(); QStringList deviceNames; for (const auto& info : deviceInfos) @@ -178,13 +193,16 @@ void StepChooseCardGui::onReaderManagerSignal() QVector remoteReaders; for (const auto& readerInfo : readers) { - if (!readerInfo.sufficientApduLength()) - { - readerWithInsufficientApduLength = true; - } if (readerInfo.hasEidCard()) { - readersWithNpa << readerInfo; + if (!readerInfo.sufficientApduLength()) + { + readerWithInsufficientApduLength = true; + } + else + { + readersWithNpa << readerInfo; + } } if (readerInfo.getPlugInType() == ReaderManagerPlugInType::REMOTE) { @@ -192,6 +210,10 @@ void StepChooseCardGui::onReaderManagerSignal() } } + const bool askForRetry = AbstractState::isState(mContext->getCurrentState()); + mRetryButton->setVisible(askForRetry); + mDeviceButton->setVisible(!askForRetry); + if (readers.size() == 0) { const QString onlineHelpUrl = HelpAction::getOnlineUrl(QStringLiteral("stepChooseCardGui")); @@ -206,6 +228,13 @@ void StepChooseCardGui::onReaderManagerSignal() return; } + if (askForRetry) + { + updateErrorMessage(tr("Retry?"), tr("Weak NFC signal. Please reposition your card."), + QString(), false, QStringLiteral(":/images/reader/default_card_position.png")); + return; + } + if (readersWithNpa.size() == 0) { if (readerWithInsufficientApduLength) diff --git a/src/ui/widget/step/StepChooseCardGui.h b/src/ui/widget/step/StepChooseCardGui.h index 4ae884f..4b52f4d 100644 --- a/src/ui/widget/step/StepChooseCardGui.h +++ b/src/ui/widget/step/StepChooseCardGui.h @@ -31,12 +31,12 @@ class StepChooseCardGui StepAuthenticationEac1Widget* mAuthWidget; QPointer mInformationMessageBox; QPointer mReaderDeviceGui; - QPushButton* mCancelButton, * mDeviceButton; + QPushButton* mCancelButton, * mDeviceButton, * mRetryButton; bool mSubDialogOpen; QString getCurrentReaderImage(const QVector& pReaderInfos); static QString formatErrorMessages(const QString& pMessage1, const QString& pMessage2); - void updateErrorMessage(const QString& pTitle, const QString& pMessage1, const QString& pMessage2 = QString(), bool closeErrorMessage = false); + void updateErrorMessage(const QString& pTitle, const QString& pMessage1, const QString& pMessage2 = QString(), bool pCloseErrorMessage = false, const QString& pIconPath = QString()); const QString connectedRemoteReaderNames() const; private Q_SLOTS: diff --git a/src/ui/widget/step/StepErrorGui.cpp b/src/ui/widget/step/StepErrorGui.cpp index 9769916..293ef35 100644 --- a/src/ui/widget/step/StepErrorGui.cpp +++ b/src/ui/widget/step/StepErrorGui.cpp @@ -5,7 +5,7 @@ #include "StepErrorGui.h" #include "AppQtMainWidget.h" -#include "BuildHelper.h" +#include "Email.h" #include "EnumHelper.h" #include "Env.h" #include "generic/GuiUtils.h" @@ -132,41 +132,3 @@ void StepErrorGui::closeActiveDialogs() mMessageBox->reject(); } } - - -QString StepErrorGui::generateMailBody(const GlobalStatus& pStatus) const -{ - const auto& logHandler = Env::getSingleton(); - QStringList mailBody(tr("Please describe the error that occurred.")); - - if (logHandler->useLogfile()) - { - mailBody << tr("You may want to attach the logfile which can be saved from the error dialog."); - } - - const QString newLine = QStringLiteral("\n"); - mailBody << newLine; - - const auto& systemInfo = BuildHelper::getInformationHeader(); - for (const auto& info : systemInfo) - { - QString first = info.first; - QString second = info.second; - - first.replace(QStringLiteral("&"), QStringLiteral("%26")); - second.replace(QStringLiteral("&"), QStringLiteral("%26")); - - mailBody << first + QStringLiteral(": ") + second; - } - - mailBody << newLine + tr("Error code") + QLatin1Char(':'); - mailBody << getEnumName(pStatus.getStatusCode()); - - if (logHandler->hasCriticalLog()) - { - const QString criticalMessages = QString::fromUtf8(logHandler->getCriticalLogWindow()); - mailBody << newLine + tr("Critical errors:") + newLine + criticalMessages; - } - - return mailBody.join(newLine); -} diff --git a/src/ui/widget/step/StepErrorGui.h b/src/ui/widget/step/StepErrorGui.h index d808927..b5a65bf 100644 --- a/src/ui/widget/step/StepErrorGui.h +++ b/src/ui/widget/step/StepErrorGui.h @@ -35,7 +35,6 @@ class StepErrorGui QSharedPointer mContext; AppQtMainWidget* const mMainWidget; QPointer mMessageBox; - QString generateMailBody(const GlobalStatus& pStatus) const; Q_SIGNALS: void switchedToPinSettings(); diff --git a/src/ui/widget/step/StepGui.h b/src/ui/widget/step/StepGui.h index 9fbd860..a7a85d4 100644 --- a/src/ui/widget/step/StepGui.h +++ b/src/ui/widget/step/StepGui.h @@ -76,7 +76,7 @@ class StepGui Q_SIGNALS: void fireUiFinished(); void fireCancelled(); - + void fireDeactivated(); }; } // namespace governikus diff --git a/src/ui/widget/workflow/GenericWorkflowGui.h b/src/ui/widget/workflow/GenericWorkflowGui.h index f5ca882..da05d22 100644 --- a/src/ui/widget/workflow/GenericWorkflowGui.h +++ b/src/ui/widget/workflow/GenericWorkflowGui.h @@ -63,6 +63,9 @@ class GenericWorkflowGui { QObject::connect(mStepGui->getStepGuiDelegate(), &StepGuiDelegate::setForwardButtonState, mWidget, &WorkflowQtWidget::setForwardButtonState); QObject::connect(mStepGui->getStepGuiDelegate(), &StepGuiDelegate::setCancelButtonState, mWidget, &WorkflowQtWidget::setCancelButtonState); + QObject::connect(mStepGui.data(), &StepGui::fireDeactivated, this, [this](){ + deactivateCurrentStepUi(); + }); } pStepUi->activate(); } diff --git a/src/ui/widget/workflow/WorkflowAuthenticateQtGui.cpp b/src/ui/widget/workflow/WorkflowAuthenticateQtGui.cpp index 3c8215b..008cd39 100644 --- a/src/ui/widget/workflow/WorkflowAuthenticateQtGui.cpp +++ b/src/ui/widget/workflow/WorkflowAuthenticateQtGui.cpp @@ -16,6 +16,7 @@ #include "states/StateProcessing.h" #include "states/StateSelectReader.h" #include "states/StateTransmit.h" +#include "states/StateUnfortunateCardPosition.h" #include "states/StateWriteHistory.h" #include "step/AuthenticateStepsWidget.h" #include "step/StepAdviseUserToRemoveCardGui.h" @@ -164,6 +165,11 @@ void WorkflowAuthenticateQtGui::onStateChanged(const QString& pNewState) } } } + else if (AbstractState::isState(pNewState)) + { + approveNewState = false; + activateStepUi(mChooseCardGui); + } else if (AbstractState::isState(pNewState)) { activateStepUi(mDidAuthenticateGui); diff --git a/src/ui/widget/workflow/WorkflowChangePinQtGui.cpp b/src/ui/widget/workflow/WorkflowChangePinQtGui.cpp index 676f78f..b73106b 100644 --- a/src/ui/widget/workflow/WorkflowChangePinQtGui.cpp +++ b/src/ui/widget/workflow/WorkflowChangePinQtGui.cpp @@ -15,6 +15,7 @@ #include "states/StateEstablishPaceChannel.h" #include "states/StateMaintainCardConnection.h" #include "states/StateSelectReader.h" +#include "states/StateUnfortunateCardPosition.h" #include "step/StepChooseCardGui.h" #include "step/StepErrorGui.h" @@ -28,6 +29,7 @@ WorkflowChangePinQtGui::WorkflowChangePinQtGui(QSharedPointer { Q_ASSERT(mPinSettingsWidget); connect(mContext.data(), &WorkflowContext::fireStateChanged, this, &WorkflowChangePinQtGui::onStateChanged); + connect(mContext.data(), &ChangePinContext::firePaceResultUpdated, this, &WorkflowChangePinQtGui::onPaceResultUpdated); } @@ -57,7 +59,7 @@ bool WorkflowChangePinQtGui::verifyAbortWorkflow() } -void WorkflowChangePinQtGui::onStateChanged(const QString& pNextState) +void WorkflowChangePinQtGui::onStateChanged(const QString& pNewState) { if (mContext->getStatus().isError() && !mContext->isErrorReportedToUser()) { @@ -69,26 +71,29 @@ void WorkflowChangePinQtGui::onStateChanged(const QString& pNextState) mContext->setErrorReportedToUser(); } - if (AbstractState::isState(pNextState)) + if (AbstractState::isState(pNewState)) { activateStepUi(mChooseCardGui); } - else if (AbstractState::isState(pNextState)) + else if (AbstractState::isState(pNewState)) { GenericWorkflowGui::deactivate(); } - else if (AbstractState::isState(pNextState)) + else if (AbstractState::isState(pNewState)) { const bool isBasicReader = mContext->getCardConnection()->getReaderInfo().isBasicReader(); + bool stateAccepted; if (mContext->getEstablishPaceChannelType() == PacePasswordId::PACE_PUK) { - mPinSettingsWidget->updatePinButton(isBasicReader && mPinSettingsWidget->getPuk().isEmpty()); + stateAccepted = !(isBasicReader && mPinSettingsWidget->getPuk().isEmpty()); } else { - mPinSettingsWidget->updatePinButton(isBasicReader && mPinSettingsWidget->getPin().isEmpty()); + stateAccepted = !(isBasicReader && mPinSettingsWidget->getPin().isEmpty()); } + mPinSettingsWidget->updatePinButton(false); + if (CardReturnCodeUtil::equalsWrongPacePassword(mContext->getLastPaceResult())) { if (isBasicReader) @@ -103,12 +108,22 @@ void WorkflowChangePinQtGui::onStateChanged(const QString& pNextState) } } - if (mPinSettingsWidget->getPinButtonEnabled()) + if (!stateAccepted) { + if (isBasicReader) + { + mPinSettingsWidget->updatePasswordFields(); + mPinSettingsWidget->setPasswordFocus(); + } return; } } - else if (AbstractState::isState(pNextState)) + else if (AbstractState::isState(pNewState)) + { + activateStepUi(mChooseCardGui); + return; + } + else if (AbstractState::isState(pNewState)) { if (mContext->getCardConnection()->getReaderInfo().isBasicReader()) { @@ -120,7 +135,7 @@ void WorkflowChangePinQtGui::onStateChanged(const QString& pNextState) mContext->setPuk(mPinSettingsWidget->getPuk()); } } - else if (AbstractState::isState(pNextState)) + else if (AbstractState::isState(pNewState)) { if (mContext->getCardConnection()->getReaderInfo().isBasicReader()) { @@ -128,15 +143,18 @@ void WorkflowChangePinQtGui::onStateChanged(const QString& pNextState) mContext->setNewPin(mPinSettingsWidget->getNewPin()); } } - else if (AbstractState::isState(pNextState) && mContext->getStatus().isNoError()) + else if (AbstractState::isState(pNewState) && mContext->getStatus().isNoError()) { - bool pinBlocked = false; - if (mContext->getCardConnection()) - { - pinBlocked = (mContext->getCardConnection()->getReaderInfo().getRetryCounter() == 0); - } - mPinSettingsWidget->setMode(pinBlocked ? PinSettingsWidget::Mode::AfterPinUnblock : PinSettingsWidget::Mode::AfterPinChange); + mPinSettingsWidget->setMode(PinSettingsWidget::Mode::AfterPinChange); } - mContext->setStateApproved(); } + + +void WorkflowChangePinQtGui::onPaceResultUpdated() +{ + if (mContext->getLastPaceResult() == CardReturnCode::OK_PUK) + { + GuiUtils::showPinUnlockedDialog(mPinSettingsWidget); + } +} diff --git a/src/ui/widget/workflow/WorkflowChangePinQtGui.h b/src/ui/widget/workflow/WorkflowChangePinQtGui.h index edfa3c4..6d99b9e 100644 --- a/src/ui/widget/workflow/WorkflowChangePinQtGui.h +++ b/src/ui/widget/workflow/WorkflowChangePinQtGui.h @@ -31,7 +31,8 @@ class WorkflowChangePinQtGui virtual bool verifyAbortWorkflow() override; private Q_SLOTS: - void onStateChanged(const QString& pNextState); + void onStateChanged(const QString& pNewState); + void onPaceResultUpdated(); private: PinSettingsWidget* mPinSettingsWidget; diff --git a/src/ui/widget/workflow/WorkflowQtWidget.cpp b/src/ui/widget/workflow/WorkflowQtWidget.cpp index 124f875..64c3df8 100644 --- a/src/ui/widget/workflow/WorkflowQtWidget.cpp +++ b/src/ui/widget/workflow/WorkflowQtWidget.cpp @@ -20,11 +20,11 @@ WorkflowQtWidget::WorkflowQtWidget(QWidget* pParent) mMainLayout->addWidget(mStepWidgetArea); mMainLayout->setMargin(0); - QHBoxLayout* buttonLayout = new QHBoxLayout(); + auto* buttonLayout = new QHBoxLayout(); buttonLayout->setMargin(0); mMainLayout->addLayout(buttonLayout); - QSpacerItem* horizontalSpacer = new QSpacerItem(40, 1, QSizePolicy::Expanding, QSizePolicy::Ignored); + auto* horizontalSpacer = new QSpacerItem(40, 1, QSizePolicy::Expanding, QSizePolicy::Ignored); buttonLayout->addItem(horizontalSpacer); diff --git a/src/ui/widget/workflow/WorkflowSelfInfoQtGui.cpp b/src/ui/widget/workflow/WorkflowSelfInfoQtGui.cpp index 11e8606..0991e04 100644 --- a/src/ui/widget/workflow/WorkflowSelfInfoQtGui.cpp +++ b/src/ui/widget/workflow/WorkflowSelfInfoQtGui.cpp @@ -7,6 +7,7 @@ #include "AppSettings.h" #include "generic/GuiUtils.h" #include "states/FinalState.h" +#include "states/StateCheckRefreshAddress.h" #include "states/StateDidAuthenticateEac1.h" #include "states/StateDidAuthenticateEac2.h" #include "states/StateEditAccessRights.h" @@ -15,6 +16,7 @@ #include "states/StateMaintainCardConnection.h" #include "states/StateSelectReader.h" #include "states/StateTransmit.h" +#include "states/StateUnfortunateCardPosition.h" #include "states/StateWriteHistory.h" #include "step/AuthenticateStepsWidget.h" #include "step/StepAdviseUserToRemoveCardGui.h" @@ -149,6 +151,11 @@ void WorkflowSelfInfoQtGui::onStateChanged(const QString& pNewState) } } } + else if (AbstractState::isState(pNewState)) + { + approveNewState = false; + activateStepUi(mChooseCardGui); + } else if (AbstractState::isState(pNewState)) { activateStepUi(mDidAuthenticateGui); @@ -162,6 +169,10 @@ void WorkflowSelfInfoQtGui::onStateChanged(const QString& pNewState) { mDidAuthenticateGui->setState(StepAuthenticationEac1Widget::State::READING_CARD_DATA); } + else if (AbstractState::isState(pNewState) && mDidAuthenticateGui->isActive()) + { + mDidAuthenticateGui->setState(StepAuthenticationEac1Widget::State::REDIRECTING_BROWSER); + } else if (AbstractState::isState(pNewState) && mDidAuthenticateGui->isActive()) { mDidAuthenticateGui->setState(StepAuthenticationEac1Widget::State::FINISHED); diff --git a/src/whitelist_client/Survey.cpp b/src/whitelist_client/Survey.cpp deleted file mode 100644 index 9f9226a..0000000 --- a/src/whitelist_client/Survey.cpp +++ /dev/null @@ -1,102 +0,0 @@ -/*! - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "Survey.h" - -#ifndef QT_NO_DEBUG -#include -#endif - -#include -#include - - -using namespace governikus; - - -#define VALUE_NAME(_name, _key)\ - inline QLatin1String _name(){\ - return QLatin1String(_key);\ - } - - -namespace -{ -VALUE_NAME(ROM, "Rom") -VALUE_NAME(BUILD_NUMBER, "BuildNumber") -VALUE_NAME(ANDROID_VERSION, "AndroidVersion") -VALUE_NAME(KERNEL_VERSION, "KernelVersion") -VALUE_NAME(MAXIMUM_NFC_PACKET_LENGTH, "MaximumNfcPacketLength") -VALUE_NAME(VENDOR, "Vendor") -VALUE_NAME(MODEL_NUMBER, "ModelNumber") -VALUE_NAME(MODEL_NAME, "ModelName") -VALUE_NAME(AUSWEISAPP_VERSION_NUMBER, "AusweisAppVersionNumber") -} // namespace - - -Survey::Survey(const QString& pBuildNumber, - const QString& pAndroidVersion, - const QString& pKernelVersion, - int pMaximumNfcPacketLength, - const QString& pVendor, - const QString& pModelNumber, - const QString& pModelName, - const QString& pAusweisAppVersionNumber) - : mNull(false) - , mBuildNumber(pBuildNumber) - , mAndroidVersion(pAndroidVersion) - , mKernelVersion(pKernelVersion) - , mMaximumNfcPacketLength(pMaximumNfcPacketLength) - , mVendor(pVendor) - , mModelNumber(pModelNumber) - , mModelName(pModelName) - , mAusweisAppVersionNumber(pAusweisAppVersionNumber) -{ -} - - -Survey::Survey() - : mNull(true) - , mBuildNumber() - , mAndroidVersion() - , mKernelVersion() - , mMaximumNfcPacketLength(0) - , mVendor() - , mModelNumber() - , mModelName() - , mAusweisAppVersionNumber() -{ -} - - -QByteArray Survey::toJsonByteArray() const -{ - QJsonObject rom; - rom[BUILD_NUMBER()] = mBuildNumber; - rom[ANDROID_VERSION()] = mAndroidVersion; - rom[KERNEL_VERSION()] = mKernelVersion; - rom[MAXIMUM_NFC_PACKET_LENGTH()] = QJsonValue(mMaximumNfcPacketLength); - - QJsonObject mainObject; - mainObject[ROM()] = rom; - mainObject[VENDOR()] = mVendor; - mainObject[MODEL_NUMBER()] = mModelNumber; - mainObject[MODEL_NAME()] = mModelName; - mainObject[AUSWEISAPP_VERSION_NUMBER()] = mAusweisAppVersionNumber; - -#ifndef QT_NO_DEBUG - if (QCoreApplication::applicationName().startsWith(QLatin1String("Test"))) - { - return QJsonDocument(mainObject).toJson(QJsonDocument::Indented); - } -#endif - - return QJsonDocument(mainObject).toJson(QJsonDocument::Compact); -} - - -bool Survey::isNull() const -{ - return mNull; -} diff --git a/src/whitelist_client/Survey.h b/src/whitelist_client/Survey.h deleted file mode 100644 index a550fd3..0000000 --- a/src/whitelist_client/Survey.h +++ /dev/null @@ -1,43 +0,0 @@ -/*! - * \brief Class holding information about an Android device to be sent to - * the whitelist server. - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include - -namespace governikus -{ -class Survey -{ - private: - const bool mNull; - const QString mBuildNumber; - const QString mAndroidVersion; - const QString mKernelVersion; - const int mMaximumNfcPacketLength; - const QString mVendor; - const QString mModelNumber; - const QString mModelName; - const QString mAusweisAppVersionNumber; - - public: - Survey(const QString& pBuildNumber, - const QString& pAndroidVersion, - const QString& pKernelVersion, - int pMaximumNfcPacketLength, - const QString& pVendor, - const QString& pModelNumber, - const QString& pModelName, - const QString& pAusweisAppVersionNumber); - - Survey(); - - QByteArray toJsonByteArray() const; - bool isNull() const; -}; - -} // namespace governikus diff --git a/src/whitelist_client/SurveyHandler.cpp b/src/whitelist_client/SurveyHandler.cpp deleted file mode 100644 index 7e2de16..0000000 --- a/src/whitelist_client/SurveyHandler.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/*! - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "SurveyHandler.h" - -#include "DeviceInfo.h" -#include "Env.h" -#include "NetworkManager.h" -#include "SecureStorage.h" - -#include -#include -#include -#include -#include - -using namespace governikus; - - -void SurveyHandler::transmitSurvey(const Survey& pSurvey) const -{ - const QUrl whitelistServerBaseUrl = SecureStorage::getInstance().getWhitelistServerBaseUrl(); - const QUrl postSurveyUrl(whitelistServerBaseUrl.toString() + QStringLiteral("/new")); - QNetworkRequest request(postSurveyUrl); - request.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("application/json; charset=UTF-8")); - - const QByteArray jsonData = pSurvey.toJsonByteArray(); - QNetworkReply* reply = Env::getSingleton()->post(request, jsonData); - QObject::connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); - - qDebug().noquote() << "Sent survey to whitelist server:" << jsonData; -} - - -SurveyHandler::SurveyHandler() -{ -} - - -void SurveyHandler::sendSurvey(int pMaximumNfcPackageLength) const -{ - const Survey survey = createSurvey(pMaximumNfcPackageLength); - - if (survey.isNull()) - { - qCritical() << "Cannot send survey containing no information at all"; - - return; - } - - transmitSurvey(survey); -} - - -Survey SurveyHandler::createSurvey(int pMaximumNfcPackageLength) const -{ - return Survey( - DeviceInfo::getOSBuildNumber(), - DeviceInfo::getOSVersion(), - DeviceInfo::getKernelVersion(), - pMaximumNfcPackageLength, - DeviceInfo::getVendor(), - DeviceInfo::getModelNumber(), - DeviceInfo::getModelName(), - QCoreApplication::applicationVersion()); -} diff --git a/src/whitelist_client/SurveyHandler.h b/src/whitelist_client/SurveyHandler.h deleted file mode 100644 index b3b747c..0000000 --- a/src/whitelist_client/SurveyHandler.h +++ /dev/null @@ -1,26 +0,0 @@ -/*! - * \brief Class holding information about an Android device to be sent to - * the whitelist server. - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include "Survey.h" - -namespace governikus -{ -class SurveyHandler -{ - private: - Survey createSurvey(int pMaximumNfcPackageLength) const; - void transmitSurvey(const Survey& pSurvey) const; - - public: - SurveyHandler(); - - void sendSurvey(int pMaximumNfcPackageLength) const; -}; - -} // namespace governikus diff --git a/src/whitelist_client/SurveyModel.cpp b/src/whitelist_client/SurveyModel.cpp new file mode 100644 index 0000000..fd5264a --- /dev/null +++ b/src/whitelist_client/SurveyModel.cpp @@ -0,0 +1,160 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "SurveyModel.h" + +#include "DeviceInfo.h" +#include "Env.h" +#include "NetworkManager.h" +#include "SecureStorage.h" +#include "SingletonHelper.h" + +#include +#include +#include +#include +#include +#include + + +using namespace governikus; + +defineSingleton(SurveyModel) + +#define VALUE_NAME(_name, _key)\ + inline QLatin1String _name(){\ + return QLatin1String(_key);\ + } + + +namespace +{ +VALUE_NAME(ROM, "Rom") +VALUE_NAME(BUILD_NUMBER, "BuildNumber") +VALUE_NAME(ANDROID_VERSION, "AndroidVersion") +VALUE_NAME(KERNEL_VERSION, "KernelVersion") +VALUE_NAME(MAXIMUM_NFC_PACKET_LENGTH, "MaximumNfcPacketLength") +VALUE_NAME(VENDOR, "Vendor") +VALUE_NAME(MODEL_NUMBER, "ModelNumber") +VALUE_NAME(MODEL_NAME, "ModelName") +VALUE_NAME(AUSWEISAPP_VERSION_NUMBER, "AusweisAppVersionNumber") +} // namespace + + +SurveyModel::SurveyModel(QObject* pParent) + : QAbstractListModel(pParent) + , mBuildNumber(DeviceInfo::getOSBuildNumber()) + , mAndroidVersion(DeviceInfo::getOSVersion()) + , mKernelVersion(DeviceInfo::getKernelVersion()) + , mMaximumNfcPacketLength(0) + , mVendor(DeviceInfo::getVendor()) + , mModelNumber(DeviceInfo::getModelNumber()) + , mModelName(DeviceInfo::getModelName()) + , mAusweisAppVersionNumber(QCoreApplication::applicationVersion()) +{ + buildDataObject(); +} + + +SurveyModel& SurveyModel::getInstance() +{ + return *Instance; +} + + +int SurveyModel::rowCount(const QModelIndex&) const +{ + return mData.size(); +} + + +QVariant SurveyModel::data(const QModelIndex& pIndex, int pRole) const +{ + if (pIndex.isValid() && pIndex.row() < rowCount()) + { + auto entry = mData[pIndex.row()]; + if (pRole == TITLE) + { + return entry.first; + } + if (pRole == VALUE) + { + return entry.second; + } + } + return QVariant(); +} + + +QHash SurveyModel::roleNames() const +{ + QHash roles = QAbstractListModel::roleNames(); + roles.insert(TITLE, "title"); + roles.insert(VALUE, "value"); + return roles; +} + + +void SurveyModel::buildDataObject() +{ + beginResetModel(); + mData.clear(); + mData += qMakePair(tr("Vendor"), mVendor); + mData += qMakePair(tr("Model Name"), mModelName); + mData += qMakePair(tr("Model Number"), mModelNumber); + mData += qMakePair(tr("Build Number"), mBuildNumber); + mData += qMakePair(tr("Android version"), mAndroidVersion); + mData += qMakePair(tr("Kernel version"), mKernelVersion); + mData += qMakePair(tr("Max. NFC Packet Length"), QString::number(mMaximumNfcPacketLength)); + mData += qMakePair(tr("AusweisApp2 Version"), mAusweisAppVersionNumber); + endResetModel(); +} + + +QByteArray SurveyModel::toJsonByteArray() const +{ + QJsonObject rom; + rom[BUILD_NUMBER()] = mBuildNumber; + rom[ANDROID_VERSION()] = mAndroidVersion; + rom[KERNEL_VERSION()] = mKernelVersion; + rom[MAXIMUM_NFC_PACKET_LENGTH()] = QJsonValue(mMaximumNfcPacketLength); + + QJsonObject mainObject; + mainObject[ROM()] = rom; + mainObject[VENDOR()] = mVendor; + mainObject[MODEL_NUMBER()] = mModelNumber; + mainObject[MODEL_NAME()] = mModelName; + mainObject[AUSWEISAPP_VERSION_NUMBER()] = mAusweisAppVersionNumber; + +#ifndef QT_NO_DEBUG + if (QCoreApplication::applicationName().startsWith(QLatin1String("Test"))) + { + return QJsonDocument(mainObject).toJson(QJsonDocument::Indented); + } +#endif + + return QJsonDocument(mainObject).toJson(QJsonDocument::Compact); +} + + +void SurveyModel::setMaximumNfcPacketLength(int pMaximumNfcPacketLength) +{ + mMaximumNfcPacketLength = pMaximumNfcPacketLength; + buildDataObject(); +} + + +void SurveyModel::transmitSurvey() const +{ + const QUrl whitelistServerBaseUrl = Env::getSingleton()->getWhitelistServerBaseUrl(); + const QUrl postSurveyUrl(whitelistServerBaseUrl.toString() + QStringLiteral("/new")); + QNetworkRequest request(postSurveyUrl); + request.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("application/json; charset=UTF-8")); + + const QByteArray jsonData = toJsonByteArray(); + QNetworkReply* reply = Env::getSingleton()->post(request, jsonData); + QObject::connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + + qDebug().noquote() << "Sent survey to whitelist server:" << jsonData; +} diff --git a/src/whitelist_client/SurveyModel.h b/src/whitelist_client/SurveyModel.h new file mode 100644 index 0000000..a998950 --- /dev/null +++ b/src/whitelist_client/SurveyModel.h @@ -0,0 +1,58 @@ +/*! + * \brief Class holding information about an Android device to be sent to + * the whitelist server. + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#pragma once + +#include +#include +#include +#include + +namespace governikus +{ +class SurveyModel + : public QAbstractListModel +{ + Q_OBJECT + + private: + const QString mBuildNumber; + const QString mAndroidVersion; + const QString mKernelVersion; + int mMaximumNfcPacketLength; + const QString mVendor; + const QString mModelNumber; + const QString mModelName; + const QString mAusweisAppVersionNumber; + + QVector > mData; + + enum UserRoles + { + TITLE = Qt::UserRole + 1, + VALUE + }; + + + void buildDataObject(); + QByteArray toJsonByteArray() const; + + public: + explicit SurveyModel(QObject* pParent = nullptr); + + int rowCount(const QModelIndex& = QModelIndex()) const override; + QVariant data(const QModelIndex& pIndex, int pRole = Qt::DisplayRole) const override; + QHash roleNames() const override; + + static SurveyModel& getInstance(); + + void setMaximumNfcPacketLength(int pMaximumNfcPacketLength); + + void transmitSurvey() const; +}; + +} // namespace governikus diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4ebf8cd..f721b25 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -36,7 +36,7 @@ FUNCTION(ADD_QML_TEST _sourcefile) EXTRACT_TESTNAME(TESTNAME ${_sourcefile}) GET_TEST_CMDLINE(CMD_PARAMS ${TESTNAME} SELECTORS ${_PARAM_SELECTORS}) - SET(CMD $ ${CMD_PARAMS} -input ${sourcefile} -import "${_import_path}") + SET(CMD $ ${CMD_PARAMS} -input ${sourcefile} -import "qrc:///qml/") SET(ENV_FAIL_ON_WARNING "QT_FATAL_WARNINGS=true") # Emasculate ASAN since QtQuick causes problems SET(ENV_EMASCULATE_ASAN "ASAN_OPTIONS=detect_leaks=0,new_delete_type_mismatch=0") @@ -53,7 +53,7 @@ FUNCTION(ADD_QML_TEST _sourcefile) ENDFUNCTION() -FUNCTION(ADD_QML_TEST_FILES _import_path) +FUNCTION(ADD_QML_TEST_FILES) cmake_parse_arguments(_PARAM "" "" "SELECTORS" ${ARGN}) IF(NOT BSD AND (NOT Qt5Core_VERSION VERSION_LESS 5.11.0 OR QT_VENDOR STREQUAL "Governikus")) SET(HAS_FILE_SELECTOR_PATCH TRUE) @@ -73,5 +73,7 @@ ENDFUNCTION() ADD_SUBDIRECTORY(helper) -ADD_SUBDIRECTORY(qml) +IF(TARGET Qt5::Qml) + ADD_SUBDIRECTORY(qml) +ENDIF() ADD_SUBDIRECTORY(qt) diff --git a/test/helper/CMakeLists.txt b/test/helper/CMakeLists.txt index 6e7ab9e..cf27986 100644 --- a/test/helper/CMakeLists.txt +++ b/test/helper/CMakeLists.txt @@ -1,7 +1,7 @@ ADD_PLATFORM_LIBRARY(AusweisAppTestHelper) TARGET_INCLUDE_DIRECTORIES(AusweisAppTestHelper SYSTEM PUBLIC ${PCSC_INCLUDE_DIRS}) -TARGET_LINK_LIBRARIES(AusweisAppTestHelper Qt5::Network Qt5::Test AusweisAppExternal::HttpParser AusweisAppActivation AusweisAppCard AusweisAppCardDrivers AusweisAppRemoteDevice AusweisAppNetwork AusweisAppCore AusweisAppUiWebsocket) +TARGET_LINK_LIBRARIES(AusweisAppTestHelper Qt5::Network Qt5::Test AusweisAppExternal::HttpParser AusweisAppActivation AusweisAppCard AusweisAppCardDrivers AusweisAppRemoteDevice AusweisAppNetwork AusweisAppCore AusweisAppUiWebsocket AusweisAppUiCommon) TARGET_COMPILE_DEFINITIONS(AusweisAppTestHelper PRIVATE QT_STATICPLUGIN) IF(DESKTOP) diff --git a/test/helper/CliHelper.cpp b/test/helper/CliHelper.cpp deleted file mode 100644 index 1136344..0000000 --- a/test/helper/CliHelper.cpp +++ /dev/null @@ -1,171 +0,0 @@ -/*! - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "CliHelper.h" - -#include - -#include - -using namespace governikus; - -CliHelper::CliHelper(QObject* pParent) - : QProcess(pParent) - , mTimer() - , mLoop() - , mOutput() - , mServerPort(0) -{ - qRegisterMetaType("QProcess::ProcessState"); - - mTimer.setSingleShot(true); - connect(&mTimer, &QTimer::timeout, &mLoop, &QEventLoop::quit); - connect(this, &QProcess::readyRead, this, &CliHelper::storeOutput); - - QString path = QCoreApplication::applicationDirPath() + QStringLiteral("/../../src/"); - QString app = path + QStringLiteral("AusweisApp2"); - QStringList args; - args << QStringLiteral("--ui") << QStringLiteral("cli"); - args << QStringLiteral("--port") << QStringLiteral("0"); - -#ifdef Q_OS_WIN - app += ".exe"; -#else - args << QStringLiteral("-platform") << QStringLiteral("offscreen"); -#endif - - QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - env.insert(QStringLiteral("QT_LOGGING_TO_CONSOLE"), QStringLiteral("1")); - setProcessEnvironment(env); - setProgram(app); - setArguments(args); - setWorkingDirectory(path); - setReadChannel(QProcess::StandardError); -} - - -CliHelper::~CliHelper() -{ - disconnect(this, &QProcess::readyRead, this, &CliHelper::storeOutput); - tearDown(); -} - - -void CliHelper::storeOutput() -{ - while (canReadLine()) - { - mOutput += QString::fromUtf8(readLine()); - } - - if (!mOutput.isEmpty()) - { - mLoop.quit(); - } -} - - -void CliHelper::waitForOutput(const QString& pMsg, QRegularExpressionMatch* pMatcher, int pTimeout) -{ - QCOMPARE(state(), QProcess::Running); - - const QRegularExpression regex(pMsg); - mTimer.start(pTimeout); - while (mTimer.isActive() || !mOutput.isEmpty()) - { - if (mOutput.isEmpty()) - { - mLoop.exec(); - } - - while (!mOutput.isEmpty()) - { - const QString msg = mOutput.takeFirst(); - - auto matcher = regex.match(msg); - if (matcher.hasMatch()) - { - mTimer.stop(); - if (pMatcher) - { - *pMatcher = matcher; - } - return; - } - } - } - - QString notFound = QStringLiteral("Cannot find given output: ") + pMsg; - QFAIL(notFound.toUtf8().constData()); -} - - -void CliHelper::run() -{ - QCOMPARE(state(), QProcess::NotRunning); - mServerPort = 0; // reset if we use same object again - start(); - if (waitForStarted(TIMEOUT)) - { - waitForOutput(QStringLiteral("Try to load UI plugin: \"UIPlugInCli\"")); - } - - QCOMPARE(state(), QProcess::Running); -} - - -void CliHelper::stop() -{ - terminate(); - closeWriteChannel(); - waitForFinished(TIMEOUT); -} - - -void CliHelper::waitForPong() -{ - send("ping"); - waitForOutput(QStringLiteral("^stdinput .*: \"ping\"")); - waitForOutput(QStringLiteral("Pong!")); -} - - -quint16 CliHelper::getServerPort() -{ - if (mServerPort == 0) - { - send("port"); - QRegularExpressionMatch matcher; - waitForOutput(QStringLiteral("^cli .*: Port: ([0-9]{1,5})$"), &matcher); - - if (matcher.hasMatch() && !matcher.captured(1).isNull()) - { - bool converted = false; - auto port = matcher.captured(1).toUInt(&converted); - if (converted && port <= USHRT_MAX) - { - mServerPort = static_cast(port); - } - } - } - - return mServerPort; -} - - -void CliHelper::tearDown() -{ - if (state() != QProcess::NotRunning) - { - stop(); - - QCOMPARE(state(), QProcess::NotRunning); - QCOMPARE(exitCode(), 0); - if (state() != QProcess::NotRunning) - { - QProcess::close(); - QFAIL("kill application"); - } - } -} diff --git a/test/helper/CliHelper.h b/test/helper/CliHelper.h deleted file mode 100644 index d0483a6..0000000 --- a/test/helper/CliHelper.h +++ /dev/null @@ -1,58 +0,0 @@ -/*! - * \brief Helper to test app via CliPlugIn. - * - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#pragma once - -#include -#include -#include -#include -#include - -#define CLI_VERIFY(cmd) cmd; QVERIFY(!QTest::currentTestFailed()) - -namespace governikus -{ - -class CliHelper - : public QProcess -{ - Q_OBJECT - - private: - QTimer mTimer; - QEventLoop mLoop; - QStringList mOutput; - quint16 mServerPort; - - private Q_SLOTS: - void storeOutput(); - - public: - static const int TIMEOUT = 15000; - CliHelper(QObject* pParent = nullptr); - virtual ~CliHelper(); - - void send(const char* pMsg) - { - write(pMsg); - write("\n"); - if (bytesToWrite()) - { - QVERIFY(waitForBytesWritten(TIMEOUT)); - } - } - - - void waitForOutput(const QString& pMsgList, QRegularExpressionMatch* pMatcher = nullptr, int pTimeout = TIMEOUT); - void waitForPong(); - void run(); - void stop(); - void tearDown(); - quint16 getServerPort(); -}; - -} // namespace governikus diff --git a/test/helper/MockActivationContext.h b/test/helper/MockActivationContext.h index a2b7a2d..c67fc9b 100644 --- a/test/helper/MockActivationContext.h +++ b/test/helper/MockActivationContext.h @@ -52,8 +52,8 @@ class MockActivationContext virtual bool sendErrorPage(http_status pStatusCode, const GlobalStatus& pStatus) override { - Q_UNUSED(pStatusCode); - Q_UNUSED(pStatus); + Q_UNUSED(pStatusCode) + Q_UNUSED(pStatus) mSendErroPageCalled = true; mSendError = mErrorMessageOnSend; return mErroPageValue; @@ -62,8 +62,8 @@ class MockActivationContext virtual bool sendRedirect(const QUrl& pRedirectAddress, const GlobalStatus& pStatus) override { - Q_UNUSED(pRedirectAddress); - Q_UNUSED(pStatus); + Q_UNUSED(pRedirectAddress) + Q_UNUSED(pStatus) mSendRedirectCalled = true; mSendError = mErrorMessageOnSend; return mRedirectValue; diff --git a/test/helper/MockCard.cpp b/test/helper/MockCard.cpp index 2299682..fcabfa0 100644 --- a/test/helper/MockCard.cpp +++ b/test/helper/MockCard.cpp @@ -34,7 +34,7 @@ CardReturnCode MockCard::disconnect() CardReturnCode MockCard::transmit(const CommandApdu& pCmd, ResponseApdu& pRes) { - Q_UNUSED(pCmd); + Q_UNUSED(pCmd) if (mCardConfig.mTransmits.isEmpty()) { qFatal("No (more) response APDU configured, but a(nother) command transmitted"); diff --git a/test/helper/MockCard.h b/test/helper/MockCard.h index 7f67b87..585bb8b 100644 --- a/test/helper/MockCard.h +++ b/test/helper/MockCard.h @@ -15,7 +15,7 @@ namespace governikus { -typedef QPair TransmitConfig; +using TransmitConfig = QPair; class MockCardConfig diff --git a/test/helper/MockCardConnectionWorker.cpp b/test/helper/MockCardConnectionWorker.cpp index bea5abb..870156e 100644 --- a/test/helper/MockCardConnectionWorker.cpp +++ b/test/helper/MockCardConnectionWorker.cpp @@ -41,7 +41,7 @@ void MockCardConnectionWorker::addPaceCode(CardReturnCode pCode) CardReturnCode MockCardConnectionWorker::transmit(const CommandApdu& pCommandApdu, ResponseApdu& pResponseApdu) { - Q_UNUSED(pCommandApdu); + Q_UNUSED(pCommandApdu) pResponseApdu.setBuffer(mResponseData.empty() ? QByteArray() : mResponseData.takeFirst()); return mResponseCodes.empty() ? CardReturnCode::UNDEFINED : mResponseCodes.takeFirst(); } @@ -57,17 +57,15 @@ CardReturnCode MockCardConnectionWorker::updateRetryCounter() } -CardReturnCode MockCardConnectionWorker::establishPaceChannel(PacePasswordId pPasswordId, +EstablishPaceChannelOutput MockCardConnectionWorker::establishPaceChannel(PacePasswordId pPasswordId, const QString& pPasswordValue, const QByteArray& pChat, - const QByteArray& pCertificateDescription, - EstablishPaceChannelOutput& pChannelOutput) + const QByteArray& pCertificateDescription) { - Q_UNUSED(pPasswordId); - Q_UNUSED(pPasswordValue); - Q_UNUSED(pChat); - Q_UNUSED(pCertificateDescription); - Q_UNUSED(pChannelOutput); + Q_UNUSED(pPasswordId) + Q_UNUSED(pPasswordValue) + Q_UNUSED(pChat) + Q_UNUSED(pCertificateDescription) return mPaceCodes.empty() ? CardReturnCode::UNDEFINED : mPaceCodes.takeFirst(); } @@ -80,8 +78,8 @@ CardReturnCode MockCardConnectionWorker::destroyPaceChannel() CardReturnCode MockCardConnectionWorker::setEidPin(const QString& pNewPin, quint8 pTimeoutSeconds, ResponseApdu& pResponseApdu) { - Q_UNUSED(pNewPin); - Q_UNUSED(pTimeoutSeconds); + Q_UNUSED(pNewPin) + Q_UNUSED(pTimeoutSeconds) pResponseApdu.setBuffer(mResponseData.empty() ? QByteArray() : mResponseData.takeFirst()); return mResponseCodes.empty() ? CardReturnCode::UNDEFINED : mResponseCodes.takeFirst(); } diff --git a/test/helper/MockCardConnectionWorker.h b/test/helper/MockCardConnectionWorker.h index a28c3e8..9a4f5e5 100644 --- a/test/helper/MockCardConnectionWorker.h +++ b/test/helper/MockCardConnectionWorker.h @@ -35,11 +35,10 @@ class MockCardConnectionWorker virtual CardReturnCode transmit(const CommandApdu& pCommandApdu, ResponseApdu& pResponseApdu) override; virtual CardReturnCode updateRetryCounter() override; - virtual CardReturnCode establishPaceChannel(PacePasswordId pPasswordId, + virtual EstablishPaceChannelOutput establishPaceChannel(PacePasswordId pPasswordId, const QString& pPasswordValue, const QByteArray& pChat, - const QByteArray& pCertificateDescription, - EstablishPaceChannelOutput& pChannelOutput) override; + const QByteArray& pCertificateDescription) override; virtual CardReturnCode destroyPaceChannel() override; virtual CardReturnCode setEidPin(const QString& pNewPin, quint8 pTimeoutSeconds, ResponseApdu& pResponseApdu) override; }; diff --git a/test/helper/MockDataChannel.cpp b/test/helper/MockDataChannel.cpp index 39e6113..c644445 100644 --- a/test/helper/MockDataChannel.cpp +++ b/test/helper/MockDataChannel.cpp @@ -24,7 +24,7 @@ MockDataChannel::~MockDataChannel() void MockDataChannel::close() { - Q_EMIT fireClosed(GlobalStatus::Code::RemoteReader_CloseCode_NormalClose); + Q_EMIT fireClosed(GlobalStatus::Code::No_Error); } diff --git a/test/helper/MockDownloader.cpp b/test/helper/MockDownloader.cpp index f84df9e..fea8e7b 100644 --- a/test/helper/MockDownloader.cpp +++ b/test/helper/MockDownloader.cpp @@ -55,7 +55,7 @@ void MockDownloader::download(const QUrl& pUpdateUrl) void MockDownloader::downloadIfNew(const QUrl& pUpdateUrl, const QDateTime& pCurrentTimestamp) { - Q_UNUSED(pCurrentTimestamp); + Q_UNUSED(pCurrentTimestamp) download(pUpdateUrl); } diff --git a/test/helper/MockNetworkManager.cpp b/test/helper/MockNetworkManager.cpp index 859aca3..8e50a88 100644 --- a/test/helper/MockNetworkManager.cpp +++ b/test/helper/MockNetworkManager.cpp @@ -60,11 +60,22 @@ QNetworkReply* MockNetworkManager::get(QNetworkRequest& pRequest, const QByteArray& pSslSession, int pTimeoutInMilliSeconds) { - Q_UNUSED(pRequest); - Q_UNUSED(pSslSession); + Q_UNUSED(pRequest) + Q_UNUSED(pSslSession) + Q_UNUSED(pTimeoutInMilliSeconds) + + mLastRequest = &pRequest; + + return getReply(pRequest); +} + + +QNetworkReply* MockNetworkManager::post(QNetworkRequest& pRequest, const QByteArray& pData, int pTimeoutInMilliSeconds) +{ Q_UNUSED(pTimeoutInMilliSeconds); mLastRequest = &pRequest; + mLastData = QByteArray(pData); return getReply(pRequest); } @@ -77,12 +88,12 @@ QNetworkReply* MockNetworkManager::paos(QNetworkRequest& pRequest, const QByteArray& pSslSession, int pTimeoutInMilliSeconds) { - Q_UNUSED(pRequest); - Q_UNUSED(pNamespace); - Q_UNUSED(pData); - Q_UNUSED(pUsePsk); - Q_UNUSED(pSslSession); - Q_UNUSED(pTimeoutInMilliSeconds); + Q_UNUSED(pRequest) + Q_UNUSED(pNamespace) + Q_UNUSED(pData) + Q_UNUSED(pUsePsk) + Q_UNUSED(pSslSession) + Q_UNUSED(pTimeoutInMilliSeconds) return getReply(pRequest); } @@ -90,7 +101,7 @@ QNetworkReply* MockNetworkManager::paos(QNetworkRequest& pRequest, bool MockNetworkManager::checkUpdateServerCertificate(const QNetworkReply& pReply) { - Q_UNUSED(pReply); + Q_UNUSED(pReply) return true; } diff --git a/test/helper/MockNetworkManager.h b/test/helper/MockNetworkManager.h index dc47d08..e74fc1d 100644 --- a/test/helper/MockNetworkManager.h +++ b/test/helper/MockNetworkManager.h @@ -22,6 +22,7 @@ class MockNetworkManager MockNetworkReply* mNextReply; MockNetworkReply* mLastReply; QNetworkRequest* mLastRequest; + QByteArray mLastData; MockNetworkReply* getReply(const QNetworkRequest& pRequest); @@ -37,6 +38,10 @@ class MockNetworkManager virtual QNetworkReply* get(QNetworkRequest& pRequest, const QByteArray& pSslSession = QByteArray(), int pTimeoutInMilliSeconds = 30000) override; + virtual QNetworkReply* post(QNetworkRequest& pRequest, + const QByteArray& pData, + int pTimeoutInMilliSeconds = 30000) override; + virtual bool checkUpdateServerCertificate(const QNetworkReply& pReply) override; void setFilename(const QString& pFilename) @@ -65,6 +70,12 @@ class MockNetworkManager } + const QByteArray getLastData() const + { + return mLastData; + } + + Q_SIGNALS: void fireReply(); }; diff --git a/test/helper/MockNetworkReply.h b/test/helper/MockNetworkReply.h index bfc068b..429e8e3 100644 --- a/test/helper/MockNetworkReply.h +++ b/test/helper/MockNetworkReply.h @@ -12,6 +12,7 @@ #include class test_StateCheckRefreshAddress; +class test_StateGetSelfAuthenticationData; namespace governikus { @@ -23,6 +24,7 @@ class MockNetworkReply private: friend class ::test_StateCheckRefreshAddress; + friend class ::test_StateGetSelfAuthenticationData; MockSocket mSocket; public: @@ -30,6 +32,7 @@ class MockNetworkReply virtual ~MockNetworkReply() override; virtual void abort() override { + qDebug() << "Operation aborted"; } diff --git a/test/helper/MockReader.cpp b/test/helper/MockReader.cpp index a2ea2ea..75a9853 100644 --- a/test/helper/MockReader.cpp +++ b/test/helper/MockReader.cpp @@ -32,6 +32,7 @@ MockReader* MockReader::createMockReader(const QVector& pTransmi MockReader::MockReader(const QString& pReaderName) : Reader(ReaderManagerPlugInType::UNKNOWN, pReaderName) , mCard(nullptr) + , mEvent(CardEvent::NONE) { mReaderInfo.setConnected(true); mReaderInfo.setBasicReader(true); diff --git a/test/helper/MockReader.h b/test/helper/MockReader.h index 1599de1..3c1c15e 100644 --- a/test/helper/MockReader.h +++ b/test/helper/MockReader.h @@ -21,6 +21,7 @@ class MockReader Q_OBJECT QScopedPointer mCard; + CardEvent mEvent; public: static MockReader* createMockReader(const QVector& pTransmitConfig = QVector(), const QByteArray& pEfCardAccess = QByteArray()); @@ -58,10 +59,16 @@ class MockReader } + void setCardEvent(const CardEvent pEvent) + { + mEvent = pEvent; + } + + private: virtual Reader::CardEvent updateCard() override { - return Reader::CardEvent::NONE; + return mEvent; } diff --git a/test/helper/MockRemoteDispatcher.cpp b/test/helper/MockRemoteDispatcher.cpp index 3892f99..9d6ff45 100644 --- a/test/helper/MockRemoteDispatcher.cpp +++ b/test/helper/MockRemoteDispatcher.cpp @@ -101,7 +101,7 @@ void MockRemoteDispatcher::setState(DispatcherState pState) void MockRemoteDispatcher::onClosed() { - Q_EMIT fireClosed(GlobalStatus::Code::RemoteReader_CloseCode_NormalClose, mId); + Q_EMIT fireClosed(GlobalStatus::Code::No_Error, mId); } diff --git a/test/helper/MockRemoteServer.cpp b/test/helper/MockRemoteServer.cpp index f6ade75..93eff3c 100644 --- a/test/helper/MockRemoteServer.cpp +++ b/test/helper/MockRemoteServer.cpp @@ -24,7 +24,7 @@ bool MockRemoteServer::isRunning() const bool MockRemoteServer::start(const QString& pServerName) { - Q_UNUSED(pServerName); + Q_UNUSED(pServerName) mRunning = true; return true; } @@ -70,3 +70,9 @@ const QSharedPointer& MockRemoteServer::getMessageHandler( { return mServerMessageHandler; } + + +void MockRemoteServer::setMessageHandler(const QSharedPointer& pHandler) +{ + mServerMessageHandler = pHandler; +} diff --git a/test/helper/MockRemoteServer.h b/test/helper/MockRemoteServer.h index 7ec8464..a56b751 100644 --- a/test/helper/MockRemoteServer.h +++ b/test/helper/MockRemoteServer.h @@ -36,6 +36,7 @@ class MockRemoteServer void setConnected(bool pConnected); virtual QSslCertificate getCurrentCertificate() const override; virtual const QSharedPointer& getMessageHandler() const override; + void setMessageHandler(const QSharedPointer& pHandler); }; } // namespace governikus diff --git a/test/helper/MockSocket.cpp b/test/helper/MockSocket.cpp index 2258fbb..6e6d607 100644 --- a/test/helper/MockSocket.cpp +++ b/test/helper/MockSocket.cpp @@ -57,3 +57,10 @@ qint64 MockSocket::writeData(const char* pData, qint64 pMaxSize) mWriteBuffer += data; return data.size(); } + + +qint64 MockSocket::write(const QByteArray& pByteArray) +{ + mWriteBuffer += pByteArray; + return QIODevice::write(pByteArray); +} diff --git a/test/helper/MockSocket.h b/test/helper/MockSocket.h index 62bbcf0..e83665a 100644 --- a/test/helper/MockSocket.h +++ b/test/helper/MockSocket.h @@ -32,6 +32,7 @@ class MockSocket qint64 bytesAvailable() const override; qint64 readData(char* pDestination, qint64 pMaxSize) override; qint64 writeData(const char* pData, qint64 pMaxSize) override; + qint64 write(const QByteArray& pByteArray); }; } // namespace governikus diff --git a/test/helper/TestAuthContext.cpp b/test/helper/TestAuthContext.cpp index 3bcd127..0b26ebb 100644 --- a/test/helper/TestAuthContext.cpp +++ b/test/helper/TestAuthContext.cpp @@ -1,9 +1,11 @@ /*! * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany */ +#include "TestAuthContext.h" #include "paos/retrieve/DidAuthenticateEac1Parser.h" -#include "TestAuthContext.h" +#include "paos/retrieve/DidAuthenticateEac2Parser.h" + #include "TestFileHelper.h" @@ -13,11 +15,15 @@ using namespace governikus; TestAuthContext::TestAuthContext(ActivationContext* pActivationContext, const QString& pFileName) : AuthContext(QSharedPointer(pActivationContext)) , mDidAuthenticateEac1() + , mDidAuthenticateEac2() { mDidAuthenticateEac1.reset(static_cast(DidAuthenticateEac1Parser().parse(TestFileHelper::readFile(pFileName)))); setDidAuthenticateEac1(mDidAuthenticateEac1); setTerminalCvc(mDidAuthenticateEac1->getCvCertificates().at(0)); setDvCvc(mDidAuthenticateEac1->getCvCertificates().at(1)); + + mDidAuthenticateEac2.reset(dynamic_cast(DidAuthenticateEac2Parser().parse(TestFileHelper::readFile(":/paos/DIDAuthenticateEAC2.xml")))); + setDidAuthenticateEac2(mDidAuthenticateEac2); } @@ -64,3 +70,21 @@ void TestAuthContext::setOptionalAccessRights(const QSet& pAccessRi setDidAuthenticateEac1(mDidAuthenticateEac1); setTerminalCvc(mDidAuthenticateEac1->getCvCertificates().at(0)); } + + +void TestAuthContext::addCvCertificate(const QSharedPointer& pCvCertificate) +{ + mDidAuthenticateEac1->mEac1InputType.mCvCertificates += pCvCertificate; +} + + +void TestAuthContext::clearCvCertificates() +{ + mDidAuthenticateEac1->mEac1InputType.mCvCertificates.clear(); +} + + +void TestAuthContext::removeCvCertAt(int pPosition) +{ + mDidAuthenticateEac1->mEac1InputType.mCvCertificates.removeAt(pPosition); +} diff --git a/test/helper/TestAuthContext.h b/test/helper/TestAuthContext.h index 5e6ada6..2a68100 100644 --- a/test/helper/TestAuthContext.h +++ b/test/helper/TestAuthContext.h @@ -20,6 +20,7 @@ class TestAuthContext private: QSharedPointer mDidAuthenticateEac1; + QSharedPointer mDidAuthenticateEac2; public: TestAuthContext(ActivationContext* pActivationContext, const QString& pFileName); @@ -27,6 +28,9 @@ class TestAuthContext void setRequiredAccessRights(const QSet& pAccessRights); void setOptionalAccessRights(const QSet& pAccessRights); + void addCvCertificate(const QSharedPointer& pCvCertificate); + void clearCvCertificates(); + void removeCvCertAt(int pPosition); }; } // namespace governikus diff --git a/test/qml/QmlTestRunner.cpp b/test/qml/QmlTestRunner.cpp index 467942d..17a6d61 100644 --- a/test/qml/QmlTestRunner.cpp +++ b/test/qml/QmlTestRunner.cpp @@ -2,18 +2,23 @@ * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany */ +#include "LogHandler.h" #include "ResourceLoader.h" #include "UIPlugInQml.h" +#include #include #include using namespace governikus; +Q_DECLARE_LOGGING_CATEGORY(init) static void preRoutine() { + auto& logHandler = *Env::getSingleton(); + qCDebug(init) << "LogHandler initialized" << logHandler; ResourceLoader::getInstance().init(); UIPlugInQml::registerQmlTypes(); diff --git a/test/qml/desktop/CMakeLists.txt b/test/qml/desktop/CMakeLists.txt index 82152b4..2557ffc 100644 --- a/test/qml/desktop/CMakeLists.txt +++ b/test/qml/desktop/CMakeLists.txt @@ -1,2 +1,2 @@ -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "desktop;win") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "desktop;mac") +ADD_QML_TEST_FILES(SELECTORS "desktop;win") +ADD_QML_TEST_FILES(SELECTORS "desktop;mac") diff --git a/test/qml/desktop/test_Global.qml b/test/qml/desktop/test_Global.qml index 7b85c78..448a457 100644 --- a/test/qml/desktop/test_Global.qml +++ b/test/qml/desktop/test_Global.qml @@ -1,13 +1,49 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { name: "ModuleImportTest" id: parent - function test_load_ContinueButton() { + function test_load_NavigationButton() { var item = createTemporaryQmlObject(" import Governikus.Global 1.0; - ContinueButton {} + NavigationButton { + buttonType: Qt.ForwardButton + } + ", parent); + item.destroy(); + } + + function test_load_ScrollablePane() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + ScrollablePane {} + ", parent); + item.destroy(); + } + + function test_load_TabbedPane() { + var item = createTemporaryQmlObject(" + import QtQuick 2.10 + import Governikus.Global 1.0 + import QtQml.Models 2.10; + TabbedPane { + id: pane + + anchors.fill: parent + anchors.margins: Constants.pane_padding + + sectionsModel: ['Item 1', 'Item 2', 'Item 3'] + contentObjectModel: ObjectModel { + Component { Rectangle { color: 'red' } } + Component { Rectangle { color: 'blue' } } + Component { Rectangle { color: 'black' } } + } + } ", parent); item.destroy(); } diff --git a/test/qml/generic/test_MainView.qml b/test/qml/desktop/test_MainView.qml similarity index 74% rename from test/qml/generic/test_MainView.qml rename to test/qml/desktop/test_MainView.qml index 0fe5782..07ce0f1 100644 --- a/test/qml/generic/test_MainView.qml +++ b/test/qml/desktop/test_MainView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/desktop/test_SettingsView.qml b/test/qml/desktop/test_SettingsView.qml new file mode 100644 index 0000000..f079ec6 --- /dev/null +++ b/test/qml/desktop/test_SettingsView.qml @@ -0,0 +1,26 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleImportTest" + id: parent + + function test_load_SettingsView() { + var item = createTemporaryQmlObject(" + import Governikus.SettingsView 1.0; + SettingsView {} + ", parent); + item.destroy(); + } + + function test_load_ReaderView() { + var item = createTemporaryQmlObject(" + import Governikus.SettingsView 1.0; + TabbedReaderView {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/desktop/test_TitleBar.qml b/test/qml/desktop/test_TitleBar.qml index e0b14bb..adecf39 100644 --- a/test/qml/desktop/test_TitleBar.qml +++ b/test/qml/desktop/test_TitleBar.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/desktop/test_TutorialView.qml b/test/qml/desktop/test_TutorialView.qml new file mode 100644 index 0000000..2f027da --- /dev/null +++ b/test/qml/desktop/test_TutorialView.qml @@ -0,0 +1,18 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleImportTest" + id: parent + + function test_load_SetupAssistantView() { + var item = createTemporaryQmlObject(" + import Governikus.TutorialView 1.0; + SetupAssistantView {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/desktop/test_View.qml b/test/qml/desktop/test_View.qml new file mode 100644 index 0000000..3c14ee8 --- /dev/null +++ b/test/qml/desktop/test_View.qml @@ -0,0 +1,34 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleLoadingView" + id: parent + + function test_load_Controller() { + var item = createTemporaryQmlObject(" + import Governikus.View 1.0; + Controller {} + ", parent); + item.destroy(); + } + + function test_load_FocusFrame() { + var item = createTemporaryQmlObject(" + import Governikus.View 1.0; + FocusFrame {} + ", parent); + item.destroy(); + } + + function test_load_FocusPoint() { + var item = createTemporaryQmlObject(" + import Governikus.View 1.0; + FocusPoint {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/generic/CMakeLists.txt b/test/qml/generic/CMakeLists.txt index 1a779a3..23b8c9f 100644 --- a/test/qml/generic/CMakeLists.txt +++ b/test/qml/generic/CMakeLists.txt @@ -1,6 +1,6 @@ -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;phone;android") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;tablet;android") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;phone;ios") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;tablet;ios") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "desktop;win") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "desktop;mac") +ADD_QML_TEST_FILES(SELECTORS "mobile;phone;android") +ADD_QML_TEST_FILES(SELECTORS "mobile;tablet;android") +ADD_QML_TEST_FILES(SELECTORS "mobile;phone;ios") +ADD_QML_TEST_FILES(SELECTORS "mobile;tablet;ios") +ADD_QML_TEST_FILES(SELECTORS "desktop;win") +ADD_QML_TEST_FILES(SELECTORS "desktop;mac") diff --git a/test/qml/mobile/test_ChangePinView.qml b/test/qml/generic/test_ChangePinView.qml similarity index 75% rename from test/qml/mobile/test_ChangePinView.qml rename to test/qml/generic/test_ChangePinView.qml index 37b8ba0..884967e 100644 --- a/test/qml/mobile/test_ChangePinView.qml +++ b/test/qml/generic/test_ChangePinView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/generic/test_EnterPasswordView.qml b/test/qml/generic/test_EnterPasswordView.qml new file mode 100644 index 0000000..bc58bee --- /dev/null +++ b/test/qml/generic/test_EnterPasswordView.qml @@ -0,0 +1,18 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleImportTest" + id: parent + + function test_load_EnterPasswordView() { + var item = createTemporaryQmlObject(" + import Governikus.EnterPasswordView 1.0; + EnterPasswordView {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/generic/test_FeedbackView.qml b/test/qml/generic/test_FeedbackView.qml new file mode 100644 index 0000000..12c56c0 --- /dev/null +++ b/test/qml/generic/test_FeedbackView.qml @@ -0,0 +1,18 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleImportTest" + id: parent + + function test_load_LogView() { + var item = createTemporaryQmlObject(" + import Governikus.FeedbackView 1.0; + LogView {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/generic/test_Global.qml b/test/qml/generic/test_Global.qml index 2989887..3e1db91 100644 --- a/test/qml/generic/test_Global.qml +++ b/test/qml/generic/test_Global.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 import Governikus.Global 1.0 @@ -19,9 +23,6 @@ TestCase { function test_Constants() { compare(Constants.black, "#000000") compare(Constants.white, "#ffffff") - - verify(Constants.titlebar_padding > 0) - verify(Constants.titlebar_spacing > 0) } function test_load_StatusIcon() { @@ -48,6 +49,14 @@ TestCase { item.destroy(); } + function test_load_GText() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + GText {} + ", parent); + item.destroy(); + } + function test_load_PaneTitle() { var item = createTemporaryQmlObject(" import Governikus.Global 1.0; @@ -71,4 +80,48 @@ TestCase { ", parent); item.destroy(); } + + function test_load_GTextField() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + GTextField {} + ", parent); + item.destroy(); + } + + function test_load_GComboBox() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + GComboBox {} + ", parent); + item.destroy(); + } + + function test_load_ConfirmationPopup() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + ConfirmationPopup {} + ", parent); + item.destroy(); + } + + function test_load_SearchBar() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + SearchBar {} + ", parent); + item.destroy(); + } + + function test_load_GSeparator() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0 + + GSeparator { + width: parent.width + anchors.verticalCenter: parent.verticalCenter + } + ", parent); + item.destroy(); + } } diff --git a/test/qml/mobile/test_HistoryView.qml b/test/qml/generic/test_HistoryView.qml similarity index 75% rename from test/qml/mobile/test_HistoryView.qml rename to test/qml/generic/test_HistoryView.qml index e25cd6f..bcc77c1 100644 --- a/test/qml/mobile/test_HistoryView.qml +++ b/test/qml/generic/test_HistoryView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/generic/test_IdentifyView.qml b/test/qml/generic/test_IdentifyView.qml index f5a3ee2..e9e5b12 100644 --- a/test/qml/generic/test_IdentifyView.qml +++ b/test/qml/generic/test_IdentifyView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/generic/test_InformationView.qml b/test/qml/generic/test_InformationView.qml new file mode 100644 index 0000000..031e428 --- /dev/null +++ b/test/qml/generic/test_InformationView.qml @@ -0,0 +1,18 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleImportTest" + id: parent + + function test_load_InformationView() { + var item = createTemporaryQmlObject(" + import Governikus.InformationView 1.0; + InformationView {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/generic/test_ProgressView.qml b/test/qml/generic/test_ProgressView.qml index 0a26824..cc50e1d 100644 --- a/test/qml/generic/test_ProgressView.qml +++ b/test/qml/generic/test_ProgressView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/generic/test_Provider.qml b/test/qml/generic/test_Provider.qml index d16a3a7..c2423a1 100644 --- a/test/qml/generic/test_Provider.qml +++ b/test/qml/generic/test_Provider.qml @@ -1,9 +1,21 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { name: "ModuleLoadingProvider" id: parent + function test_load_ProviderDetailView() { + var item = createTemporaryQmlObject(" + import Governikus.Provider 1.0; + ProviderDetailView {} + ", parent); + item.destroy(); + } + function test_load_ProviderInfoSection() { var item = createTemporaryQmlObject(" import Governikus.Provider 1.0; diff --git a/test/qml/mobile/test_ProviderView.qml b/test/qml/generic/test_ProviderView.qml similarity index 75% rename from test/qml/mobile/test_ProviderView.qml rename to test/qml/generic/test_ProviderView.qml index f79527d..f9f36f6 100644 --- a/test/qml/mobile/test_ProviderView.qml +++ b/test/qml/generic/test_ProviderView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/generic/test_ResultView.qml b/test/qml/generic/test_ResultView.qml index 0773c74..50bbc3f 100644 --- a/test/qml/generic/test_ResultView.qml +++ b/test/qml/generic/test_ResultView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/generic/test_SelfAuthenticationView.qml b/test/qml/generic/test_SelfAuthenticationView.qml new file mode 100644 index 0000000..9ba3ca9 --- /dev/null +++ b/test/qml/generic/test_SelfAuthenticationView.qml @@ -0,0 +1,18 @@ +/* + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleImportTest" + id: parent + + function test_load_SelfAuthenticationView() { + var item = createTemporaryQmlObject(" + import Governikus.SelfAuthenticationView 1.0; + SelfAuthenticationView {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/generic/test_Style.qml b/test/qml/generic/test_Style.qml index 6aa0cd4..947f095 100644 --- a/test/qml/generic/test_Style.qml +++ b/test/qml/generic/test_Style.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { @@ -12,7 +16,7 @@ TestCase { item.destroy(); } - function test_load_ProviderStyle() { + function test_load_Style() { var item = createTemporaryQmlObject(" import QtQuick 2.0; import Governikus.Style 1.0; diff --git a/test/qml/generic/test_TitleBar.qml b/test/qml/generic/test_TitleBar.qml index 1e9d58b..7f6afb4 100644 --- a/test/qml/generic/test_TitleBar.qml +++ b/test/qml/generic/test_TitleBar.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/generic/test_UiPluginQml.qml b/test/qml/generic/test_UiPluginQml.qml index df6827b..4b67979 100644 --- a/test/qml/generic/test_UiPluginQml.qml +++ b/test/qml/generic/test_UiPluginQml.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 import Governikus.Type.UiModule 1.0 diff --git a/test/qml/generic/test_Utils.qml b/test/qml/generic/test_Utils.qml index 1f03fe4..d7ebc7e 100644 --- a/test/qml/generic/test_Utils.qml +++ b/test/qml/generic/test_Utils.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 import Governikus.Global 1.0 diff --git a/test/qml/generic/test_View.qml b/test/qml/generic/test_View.qml new file mode 100644 index 0000000..e016fa2 --- /dev/null +++ b/test/qml/generic/test_View.qml @@ -0,0 +1,18 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +import QtTest 1.10 + +TestCase { + name: "ModuleLoadingView" + id: parent + + function test_load_SectionPage() { + var item = createTemporaryQmlObject(" + import Governikus.View 1.0; + SectionPage {} + ", parent); + item.destroy(); + } +} diff --git a/test/qml/mobile/test_Workflow.qml b/test/qml/generic/test_Workflow.qml similarity index 83% rename from test/qml/mobile/test_Workflow.qml rename to test/qml/generic/test_Workflow.qml index a8b3d43..713fa24 100644 --- a/test/qml/mobile/test_Workflow.qml +++ b/test/qml/generic/test_Workflow.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/CMakeLists.txt b/test/qml/mobile/CMakeLists.txt index a1a4e5f..13abcb8 100644 --- a/test/qml/mobile/CMakeLists.txt +++ b/test/qml/mobile/CMakeLists.txt @@ -1,4 +1,4 @@ -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;phone;android") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;tablet;android") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;phone;ios") -ADD_QML_TEST_FILES(${RESOURCES_DIR}/qml SELECTORS "mobile;tablet;ios") +ADD_QML_TEST_FILES(SELECTORS "mobile;phone;android") +ADD_QML_TEST_FILES(SELECTORS "mobile;tablet;android") +ADD_QML_TEST_FILES(SELECTORS "mobile;phone;ios") +ADD_QML_TEST_FILES(SELECTORS "mobile;tablet;ios") diff --git a/test/qml/mobile/test_DeveloperView.qml b/test/qml/mobile/test_DeveloperView.qml index beb72af..61459ba 100644 --- a/test/qml/mobile/test_DeveloperView.qml +++ b/test/qml/mobile/test_DeveloperView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/test_EnterPinView.qml b/test/qml/mobile/test_EnterPinView.qml deleted file mode 100644 index fa1b9d3..0000000 --- a/test/qml/mobile/test_EnterPinView.qml +++ /dev/null @@ -1,14 +0,0 @@ -import QtTest 1.10 - -TestCase { - name: "ModuleImportTest" - id: parent - - function test_load_EnterPinView() { - var item = createTemporaryQmlObject(" - import Governikus.EnterPinView 1.0; - EnterPinView {} - ", parent); - item.destroy(); - } -} diff --git a/test/qml/mobile/test_FeedbackView.qml b/test/qml/mobile/test_FeedbackView.qml index ba5801f..366ae18 100644 --- a/test/qml/mobile/test_FeedbackView.qml +++ b/test/qml/mobile/test_FeedbackView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { @@ -12,10 +16,10 @@ TestCase { item.destroy(); } - function test_load_Log() { + function test_load_StoreFeedbackPopup() { var item = createTemporaryQmlObject(" import Governikus.FeedbackView 1.0; - Log {} + StoreFeedbackPopup {} ", parent); item.destroy(); } diff --git a/test/qml/mobile/test_Global.qml b/test/qml/mobile/test_Global.qml index ba2c5aa..4be7e7f 100644 --- a/test/qml/mobile/test_Global.qml +++ b/test/qml/mobile/test_Global.qml @@ -1,25 +1,13 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { name: "ModuleImportTest" id: parent - function test_load_GComboBox() { - var item = createTemporaryQmlObject(" - import Governikus.Global 1.0; - GComboBox {} - ", parent); - item.destroy(); - } - - function test_load_ConfirmationPopup() { - var item = createTemporaryQmlObject(" - import Governikus.Global 1.0; - ConfirmationPopup {} - ", parent); - item.destroy(); - } - function test_load_GRadioButton() { var item = createTemporaryQmlObject(" import Governikus.Global 1.0; @@ -36,14 +24,6 @@ TestCase { item.destroy(); } - function test_load_GTextField() { - var item = createTemporaryQmlObject(" - import Governikus.Global 1.0; - GTextField {} - ", parent); - item.destroy(); - } - function test_load_LocationButton() { var item = createTemporaryQmlObject(" import Governikus.Global 1.0; @@ -51,4 +31,44 @@ TestCase { ", parent); item.destroy(); } + + function test_load_ListItem() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + ListItem {} + ", parent); + item.destroy(); + } + + function test_load_GFlickable() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + GFlickable {} + ", parent); + item.destroy(); + } + + function test_load_GListView() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + GListView {} + ", parent); + item.destroy(); + } + + function test_load_GGridView() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + GGridView {} + ", parent); + item.destroy(); + } + + function test_load_GScrollBar() { + var item = createTemporaryQmlObject(" + import Governikus.Global 1.0; + GScrollBar {} + ", parent); + item.destroy(); + } } diff --git a/test/qml/mobile/test_InformationView.qml b/test/qml/mobile/test_InformationView.qml index 5d8c40b..7b63ce4 100644 --- a/test/qml/mobile/test_InformationView.qml +++ b/test/qml/mobile/test_InformationView.qml @@ -1,17 +1,13 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { name: "ModuleLoadingInformationView" id: parent - function test_load_Information() { - var item = createTemporaryQmlObject(" - import Governikus.InformationView 1.0; - Information {} - ", parent); - item.destroy(); - } - function test_load_VersionInformationView() { var item = createTemporaryQmlObject(" import Governikus.InformationView 1.0; diff --git a/test/qml/mobile/test_MoreView.qml b/test/qml/mobile/test_MoreView.qml index 06e0aaa..b35c636 100644 --- a/test/qml/mobile/test_MoreView.qml +++ b/test/qml/mobile/test_MoreView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/test_Navigation.qml b/test/qml/mobile/test_Navigation.qml index 14a2743..6af6de8 100644 --- a/test/qml/mobile/test_Navigation.qml +++ b/test/qml/mobile/test_Navigation.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/test_Provider.qml b/test/qml/mobile/test_Provider.qml index 98f7bfd..7386aaf 100644 --- a/test/qml/mobile/test_Provider.qml +++ b/test/qml/mobile/test_Provider.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { @@ -12,14 +16,6 @@ TestCase { item.destroy(); } - function test_load_ProviderDetailView() { - var item = createTemporaryQmlObject(" - import Governikus.Provider 1.0; - ProviderDetailView {} - ", parent); - item.destroy(); - } - function test_load_ProviderHeader() { var item = createTemporaryQmlObject(" import Governikus.Provider 1.0; @@ -35,12 +31,4 @@ TestCase { ", parent); item.destroy(); } - - function test_load_ProviderViewDelegate() { - var item = createTemporaryQmlObject(" - import Governikus.Provider 1.0; - ProviderViewDelegate {} - ", parent); - item.destroy(); - } } diff --git a/test/qml/mobile/test_RemoteServiceView.qml b/test/qml/mobile/test_RemoteServiceView.qml index 05c6428..81b06fa 100644 --- a/test/qml/mobile/test_RemoteServiceView.qml +++ b/test/qml/mobile/test_RemoteServiceView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/test_SplashScreen.qml b/test/qml/mobile/test_SplashScreen.qml index 1e89376..ed89552 100644 --- a/test/qml/mobile/test_SplashScreen.qml +++ b/test/qml/mobile/test_SplashScreen.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/test_TechnologyInfo.qml b/test/qml/mobile/test_TechnologyInfo.qml index ec629f4..021f5c1 100644 --- a/test/qml/mobile/test_TechnologyInfo.qml +++ b/test/qml/mobile/test_TechnologyInfo.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/test_TutorialView.qml b/test/qml/mobile/test_TutorialView.qml index 46250a6..7fa7c3f 100644 --- a/test/qml/mobile/test_TutorialView.qml +++ b/test/qml/mobile/test_TutorialView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qml/mobile/test_View.qml b/test/qml/mobile/test_View.qml index d542e45..954e088 100644 --- a/test/qml/mobile/test_View.qml +++ b/test/qml/mobile/test_View.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { @@ -19,4 +23,12 @@ TestCase { ", parent); item.destroy(); } + + function test_load_ContentAreaLoader() { + var item = createTemporaryQmlObject(" + import Governikus.View 1.0; + ContentAreaLoader {} + ", parent); + item.destroy(); + } } diff --git a/test/qml/mobile/test_WhiteListClientView.qml b/test/qml/mobile/test_WhiteListClientView.qml index c0f07f1..effe55e 100644 --- a/test/qml/mobile/test_WhiteListClientView.qml +++ b/test/qml/mobile/test_WhiteListClientView.qml @@ -1,3 +1,7 @@ +/* + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + import QtTest 1.10 TestCase { diff --git a/test/qt/CMakeLists.txt b/test/qt/CMakeLists.txt index 40e2ab6..11ff329 100644 --- a/test/qt/CMakeLists.txt +++ b/test/qt/CMakeLists.txt @@ -1,3 +1,59 @@ +FUNCTION(GET_CAPITALIZED _out string) + STRING(SUBSTRING "${string}" 0 1 _tmp1) + STRING(SUBSTRING "${string}" 1 -1 _tmp2) + STRING(TOUPPER "${_tmp1}" _tmp1) + SET(${_out} ${_tmp1}${_tmp2} PARENT_SCOPE) +ENDFUNCTION() + + +FUNCTION(GET_SNAKE_TO_CAMEL_CASE _out string) + STRING(REPLACE "_" ";" string "${string}") + FOREACH(entry ${string}) + GET_CAPITALIZED(entry "${entry}") + SET(_tmp "${_tmp}${entry}") + ENDFOREACH() + + SET(${_out} "${_tmp}" PARENT_SCOPE) +ENDFUNCTION() + + +FUNCTION(EXTRACT_MODULES _out_module _out_submodule filename) + GET_FILENAME_COMPONENT(dir "${filename}" DIRECTORY) + + # make unit test directory to cmake list + STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" dir "${dir}") + STRING(REPLACE "/" ";" dir "${dir}") + + # extract first subdirectory as module + LIST(GET dir 0 MODULE) + GET_SNAKE_TO_CAMEL_CASE(MODULE "${MODULE}") + + # extract second subdirectory as submodule if it exists + LIST(LENGTH dir dir_len) + IF(dir_len GREATER 1) + LIST(GET dir 1 SUBMODULE) + GET_CAPITALIZED(SUBMODULE "${SUBMODULE}") + ENDIF() + + # return values: module is required, submodule optional + SET(${_out_module} ${MODULE} PARENT_SCOPE) + SET(${_out_submodule} ${SUBMODULE} PARENT_SCOPE) +ENDFUNCTION() + + +FUNCTION(GET_MODULE _out filename) + EXTRACT_MODULES(MODULE SUBMODULE "${filename}") + + IF(TARGET "AusweisApp${MODULE}${SUBMODULE}") + SET(${_out} "AusweisApp${MODULE}${SUBMODULE}" PARENT_SCOPE) + ELSEIF(TARGET "AusweisApp${MODULE}") + SET(${_out} "AusweisApp${MODULE}" PARENT_SCOPE) + ELSE() + MESSAGE(FATAL_ERROR "Cannot detect module: ${filename}") + ENDIF() +ENDFUNCTION() + + FUNCTION(ADD_TEST_EXECUTABLE testname) IF(ANDROID) ADD_LIBRARY(${testname} SHARED ${ARGN}) @@ -5,57 +61,44 @@ FUNCTION(ADD_TEST_EXECUTABLE testname) ADD_EXECUTABLE(${testname} ${ARGN}) ENDIF() - TARGET_LINK_LIBRARIES(${testname} Qt5::Network Qt5::Test OpenSSL::Crypto) - TARGET_LINK_LIBRARIES(${testname} AusweisAppTestHelper AusweisAppCore AusweisAppCard AusweisAppGlobal AusweisAppCardDrivers AusweisAppServices AusweisAppSettings AusweisAppNetwork) - TARGET_LINK_LIBRARIES(${testname} AusweisAppActivationInternal AusweisAppUiJsonApi AusweisAppUiAidl AusweisAppUiQml) - TARGET_LINK_LIBRARIES(${testname} AusweisAppRemoteDevice AusweisAppExport) - TARGET_LINK_LIBRARIES(${testname} AusweisAppSecureStorage AusweisAppConfiguration AusweisAppFileProvider) - TARGET_LINK_LIBRARIES(${testname} QRC_FIXTURE_OBJ) + GET_MODULE(MODULE "${ARGN}") + TARGET_LINK_LIBRARIES(${testname} Qt5::Test AusweisAppTestHelper QRC_FIXTURE_OBJ ${MODULE}) +ENDFUNCTION() - IF(DESKTOP) - TARGET_LINK_LIBRARIES(${testname} Qt5::Widgets AusweisAppUiWidget AusweisAppCardPcsc AusweisAppActivationWebservice) - ENDIF() - IF(LINUX OR ANDROID OR IOS) - TARGET_LINK_LIBRARIES(${testname} AusweisAppCardBluetooth) - ENDIF() +FUNCTION(SHOULD_SKIP_TEST _out filename) + SET(${_out} FALSE PARENT_SCOPE) + STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" test "${sourcefile}") - TARGET_LINK_LIBRARIES(${testname} AusweisAppWhitelistClient) + IF(IOS OR ANDROID) + IF(ANDROID_BUILD_AAR AND test MATCHES "ui/qml") + SET(${_out} TRUE PARENT_SCOPE) + RETURN() + ENDIF() - IF(WIN32) - TARGET_LINK_LIBRARIES(${testname} ${WIN_DEFAULT_LIBS}) - ELSEIF(MAC) - TARGET_LINK_LIBRARIES(${testname} ${OSX_APPKIT}) - ELSEIF(ANDROID) - TARGET_LINK_LIBRARIES(${testname} Qt5::AndroidExtras) + IF(test MATCHES "ui/widget" + OR test MATCHES "card/pcsc") + SET(${_out} TRUE PARENT_SCOPE) + RETURN() + ENDIF() ENDIF() ENDFUNCTION() FUNCTION(ADD_TEST_EXECUTABLE_SUBDIR) - SUBDIRLIST(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR}) - IF(IOS OR ANDROID) - LIST(REMOVE_ITEM SUBDIRS widget) - LIST(REMOVE_ITEM SUBDIRS cli) - LIST(REMOVE_ITEM SUBDIRS pcsc) - LIST(REMOVE_ITEM SUBDIRS drivers) - LIST(REMOVE_ITEM SUBDIRS activation_webservice) - ENDIF() + FILE(GLOB_RECURSE TEST_FILES "*.cpp") - FOREACH(SUBDIR ${SUBDIRS}) - FILE(GLOB_RECURSE TEST_SUBFILES "${SUBDIR}/*.cpp") + FOREACH(sourcefile ${TEST_FILES}) + SHOULD_SKIP_TEST(SKIP "${sourcefile}") + IF(SKIP) + CONTINUE() + ENDIF() - FOREACH(sourcefile ${TEST_SUBFILES}) - STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" sourcefile_relative "${sourcefile}") - IF(NOT (((APPLE OR WIN32 OR BSD) AND "${sourcefile_relative}" MATCHES "card/bluetooth") OR - ((IOS OR ANDROID) AND "${sourcefile_relative}" MATCHES "card/pcsc"))) - EXTRACT_TESTNAME(TESTNAME ${sourcefile}) - ADD_TEST_EXECUTABLE(${TESTNAME} ${sourcefile}) - GET_TEST_CMDLINE(TEST_CMDLINE ${TESTNAME}) - ADD_TEST(${TESTNAME} ${TESTNAME} ${TEST_CMDLINE}) - SET_TESTS_PROPERTIES(${TESTNAME} PROPERTIES LABELS "ausweisapp") - ENDIF() - ENDFOREACH() + EXTRACT_TESTNAME(TESTNAME ${sourcefile}) + ADD_TEST_EXECUTABLE(${TESTNAME} ${sourcefile}) + GET_TEST_CMDLINE(TEST_CMDLINE ${TESTNAME}) + ADD_TEST(${TESTNAME} ${TESTNAME} ${TEST_CMDLINE}) + SET_TESTS_PROPERTIES(${TESTNAME} PROPERTIES LABELS "ausweisapp") ENDFOREACH() ENDFUNCTION() diff --git a/test/qt/activation_webservice/test_Template.cpp b/test/qt/activation/webservice/test_Template.cpp similarity index 100% rename from test/qt/activation_webservice/test_Template.cpp rename to test/qt/activation/webservice/test_Template.cpp diff --git a/test/qt/activation_webservice/test_WebserviceActivationContext.cpp b/test/qt/activation/webservice/test_WebserviceActivationContext.cpp similarity index 77% rename from test/qt/activation_webservice/test_WebserviceActivationContext.cpp rename to test/qt/activation/webservice/test_WebserviceActivationContext.cpp index a0b7b02..8698ba7 100644 --- a/test/qt/activation_webservice/test_WebserviceActivationContext.cpp +++ b/test/qt/activation/webservice/test_WebserviceActivationContext.cpp @@ -32,23 +32,6 @@ class test_WebserviceActivationContext } - void test_SetCommonHeaders() - { - HttpResponse response; - WebserviceActivationContext context(mRequest); - context.setCommonHeaders(response); - - QVERIFY(response.getHeaders().keys().contains(QByteArrayLiteral("Connection"))); - QVERIFY(response.getHeaders().keys().contains(QByteArrayLiteral("Cache-Control"))); - QVERIFY(response.getHeaders().keys().contains(QByteArrayLiteral("Pragma"))); - - QMap headers = response.getHeaders(); - QCOMPARE(headers.take(QByteArrayLiteral("Connection")), QByteArrayLiteral("close")); - QCOMPARE(headers.take(QByteArrayLiteral("Cache-Control")), QByteArrayLiteral("no-cache, no-store")); - QCOMPARE(headers.take(QByteArrayLiteral("Pragma")), QByteArrayLiteral("no-cache")); - } - - void test_GetActivationUrl() { WebserviceActivationContext context(mRequest); @@ -96,6 +79,22 @@ class test_WebserviceActivationContext } + void test_SendErrorPage() + { + WebserviceActivationContext context(mRequest); + + QTest::ignoreMessage(QtDebugMsg, "Send error page to browser, error code 400"); + QVERIFY(context.sendErrorPage(HTTP_STATUS_BAD_REQUEST, GlobalStatus::Code::Unknown_Error)); + const auto buffer = mSocket->mWriteBuffer; + QVERIFY(buffer.contains("Connection: close")); + QVERIFY(buffer.contains("Cache-Control: no-cache, no-store")); + QVERIFY(buffer.contains("Pragma: no-cache")); + + mSocket->setSocketState(QAbstractSocket::UnconnectedState); + QVERIFY(!context.sendErrorPage(HTTP_STATUS_BAD_REQUEST, GlobalStatus::Code::Unknown_Error)); + } + + }; QTEST_GUILESS_MAIN(test_WebserviceActivationContext) diff --git a/test/qt/activation_webservice/test_WebserviceActivationHandler.cpp b/test/qt/activation/webservice/test_WebserviceActivationHandler.cpp similarity index 100% rename from test/qt/activation_webservice/test_WebserviceActivationHandler.cpp rename to test/qt/activation/webservice/test_WebserviceActivationHandler.cpp diff --git a/test/qt/card/asn1/test_AccessRoleAndRight.cpp b/test/qt/card/asn1/test_AccessRoleAndRight.cpp index 6ad2eeb..05f871f 100644 --- a/test/qt/card/asn1/test_AccessRoleAndRight.cpp +++ b/test/qt/card/asn1/test_AccessRoleAndRight.cpp @@ -67,7 +67,7 @@ class test_AccessRoleAndRight void checkFromTechnicalName() { QFETCH(AccessRight, value); - const AccessRight undefined = static_cast(UINT_MAX); + const auto undefined = static_cast(UINT_MAX); AccessRight right = undefined; const auto& func = [&](AccessRight pRight){ right = pRight; @@ -87,7 +87,7 @@ class test_AccessRoleAndRight void checkFromTechnicalNameInvalid() { - const AccessRight undefined = static_cast(UINT_MAX); + const auto undefined = static_cast(UINT_MAX); AccessRight right = undefined; const auto& func = [&](AccessRight pRight){ right = pRight; diff --git a/test/qt/card/asn1/test_CertificateDescription.cpp b/test/qt/card/asn1/test_CertificateDescription.cpp index c31b33e..d43ad18 100644 --- a/test/qt/card/asn1/test_CertificateDescription.cpp +++ b/test/qt/card/asn1/test_CertificateDescription.cpp @@ -320,9 +320,9 @@ class test_CertificateDescription } #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) - certDescr->mCommCertificates = SKM_sk_new(ASN1_OCTET_STRING, 0); + certDescr->mCommCertificates = SKM_sk_new(ASN1_OCTET_STRING, nullptr); #else - certDescr->mCommCertificates = sk_ASN1_OCTET_STRING_new(0); + certDescr->mCommCertificates = sk_ASN1_OCTET_STRING_new(nullptr); #endif QByteArrayList commCertBytes; commCertBytes.append(QByteArray::fromHex("94B0AA7E8114F3E6DFCD52DA9F43E8B13CCB0589B8957E364728198FB4971AE6")); diff --git a/test/qt/card/asn1/test_EcdsaPublicKey.cpp b/test/qt/card/asn1/test_EcdsaPublicKey.cpp index 0b78fd8..c27c42c 100644 --- a/test/qt/card/asn1/test_EcdsaPublicKey.cpp +++ b/test/qt/card/asn1/test_EcdsaPublicKey.cpp @@ -210,7 +210,8 @@ class test_EcdsaPublicKey BN_clear_free(b); EC_GROUP_get_cofactor(ecGroup, cofactor, nullptr); - QCOMPARE(convert(cofactor).toHex().toUpper(), QByteArray("")); + const auto parsedCofactor = convert(cofactor).toHex().toUpper(); + QVERIFY(parsedCofactor == QByteArray("") || parsedCofactor == QByteArray("01")); // https://github.com/openssl/openssl/commit/a6186f39802f94937a46f7a41ef0c86b6334b592 BN_clear_free(cofactor); EC_GROUP_get_order(ecGroup, order, nullptr); diff --git a/test/qt/card/base/command/test_DidAuthenticateEAC2Command.cpp b/test/qt/card/base/command/test_DidAuthenticateEAC2Command.cpp new file mode 100644 index 0000000..8b15c2b --- /dev/null +++ b/test/qt/card/base/command/test_DidAuthenticateEAC2Command.cpp @@ -0,0 +1,91 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "command/DidAuthenticateEAC2Command.h" + +#include "asn1/CVCertificateChainBuilder.h" + +#include "MockCardConnectionWorker.h" +#include "TestFileHelper.h" + +#include + + +using namespace governikus; + + +class test_DidAuthenticateEAC2Command + : public QObject +{ + Q_OBJECT + QSharedPointer mWorker; + + static CVCertificateChain createCVCertificateChain(const QString& pFileName) + { + QByteArray data = TestFileHelper::readFile(QString(":/card/").append(pFileName)); + QSharedPointer certificate = CVCertificate::fromHex(data); + CVCertificateChainBuilder builder(false); + return builder.getChainStartingWith(certificate); + } + + + private Q_SLOTS: + void init() + { + mWorker.reset(new MockCardConnectionWorker()); + } + + + void cleanup() + { + mWorker.clear(); + } + + + void test_PerformTerminalAuthentication() + { + QByteArray input("0000"); + mWorker->addResponse(CardReturnCode::COMMAND_FAILED); + const CVCertificateChain cvcChain = createCVCertificateChain("cvca-DETESTeID00001.hex"); + DidAuthenticateEAC2Command command(mWorker, cvcChain, QString(), QString(), input); + + QByteArray bytes = QByteArray::fromHex("30 12" + " 06 0A 04007F00070202030202" + " 02 01 02" + " 02 01 08"); + + auto chipAuthenticationInfo = ChipAuthenticationInfo::decode(bytes); + QTest::ignoreMessage(QtDebugMsg, "Performing CA MSE:Set AT"); + QCOMPARE(command.performChipAuthentication(chipAuthenticationInfo, input, input, input), CardReturnCode::COMMAND_FAILED); + + mWorker->addResponse(CardReturnCode::OK); + QTest::ignoreMessage(QtDebugMsg, "Performing CA MSE:Set AT"); + QTest::ignoreMessage(QtWarningMsg, "CA MSE:Set AT failed: EMPTY"); + QCOMPARE(command.performChipAuthentication(chipAuthenticationInfo, input, input, input), CardReturnCode::PROTOCOL_ERROR); + + mWorker->addResponse(CardReturnCode::OK, QByteArray::fromHex("9000")); + mWorker->addResponse(CardReturnCode::CANCELLATION_BY_USER); + QTest::ignoreMessage(QtDebugMsg, "Performing CA MSE:Set AT"); + QTest::ignoreMessage(QtDebugMsg, "Performing CA General Authenticate"); + QCOMPARE(command.performChipAuthentication(chipAuthenticationInfo, input, input, input), CardReturnCode::CANCELLATION_BY_USER); + + mWorker->addResponse(CardReturnCode::OK, QByteArray::fromHex("9000")); + mWorker->addResponse(CardReturnCode::OK); + QTest::ignoreMessage(QtDebugMsg, "Performing CA MSE:Set AT"); + QTest::ignoreMessage(QtDebugMsg, "Performing CA General Authenticate"); + QTest::ignoreMessage(QtWarningMsg, "CA General Authenticate failed: EMPTY"); + QCOMPARE(command.performChipAuthentication(chipAuthenticationInfo, input, input, input), CardReturnCode::PROTOCOL_ERROR); + + mWorker->addResponse(CardReturnCode::OK, QByteArray::fromHex("9000")); + mWorker->addResponse(CardReturnCode::OK, QByteArray::fromHex("9000")); + QTest::ignoreMessage(QtDebugMsg, "Performing CA MSE:Set AT"); + QTest::ignoreMessage(QtDebugMsg, "Performing CA General Authenticate"); + QCOMPARE(command.performChipAuthentication(chipAuthenticationInfo, input, input, input), CardReturnCode::OK); + } + + +}; + +QTEST_GUILESS_MAIN(test_DidAuthenticateEAC2Command) +#include "test_DidAuthenticateEAC2Command.moc" diff --git a/test/qt/card/base/test_CardConnection.cpp b/test/qt/card/base/test_CardConnection.cpp index d710886..5b3a298 100644 --- a/test/qt/card/base/test_CardConnection.cpp +++ b/test/qt/card/base/test_CardConnection.cpp @@ -8,7 +8,7 @@ #include "MockCardConnectionWorker.h" -#include +#include using namespace governikus; diff --git a/test/qt/card/base/test_CardConnectionWorker.cpp b/test/qt/card/base/test_CardConnectionWorker.cpp new file mode 100644 index 0000000..f47aef2 --- /dev/null +++ b/test/qt/card/base/test_CardConnectionWorker.cpp @@ -0,0 +1,147 @@ +/*! + * \brief Tests for the class CardConnectionWorker. + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "CardConnectionWorker.h" + +#include "asn1/KnownOIDs.h" + +#include "MockReader.h" + +#include + +using namespace governikus; + +class test_CardConnectionWorker + : public QObject +{ + Q_OBJECT + QSharedPointer mWorker; + QScopedPointer mReader; + + void setCard() + { + QVector transmitConfigs; + transmitConfigs.append(TransmitConfig(CardReturnCode::OK, QByteArray::fromHex("6982"))); + transmitConfigs.append(TransmitConfig(CardReturnCode::OK, QByteArray::fromHex("9000"))); + MockCardConfig cardConfig(transmitConfigs); + mReader->setCard(cardConfig); + } + + + private Q_SLOTS: + void init() + { + mReader.reset(new MockReader()); + mWorker = CardConnectionWorker::create(mReader.data()); + } + + + void cleanup() + { + mWorker.clear(); + mReader.reset(); + } + + + void test_Transmit() + { + CommandApdu emptyCommandApdu(QByteArray("")); + ResponseApdu emptyApdu; + + //no card + QCOMPARE(mWorker->transmit(emptyCommandApdu, emptyApdu), CardReturnCode::CARD_NOT_FOUND); + + setCard(); + + //no secure messaging + QCOMPARE(mWorker->transmit(emptyCommandApdu, emptyApdu), CardReturnCode::OK); + } + + + void test_EstablishPaceChannel() + { + const QString password("111111"); + const QByteArray chat = QByteArray::fromHex("7F4C12060904007F00070301020253050000000F0F"); + const QByteArray certDescription = QByteArray::fromHex("30 8202A4" + " 06 0A 04007F00070301030103" + " A1 0E 0C0C442D547275737420476D6248" + " A3 3A 0C38476573616D7476657262616E64206465722064657574736368656E20566572736963686572756E67737769727473636861667420652E562E" + " A5 820248" + " 04 820244 4E616D652C20416E7363687269667420756E6420452D4D61696C2D4164726573736520646573204469656E737465616E626965746572733A0D0A476573616D7476657262616E64206465722064657574736368656E20566572736963686572756E67737769727473636861667420652E562E0D0A57696C68656C6D73747261C39F652034332F3433670D0A3130313137204265726C696E0D0A6265726C696E406764762E64650D0A0D0A4765736368C3A46674737A7765636B3A0D0A2D52656769737472696572756E6720756E64204C6F67696E20616D204744562D4D616B6C6572706F7274616C2D0D0A0D0A48696E7765697320617566206469652066C3BC722064656E204469656E737465616E626965746572207A757374C3A46E646967656E205374656C6C656E2C20646965206469652045696E68616C74756E672064657220566F7273636872696674656E207A756D20446174656E73636875747A206B6F6E74726F6C6C696572656E3A0D0A4265726C696E6572204265617566747261677465722066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E7366726569686569740D0A416E20646572205572616E696120342D31300D0A3130373837204265726C696E0D0A3033302F3133382038392D300D0A6D61696C626F7840646174656E73636875747A2D6265726C696E2E64650D0A687474703A2F2F7777772E646174656E73636875747A2D6265726C696E2E64650D0A416E737072656368706172746E65723A2044722E20416C6578616E64657220446978"); + + //no card + QCOMPARE(mWorker->establishPaceChannel(PacePasswordId::PACE_PIN, password, chat, certDescription).getPaceReturnCode(), CardReturnCode::CARD_NOT_FOUND); + + setCard(); + + //basic reader + QTest::ignoreMessage(QtInfoMsg, "Starting PACE for PACE_CAN"); + QTest::ignoreMessage(QtInfoMsg, "Finished PACE for PACE_CAN with result PROTOCOL_ERROR"); + QCOMPARE(mWorker->establishPaceChannel(PacePasswordId::PACE_CAN, password, chat, certDescription).getPaceReturnCode(), CardReturnCode::PROTOCOL_ERROR); + + //comfort reader + mReader->getReaderInfo().setBasicReader(false); + QTest::ignoreMessage(QtInfoMsg, "Starting PACE for PACE_PIN"); + QTest::ignoreMessage(QtInfoMsg, "Finished PACE for PACE_PIN with result COMMAND_FAILED"); + QTest::ignoreMessage(QtWarningMsg, "Establishment of PACE channel not supported"); + QCOMPARE(mWorker->establishPaceChannel(PacePasswordId::PACE_PIN, QString(), chat, certDescription).getPaceReturnCode(), CardReturnCode::COMMAND_FAILED); + } + + + void test_DestroyPaceChannel() + { + //no card + QCOMPARE(mWorker->destroyPaceChannel(), CardReturnCode::CARD_NOT_FOUND); + + setCard(); + + //basic reader + QTest::ignoreMessage(QtInfoMsg, "Destroying PACE channel"); + QTest::ignoreMessage(QtDebugMsg, "Destroying PACE channel with invalid command causing 6700 as return code"); + QCOMPARE(mWorker->destroyPaceChannel(), CardReturnCode::OK); + + //comfort reader + mReader->getReaderInfo().setBasicReader(false); + QTest::ignoreMessage(QtInfoMsg, "Destroying PACE channel"); + QTest::ignoreMessage(QtWarningMsg, "Destruction of PACE channel not supported"); + QCOMPARE(mWorker->destroyPaceChannel(), CardReturnCode::COMMAND_FAILED); + } + + + void test_SetEidPin() + { + const QString newPin("111111"); + ResponseApdu emptyApdu; + ResponseApdu apduSuccess(StatusCode::SUCCESS); + + //no card + QCOMPARE(mWorker->setEidPin(newPin, 5, emptyApdu), CardReturnCode::CARD_NOT_FOUND); + + setCard(); + + //basic reader + QTest::ignoreMessage(QtWarningMsg, "Modify PIN failed"); + QCOMPARE(mWorker->setEidPin(newPin, 5, emptyApdu), CardReturnCode::COMMAND_FAILED); + QCOMPARE(mWorker->setEidPin(newPin, 5, apduSuccess), CardReturnCode::OK); + + //comfort reader + mReader->getReaderInfo().setBasicReader(false); + QTest::ignoreMessage(QtWarningMsg, "Setting eID PIN is not supported"); + QCOMPARE(mWorker->setEidPin(QString(), 5, apduSuccess), CardReturnCode::COMMAND_FAILED); + } + + + void test_UpdateRetryCounter() + { + //no card + QCOMPARE(mWorker->updateRetryCounter(), CardReturnCode::CARD_NOT_FOUND); + } + + +}; + +QTEST_GUILESS_MAIN(test_CardConnectionWorker) +#include "test_CardConnectionWorker.moc" diff --git a/test/qt/card/base/test_CardInfo.cpp b/test/qt/card/base/test_CardInfo.cpp index 0071f1d..1d59b04 100644 --- a/test/qt/card/base/test_CardInfo.cpp +++ b/test/qt/card/base/test_CardInfo.cpp @@ -7,7 +7,7 @@ #include "CardInfo.h" -#include +#include using namespace governikus; @@ -39,19 +39,9 @@ class test_CardInfo } - void test_GetEidApplicationPath() - { - const CardInfo info1(CardType::NONE, QSharedPointer(), 3, false, false); - QCOMPARE(info1.getEidApplicationPath(), QString()); - - const CardInfo info2(CardType::EID_CARD, QSharedPointer(), 3, false, false); - QCOMPARE(info2.getEidApplicationPath(), QStringLiteral("e80704007f00070302")); - } - - void test_RetryCounterDeterminated() { - const CardInfo info1(CardType::EID_CARD, QSharedPointer(), CardInfo::UNDEFINED_RETRY_COUNTER, false, false); + const CardInfo info1(CardType::EID_CARD); QVERIFY(!info1.isRetryCounterDetermined()); const CardInfo info2(CardType::EID_CARD, QSharedPointer(), 3, false, false); diff --git a/test/qt/card/base/test_CommandApdu.cpp b/test/qt/card/base/test_CommandApdu.cpp index 5122a5a..1d8c8db 100644 --- a/test/qt/card/base/test_CommandApdu.cpp +++ b/test/qt/card/base/test_CommandApdu.cpp @@ -8,8 +8,8 @@ #include "LogHandler.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/card/base/test_Commands.cpp b/test/qt/card/base/test_Commands.cpp index 27d918c..92bdfb0 100644 --- a/test/qt/card/base/test_Commands.cpp +++ b/test/qt/card/base/test_Commands.cpp @@ -4,9 +4,11 @@ * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany */ -#include "Commands.h" +#include "EABuilder.h" +#include "GABuilder.h" +#include "PSOBuilder.h" -#include +#include using namespace governikus; diff --git a/test/qt/card/base/test_PinModify.cpp b/test/qt/card/base/test_PinModify.cpp index 55c1780..840fcf9 100644 --- a/test/qt/card/base/test_PinModify.cpp +++ b/test/qt/card/base/test_PinModify.cpp @@ -2,8 +2,8 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "PinModify.h" diff --git a/test/qt/card/base/test_PinModifyOutput.cpp b/test/qt/card/base/test_PinModifyOutput.cpp index 708ed60..df5ddcf 100644 --- a/test/qt/card/base/test_PinModifyOutput.cpp +++ b/test/qt/card/base/test_PinModifyOutput.cpp @@ -2,8 +2,8 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "PinModifyOutput.h" @@ -22,39 +22,39 @@ class test_PinModifyOutput { PinModifyOutput output; - output = PinModifyOutput(QByteArray::fromHex("02")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("02"))); QCOMPARE(output.getReturnCode(), CardReturnCode::UNKNOWN); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("02")); - output = PinModifyOutput(QByteArray::fromHex("6400")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("6400"))); QCOMPARE(output.getReturnCode(), CardReturnCode::INPUT_TIME_OUT); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("6400")); - output = PinModifyOutput(QByteArray::fromHex("6401")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("6401"))); QCOMPARE(output.getReturnCode(), CardReturnCode::CANCELLATION_BY_USER); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("6401")); - output = PinModifyOutput(QByteArray::fromHex("6402")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("6402"))); QCOMPARE(output.getReturnCode(), CardReturnCode::NEW_PIN_MISMATCH); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("6402")); - output = PinModifyOutput(QByteArray::fromHex("6403")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("6403"))); QCOMPARE(output.getReturnCode(), CardReturnCode::NEW_PIN_INVALID_LENGTH); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("6403")); - output = PinModifyOutput(QByteArray::fromHex("6a80")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("6a80"))); QCOMPARE(output.getReturnCode(), CardReturnCode::COMMAND_FAILED); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("6a80")); - output = PinModifyOutput(QByteArray::fromHex("6982")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("6982"))); QCOMPARE(output.getReturnCode(), CardReturnCode::UNKNOWN); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("6982")); - output = PinModifyOutput(QByteArray::fromHex("9000")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("9000"))); QCOMPARE(output.getReturnCode(), CardReturnCode::OK); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("9000")); - output = PinModifyOutput(QByteArray::fromHex("beef")); + output = PinModifyOutput(ResponseApdu(QByteArray::fromHex("beef"))); QCOMPARE(output.getReturnCode(), CardReturnCode::UNKNOWN); QCOMPARE(output.getResponseApdu().getBuffer(), QByteArray::fromHex("beef")); } @@ -62,7 +62,7 @@ class test_PinModifyOutput void toCcid() { - QCOMPARE(PinModifyOutput(QByteArray::fromHex("9000")).toCcid(), QByteArray::fromHex("9000")); + QCOMPARE(PinModifyOutput(ResponseApdu(QByteArray::fromHex("9000"))).toCcid(), QByteArray::fromHex("9000")); } diff --git a/test/qt/card/base/test_Reader.cpp b/test/qt/card/base/test_Reader.cpp index 9b0aa22..0e77425 100644 --- a/test/qt/card/base/test_Reader.cpp +++ b/test/qt/card/base/test_Reader.cpp @@ -8,6 +8,7 @@ #include "MockCardConnectionWorker.h" #include "MockReader.h" +#include "TestFileHelper.h" #include @@ -19,80 +20,106 @@ class test_Reader : public QObject { Q_OBJECT + QSharedPointer mReader; + QString mReaderName = QString("test reader"); + QSharedPointer mWorker; private Q_SLOTS: + void init() + { + mReader.reset(new MockReader(mReaderName)); + mWorker.reset(new MockCardConnectionWorker(mReader.data())); + } + + + void cleanup() + { + mReader.clear(); + mWorker.clear(); + } + + void test_CreateCardConnectionWorkerNoCard() { - const QString name = QStringLiteral("name"); - MockReader reader(name); - QTest::ignoreMessage(QtWarningMsg, "No card available"); - QCOMPARE(reader.createCardConnectionWorker(), QSharedPointer()); + QCOMPARE(mReader->createCardConnectionWorker(), QSharedPointer()); } void test_CreateCardConnectionWorkerConnected() { - const QString name = QStringLiteral("name"); - MockReader reader(name); - MockCard* card = reader.setCard(MockCardConfig(), QSharedPointer()); + MockCard* card = mReader->setCard(MockCardConfig(), QSharedPointer()); card->setConnected(true); QTest::ignoreMessage(QtWarningMsg, "Card is already connected"); - QCOMPARE(reader.createCardConnectionWorker(), QSharedPointer()); + QCOMPARE(mReader->createCardConnectionWorker(), QSharedPointer()); } void test_UpdateRetryCounterCommandFailed() { - const QString name = QStringLiteral("name"); - MockReader reader(name); CardInfo cInfo(CardType::UNKNOWN, QSharedPointer(), 3, false, false); - ReaderInfo rInfo(name, ReaderManagerPlugInType::UNKNOWN, cInfo); - reader.mReaderInfo = rInfo; - QSharedPointer worker(new MockCardConnectionWorker()); - - QCOMPARE(reader.updateRetryCounter(worker), CardReturnCode::COMMAND_FAILED); - } - - - void test_GetRetryCounterNoEfCardAccess() - { - const QString name = QStringLiteral("name"); - MockReader reader(name); - CardInfo cInfo(CardType::UNKNOWN, QSharedPointer(), 3, false, false); - ReaderInfo rInfo(name, ReaderManagerPlugInType::UNKNOWN, cInfo); - reader.mReaderInfo = rInfo; - QSharedPointer worker(new MockCardConnectionWorker()); + ReaderInfo rInfo(mReaderName, ReaderManagerPlugInType::UNKNOWN, cInfo); + mReader->setReaderInfo(rInfo); QTest::ignoreMessage(QtCriticalMsg, "Cannot get EF.CardAccess"); - int counter = 3; - bool deactivated = false; - QCOMPARE(reader.getRetryCounter(worker, counter, deactivated), CardReturnCode::COMMAND_FAILED); + QCOMPARE(mReader->updateRetryCounter(mWorker), CardReturnCode::COMMAND_FAILED); } - void test_FireUpdateSignal() + void test_UpdateRetryCounterUnknown() + { + QByteArray bytes = QByteArray::fromHex(TestFileHelper::readFile(":/card/efCardAccess.hex")); + auto efCardAccess = EFCardAccess::decode(bytes); + CardInfo cInfo(CardType::UNKNOWN, efCardAccess, 3, false, false); + ReaderInfo rInfo(mReaderName, ReaderManagerPlugInType::UNKNOWN, cInfo); + mReader->setReaderInfo(rInfo); + mWorker->addResponse(CardReturnCode::UNKNOWN); + QCOMPARE(mReader->updateRetryCounter(mWorker), CardReturnCode::UNKNOWN); + } + + + void test_UpdateRetryCounter_OK_RetryCounterChanged() + { + QByteArray bytes = QByteArray::fromHex(TestFileHelper::readFile(":/card/efCardAccess.hex")); + auto efCardAccess = EFCardAccess::decode(bytes); + CardInfo cInfo(CardType::UNKNOWN, efCardAccess, 2, true, false); + ReaderInfo rInfo(mReaderName, ReaderManagerPlugInType::UNKNOWN, cInfo); + mReader->setReaderInfo(rInfo); + mWorker->addResponse(CardReturnCode::OK, QByteArray::fromHex("9000")); + QSignalSpy spy(mReader.data(), &Reader::fireCardRetryCounterChanged); + + QTest::ignoreMessage(QtDebugMsg, "StatusCode: SUCCESS"); + QTest::ignoreMessage(QtInfoMsg, "retrieved retry counter: 3 , was: 2 , PIN deactivated: false"); + QTest::ignoreMessage(QtDebugMsg, "fireCardRetryCounterChanged"); + QCOMPARE(mReader->updateRetryCounter(mWorker), CardReturnCode::OK); + QCOMPARE(mReader->getReaderInfo().getRetryCounter(), 3); + QVERIFY(!mReader->getReaderInfo().isPinDeactivated()); + QCOMPARE(spy.count(), 1); + } + + + void test_Update() { - const QString name = QStringLiteral("name"); - MockReader reader(name); CardInfo cInfo(CardType::UNKNOWN, QSharedPointer(), 3, false, false); - ReaderInfo rInfo(name, ReaderManagerPlugInType::UNKNOWN, cInfo); - reader.mReaderInfo = rInfo; + ReaderInfo rInfo(mReaderName, ReaderManagerPlugInType::UNKNOWN, cInfo); + mReader->setReaderInfo(rInfo); - QSignalSpy spyCardInserted(&reader, &Reader::fireCardInserted); - QSignalSpy spyCardRemoved(&reader, &Reader::fireCardRemoved); + QSignalSpy spyCardInserted(mReader.data(), &Reader::fireCardInserted); + QSignalSpy spyCardRemoved(mReader.data(), &Reader::fireCardRemoved); - reader.fireUpdateSignal(Reader::CardEvent::NONE); + mReader->update(); QCOMPARE(spyCardInserted.count(), 0); QCOMPARE(spyCardRemoved.count(), 0); + mReader->setCardEvent(Reader::CardEvent::CARD_INSERTED); QTest::ignoreMessage(QtInfoMsg, "Card inserted: {Type: UNKNOWN, Retry counter: 3, Pin deactivated: false}"); - reader.fireUpdateSignal(Reader::CardEvent::CARD_INSERTED); + mReader->update(); QCOMPARE(spyCardInserted.count(), 1); + mReader->setCardEvent(Reader::CardEvent::CARD_REMOVED); QTest::ignoreMessage(QtInfoMsg, "Card removed"); - reader.fireUpdateSignal(Reader::CardEvent::CARD_REMOVED); + mReader->update(); QCOMPARE(spyCardRemoved.count(), 1); } diff --git a/test/qt/card/bluetooth/test_BluetoothMessage.cpp b/test/qt/card/bluetooth/test_BluetoothMessage.cpp index c7c604c..692cb8b 100644 --- a/test/qt/card/bluetooth/test_BluetoothMessage.cpp +++ b/test/qt/card/bluetooth/test_BluetoothMessage.cpp @@ -4,9 +4,11 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ +#include "messages/BluetoothMessage.h" #include "messages/BluetoothMessageStatusInd.h" -#include -#include + +#include +#include using namespace governikus; @@ -33,6 +35,28 @@ class test_BluetoothMessage } + void toData() + { + BluetoothMessage msg(BluetoothMsgId::ConnectRequest); + const QSharedPointer maxMsgSize(new BluetoothMessageParameter(BluetoothParamId::MaxMsgSize, QByteArray::fromHex("111111"))); + const QSharedPointer connectionStatus(new BluetoothMessageParameter(BluetoothParamId::ConnectionStatus, QByteArray::fromHex("101010"))); + msg.addParameter(maxMsgSize); + msg.addParameter(connectionStatus); + QCOMPARE(msg.toData().toHex(), QByteArray("0002000000000003111111000100000310101000")); + } + + + void toString() + { + BluetoothMessage msg(BluetoothMsgId::ConnectRequest); + const QSharedPointer maxMsgSize(new BluetoothMessageParameter(BluetoothParamId::MaxMsgSize, QByteArray::fromHex("111111"))); + const QSharedPointer connectionStatus(new BluetoothMessageParameter(BluetoothParamId::ConnectionStatus, QByteArray::fromHex("101010"))); + msg.addParameter(maxMsgSize); + msg.addParameter(connectionStatus); + QCOMPARE(msg.toString(), QString("ConnectRequest | Parameter: MaxMsgSize | Value: 111111 | Parameter: ConnectionStatus | Value: 101010")); + } + + }; QTEST_GUILESS_MAIN(test_BluetoothMessage) diff --git a/test/qt/card/bluetooth/test_BluetoothMessageParameterCardReaderStatus.cpp b/test/qt/card/bluetooth/test_BluetoothMessageParameterCardReaderStatus.cpp index 79a0206..4b8b759 100644 --- a/test/qt/card/bluetooth/test_BluetoothMessageParameterCardReaderStatus.cpp +++ b/test/qt/card/bluetooth/test_BluetoothMessageParameterCardReaderStatus.cpp @@ -6,8 +6,8 @@ #include "messages/parameter/BluetoothMessageParameterCardReaderStatus.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/card/bluetooth/test_BluetoothMessageParameterMaxMsgSize.cpp b/test/qt/card/bluetooth/test_BluetoothMessageParameterMaxMsgSize.cpp index 2aa00a7..5f4d86e 100644 --- a/test/qt/card/bluetooth/test_BluetoothMessageParameterMaxMsgSize.cpp +++ b/test/qt/card/bluetooth/test_BluetoothMessageParameterMaxMsgSize.cpp @@ -4,8 +4,8 @@ */ #include "messages/parameter/BluetoothMessageParameterMaxMsgSize.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/card/bluetooth/test_BluetoothMessageParser.cpp b/test/qt/card/bluetooth/test_BluetoothMessageParser.cpp index 905479d..2ede1e5 100644 --- a/test/qt/card/bluetooth/test_BluetoothMessageParser.cpp +++ b/test/qt/card/bluetooth/test_BluetoothMessageParser.cpp @@ -8,8 +8,8 @@ #include "messages/BluetoothMessageStatusInd.h" #include "messages/parameter/BluetoothMessageParameterApduResponse.h" #include "messages/parameter/BluetoothMessageParameterStatusChange.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/drivers/test_ReaderDetector.cpp b/test/qt/card/drivers/test_ReaderDetector.cpp similarity index 100% rename from test/qt/drivers/test_ReaderDetector.cpp rename to test/qt/card/drivers/test_ReaderDetector.cpp diff --git a/test/qt/card/pace/test_EcUtil.cpp b/test/qt/card/pace/test_EcUtil.cpp index ca5a6c9..067973b 100644 --- a/test/qt/card/pace/test_EcUtil.cpp +++ b/test/qt/card/pace/test_EcUtil.cpp @@ -24,51 +24,44 @@ class test_EcUtil void createAndFreeEmptyCurve() { - QSharedPointer curve = EcUtil::create(static_cast(nullptr)); - curve.clear(); + EcUtil::create(static_cast(nullptr)); } void createAndFreeCurve() { - QSharedPointer curve = EllipticCurveFactory::create(8); - curve.clear(); + EllipticCurveFactory::create(8); } void createAndFreeEmptyKey() { - QSharedPointer key = EcUtil::create(static_cast(nullptr)); - key.clear(); + EcUtil::create(static_cast(nullptr)); } void createAndFreeKey() { - QSharedPointer key = EcUtil::create(EC_KEY_new()); - key.clear(); + EcUtil::create(EC_KEY_new()); } void createAndFreeEmptyPoint() { - QSharedPointer key = EcUtil::create(static_cast(nullptr)); - key.clear(); + EcUtil::create(static_cast(nullptr)); } void createAndFreePoint() { QSharedPointer curve = EllipticCurveFactory::create(8); - QSharedPointer key = EcUtil::create(EC_POINT_new(curve.data())); - key.clear(); + EcUtil::create(EC_POINT_new(curve.data())); } void createAndFreeEmptyBigNumber() { - QSharedPointer key = EcUtil::create(static_cast(nullptr)); - key.clear(); + EcUtil::create(static_cast(nullptr)); } @@ -76,8 +69,7 @@ class test_EcUtil { BIGNUM* bigNum = BN_new(); BN_bin2bn(reinterpret_cast("k37"), 3, bigNum); - QSharedPointer key = EcUtil::create(bigNum); - key.clear(); + EcUtil::create(bigNum); } diff --git a/test/qt/card/pace/test_KeyDerivationFunction.cpp b/test/qt/card/pace/test_KeyDerivationFunction.cpp index 5a388c8..02cb8aa 100644 --- a/test/qt/card/pace/test_KeyDerivationFunction.cpp +++ b/test/qt/card/pace/test_KeyDerivationFunction.cpp @@ -48,7 +48,7 @@ class test_KeyDerivationFunction { QSignalSpy spyLog(Env::getSingleton(), &LogHandler::fireLog); - KeyDerivationFunction kdf = toByteArray(KnownOIDs::id_PACE::ECDH::GM_3DES_CBC_CBC); + KeyDerivationFunction kdf(toByteArray(KnownOIDs::id_PACE::ECDH::GM_3DES_CBC_CBC)); QCOMPARE(spyLog.count(), 1); QVERIFY(TestFileHelper::containsLog(spyLog, QLatin1String("3DES not supported"))); @@ -58,7 +58,7 @@ class test_KeyDerivationFunction void aes128Key() { - KeyDerivationFunction kdf = toByteArray(KnownOIDs::id_PACE::ECDH::GM_AES_CBC_CMAC_128); + KeyDerivationFunction kdf(toByteArray(KnownOIDs::id_PACE::ECDH::GM_AES_CBC_CMAC_128)); QByteArray key = kdf.pi("123456"); @@ -69,7 +69,7 @@ class test_KeyDerivationFunction void aes196Key() { - KeyDerivationFunction kdf = toByteArray(KnownOIDs::id_PACE::ECDH::GM_AES_CBC_CMAC_192); + KeyDerivationFunction kdf(toByteArray(KnownOIDs::id_PACE::ECDH::GM_AES_CBC_CMAC_192)); QByteArray key = kdf.pi("123456"); @@ -80,7 +80,7 @@ class test_KeyDerivationFunction void aes256Key() { - KeyDerivationFunction kdf = toByteArray(KnownOIDs::id_PACE::ECDH::GM_AES_CBC_CMAC_256); + KeyDerivationFunction kdf(toByteArray(KnownOIDs::id_PACE::ECDH::GM_AES_CBC_CMAC_256)); QByteArray key = kdf.pi("123456"); diff --git a/test/qt/card/pace/test_PaceHandler.cpp b/test/qt/card/pace/test_PaceHandler.cpp index cab6dbc..1dc1010 100644 --- a/test/qt/card/pace/test_PaceHandler.cpp +++ b/test/qt/card/pace/test_PaceHandler.cpp @@ -6,6 +6,7 @@ #include "pace/PaceHandler.h" +#include "MockCardConnectionWorker.h" #include "MockReader.h" #include "TestFileHelper.h" @@ -212,6 +213,47 @@ class test_PaceHandler } + void establishPaceChannel_RetryAllowed() + { + QScopedPointer reader(MockReader::createMockReader(QVector(), mEfCardAccessBytes)); + QSharedPointer worker(new MockCardConnectionWorker(reader.data())); + QScopedPointer paceHandler(new PaceHandler(worker)); + + CardReturnCode status = paceHandler->establishPaceChannel(PacePasswordId::PACE_PIN, "123456"); + + QCOMPARE(status, CardReturnCode::RETRY_ALLOWED); + } + + + void establishPaceChannel_KeyAgreementRetryAllowed() + { + QScopedPointer reader(MockReader::createMockReader(QVector(), mEfCardAccessBytes)); + QSharedPointer worker(new MockCardConnectionWorker(reader.data())); + QScopedPointer paceHandler(new PaceHandler(worker)); + + worker->addResponse(CardReturnCode::UNKNOWN, QByteArray::fromHex("6A80")); + + CardReturnCode status = paceHandler->establishPaceChannel(PacePasswordId::PACE_PIN, "123456"); + + QCOMPARE(status, CardReturnCode::RETRY_ALLOWED); + } + + + void establishPaceChannel_KeyAgreementCommandFailed() + { + QScopedPointer reader(MockReader::createMockReader(QVector(), mEfCardAccessBytes)); + QSharedPointer worker(new MockCardConnectionWorker(reader.data())); + QScopedPointer paceHandler(new PaceHandler(worker)); + + worker->addResponse(CardReturnCode::UNKNOWN, QByteArray::fromHex("6A80")); + worker->addResponse(CardReturnCode::UNKNOWN, QByteArray::fromHex("9000")); + + CardReturnCode status = paceHandler->establishPaceChannel(PacePasswordId::PACE_PIN, "123456"); + + QCOMPARE(status, CardReturnCode::COMMAND_FAILED); + } + + // testcase TS_PACE_2.5.1c TR-03105 void failureOnMseSetAt() { @@ -227,6 +269,87 @@ class test_PaceHandler } + void transmitMSESetAT_ErrorMseSetAT_UNKNOWN() + { + QScopedPointer reader(MockReader::createMockReader(QVector(), mEfCardAccessBytes)); + QSharedPointer worker(new MockCardConnectionWorker(reader.data())); + QScopedPointer paceHandler(new PaceHandler(worker)); + + QTest::ignoreMessage(QtCriticalMsg, "Error on MSE:Set AT | UNKNOWN"); + worker->addResponse(CardReturnCode::UNKNOWN, QByteArray::fromHex("6A80")); + CardReturnCode status = paceHandler->transmitMSESetAT(PacePasswordId::PACE_PIN); + + QCOMPARE(status, CardReturnCode::UNKNOWN); + } + + + void transmitMSESetAT_OK() + { + QScopedPointer reader(MockReader::createMockReader(QVector(), mEfCardAccessBytes)); + QSharedPointer worker(new MockCardConnectionWorker(reader.data())); + QScopedPointer paceHandler(new PaceHandler(worker)); + QByteArray bytes = QByteArray::fromHex("30 0F" + " 06 0A 04007F00070202040202" + " 02 01 02"); + + auto paceInfo = PaceInfo::decode(bytes); + paceHandler->mPaceInfo = paceInfo; + QVERIFY(paceHandler->mPaceInfo != nullptr); + + worker->addResponse(CardReturnCode::OK, QByteArray::fromHex("009000")); + worker->addResponse(CardReturnCode::OK, QByteArray::fromHex("009000")); + CardReturnCode status = paceHandler->transmitMSESetAT(PacePasswordId::PACE_PIN); + + QCOMPARE(status, CardReturnCode::OK); + QCOMPARE(paceHandler->getStatusMseSetAt(), QByteArray::fromHex("0090")); + } + + + void transmitMSESetAT_ErrorMseSetAT_PROTOCOL_ERROR() + { + QScopedPointer reader(MockReader::createMockReader(QVector(), mEfCardAccessBytes)); + QSharedPointer worker(new MockCardConnectionWorker(reader.data())); + QScopedPointer paceHandler(new PaceHandler(worker)); + QByteArray bytes = QByteArray::fromHex("30 0F" + " 06 0A 04007F00070202040202" + " 02 01 02"); + + auto paceInfo = PaceInfo::decode(bytes); + paceHandler->mPaceInfo = paceInfo; + + worker->addResponse(CardReturnCode::OK, QByteArray::fromHex("0090")); + worker->addResponse(CardReturnCode::CANCELLATION_BY_USER, QByteArray::fromHex("0090")); + QTest::ignoreMessage(QtCriticalMsg, "Error on MSE:Set AT"); + QCOMPARE(paceHandler->transmitMSESetAT(PacePasswordId::PACE_PIN), CardReturnCode::PROTOCOL_ERROR); + QCOMPARE(paceHandler->getStatusMseSetAt(), QByteArray::fromHex("0090")); + + worker->addResponse(CardReturnCode::OK, QByteArray::fromHex("0090")); + worker->addResponse(CardReturnCode::OK, QByteArray::fromHex("006A80")); + QTest::ignoreMessage(QtCriticalMsg, "Error on MSE:Set AT"); + QCOMPARE(paceHandler->transmitMSESetAT(PacePasswordId::PACE_PIN), CardReturnCode::PROTOCOL_ERROR); + QCOMPARE(paceHandler->getStatusMseSetAt(), QByteArray::fromHex("006A")); + } + + + void transmitMSESetAT_ErrorMseSetAT_RETRY_ALLOWED() + { + QScopedPointer reader(MockReader::createMockReader(QVector(), mEfCardAccessBytes)); + QSharedPointer worker(new MockCardConnectionWorker(reader.data())); + QScopedPointer paceHandler(new PaceHandler(worker)); + QByteArray bytes = QByteArray::fromHex("30 0F" + " 06 0A 04007F00070202040202" + " 02 01 02"); + + auto paceInfo = PaceInfo::decode(bytes); + paceHandler->mPaceInfo = paceInfo; + + worker->addResponse(CardReturnCode::OK, QByteArray::fromHex("0090")); + worker->addResponse(CardReturnCode::UNDEFINED); + QTest::ignoreMessage(QtCriticalMsg, "Error on MSE:Set AT"); + QCOMPARE(paceHandler->transmitMSESetAT(PacePasswordId::PACE_PIN), CardReturnCode::RETRY_ALLOWED); + } + + }; QTEST_GUILESS_MAIN(test_PaceHandler) diff --git a/test/qt/card/pcsc/test_pcscReaderFeature.cpp b/test/qt/card/pcsc/test_pcscReaderFeature.cpp index 52475e5..5a2e7ce 100644 --- a/test/qt/card/pcsc/test_pcscReaderFeature.cpp +++ b/test/qt/card/pcsc/test_pcscReaderFeature.cpp @@ -9,8 +9,8 @@ #include "LogHandler.h" #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; @@ -25,7 +25,8 @@ class test_pcscReaderFeature int getFeatureCount(const PcscReaderFeature& pPcscReaderFeature) { int count = 0; - for (FeatureID feature : Enum::getList()) + const auto list = Enum::getList(); + for (FeatureID feature : list) { if (pPcscReaderFeature.contains(feature)) { diff --git a/test/qt/card/pcsc/test_pcscReaderPaceCapability.cpp b/test/qt/card/pcsc/test_pcscReaderPaceCapability.cpp index 2c3ffb8..e19500f 100644 --- a/test/qt/card/pcsc/test_pcscReaderPaceCapability.cpp +++ b/test/qt/card/pcsc/test_pcscReaderPaceCapability.cpp @@ -9,8 +9,8 @@ #include "LogHandler.h" #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; @@ -25,7 +25,8 @@ class test_pcscReaderPaceCapability int getCapabilityCount(const PcscReaderPaceCapability& pPcscReaderPaceCapability) { int count = 0; - for (PaceCapabilityId capability : Enum::getList()) + const auto list = Enum::getList(); + for (PaceCapabilityId capability : list) { if (pPcscReaderPaceCapability.contains(capability)) { diff --git a/test/qt/card/test_EstablishPaceChannel.cpp b/test/qt/card/test_EstablishPaceChannel.cpp index b7729fd..01d5433 100644 --- a/test/qt/card/test_EstablishPaceChannel.cpp +++ b/test/qt/card/test_EstablishPaceChannel.cpp @@ -4,8 +4,8 @@ * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "EstablishPaceChannel.h" diff --git a/test/qt/card/test_EstablishPaceChannelOutput.cpp b/test/qt/card/test_EstablishPaceChannelOutput.cpp index 152d46a..b841fdf 100644 --- a/test/qt/card/test_EstablishPaceChannelOutput.cpp +++ b/test/qt/card/test_EstablishPaceChannelOutput.cpp @@ -4,8 +4,8 @@ * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "EstablishPaceChannelOutput.h" #include "TestFileHelper.h" diff --git a/test/qt/card/test_GeneralAuthenticateResponse.cpp b/test/qt/card/test_GeneralAuthenticateResponse.cpp index a7da316..a8515a8 100644 --- a/test/qt/card/test_GeneralAuthenticateResponse.cpp +++ b/test/qt/card/test_GeneralAuthenticateResponse.cpp @@ -4,8 +4,8 @@ * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "GeneralAuthenticateResponse.h" @@ -21,10 +21,9 @@ class test_GeneralAuthenticateResponse private Q_SLOTS: void parseGAEncryptedNonceResponse() { - QByteArray bytes = QByteArray::fromHex("7c1280105391ded7867c2d7df7f871ed6913c07d9000"); + const ResponseApdu apdu(QByteArray::fromHex("7c1280105391ded7867c2d7df7f871ed6913c07d9000")); - GAEncryptedNonceResponse response; - response.setBuffer(bytes); + const GAEncryptedNonceResponse response(apdu); QCOMPARE(response.getEncryptedNonce(), QByteArray::fromHex("5391ded7867c2d7df7f871ed6913c07d")); } @@ -32,10 +31,9 @@ class test_GeneralAuthenticateResponse void parseGAEncryptedNonceResponse_invalidData() { - QByteArray bytes = QByteArray::fromHex("7c1281105391ded7867c2d7df7f871ed6913c07d9000"); + const ResponseApdu apdu(QByteArray::fromHex("7c1281105391ded7867c2d7df7f871ed6913c07d9000")); - GAEncryptedNonceResponse response; - response.setBuffer(bytes); + const GAEncryptedNonceResponse response(apdu); QCOMPARE(response.getEncryptedNonce(), QByteArray()); } @@ -43,10 +41,9 @@ class test_GeneralAuthenticateResponse void parseGAMapNonceResponse() { - QByteArray bytes = QByteArray::fromHex("7c438241042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b09000"); + const ResponseApdu apdu(QByteArray::fromHex("7c438241042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b09000")); - GAMapNonceResponse response; - response.setBuffer(bytes); + const GAMapNonceResponse response(apdu); QCOMPARE(response.getMappingData(), QByteArray::fromHex("042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453 408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b0")); } @@ -54,10 +51,9 @@ class test_GeneralAuthenticateResponse void parseGAMapNonceResponse_invalidData() { - QByteArray bytes = QByteArray::fromHex("7c438141042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b09000"); + const ResponseApdu apdu(QByteArray::fromHex("7c438141042a8199d469fde8f98e22bf8bb5a72804b5293bb54a8afa4d84e4b63217d163b61d78dc6453408bde19a86254ee3b0f03871964b71f1b57f77037ecdbedbe79b09000")); - GAMapNonceResponse response; - response.setBuffer(bytes); + const GAMapNonceResponse response(apdu); QCOMPARE(response.getMappingData(), QByteArray()); } @@ -65,10 +61,9 @@ class test_GeneralAuthenticateResponse void parseGAPerformKeyAgreementResponse() { - QByteArray bytes = QByteArray::fromHex("7c43844104a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc9000"); + const ResponseApdu apdu(QByteArray::fromHex("7c43844104a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc9000")); - GAPerformKeyAgreementResponse response; - response.setBuffer(bytes); + const GAPerformKeyAgreementResponse response(apdu); QCOMPARE(response.getEphemeralPublicKey(), QByteArray::fromHex("04a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc")); } @@ -76,10 +71,9 @@ class test_GeneralAuthenticateResponse void parseGAPerformKeyAgreementResponse_invalid() { - QByteArray bytes = QByteArray::fromHex("7c43814104a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc9000"); + const ResponseApdu apdu(QByteArray::fromHex("7c43814104a3be2ed0fccb4bf96df00be39a9c3e6b67d3a1118c95c195d0389fa14956c383a322c34f1b63a7bdb41f98b644aa9e15f823a2d726ef6ae8df3c10ac4e7298cc9000")); - GAPerformKeyAgreementResponse response; - response.setBuffer(bytes); + const GAPerformKeyAgreementResponse response(apdu); QCOMPARE(response.getEphemeralPublicKey(), QByteArray()); } @@ -87,10 +81,9 @@ class test_GeneralAuthenticateResponse void parseGAMutualAuthenticationResponse_withoutCARs() { - QByteArray bytes = QByteArray::fromHex("7c0a8608afcd013365384ba39000"); + const ResponseApdu apdu(QByteArray::fromHex("7c0a8608afcd013365384ba39000")); - GAMutualAuthenticationResponse response; - response.setBuffer(bytes); + const GAMutualAuthenticationResponse response(apdu); QCOMPARE(response.getAuthenticationToken(), QByteArray::fromHex("afcd013365384ba3")); QCOMPARE(response.getCarCurr(), QByteArray()); @@ -101,10 +94,9 @@ class test_GeneralAuthenticateResponse void testGAMutualAuthenticationResponse_oneCAR() { // this is the response from a new card that did not see any link certificates - QByteArray bytes = QByteArray::fromHex("7c1a860871204ff538eec464870e44454356434165494430303130339000"); + const ResponseApdu apdu(QByteArray::fromHex("7c1a860871204ff538eec464870e44454356434165494430303130339000")); - GAMutualAuthenticationResponse response; - response.setBuffer(bytes); + const GAMutualAuthenticationResponse response(apdu); QCOMPARE(response.getCarCurr(), QByteArray("DECVCAeID00103")); QCOMPARE(response.getCarPrev(), QByteArray()); @@ -114,10 +106,9 @@ class test_GeneralAuthenticateResponse void testGAMutualAuthenticationResponse_twoCARs() { // this is the response from a card that already saw link certificates - QByteArray bytes = QByteArray::fromHex("7c2a86086fa6266f2ef1f2d9870e4445544553546549443030303034880e44455445535465494430303030329000"); + const ResponseApdu apdu(QByteArray::fromHex("7c2a86086fa6266f2ef1f2d9870e4445544553546549443030303034880e44455445535465494430303030329000")); - GAMutualAuthenticationResponse response; - response.setBuffer(bytes); + const GAMutualAuthenticationResponse response(apdu); QCOMPARE(response.getCarCurr(), QByteArray("DETESTeID00004")); QCOMPARE(response.getCarPrev(), QByteArray("DETESTeID00002")); @@ -127,10 +118,9 @@ class test_GeneralAuthenticateResponse void testGAMutualAuthenticationResponse_invalid() { // this is the response from a new card that did not see any link certificates - QByteArray bytes = QByteArray::fromHex("7c1a810871204ff538eec464870e44454356434165494430303130339000"); + const ResponseApdu apdu(QByteArray::fromHex("7c1a810871204ff538eec464870e44454356434165494430303130339000")); - GAMutualAuthenticationResponse response; - response.setBuffer(bytes); + const GAMutualAuthenticationResponse response(apdu); QCOMPARE(response.getCarCurr(), QByteArray()); QCOMPARE(response.getCarPrev(), QByteArray()); @@ -139,10 +129,9 @@ class test_GeneralAuthenticateResponse void testGAChipAuthenticationResponse() { - QByteArray bytes = QByteArray::fromHex("7c1481085b5b32c5b15d012c8208aaa14cfba15994d39000"); + const ResponseApdu apdu(QByteArray::fromHex("7c1481085b5b32c5b15d012c8208aaa14cfba15994d39000")); - GAChipAuthenticationResponse response; - response.setBuffer(bytes); + const GAChipAuthenticationResponse response(apdu); QCOMPARE(response.getNonce(), QByteArray::fromHex("5b5b32c5b15d012c")); QCOMPARE(response.getAuthenticationToken(), QByteArray::fromHex("aaa14cfba15994d3")); @@ -151,10 +140,9 @@ class test_GeneralAuthenticateResponse void testGAChipAuthenticationResponse_invalid() { - QByteArray bytes = QByteArray::fromHex("7c148208aaa14cfba15994d39000"); + const ResponseApdu apdu(QByteArray::fromHex("7c148208aaa14cfba15994d39000")); - GAChipAuthenticationResponse response; - response.setBuffer(bytes); + const GAChipAuthenticationResponse response(apdu); QCOMPARE(response.getAuthenticationToken(), QByteArray()); QCOMPARE(response.getNonce(), QByteArray()); diff --git a/test/qt/card/test_MSEBuilder.cpp b/test/qt/card/test_MSEBuilder.cpp index 75574d9..63759eb 100644 --- a/test/qt/card/test_MSEBuilder.cpp +++ b/test/qt/card/test_MSEBuilder.cpp @@ -2,10 +2,10 @@ * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany */ -#include "Commands.h" +#include "MSEBuilder.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/card/test_SecureMessaging.cpp b/test/qt/card/test_SecureMessaging.cpp index 93ddbd5..d56d1c8 100644 --- a/test/qt/card/test_SecureMessaging.cpp +++ b/test/qt/card/test_SecureMessaging.cpp @@ -2,8 +2,8 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "asn1/KnownOIDs.h" #include "pace/SecureMessaging.h" @@ -217,9 +217,8 @@ class test_SecureMessaging quint32 ssc = 0; auto result = encryptResponse(plainBuffer, ssc); ResponseApdu encryptedResponse(concat({result[0], result[1], result[2], result[3]})); - ResponseApdu decryptedResponse; - QVERIFY(mSecureMessaging->decrypt(encryptedResponse, decryptedResponse)); + ResponseApdu decryptedResponse = mSecureMessaging->decrypt(encryptedResponse); QCOMPARE(decryptedResponse.getBuffer(), plainBuffer); } @@ -231,9 +230,8 @@ class test_SecureMessaging quint32 ssc = 0; auto result = encryptResponse(plainBuffer, ssc); ResponseApdu encryptedResponse(concat({result[0], result[1], result[2], result[3]})); - ResponseApdu decryptedResponse; - QVERIFY(mSecureMessaging->decrypt(encryptedResponse, decryptedResponse)); + ResponseApdu decryptedResponse = mSecureMessaging->decrypt(encryptedResponse); QCOMPARE(decryptedResponse.getBuffer(), plainBuffer); } @@ -246,17 +244,16 @@ class test_SecureMessaging quint32 ssc = 0; auto result = encryptResponse(plainBuffer, ssc); ResponseApdu encryptedResponse(concat({result[0], result[1], result[2], result[3]})); - ResponseApdu decryptedResponse; QCOMPARE(ssc, 1u); - QVERIFY(mSecureMessaging->decrypt(encryptedResponse, decryptedResponse)); + ResponseApdu decryptedResponse = mSecureMessaging->decrypt(encryptedResponse); QCOMPARE(decryptedResponse.getBuffer(), plainBuffer); auto result2 = encryptResponse(plainBuffer2, ssc); ResponseApdu encryptedResponse2(concat({result2[0], result2[1], result2[2], result2[3]})); - ResponseApdu decryptedResponse2; + QCOMPARE(ssc, 2u); - QVERIFY(mSecureMessaging->decrypt(encryptedResponse2, decryptedResponse2)); + ResponseApdu decryptedResponse2 = mSecureMessaging->decrypt(encryptedResponse2); QCOMPARE(decryptedResponse2.getBuffer(), plainBuffer2); } @@ -268,9 +265,8 @@ class test_SecureMessaging quint32 ssc = 0; auto result = encryptResponse(plainBuffer, ssc); ResponseApdu encryptedResponse(concat({result[0], result[1], result[2], QByteArray::fromHex("6B00")})); - ResponseApdu decryptedResponse; - QVERIFY(!mSecureMessaging->decrypt(encryptedResponse, decryptedResponse)); + QVERIFY(mSecureMessaging->decrypt(encryptedResponse).isEmpty()); } @@ -281,9 +277,8 @@ class test_SecureMessaging quint32 ssc = 0; auto result = encryptResponse(plainBuffer, ssc); ResponseApdu encryptedResponse(concat({result[0], QByteArray::fromHex("99026B00"), result[2], result[3]})); - ResponseApdu decryptedResponse; - QVERIFY(!mSecureMessaging->decrypt(encryptedResponse, decryptedResponse)); + QVERIFY(mSecureMessaging->decrypt(encryptedResponse).isEmpty()); } @@ -294,9 +289,8 @@ class test_SecureMessaging quint32 ssc = 0; auto result = encryptResponse(plainBuffer, ssc); ResponseApdu encryptedResponse(concat({result[0], result[1], QByteArray::fromHex("8E080102030404030201"), result[3]})); - ResponseApdu decryptedResponse; - QVERIFY(!mSecureMessaging->decrypt(encryptedResponse, decryptedResponse)); + QVERIFY(mSecureMessaging->decrypt(encryptedResponse).isEmpty()); } diff --git a/test/qt/card/test_SecureMessagingResponse.cpp b/test/qt/card/test_SecureMessagingResponse.cpp index 50fb734..3503ad1 100644 --- a/test/qt/card/test_SecureMessagingResponse.cpp +++ b/test/qt/card/test_SecureMessagingResponse.cpp @@ -4,8 +4,8 @@ * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "SecureMessagingResponse.h" diff --git a/test/qt/cli/test_UIPlugInCli.cpp b/test/qt/cli/test_UIPlugInCli.cpp deleted file mode 100644 index c3b1358..0000000 --- a/test/qt/cli/test_UIPlugInCli.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/*! - * \brief Unit tests for \ref UIPlugInCli - * - * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "CliHelper.h" - -#include - -using namespace governikus; - -class test_UIPlugInCli - : public QObject -{ - Q_OBJECT - - private: - QScopedPointer cli; - - private Q_SLOTS: - void initTestCase() - { - #ifdef Q_OS_WIN - QSKIP("Console is not supported at the moment"); - #endif - - #ifdef Q_OS_MACOS - QSKIP("QProcess/CliHelper is flaky on OSX"); - #endif - - #if defined(Q_OS_BSD4) || defined (Q_OS_LINUX) - QSKIP("Platform plugin seems broken"); - #endif - } - - - void init() - { - cli.reset(new CliHelper()); - } - - - void cleanup() - { - cli->tearDown(); - } - - - void quit() - { - CLI_VERIFY(cli->run()); - CLI_VERIFY(cli->waitForOutput("ready")); - CLI_VERIFY(cli->waitForPong()); - cli->send("help"); - CLI_VERIFY(cli->waitForOutput("Available commands:")); - cli->send("quit"); - CLI_VERIFY(cli->waitForOutput("Shutdown application")); - CLI_VERIFY(cli->waitForOutput("Emit fire shutdown")); - CLI_VERIFY(cli->waitForOutput("Shutdown ReaderManager")); - CLI_VERIFY(cli->waitForOutput("Unregister resource:")); - CLI_VERIFY(cli->waitForOutput("Quit event loop of QCoreApplication")); - cli->waitForFinished(); - QCOMPARE(cli->state(), QProcess::NotRunning); - QCOMPARE(cli->exitCode(), 0); - } - - - void term() - { - CLI_VERIFY(cli->run()); - CLI_VERIFY(cli->waitForOutput("ready")); - CLI_VERIFY(cli->waitForPong()); - cli->stop(); - QCOMPARE(cli->state(), QProcess::NotRunning); - QCOMPARE(cli->exitCode(), 0); - } - - - void termDuringOldPin() - { - CLI_VERIFY(cli->run()); - CLI_VERIFY(cli->waitForOutput("ready")); - cli->send("changepin"); - CLI_VERIFY(cli->waitForOutput("Please enter old PIN")); - cli->stop(); - QCOMPARE(cli->state(), QProcess::NotRunning); - QCOMPARE(cli->exitCode(), 0); - } - - - void changePin() - { - CLI_VERIFY(cli->run()); - CLI_VERIFY(cli->waitForOutput("ready")); - cli->send("changepin"); - CLI_VERIFY(cli->waitForOutput("Please enter old PIN")); - cli->send("123456"); - CLI_VERIFY(cli->waitForOutput("Please enter new PIN")); - cli->send("123456"); - CLI_VERIFY(cli->waitForOutput("Please enter new PIN again")); - cli->send("123456"); - CLI_VERIFY(cli->waitForOutput("Start")); - } - - - void getServerPort() - { - CLI_VERIFY(cli->run()); - CLI_VERIFY(cli->waitForOutput("ready")); - QVERIFY(cli->getServerPort() > 0); - } - - -}; - -QTEST_GUILESS_MAIN(test_UIPlugInCli) -#include "test_UIPlugInCli.moc" diff --git a/test/qt/configuration/test_ProviderConfigurationParser.cpp b/test/qt/configuration/test_ProviderConfigurationParser.cpp index af297f6..eed1940 100644 --- a/test/qt/configuration/test_ProviderConfigurationParser.cpp +++ b/test/qt/configuration/test_ProviderConfigurationParser.cpp @@ -255,7 +255,7 @@ class test_ProviderConfigurationParser QTest::newRow("mac") << desktop; QTest::newRow("linux") << desktop; QTest::newRow("android") << desktop; - QTest::newRow("ios") << 15; + QTest::newRow("ios") << 17; } diff --git a/test/qt/configuration/test_ReaderConfiguration.cpp b/test/qt/configuration/test_ReaderConfiguration.cpp index 435d41c..9fc0428 100644 --- a/test/qt/configuration/test_ReaderConfiguration.cpp +++ b/test/qt/configuration/test_ReaderConfiguration.cpp @@ -11,8 +11,8 @@ #include "ResourceLoader.h" #include -#include -#include +#include +#include using namespace governikus; @@ -72,7 +72,7 @@ class test_ReaderConfiguration QTest::addColumn("readerIcon"); QTest::addColumn("readerPattern"); - QTest::newRow("Remote Cardreader") << UsbId(0x0000, 0x0000) << "NFC-abcdef1234567890" << QStringLiteral("Smartphone als Kartenleser") << "img_RemoteReader" << "^NFC.*"; + QTest::newRow("Remote card reader") << UsbId(0x0000, 0x0000) << "NFC-abcdef1234567890" << QStringLiteral("Smartphone als Kartenleser") << "img_RemoteReader" << "^NFC.*"; QTest::newRow("REINER SCT cyberJack RFID komfort") << UsbId(0x0C4B, 0x0501) << "REINER SCT cyberJack RFID komfort" << "REINER SCT cyberJack RFID komfort" << "img_Reiner_SCT_cyberjack_RFID_komfort" << "REINER SCT cyberJack RFID komfort"; QTest::newRow("REINER SCT cyberJack RFID standard") << UsbId(0x0C4B, 0x0500) << "REINER SCT cyberJack RFID standard" << "REINER SCT cyberJack RFID standard" << "img_Reiner_SCT_cyberjack_RFID_standard" << "REINER SCT cyberJack RFID standard"; @@ -90,12 +90,12 @@ class test_ReaderConfiguration QTest::newRow("OMNIKEY 5021") << UsbId(0x076B, 0x5340) << "OMNIKEY CardMan 5x21-CL 0" << "OMNIKEY 5021-CL" << "img_HID_Omnikey_Mobile_Reader_502X_CL" << "OMNIKEY CardMan 5x21-CL 0|OMNIKEY CardMan \\(076B:5340\\) 5021 CL"; QTest::newRow("OMNIKEY 5022") << UsbId(0x076B, 0x5022) << "HID Global OMNIKEY 5022 Smart Card Reader 0" << "OMNIKEY 5022-CL" << "img_HID_Omnikey_Mobile_Reader_502X_CL" << "HID Global OMNIKEY 5022 Smart Card Reader 0|HID Global OMNIKEY 5022 Smart Card Reader"; QTest::newRow("OMNIKEY 5321 v2") << UsbId(0x076B, 0x5321) << "OOMNIKEY CardMan 5x21-CL 0" << "OMNIKEY 5321 v2" << "img_HID_Global_OMNIKEY_5321_V2" << R"(OMNIKEY CardMan 5x21-CL 0|OMNIKEY CardMan \(076B:5321\) 5321(\(1\)|\(2\)))"; - QTest::newRow("OMNIKEY 5421") << UsbId(0x076B, 0x5421) << "OMNIKEY CardMan 5x21-CL 0" << "OMNIKEY 5421" << "img_HID_Omnikey_542x" << R"(OMNIKEY CardMan 5x21-CL 0|OMNIKEY CardMan \(076B:5421\) 5421(\(1\)|\(2\)))"; + QTest::newRow("OMNIKEY 5421") << UsbId(0x076B, 0x5421) << "OMNIKEY CardMan 5x21-CL 0" << "OMNIKEY 5421" << "img_HID_Omnikey_542x" << R"(OMNIKEY CardMan 5x21-CL 0|OMNIKEY Smart Card Reader USB 0|OMNIKEY CardMan \(076B:5421\) 5421(\(1\)|\(2\)))"; QTest::newRow("OMNIKEY 5422") << UsbId(0x076B, 0x5422) << "HID Global OMNIKEY 5422CL Smartcard Reader 0" << "OMNIKEY 5422" << "img_HID_Omnikey_542x" << R"(HID Global OMNIKEY 5422CL Smartcard Reader 0|HID Global OMNIKEY Smartcard Reader (\(1\)|\(2\)))"; QTest::newRow("FEIG OBID myAXXESS RFID-Reader") << UsbId(0x0AB1, 0x0003) << "FEIG ELECTRONIC GmbH OBID myAXXESS basic Slot:CL 358334430" << "OBID RFID-Reader" << "img_FEIG_myAXXES_basic" << "FEIG ELECTRONIC GmbH OBID myAXXESS basic Slot:CL 358334430"; - QTest::newRow("Gemalto-Prox-DU") << UsbId(0x08E6, 0x5503) << "Gemalto Prox-DU Contactless_" << "Prox-DU HID" << "img_Gemalto_Prox_DU" << R"(Gemalto Prox(-DU| Dual)( Contactless_| USB PC Link(Reader| Reader)(\(2\)|\(1\))))"; + QTest::newRow("Gemalto-Prox-DU") << UsbId(0x08E6, 0x5503) << "Gemalto Prox-DU Contactless_" << "Prox-DU HID" << "img_Gemalto_Prox_DU" << R"(Gemalto .*Prox(-DU| Dual)( Contactless_| USB PC Link(Reader| Reader)(\(2\)|\(1\))))"; QTest::newRow("Gemalto-Prox-SU") << UsbId(0x08E6, 0x5504) << "Gemalto Prox-SU Contactless_" << "Gemalto Prox-SU Contactless" << "img_Gemalto_Prox_SU" << R"(Gemalto Prox( |-)SU( Contactless_| USB PC LinkReader(\(1\)|\(2\))))"; QTest::newRow("Identiv-SCL-3711") << UsbId(0x04E6, 0x5591) << "SCM Microsystems SCL3711 reader & NFC device 0" << "Identiv SCL3711" << "img_Identive_SCL3711" << "(SCM Microsystems SCL3711 reader & NFC device 0|SCL3711 reader and NFC device)"; @@ -138,7 +138,7 @@ class test_ReaderConfiguration QTest::newRow("UU") << UsbId(0xFFFF, 0xFFFF) << "crap" << "crap"; - QTest::newRow("Remote Cardreader") << UsbId(0x0000, 0x0000) << "NFC-abcdef1234567890" << QStringLiteral("Smartphone als Kartenleser"); + QTest::newRow("Remote card reader") << UsbId(0x0000, 0x0000) << "NFC-abcdef1234567890" << QStringLiteral("Smartphone als Kartenleser"); QTest::newRow("REINER SCT cyberJack RFID komfort-windows-7-10") << UsbId(0x0C4B, 0x0501) << "REINER SCT cyberJack RFID komfort USB 1" << "REINER SCT cyberJack RFID komfort"; QTest::newRow("REINER SCT cyberJack RFID komfort-macosx-10.11-10.14") << UsbId(0x0C4B, 0x0501) << "REINER SCT cyberJack RFID komfort" << "REINER SCT cyberJack RFID komfort"; @@ -149,7 +149,8 @@ class test_ReaderConfiguration QTest::newRow("REINER SCT cyberJack RFID basis-windows-7-10") << UsbId(0x0C4B, 0x9102) << "REINER SCT cyberJack RFID basis 0" << "REINER SCT cyberJack RFID basis"; QTest::newRow("REINER SCT cyberJack RFID basis-macosx-10.11-10.14") << UsbId(0x0C4B, 0x9102) << "REINER SCT cyberJack RFID basis" << "REINER SCT cyberJack RFID basis"; - QTest::newRow("REINER SCT cyberJack wave-windows-7-10") << UsbId(0x0C4B, 0x0505) << "REINER SCT cyberJack wave 0" << "REINER SCT cyberJack wave"; + QTest::newRow("REINER SCT cyberJack wave-windows-7-10-1") << UsbId(0x0C4B, 0x0505) << "REINER SCT cyberJack wave 0" << "REINER SCT cyberJack wave"; + QTest::newRow("REINER SCT cyberJack wave-windows-7-10-2") << UsbId(0x0C4B, 0x0505) << "REINER SCT cyberJack wave USB 1" << "REINER SCT cyberJack wave"; QTest::newRow("REINER SCT cyberJack wave-macosx-10.11-10.14") << UsbId(0x0C4B, 0x0505) << "REINER SCT cyberJack wave" << "REINER SCT cyberJack wave"; QTest::newRow("KOBIL IDToken-windows-7-10") << UsbId(0x0D46, 0x301D) << "KOBIL IDToken 0" << "KOBIL IDToken"; @@ -157,11 +158,15 @@ class test_ReaderConfiguration QTest::newRow("SCM SDI011-windows-7-10-1") << UsbId(0x04E6, 0x512B) << "SCM Microsystems Inc. SDI011 Contactless Reader 0" << "SDI011 Contactless Reader"; QTest::newRow("SCM SDI011-windows-7-10-2") << UsbId(0x04E6, 0x512B) << "SCM Microsystems Inc. SDI011 Smart Card Reader 0" << "SCM Microsystems Inc. SDI011 Smart Card Reader 0"; - QTest::newRow("SCM SDI011-macosx-10.11-10.14") << UsbId(0x04E6, 0x512B) << "SDI011 USB Smart Card Reader(1)" << "SDI011 Contactless Reader"; - QTest::newRow("SCM SDI011-macosx-10.11-10.14") << UsbId(0x04E6, 0x512B) << "SDI011 USB Smart Card Reader(2)" << "SDI011 Contactless Reader"; + QTest::newRow("SCM SDI011-windows-7-10-3") << UsbId(0x04E6, 0x512B) << "SDI011 Contactless Reader" << "SDI011 Contactless Reader"; + QTest::newRow("SCM SDI011-macosx-10.11-10.14-1") << UsbId(0x04E6, 0x512B) << "SDI011 USB Smart Card Reader(1)" << "SDI011 Contactless Reader"; + QTest::newRow("SCM SDI011-macosx-10.11-10.14-2") << UsbId(0x04E6, 0x512B) << "SDI011 USB Smart Card Reader(2)" << "SDI011 Contactless Reader"; + QTest::newRow("SCM SDI011-macosx-10.10-10:14-3") << UsbId(0x04E6, 0x512B) << "SCM Microsystems Inc. SDI011 Contactless Reader(1)" << "SDI011 Contactless Reader"; - QTest::newRow("SCM SCL011-windows-7-10") << UsbId(0x04E6, 0x5292) << "SCM Microsystems Inc. SCL011 Contactless Reader 0" << "SCL01x Contactless Reader"; - QTest::newRow("SCM SCL011-macosx-10.11-10.14") << UsbId(0x04E6, 0x5292) << "SCL011 Contactless Reader" << "SCL01x Contactless Reader"; + QTest::newRow("SCM SCL011-windows-7-10-1") << UsbId(0x04E6, 0x5292) << "SCL011 Contactless Reader" << "SCL01x Contactless Reader"; + QTest::newRow("SCM SCL011-windows-7-10-2") << UsbId(0x04E6, 0x5292) << "SCM Microsystems Inc. SCL011 Contactless Reader 0" << "SCL01x Contactless Reader"; + QTest::newRow("SCM SCL011-macosx-10.11-10.14-1") << UsbId(0x04E6, 0x5292) << "SCL011 Contactless Reader" << "SCL01x Contactless Reader"; + QTest::newRow("SCM SCL011-macosx-10.11-10-14-2") << UsbId(0x04E6, 0x5292) << "SCM Microsystems Inc. SCL011 Contactless Reader" << "SCL01x Contactless Reader"; QTest::newRow("ACS-ACR1281U-windows-7-10") << UsbId(0x072F, 0x0901) << "ACS ACR1281 PICC Reader 0" << "ACS ACR1281U"; QTest::newRow("ACS-ACR1281U-macosx-10.11-10.14") << UsbId(0x072F, 0x0901) << "ACS ACR1281 PICC Reader" << "ACS ACR1281U"; @@ -184,6 +189,7 @@ class test_ReaderConfiguration QTest::newRow("OMNIKEY 5421-windows-7-10-1") << UsbId(0x076B, 0x5421) << "OMNIKEY CardMan 5x21 0" << "OMNIKEY CardMan 5x21 0"; QTest::newRow("OMNIKEY 5421-windows-7-10-2") << UsbId(0x076B, 0x5421) << "OMNIKEY CardMan 5x21-CL 0" << "OMNIKEY 5421"; + QTest::newRow("OMNIKEY 5421-windows-7-10-3") << UsbId(0x076B, 0x5421) << "OMNIKEY Smart Card Reader USB 0" << "OMNIKEY 5421"; QTest::newRow("OMNIKEY 5421-macosx-10.11-10.14-1") << UsbId(0x076B, 0x5421) << "OMNIKEY CardMan (076B:5421) 5421(1)" << "OMNIKEY 5421"; QTest::newRow("OMNIKEY 5421-macosx-10.11-10.14-2") << UsbId(0x076B, 0x5421) << "OMNIKEY CardMan (076B:5421) 5421(2)" << "OMNIKEY 5421"; @@ -217,6 +223,7 @@ class test_ReaderConfiguration QTest::newRow("Identiv-Cloud-4701-F-windows-7-10-1") << UsbId(0x04E6, 0x5724) << "Identiv CLOUD 4701 F Contact Reader 0" << "Identiv CLOUD 4701 F Contact Reader 0"; QTest::newRow("Identiv-Cloud-4701-F-windows-7-10-2") << UsbId(0x04E6, 0x5724) << "Identiv CLOUD 4701 F Contactless Reader 1" << "Identiv Cloud 4701 F"; + QTest::newRow("Identiv-Cloud-4701-F-windows-7-10-3") << UsbId(0x04E6, 0x5724) << "Identiv CLOUD 4701 F Contactless Reader 0" << "Identiv Cloud 4701 F"; QTest::newRow("Identiv-Cloud-4701-F-macosx-10.11-10.14-1") << UsbId(0x04E6, 0x5724) << "Identiv uTrust 4701 F Dual Interface Reader(1)" << "Identiv Cloud 4701 F"; QTest::newRow("Identiv-Cloud-4701-F-macosx-10.11-10.14-2") << UsbId(0x04E6, 0x5724) << "Identiv uTrust 4701 F Dual Interface Reader(2)" << "Identiv Cloud 4701 F"; diff --git a/test/qt/configuration/test_ReaderConfigurationParser.cpp b/test/qt/configuration/test_ReaderConfigurationParser.cpp index 21b34ec..0618e6a 100644 --- a/test/qt/configuration/test_ReaderConfigurationParser.cpp +++ b/test/qt/configuration/test_ReaderConfigurationParser.cpp @@ -124,7 +124,6 @@ class test_ReaderConfigurationParser void validJsonDocumentWithOneValidEntry_parseOkAndOneCorrectDeviceInfo() { const QByteArray data = QByteArrayLiteral("{" - " \"IssueDate\": \"2015-11-03T12:00:00+1:00\"," " \"SupportedDevices\":\n" " [\n" " {\n" @@ -224,7 +223,6 @@ class test_ReaderConfigurationParser void parserAcceptsJSONWithMultipleEmptyPatternsInReadersWithDifferentNames() { const QByteArray data = QByteArrayLiteral("{" - " \"IssueDate\": \"2015-11-03T12:00:00+1:00\"," " \"SupportedDevices\":\n" " [\n" " {\n" @@ -257,7 +255,6 @@ class test_ReaderConfigurationParser void parserRejectsJSONDataWithRepeatedUSBId() { const QByteArray data = QByteArrayLiteral("{" - " \"IssueDate\": \"2015-11-03T12:00:00+1:00\"," " \"SupportedDevices\":\n" " [\n" " {\n" @@ -290,7 +287,6 @@ class test_ReaderConfigurationParser void parserRejectsJSONDataWithRepeatedReaderName() { const QByteArray data = QByteArrayLiteral("{" - " \"IssueDate\": \"2015-11-03T12:00:00+1:00\"," " \"SupportedDevices\":\n" " [\n" " {\n" @@ -323,7 +319,6 @@ class test_ReaderConfigurationParser void parserRejectsJSONDataWithRepeatedPattern() { const QByteArray data = QByteArrayLiteral("{" - " \"IssueDate\": \"2015-11-03T12:00:00+1:00\"," " \"SupportedDevices\":\n" " [\n" " {\n" diff --git a/test/qt/core/context/test_WorkflowContext.cpp b/test/qt/core/context/test_WorkflowContext.cpp index 86b2f5d..feee585 100644 --- a/test/qt/core/context/test_WorkflowContext.cpp +++ b/test/qt/core/context/test_WorkflowContext.cpp @@ -17,167 +17,169 @@ class test_WorkflowContext : public QObject { Q_OBJECT + QSharedPointer mContext; private Q_SLOTS: + void init() + { + mContext.reset(new WorkflowContext()); + } + + + void cleanup() + { + mContext.clear(); + } + + void test_WorkflowFinished() { - WorkflowContext workflowContext; + mContext->setWorkflowFinished(true); + QVERIFY(mContext->isWorkflowFinished()); - workflowContext.setWorkflowFinished(true); - QVERIFY(workflowContext.isWorkflowFinished()); - - workflowContext.setWorkflowFinished(false); - QVERIFY(!workflowContext.isWorkflowFinished()); + mContext->setWorkflowFinished(false); + QVERIFY(!mContext->isWorkflowFinished()); } void test_CanAllowed() { - WorkflowContext workflowContext; - QSignalSpy spy(&workflowContext, &WorkflowContext::fireCanAllowedModeChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::fireCanAllowedModeChanged); - workflowContext.setCanAllowedMode(true); - QVERIFY(workflowContext.isCanAllowedMode()); + mContext->setCanAllowedMode(true); + QVERIFY(mContext->isCanAllowedMode()); QCOMPARE(spy.count(), 1); - workflowContext.setCanAllowedMode(false); - QVERIFY(!workflowContext.isCanAllowedMode()); + mContext->setCanAllowedMode(false); + QVERIFY(!mContext->isCanAllowedMode()); QCOMPARE(spy.count(), 2); } void test_Can() { - WorkflowContext workflowContext; const QString can1 = QStringLiteral("123256"); const QString can2 = QStringLiteral("222222"); const QString can3 = QStringLiteral("222222"); - QSignalSpy spy(&workflowContext, &WorkflowContext::fireCanChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::fireCanChanged); - workflowContext.setCan(can1); - QCOMPARE(workflowContext.getCan(), can1); + mContext->setCan(can1); + QCOMPARE(mContext->getCan(), can1); QCOMPARE(spy.count(), 1); - workflowContext.setCan(can2); - QCOMPARE(workflowContext.getCan(), can2); + mContext->setCan(can2); + QCOMPARE(mContext->getCan(), can2); QCOMPARE(spy.count(), 2); - workflowContext.setCan(can3); - QCOMPARE(workflowContext.getCan(), can2); + mContext->setCan(can3); + QCOMPARE(mContext->getCan(), can2); QCOMPARE(spy.count(), 2); } void test_Pin() { - WorkflowContext workflowContext; const QString pin1 = QStringLiteral("123256"); const QString pin2 = QStringLiteral("222222"); const QString pin3 = QStringLiteral("222222"); - QSignalSpy spy(&workflowContext, &WorkflowContext::firePinChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::firePinChanged); - workflowContext.setPin(pin1); - QCOMPARE(workflowContext.getPin(), pin1); + mContext->setPin(pin1); + QCOMPARE(mContext->getPin(), pin1); QCOMPARE(spy.count(), 1); - workflowContext.setPin(pin2); - QCOMPARE(workflowContext.getPin(), pin2); + mContext->setPin(pin2); + QCOMPARE(mContext->getPin(), pin2); QCOMPARE(spy.count(), 2); - workflowContext.setPin(pin3); - QCOMPARE(workflowContext.getPin(), pin2); + mContext->setPin(pin3); + QCOMPARE(mContext->getPin(), pin2); QCOMPARE(spy.count(), 2); } void test_Puk() { - WorkflowContext workflowContext; const QString puk1 = QStringLiteral("123256789"); const QString puk2 = QStringLiteral("222222222"); const QString puk3 = QStringLiteral("222222222"); - QSignalSpy spy(&workflowContext, &WorkflowContext::firePukChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::firePukChanged); - workflowContext.setPuk(puk1); - QCOMPARE(workflowContext.getPuk(), puk1); + mContext->setPuk(puk1); + QCOMPARE(mContext->getPuk(), puk1); QCOMPARE(spy.count(), 1); - workflowContext.setPuk(puk2); - QCOMPARE(workflowContext.getPuk(), puk2); + mContext->setPuk(puk2); + QCOMPARE(mContext->getPuk(), puk2); QCOMPARE(spy.count(), 2); - workflowContext.setPuk(puk3); - QCOMPARE(workflowContext.getPuk(), puk2); + mContext->setPuk(puk3); + QCOMPARE(mContext->getPuk(), puk2); QCOMPARE(spy.count(), 2); } void test_ErrorReportToUser() { - WorkflowContext workflowContext; + mContext->setErrorReportedToUser(true); + QVERIFY(mContext->isErrorReportedToUser()); - workflowContext.setErrorReportedToUser(true); - QVERIFY(workflowContext.isErrorReportedToUser()); - - workflowContext.setErrorReportedToUser(false); - QVERIFY(!workflowContext.isErrorReportedToUser()); + mContext->setErrorReportedToUser(false); + QVERIFY(!mContext->isErrorReportedToUser()); } void test_CurrentState() { - WorkflowContext workflowContext; const QString state1 = QStringLiteral("state1"); const QString state2 = QStringLiteral("state2"); - QSignalSpy spy(&workflowContext, &WorkflowContext::fireStateChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::fireStateChanged); - workflowContext.setCurrentState(state1); - QCOMPARE(workflowContext.getCurrentState(), state1); + mContext->setCurrentState(state1); + QCOMPARE(mContext->getCurrentState(), state1); QCOMPARE(spy.count(), 1); - QVERIFY(!workflowContext.isStateApproved()); + QVERIFY(!mContext->isStateApproved()); - workflowContext.setCurrentState(state2); - QCOMPARE(workflowContext.getCurrentState(), state2); + mContext->setCurrentState(state2); + QCOMPARE(mContext->getCurrentState(), state2); QCOMPARE(spy.count(), 2); - QVERIFY(!workflowContext.isStateApproved()); + QVERIFY(!mContext->isStateApproved()); - workflowContext.killWorkflow(); - QCOMPARE(workflowContext.getCurrentState(), state2); + mContext->killWorkflow(); + QCOMPARE(mContext->getCurrentState(), state2); QCOMPARE(spy.count(), 2); - QVERIFY(workflowContext.isStateApproved()); + QVERIFY(mContext->isStateApproved()); } void test_ReaderPlugInTypes() { - WorkflowContext workflowContext; QVector vector1({ReaderManagerPlugInType::PCSC}); QVector vector2({ReaderManagerPlugInType::BLUETOOTH}); - QSignalSpy spy(&workflowContext, &WorkflowContext::fireReaderPlugInTypesChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::fireReaderPlugInTypesChanged); - workflowContext.setReaderPlugInTypes(vector1); - QCOMPARE(workflowContext.getReaderPlugInTypes(), vector1); + mContext->setReaderPlugInTypes(vector1); + QCOMPARE(mContext->getReaderPlugInTypes(), vector1); QCOMPARE(spy.count(), 1); spy.clear(); - workflowContext.setReaderPlugInTypes(vector2); - QCOMPARE(workflowContext.getReaderPlugInTypes(), vector2); + mContext->setReaderPlugInTypes(vector2); + QCOMPARE(mContext->getReaderPlugInTypes(), vector2); QCOMPARE(spy.count(), 1); } void test_LastPaceAndResult() { - WorkflowContext workflowContext; - QSignalSpy spy(&workflowContext, &WorkflowContext::fireLastPaceResultChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::firePaceResultUpdated); - workflowContext.setLastPaceResult(CardReturnCode::COMMAND_FAILED); - QCOMPARE(workflowContext.getLastPaceResult(), CardReturnCode::COMMAND_FAILED); + mContext->setLastPaceResult(CardReturnCode::COMMAND_FAILED); + QCOMPARE(mContext->getLastPaceResult(), CardReturnCode::COMMAND_FAILED); QCOMPARE(spy.count(), 1); - workflowContext.setLastPaceResult(CardReturnCode::OK); - QCOMPARE(workflowContext.getLastPaceResult(), CardReturnCode::OK); + mContext->setLastPaceResult(CardReturnCode::OK); + QCOMPARE(mContext->getLastPaceResult(), CardReturnCode::OK); QCOMPARE(spy.count(), 2); } @@ -186,8 +188,7 @@ class test_WorkflowContext { QThread cardThread; cardThread.start(); - WorkflowContext workflowContext; - QSignalSpy spy(&workflowContext, &WorkflowContext::fireCardConnectionChanged); + QSignalSpy spy(mContext.data(), &WorkflowContext::fireCardConnectionChanged); MockReader reader1(QStringLiteral("reader")); reader1.moveToThread(&cardThread); @@ -201,12 +202,12 @@ class test_WorkflowContext worker2->moveToThread(&cardThread); QSharedPointer cardConnection2(new CardConnection(worker2)); - workflowContext.setCardConnection(cardConnection1); - QCOMPARE(workflowContext.getCardConnection(), cardConnection1); + mContext->setCardConnection(cardConnection1); + QCOMPARE(mContext->getCardConnection(), cardConnection1); QCOMPARE(spy.count(), 1); - workflowContext.setCardConnection(cardConnection2); - QCOMPARE(workflowContext.getCardConnection(), cardConnection2); + mContext->setCardConnection(cardConnection2); + QCOMPARE(mContext->getCardConnection(), cardConnection2); QCOMPARE(spy.count(), 2); cardThread.quit(); @@ -221,24 +222,18 @@ class test_WorkflowContext const QSharedPointer worker(new MockCardConnectionWorker()); worker->moveToThread(&workerThread); - const QSharedPointer connection1(new CardConnection(worker)); - const QSharedPointer connection2(new CardConnection(worker)); const CardInfo cardInfo1(CardType::EID_CARD, QSharedPointer(), 3, false, false); const CardInfo cardInfo2(CardType::EID_CARD, QSharedPointer(), 0, false, false); const ReaderInfo readerInfo1(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo1); const ReaderInfo readerInfo2(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo2); - connection1->onReaderInfoChanged(readerInfo1); - connection2->onReaderInfoChanged(readerInfo2); + QVERIFY(!mContext->isPinBlocked()); - WorkflowContext context; - QVERIFY(!context.isPinBlocked()); + mContext->setCardConnection(QSharedPointer::create(worker)); + Q_EMIT worker->fireReaderInfoChanged(readerInfo1); - context.setCardConnection(connection1); - QVERIFY(!context.isPinBlocked()); - - context.setCardConnection(connection2); - QVERIFY(context.isPinBlocked()); + Q_EMIT worker->fireReaderInfoChanged(readerInfo2); + QVERIFY(mContext->isPinBlocked()); workerThread.quit(); workerThread.wait(); @@ -247,28 +242,25 @@ class test_WorkflowContext void test_WorkflowKilled() { - WorkflowContext context; - QSignalSpy spy(&context, &WorkflowContext::fireCancelWorkflow); + QSignalSpy spy(mContext.data(), &WorkflowContext::fireCancelWorkflow); - QVERIFY(!context.isWorkflowKilled()); + QVERIFY(!mContext->isWorkflowKilled()); QTest::ignoreMessage(QtWarningMsg, "Killing the current workflow."); - context.killWorkflow(); - QVERIFY(context.isWorkflowKilled()); - QCOMPARE(context.getStatus().getStatusCode(), GlobalStatus::Code::Card_Cancellation_By_User); - QVERIFY(context.isStateApproved()); + mContext->killWorkflow(); + QVERIFY(mContext->isWorkflowKilled()); + QCOMPARE(mContext->getStatus().getStatusCode(), GlobalStatus::Code::Card_Cancellation_By_User); + QVERIFY(mContext->isStateApproved()); QCOMPARE(spy.count(), 1); } void test_IsWorkflowCancelled() { - WorkflowContext context; + QVERIFY(!mContext->isWorkflowCancelled()); - QVERIFY(!context.isWorkflowCancelled()); - - context.mWorkflowCancelled = true; - QVERIFY(context.isWorkflowCancelled()); + Q_EMIT mContext->fireCancelWorkflow(); + QVERIFY(mContext->isWorkflowCancelled()); } diff --git a/test/qt/core/controller/test_AppController.cpp b/test/qt/core/controller/test_AppController.cpp new file mode 100644 index 0000000..e1ec13d --- /dev/null +++ b/test/qt/core/controller/test_AppController.cpp @@ -0,0 +1,147 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "controller/AppController.h" + +#include "context/ChangePinContext.h" +#include "context/RemoteServiceContext.h" +#include "controller/ChangePinController.h" +#include "controller/RemoteServiceController.h" + +#include "MockActivationContext.h" + +#include +#include + + +using namespace governikus; + + +class test_AppController + : public QObject +{ + Q_OBJECT + QSharedPointer mController; + + private Q_SLOTS: + void init() + { + mController.reset(new AppController()); + } + + + void cleanup() + { + mController.clear(); + } + + + void test_StartNewWorkflow() + { + QSignalSpy spy(mController.data(), &AppController::fireWorkflowStarted); + const QSharedPointer context(new ChangePinContext()); + QTest::ignoreMessage(QtInfoMsg, "Starting new workflow PIN"); + QTest::ignoreMessage(QtDebugMsg, "Start governikus::ChangePinController"); + QVERIFY(mController->startNewWorkflow(Action::PIN, context)); + QCOMPARE(mController->mActiveController->getContext(), context); + QCOMPARE(mController->mCurrentAction, Action::PIN); + QCOMPARE(spy.count(), 1); + + QTest::ignoreMessage(QtWarningMsg, "Cannot start governikus::ChangePinController | Current action: PIN"); + QVERIFY(!mController->startNewWorkflow(Action::PIN, context)); + } + + + void test_OnWorkflowFinishedNoWaitingRequest() + { + QSignalSpy spyWorkflowFinished(mController.data(), &AppController::fireWorkflowFinished); + + mController->onRemoteServiceRequested(); + QTest::ignoreMessage(QtDebugMsg, "governikus::RemoteServiceController done"); + QTest::ignoreMessage(QtInfoMsg, "Finished workflow REMOTE_SERVICE"); + mController->onWorkflowFinished(); + QCOMPARE(spyWorkflowFinished.count(), 1); + } + + + void test_OnWorkflowFinishedPIN() + { + QSignalSpy spyWorkflowFinished(mController.data(), &AppController::fireWorkflowFinished); + + mController->onChangePinRequested(); + mController->onChangePinRequested(); + QTest::ignoreMessage(QtDebugMsg, "governikus::ChangePinController done"); + QTest::ignoreMessage(QtInfoMsg, "Finished workflow PIN"); + QTest::ignoreMessage(QtDebugMsg, "Running waiting action now."); + QTest::ignoreMessage(QtInfoMsg, "Starting new workflow PIN"); + mController->onWorkflowFinished(); + QCOMPARE(spyWorkflowFinished.count(), 1); + QVERIFY(!mController->mWaitingRequest); + QCOMPARE(mController->mCurrentAction, Action::PIN); + } + + + void test_OnWorkflowFinishedAUTH() + { + QSignalSpy spyWorkflowFinished(mController.data(), &AppController::fireWorkflowFinished); + + QSharedPointer context(new MockActivationContext()); + mController->onSelfAuthenticationRequested(); + mController->mActiveController->getContext()->setWorkflowFinished(true); + mController->onAuthenticationRequest(context); + QTest::ignoreMessage(QtDebugMsg, "governikus::SelfAuthController done"); + QTest::ignoreMessage(QtInfoMsg, "Finished workflow SELF"); + QTest::ignoreMessage(QtDebugMsg, "Running waiting action now."); + QTest::ignoreMessage(QtInfoMsg, "Starting new workflow AUTH"); + mController->onWorkflowFinished(); + QCOMPARE(spyWorkflowFinished.count(), 1); + QVERIFY(!mController->mWaitingRequest); + QCOMPARE(mController->mCurrentAction, Action::AUTH); + } + + + void test_OnAuthenticationRequestSELF() + { + const QSharedPointer context(new MockActivationContext()); + + mController->onSelfAuthenticationRequested(); + mController->mActiveController->getContext()->setWorkflowFinished(true); + QTest::ignoreMessage(QtDebugMsg, "Authentication requested"); + QTest::ignoreMessage(QtDebugMsg, "Auto-approving the current state"); + mController->onAuthenticationRequest(context); + QVERIFY(mController->mActiveController->getContext()->isStateApproved()); + + mController->onSelfAuthenticationRequested(); + QTest::ignoreMessage(QtWarningMsg, "Cannot enqueue action AUTH , queue is already full."); + mController->onAuthenticationRequest(context); + } + + + void test_OnAuthenticationRequestCannotSendOperationAlreadyActive() + { + const QString sendError("send error"); + const QSharedPointer context(new MockActivationContext(false, false, false, false, sendError)); + mController->onChangePinRequested(); + QTest::ignoreMessage(QtCriticalMsg, R"(Cannot send "Operation already active" to caller: "send error")"); + mController->onAuthenticationRequest(context); + } + + + void test_DoShutdownActiveController() + { + QSignalSpy spyHideUi(mController.data(), &AppController::fireHideUi); + + mController->onChangePinRequested(); + mController->onChangePinRequested(); + mController->doShutdown(); + QVERIFY(!mController->mWaitingRequest); + QVERIFY(mController->mActiveController->getContext()->isWorkflowKilled()); + QCOMPARE(spyHideUi.count(), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_AppController) +#include "test_AppController.moc" diff --git a/test/qt/core/paos/invoke/test_DidAuthenticateResponseEAC2.cpp b/test/qt/core/paos/invoke/test_DidAuthenticateResponseEAC2.cpp index 8f35446..8ea2498 100644 --- a/test/qt/core/paos/invoke/test_DidAuthenticateResponseEAC2.cpp +++ b/test/qt/core/paos/invoke/test_DidAuthenticateResponseEAC2.cpp @@ -8,8 +8,8 @@ #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/core/paos/invoke/test_PaosCreator.cpp b/test/qt/core/paos/invoke/test_PaosCreator.cpp index 77add00..dde6d5d 100644 --- a/test/qt/core/paos/invoke/test_PaosCreator.cpp +++ b/test/qt/core/paos/invoke/test_PaosCreator.cpp @@ -13,6 +13,8 @@ using namespace governikus; +Q_DECLARE_METATYPE(PaosCreator::Namespace) + namespace { struct test_PaosCreatorDummy @@ -98,20 +100,36 @@ class test_PaosCreator } + void namespaces_data() + { + QTest::addColumn("namespaceName"); + QTest::addColumn("suffix"); + QTest::addColumn("namespaceString"); + QTest::addColumn("prefixString"); + QTest::addColumn("type"); + + QTest::newRow("addressing") << PaosCreator::Namespace::ADDRESSING << QString("test") << QString("http://www.w3.org/2005/03/addressing") << QString("wsa:test") << QString("wsa:test"); + QTest::newRow("dss") << PaosCreator::Namespace::DSS << QString() << QString("urn:oasis:names:tc:dss:1.0:core:schema") << QString("xmlns:dss") << QString("dss:"); + QTest::newRow("ecard") << PaosCreator::Namespace::ECARD << QString("ecard") << QString("http://www.bsi.bund.de/ecard/api/1.1") << QString("ecard:ecard") << QString("ecard:ecard"); + QTest::newRow("paos") << PaosCreator::Namespace::PAOS << QString("") << QString("urn:liberty:paos:2006-08") << QString("paos:") << QString("paos:"); + QTest::newRow("techschema") << PaosCreator::Namespace::TECHSCHEMA << QString(" ") << QString("urn:iso:std:iso-iec:24727:tech:schema") << QString("iso: ") << QString("iso: "); + QTest::newRow("xsd") << PaosCreator::Namespace::XSD << QString() << QString("http://www.w3.org/2001/XMLSchema") << QString("xmlns:xsd") << QString("xsd:"); + QTest::newRow("xsi") << PaosCreator::Namespace::XSI << QString() << QString("http://www.w3.org/2001/XMLSchema-instance") << QString("xmlns:xsi") << QString("xsi:"); + QTest::newRow("soap") << PaosCreator::Namespace::SOAP << QString("test") << QString("http://schemas.xmlsoap.org/soap/envelope/") << QString("soap:test") << QString("soap:test"); + } + + void namespaces() { - static int count = 8; + QFETCH(PaosCreator::Namespace, namespaceName); + QFETCH(QString, suffix); + QFETCH(QString, namespaceString); + QFETCH(QString, prefixString); + QFETCH(QString, type); - QCOMPARE(PaosCreator::mNamespace.count(), count); - QCOMPARE(PaosCreator::mNamespacePrefix.count(), count + 1); // + DEFAULT - - QCOMPARE(PaosCreator::mNamespace.value(PaosCreator::Namespace::ADDRESSING), QString("http://www.w3.org/2005/03/addressing")); - QCOMPARE(PaosCreator::mNamespacePrefix.value(PaosCreator::Namespace::ADDRESSING), QString("wsa")); - - QCOMPARE(PaosCreator::getNamespace(PaosCreator::Namespace::ADDRESSING), QString("http://www.w3.org/2005/03/addressing")); - QCOMPARE(PaosCreator::getNamespacePrefix(PaosCreator::Namespace::ADDRESSING, "suffix"), QString("wsa:suffix")); - QCOMPARE(PaosCreator::getNamespacePrefix(PaosCreator::Namespace::ADDRESSING), QString("xmlns:wsa")); - QCOMPARE(PaosCreator::getNamespaceType(PaosCreator::Namespace::ADDRESSING, "test"), QString("wsa:test")); + QCOMPARE(PaosCreator::getNamespace(namespaceName), namespaceString); + QCOMPARE(PaosCreator::getNamespacePrefix(namespaceName, suffix), prefixString); + QCOMPARE(PaosCreator::getNamespaceType(namespaceName, suffix), type); } diff --git a/test/qt/core/paos/retrieve/test_DidAuthenticateEac1.cpp b/test/qt/core/paos/retrieve/test_DidAuthenticateEac1.cpp index 191ca1f..5eb7d76 100644 --- a/test/qt/core/paos/retrieve/test_DidAuthenticateEac1.cpp +++ b/test/qt/core/paos/retrieve/test_DidAuthenticateEac1.cpp @@ -8,8 +8,8 @@ #include "paos/retrieve/DidAuthenticateEac1Parser.h" #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/core/paos/retrieve/test_DidAuthenticateEac2.cpp b/test/qt/core/paos/retrieve/test_DidAuthenticateEac2.cpp index 50a754e..2df3739 100644 --- a/test/qt/core/paos/retrieve/test_DidAuthenticateEac2.cpp +++ b/test/qt/core/paos/retrieve/test_DidAuthenticateEac2.cpp @@ -8,8 +8,8 @@ #include "paos/retrieve/DidAuthenticateEac2Parser.h" #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/core/paos/retrieve/test_DidAuthenticateEacAdditional.cpp b/test/qt/core/paos/retrieve/test_DidAuthenticateEacAdditional.cpp index 445d797..a706187 100644 --- a/test/qt/core/paos/retrieve/test_DidAuthenticateEacAdditional.cpp +++ b/test/qt/core/paos/retrieve/test_DidAuthenticateEacAdditional.cpp @@ -7,8 +7,8 @@ #include "paos/retrieve/DidAuthenticateEacAdditional.h" #include "TestFileHelper.h" -#include -#include +#include +#include #include "paos/retrieve/DidAuthenticateEacAdditionalParser.h" diff --git a/test/qt/core/paos/retrieve/test_InitializeFramework.cpp b/test/qt/core/paos/retrieve/test_InitializeFramework.cpp index 1d4aaa4..d30a25f 100644 --- a/test/qt/core/paos/retrieve/test_InitializeFramework.cpp +++ b/test/qt/core/paos/retrieve/test_InitializeFramework.cpp @@ -7,8 +7,8 @@ #include "paos/retrieve/InitializeFramework.h" #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/core/paos/retrieve/test_StartPAOSResponse.cpp b/test/qt/core/paos/retrieve/test_StartPAOSResponse.cpp index dbdfd7b..7518a16 100644 --- a/test/qt/core/paos/retrieve/test_StartPAOSResponse.cpp +++ b/test/qt/core/paos/retrieve/test_StartPAOSResponse.cpp @@ -7,8 +7,8 @@ #include "paos/retrieve/StartPaosResponse.h" #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/core/paos/retrieve/test_transmit.cpp b/test/qt/core/paos/retrieve/test_transmit.cpp index d7d2f2f..f77a89d 100644 --- a/test/qt/core/paos/retrieve/test_transmit.cpp +++ b/test/qt/core/paos/retrieve/test_transmit.cpp @@ -8,8 +8,8 @@ #include "paos/retrieve/TransmitParser.h" #include "TestFileHelper.h" -#include -#include +#include +#include using namespace governikus; diff --git a/test/qt/core/paos/test_RequestType.cpp b/test/qt/core/paos/test_RequestType.cpp index 94daa80..6d7b993 100644 --- a/test/qt/core/paos/test_RequestType.cpp +++ b/test/qt/core/paos/test_RequestType.cpp @@ -4,8 +4,8 @@ * \copyright Copyright (c) 2015-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "paos/RequestType.h" diff --git a/test/qt/core/paos/test_paoshandler.cpp b/test/qt/core/paos/test_paoshandler.cpp index 6ff84df..a23ef88 100644 --- a/test/qt/core/paos/test_paoshandler.cpp +++ b/test/qt/core/paos/test_paoshandler.cpp @@ -4,8 +4,8 @@ #include #include -#include -#include +#include +#include #include "paos/PaosHandler.h" #include "TestFileHelper.h" diff --git a/test/qt/core/states/test_StateCertificateDescriptionCheck.cpp b/test/qt/core/states/test_StateCertificateDescriptionCheck.cpp index 2ee403b..92e77a1 100644 --- a/test/qt/core/states/test_StateCertificateDescriptionCheck.cpp +++ b/test/qt/core/states/test_StateCertificateDescriptionCheck.cpp @@ -7,8 +7,11 @@ #include "asn1/ASN1Util.h" #include "asn1/CVCertificate.h" #include "context/AuthContext.h" +#include "states/StateBuilder.h" #include "TestAuthContext.h" +#include "TestFileHelper.h" + #include #include #include @@ -32,7 +35,7 @@ class test_StateCertificateDescriptionCheck mAuthContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1.xml")); mAuthContext->setTcTokenUrl(QUrl("https://dev-demo.governikus-eid.de:8443/Autent-DemoApplication/RequestServlet;jsessionid=14w5aKuENyd2D4ZsMmuaeX2g")); - mState.reset(new StateCertificateDescriptionCheck(mAuthContext)); + mState.reset(StateBuilder::createState(mAuthContext)); mState->setStateName("StateCertificateDescriptionCheck"); connect(this, &test_StateCertificateDescriptionCheck::fireStateStart, mState.data(), &AbstractState::onEntry, Qt::ConnectionType::DirectConnection); @@ -48,11 +51,13 @@ class test_StateCertificateDescriptionCheck void noDescription() { - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCertificateDescription = QSharedPointer(new CertificateDescription()); - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCertificateDescriptionAsBinary.clear(); - + const QSharedPointer eac1(new DIDAuthenticateEAC1()); + mAuthContext->setDidAuthenticateEac1(eac1); QSignalSpy spy(mState.data(), &StateCertificateDescriptionCheck::fireAbort); + Q_EMIT fireStateStart(nullptr); + + QTest::ignoreMessage(QtCriticalMsg, "No certificate description available"); mAuthContext->setStateApproved(); QCOMPARE(spy.count(), 1); @@ -61,11 +66,13 @@ class test_StateCertificateDescriptionCheck void noSubjectUrl() { - const auto& desc = qSharedPointerConstCast(mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCertificateDescription); + const auto& desc = qSharedPointerConstCast(mAuthContext->getDidAuthenticateEac1()->getCertificateDescription()); desc->setSubjectUrl(QString()); QSignalSpy spy(mState.data(), &StateCertificateDescriptionCheck::fireAbort); Q_EMIT fireStateStart(nullptr); + + QTest::ignoreMessage(QtCriticalMsg, "No subject url available in certificate description"); mAuthContext->setStateApproved(); QCOMPARE(spy.count(), 1); @@ -74,11 +81,14 @@ class test_StateCertificateDescriptionCheck void nonMatchingDescription() { - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCertificateDescription = QSharedPointer(new CertificateDescription()); - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCertificateDescriptionAsBinary = QByteArray::fromHex("1234567890abcdef"); + QByteArray source = TestFileHelper::readFile(":/card/cvca-DECVCAeID00103.hex"); + auto cert = CVCertificate::fromHex(source); + mAuthContext->setTerminalCvc(cert); QSignalSpy spy(mState.data(), &StateCertificateDescriptionCheck::fireAbort); Q_EMIT fireStateStart(nullptr); + + QTest::ignoreMessage(QtCriticalMsg, "\"The certificate description does not match the certificate.\""); mAuthContext->setStateApproved(); QCOMPARE(spy.count(), 1); @@ -89,6 +99,8 @@ class test_StateCertificateDescriptionCheck { QSignalSpy spy(mState.data(), &StateCertificateDescriptionCheck::fireContinue); Q_EMIT fireStateStart(nullptr); + + QTest::ignoreMessage(QtDebugMsg, "SOP-Check succeeded."); mAuthContext->setStateApproved(); QCOMPARE(spy.count(), 1); @@ -101,6 +113,8 @@ class test_StateCertificateDescriptionCheck QSignalSpy spy(mState.data(), &StateCertificateDescriptionCheck::fireAbort); Q_EMIT fireStateStart(nullptr); + + QTest::ignoreMessage(QtDebugMsg, "SOP-Check failed."); mAuthContext->setStateApproved(); QCOMPARE(spy.count(), 1); diff --git a/test/qt/core/states/test_StateChangePinRemote.cpp b/test/qt/core/states/test_StateChangePinRemote.cpp index 284da93..dbef5c7 100644 --- a/test/qt/core/states/test_StateChangePinRemote.cpp +++ b/test/qt/core/states/test_StateChangePinRemote.cpp @@ -9,11 +9,35 @@ #include "MockCardConnectionWorker.h" #include "MockRemoteServer.h" -#include +#include using namespace governikus; +class MockSetEidPinCommand + : public SetEidPinCommand +{ + Q_OBJECT + + public: + MockSetEidPinCommand(const QSharedPointer& pWorker, + const QString& pNewPin) + : SetEidPinCommand(pWorker, pNewPin, '0') + { + mResponseApdu = ResponseApdu(StatusCode::SUCCESS); + } + + + ~MockSetEidPinCommand() override = default; + + void internalExecute() override + { + } + + +}; + + class test_StateChangePinRemote : public QObject { @@ -34,27 +58,45 @@ class test_StateChangePinRemote workerThread.start(); const QSharedPointer context(new RemoteServiceContext()); - const QString pin = QStringLiteral("103050"); - context->setPin(pin); + StateChangePinRemote state(context); const QString slotHandle = QStringLiteral("slot"); const QByteArray input("input"); const QSharedPointer message(new IfdModifyPin(slotHandle, input)); + context->setModifyPinMessage(message); + + QSignalSpy spyContinue(&state, &StateChangePinRemote::fireContinue); + state.run(); + QCOMPARE(context->getModifyPinMessageResponseApdu().getReturnCode(), StatusCode::EMPTY); + QCOMPARE(spyContinue.count(), 1); + const QSharedPointer worker(new MockCardConnectionWorker()); worker->moveToThread(&workerThread); const QSharedPointer connection(new CardConnection(worker)); context->setCardConnection(connection); - StateChangePinRemote state(context); - context->setModifyPinMessage(message); - state.run(); QCOMPARE(state.mConnections.size(), 1); - QCOMPARE(context->getPin(), QString("103050")); workerThread.quit(); workerThread.wait(); } + void test_OnChangePinDone() + { + const QSharedPointer context(new RemoteServiceContext()); + StateChangePinRemote state(context); + + const QSharedPointer worker(new MockCardConnectionWorker()); + const QString pin("000000"); + const QSharedPointer setEidCommand(new MockSetEidPinCommand(worker, pin)); + QSignalSpy spyContinue(&state, &StateChangePinRemote::fireContinue); + + state.onChangePinDone(setEidCommand); + QCOMPARE(context->getModifyPinMessageResponseApdu().getReturnCode(), StatusCode::SUCCESS); + QCOMPARE(spyContinue.count(), 1); + } + + }; QTEST_GUILESS_MAIN(test_StateChangePinRemote) diff --git a/test/qt/core/states/test_StateCheckRefreshAddress.cpp b/test/qt/core/states/test_StateCheckRefreshAddress.cpp index cf10be9..446e597 100644 --- a/test/qt/core/states/test_StateCheckRefreshAddress.cpp +++ b/test/qt/core/states/test_StateCheckRefreshAddress.cpp @@ -7,14 +7,13 @@ #include "AppSettings.h" #include "context/AuthContext.h" #include "Env.h" -#include "MockNetworkManager.h" +#include "paos/retrieve/DidAuthenticateEac1Parser.h" #include "states/StateBuilder.h" -#include -#include -#include +#include "MockNetworkManager.h" +#include "TestFileHelper.h" + #include -#include using namespace governikus; @@ -30,6 +29,26 @@ class test_StateCheckRefreshAddress Q_SIGNALS: void fireStateStart(QEvent* pEvent); + private: + static QSharedPointer createTcToken(const QByteArray& redirectUrl) + { + QByteArray begin("" + "" + " https://eid-server.example.de/entrypoint" + " 1A2BB129" + " "); + QByteArray end("" + " urn:liberty:paos:2006-08 " + " urn:ietf:rfc:4279 " + " " + " 4BC1A0B5 " + " " + ""); + QByteArray data = begin.append(redirectUrl).append(end); + return QSharedPointer(new TcToken(data)); + } + + private Q_SLOTS: void init() { @@ -50,6 +69,66 @@ class test_StateCheckRefreshAddress } + void runNoTcToken() + { + QSignalSpy spyContinue(mState.data(), &StateCheckRefreshAddress::fireContinue); + + QTest::ignoreMessage(QtDebugMsg, "Invalid TCToken"); + mState->run(); + QCOMPARE(spyContinue.count(), 1); + } + + + void run_data() + { + QTest::addColumn("redirectUrl"); + QTest::addColumn("tcTokenUrl"); + QTest::addColumn("messages"); + + const QStringList msg1(QString("Invalid RefreshAddress: test")); + const QStringList msg2(QString("Invalid RefreshAddress: http://service.example.de/loggedin?7eb39f62")); + const QStringList msg3 = {QString("Subject URL from AT CVC (eService certificate) description: \"https://service.example.de\""), QString("Current redirect URL: \"https://service.example.de/loggedin?7eb39f62\""), QString("SOP-Check succeeded, abort process.")}; + const QStringList msg4 = {QString("Subject URL from AT CVC (eService certificate) description: \"https://test.de\""), QString("Current redirect URL: \"https://service.example.de/loggedin?7eb39f62\""), QString("SOP-Check failed, start process.")}; + + QTest::newRow("urlInvalid") << QByteArray("test") << QString() << msg1; + QTest::newRow("notHttps") << QByteArray("http://service.example.de/loggedin?7eb39f62") << QString("http://service.example.de") << msg2; + QTest::newRow("matchingSameOriginPolicy") << QByteArray("https://service.example.de/loggedin?7eb39f62") << QString("https://service.example.de") << msg3; + QTest::newRow("notMatchingSameOriginPolicy") << QByteArray("https://service.example.de/loggedin?7eb39f62") << QString("https://test.de") << msg4; + } + + + void run() + { + QFETCH(QByteArray, redirectUrl); + QFETCH(QString, tcTokenUrl); + QFETCH(QStringList, messages); + + QSignalSpy spyContinue(mState.data(), &StateCheckRefreshAddress::fireContinue); + + const auto& tcToken = createTcToken(redirectUrl); + const QUrl url(tcTokenUrl); + QString urlAsString(QString::fromUtf8(redirectUrl)); + QUrl redirectAddress(urlAsString); + mAuthContext->setTcToken(tcToken); + mAuthContext->setTcTokenUrl(url); + + for (const auto& msg : messages) + { + QTest::ignoreMessage(QtDebugMsg, msg.toLocal8Bit().data()); + } + mState->run(); + QCOMPARE(mState->mUrl, redirectAddress); + if (redirectAddress.isValid() && redirectAddress.scheme() == QLatin1String("https")) + { + QCOMPARE(mState->mSubjectUrl, url); + } + else + { + QCOMPARE(spyContinue.count(), 1); + } + } + + void mappingToCommunicationError() { const QVector states = QVector() @@ -57,7 +136,7 @@ class test_StateCheckRefreshAddress << GlobalStatus::Code::Network_Ssl_Establishment_Error << GlobalStatus::Code::Workflow_Network_Ssl_Connection_Unsupported_Algorithm_Or_Length << GlobalStatus::Code::Workflow_Network_Ssl_Certificate_Unsupported_Algorithm_Or_Length - << GlobalStatus::Code::Workflow_Nerwork_Ssl_Hash_Not_In_Certificate_Description + << GlobalStatus::Code::Workflow_Network_Ssl_Hash_Not_In_Certificate_Description << GlobalStatus::Code::Workflow_Network_Empty_Redirect_Url << GlobalStatus::Code::Workflow_Network_Expected_Redirect << GlobalStatus::Code::Workflow_Network_Invalid_Scheme @@ -97,17 +176,8 @@ class test_StateCheckRefreshAddress void abortIfRefreshAddressIsNotHttps() { - QSharedPointer tcToken(new TcToken("" - "" - " https://eid-server.example.de/entrypoint" - " 1A2BB129" - " http://service.example.de/loggedin?7eb39f62" - " urn:liberty:paos:2006-08 " - " urn:ietf:rfc:4279 " - " " - " 4BC1A0B5 " - " " - "")); + const QByteArray& redirectAddress("http://service.example.de/loggedin?7eb39f62"); + const auto& tcToken = createTcToken(redirectAddress); mAuthContext->setTcToken(tcToken); QSignalSpy spy(mState.data(), &StateCheckRefreshAddress::fireContinue); @@ -146,10 +216,16 @@ class test_StateCheckRefreshAddress const QUrl tcTokenUrl("http://test/"); mAuthContext->setTcTokenUrl(tcTokenUrl); + QByteArray content = TestFileHelper::readFile(":/paos/DIDAuthenticateEAC1.xml"); + QSharedPointer eac1(static_cast(DidAuthenticateEac1Parser().parse(content))); + Env::getSingleton()->getGeneralSettings().setDeveloperMode(false); QTest::ignoreMessage(QtWarningMsg, "No subjectURL/certificate description available, take the TcToken-URL instead"); QCOMPARE(mState->determineSubjectUrl(), tcTokenUrl); + mAuthContext->setDidAuthenticateEac1(eac1); + QCOMPARE(mState->determineSubjectUrl(), QUrl("https://dev-demo.governikus-eid.de:8443")); + Env::getSingleton()->getGeneralSettings().setDeveloperMode(true); QCOMPARE(mState->determineSubjectUrl(), tcTokenUrl); } diff --git a/test/qt/core/states/test_StateConnectCard.cpp b/test/qt/core/states/test_StateConnectCard.cpp index df9ee30..e987695 100644 --- a/test/qt/core/states/test_StateConnectCard.cpp +++ b/test/qt/core/states/test_StateConnectCard.cpp @@ -6,7 +6,11 @@ #include "states/StateConnectCard.h" +#include "Env.h" +#include "ReaderManager.h" + #include "MockCardConnectionWorker.h" +#include "MockReader.h" #include @@ -16,27 +20,52 @@ class test_StateConnectCard : public QObject { Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + ReaderInfo mReaderInfo; private Q_SLOTS: + void init() + { + mReaderInfo = ReaderInfo(QString("test"), ReaderManagerPlugInType::UNKNOWN, CardInfo(CardType::EID_CARD)); + + mContext.reset(new WorkflowContext()); + mState.reset(new StateConnectCard(mContext)); + } + + + void cleanup() + { + mContext.clear(); + mState.clear(); + } + + void test_OnCommandDone() { QThread workerThread; workerThread.start(); - const QSharedPointer context(new WorkflowContext()); - StateConnectCard connectCard(context); const QString rName("reader name"); const QSharedPointer command(new CreateCardConnectionCommand(rName, QPointer())); - QSignalSpy spyContinue(&connectCard, &StateConnectCard::fireContinue); + QSignalSpy spyContinue(mState.data(), &StateConnectCard::fireContinue); + QSignalSpy spyAbort(mState.data(), &StateConnectCard::fireAbort); + + QTest::ignoreMessage(QtDebugMsg, "Card connection command completed"); + QTest::ignoreMessage(QtDebugMsg, "Card connection failed"); + mState->onCommandDone(command); + QCOMPARE(spyAbort.count(), 1); QSharedPointer connectionWorker(new MockCardConnectionWorker()); connectionWorker->moveToThread(&workerThread); QSharedPointer cardConnection(new CardConnection(connectionWorker)); command->mCardConnection = cardConnection; + + QTest::ignoreMessage(QtDebugMsg, "Card connection command completed"); QTest::ignoreMessage(QtDebugMsg, "Card connection was successful"); - connectCard.onCommandDone(command); - QCOMPARE(context->getCardConnection(), cardConnection); + mState->onCommandDone(command); + QCOMPARE(mContext->getCardConnection(), cardConnection); QCOMPARE(spyContinue.count(), 1); workerThread.quit(); @@ -47,26 +76,28 @@ class test_StateConnectCard void test_OnReaderRemoved() { const QString readerName = QStringLiteral("name"); - const QSharedPointer context(new WorkflowContext()); - StateConnectCard connectCard(context); - QSignalSpy spy(&connectCard, &StateConnectCard::fireReaderRemoved); + QSignalSpy spy(mState.data(), &StateConnectCard::fireRetry); - connectCard.onReaderRemoved(readerName); + mState->onReaderRemoved(readerName); QCOMPARE(spy.count(), 0); - context->setReaderName(readerName); - connectCard.onReaderRemoved(readerName); + mContext->setReaderName(readerName); + mState->onReaderRemoved(readerName); QCOMPARE(spy.count(), 1); } - void test_OnAbort() + void test_OnEntry() { - const QSharedPointer context(new WorkflowContext()); - StateConnectCard connectCard(context); - QSignalSpy spyRetry(&connectCard, &StateConnectCard::fireRetry); - connectCard.onAbort(); + const QString stateName("name"); + mState->setStateName(stateName); + + QSignalSpy spyRetry(mState.data(), &StateConnectCard::fireRetry); + + mState->onEntry(nullptr); + + Q_EMIT mContext->fireReaderPlugInTypesChanged(); QCOMPARE(spyRetry.count(), 1); } diff --git a/test/qt/core/states/test_StateDestroyPace.cpp b/test/qt/core/states/test_StateDestroyPace.cpp index 9ee11ee..accb763 100644 --- a/test/qt/core/states/test_StateDestroyPace.cpp +++ b/test/qt/core/states/test_StateDestroyPace.cpp @@ -6,7 +6,7 @@ #include "MockCardConnectionWorker.h" -#include +#include using namespace governikus; diff --git a/test/qt/core/states/test_StateDidAuthenticateEac2.cpp b/test/qt/core/states/test_StateDidAuthenticateEac2.cpp new file mode 100644 index 0000000..eb174db --- /dev/null +++ b/test/qt/core/states/test_StateDidAuthenticateEac2.cpp @@ -0,0 +1,125 @@ +/*! + * \brief Unit test for \ref StateDidAuthenticateEac2 + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/StateDidAuthenticateEac2.h" + +#include "MockCardConnectionWorker.h" +#include "TestAuthContext.h" +#include "TestFileHelper.h" + +#include + +using namespace governikus; + +class MockDidAuthenticateEAC2Command + : public DidAuthenticateEAC2Command +{ + Q_OBJECT + + public: + explicit MockDidAuthenticateEAC2Command(const QSharedPointer& pCardConnectionWorker, const CVCertificateChain& pCvcChain, + const QString& pEphermalPublicKeyAsHex, const QString& pSignatureAsHex, const QByteArray& pAuthenticatedAuxiliaryDataAsBinary) + : DidAuthenticateEAC2Command(pCardConnectionWorker, pCvcChain, pEphermalPublicKeyAsHex, pSignatureAsHex, pAuthenticatedAuxiliaryDataAsBinary) + { + } + + + void setReturnCode(CardReturnCode pCode) + { + mReturnCode = pCode; + } + + +}; + + +class test_StateDidAuthenticateEac2 + : public QObject +{ + Q_OBJECT + QSharedPointer mAuthContext; + QSharedPointer mState; + QThread workerThread; + + private Q_SLOTS: + void init() + { + mAuthContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1.xml")); + mState.reset(new StateDidAuthenticateEac2(mAuthContext)); + workerThread.start(); + } + + + void cleanup() + { + mState.clear(); + mAuthContext.clear(); + workerThread.quit(); + workerThread.wait(); + } + + + void test_Run() + { + QSignalSpy spy(mState.data(), &StateDidAuthenticateEac2::fireAbort); + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + const EstablishPaceChannelOutput invalidOutput; + + mAuthContext->setCardConnection(connection); + mAuthContext->setPaceOutputData(invalidOutput); + + mState->run(); + QCOMPARE(mState->mConnections.size(), 0); + QCOMPARE(mAuthContext->getStatus(), GlobalStatus::Code::Workflow_No_Permission_Error); + QCOMPARE(spy.count(), 1); + } + + + void test_OnCardCommandDone_data() + { + QTest::addColumn("code"); + QTest::addColumn("status"); + QTest::addColumn("abort"); + + QTest::newRow("ok") << CardReturnCode::OK << GlobalStatus::Code::No_Error << 0; + QTest::newRow("command_failed") << CardReturnCode::COMMAND_FAILED << GlobalStatus::Code::Workflow_Card_Removed << 1; + QTest::newRow("undefined") << CardReturnCode::UNDEFINED << GlobalStatus::Code::Workflow_No_Permission_Error << 1; + } + + + void test_OnCardCommandDone() + { + QFETCH(CardReturnCode, code); + QFETCH(GlobalStatus::Code, status); + QFETCH(int, abort); + + QSignalSpy spyAbort(mState.data(), &StateDidAuthenticateEac2::fireAbort); + QSignalSpy spyContinue(mState.data(), &StateDidAuthenticateEac2::fireContinue); + + const QSharedPointer worker(new MockCardConnectionWorker()); + const CVCertificateChain certificate; + const QString key("key"); + const QString signature("signature"); + const QByteArray auxiliaryData("data"); + const QSharedPointer response(new DIDAuthenticateResponseEAC2()); + const QSharedPointer command(new MockDidAuthenticateEAC2Command(worker, certificate, key, signature, auxiliaryData)); + + command->setReturnCode(code); + mAuthContext->setDidAuthenticateResponseEac2(response); + + mState->onCardCommandDone(command); + QCOMPARE(mAuthContext->getStatus(), status); + QCOMPARE(spyAbort.count(), abort); + QCOMPARE(spyContinue.count(), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_StateDidAuthenticateEac2) +#include "test_StateDidAuthenticateEac2.moc" diff --git a/test/qt/core/states/test_StateEstablishPaceChannel.cpp b/test/qt/core/states/test_StateEstablishPaceChannel.cpp index 0fdab77..8910441 100644 --- a/test/qt/core/states/test_StateEstablishPaceChannel.cpp +++ b/test/qt/core/states/test_StateEstablishPaceChannel.cpp @@ -60,169 +60,169 @@ class test_StateEstablishPaceChannel Q_OBJECT QThread mWorkerThread; QSharedPointer mAuthContext; + QSharedPointer mState; private Q_SLOTS: void init() { mWorkerThread.start(); mAuthContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1.xml")); + mState.reset(new StateEstablishPaceChannel(mAuthContext)); } void cleanup() { + mState.clear(); mAuthContext.clear(); mWorkerThread.quit(); mWorkerThread.wait(); } + void test_Run_NoConnection() + { + QSignalSpy spyAbort(mState.data(), &StateEstablishPaceChannel::fireAbort); + + QTest::ignoreMessage(QtDebugMsg, "No card connection available."); + mState->run(); + QCOMPARE(spyAbort.count(), 1); + } + + + void test_Run() + { + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&mWorkerThread); + const QSharedPointer connection(new CardConnection(worker)); + const QString password("0000000"); + mAuthContext->setPin(password); + mAuthContext->setCardConnection(connection); + mAuthContext->setEstablishPaceChannelType(PacePasswordId::PACE_PIN); + + QTest::ignoreMessage(QtDebugMsg, "Establish connection using PACE_PIN"); + mState->run(); + QCOMPARE(mAuthContext->getEstablishPaceChannelType(), PacePasswordId::PACE_PIN); + QCOMPARE(mState->mPasswordId, PacePasswordId::PACE_PIN); + } + + void test_OnUserCancelled() { - StateEstablishPaceChannel state(mAuthContext); const QSharedPointer worker(new MockCardConnectionWorker()); worker->moveToThread(&mWorkerThread); const QSharedPointer connection(new CardConnection(worker)); const CardInfo cInfo(CardType::NONE, QSharedPointer(), 3, false, false); ReaderInfo rInfo; rInfo.setCardInfo(cInfo); - connection->mReaderInfo = rInfo; + Q_EMIT worker->fireReaderInfoChanged(rInfo); mAuthContext->setCardConnection(connection); - QSignalSpy spyAbort(&state, &AbstractState::fireAbort); + QSignalSpy spyAbort(mState.data(), &AbstractState::fireAbort); QTest::ignoreMessage(QtInfoMsg, "Cancellation by user"); - state.onUserCancelled(); + mState->onUserCancelled(); QCOMPARE(mAuthContext->getStatus().getStatusCode(), GlobalStatus::Code::Workflow_Cancellation_By_User); QCOMPARE(mAuthContext->getLastPaceResult(), CardReturnCode::CANCELLATION_BY_USER); } - void test_OnEstablishConnectionDone_Pin() + void test_OnEstablishConnectionDone_data() { - StateEstablishPaceChannel state(mAuthContext); - state.mPasswordId = PacePasswordId::PACE_PIN; + QTest::addColumn("password"); + QTest::addColumn("retryCounter"); + QTest::addColumn("code"); + QTest::addColumn("result"); + QTest::addColumn("canAllowed"); + + QTest::newRow("PIN_OK") << PacePasswordId::PACE_PIN << 3 << CardReturnCode::OK << CardReturnCode::OK << false; + QTest::newRow("PIN_PUK_INOPERATIVE") << PacePasswordId::PACE_PIN << 1 << CardReturnCode::PUK_INOPERATIVE << CardReturnCode::PUK_INOPERATIVE << false; + QTest::newRow("PIN_CANCELLATION_BY_USER") << PacePasswordId::PACE_PIN << 2 << CardReturnCode::CANCELLATION_BY_USER << CardReturnCode::CANCELLATION_BY_USER << false; + QTest::newRow("PIN_INVALID_PIN_RETRY_COUNTER_3") << PacePasswordId::PACE_PIN << 3 << CardReturnCode::INVALID_PIN << CardReturnCode::INVALID_PIN << false; + QTest::newRow("PIN_INVALID_PIN_RETRY_COUNTER_2") << PacePasswordId::PACE_PIN << 2 << CardReturnCode::INVALID_PIN << CardReturnCode::INVALID_PIN_2 << false; + QTest::newRow("PIN_INVALID_PIN_RETRY_COUNTER_1") << PacePasswordId::PACE_PIN << 1 << CardReturnCode::INVALID_PIN << CardReturnCode::INVALID_PIN_3 << false; + QTest::newRow("CAN_OK_CAN_ALLOWED") << PacePasswordId::PACE_CAN << 3 << CardReturnCode::OK << CardReturnCode::OK << true; + QTest::newRow("CAN_OK") << PacePasswordId::PACE_CAN << 2 << CardReturnCode::OK << CardReturnCode::OK << false; + QTest::newRow("CAN_CANCELLATION_BY_USER") << PacePasswordId::PACE_CAN << 2 << CardReturnCode::CANCELLATION_BY_USER << CardReturnCode::CANCELLATION_BY_USER << true; + QTest::newRow("PUK_OK") << PacePasswordId::PACE_PUK << 0 << CardReturnCode::OK << CardReturnCode::OK_PUK << false; + QTest::newRow("PUK_INVALID_PIN_RETRY_COUNTER_1") << PacePasswordId::PACE_PUK << 0 << CardReturnCode::INVALID_PIN << CardReturnCode::INVALID_PIN << false; + } + + + void test_OnEstablishConnectionDone() + { + QFETCH(PacePasswordId, password); + QFETCH(int, retryCounter); + QFETCH(CardReturnCode, code); + QFETCH(CardReturnCode, result); + QFETCH(bool, canAllowed); + + QSignalSpy spyPaceChannelEstablished(mState.data(), &StateEstablishPaceChannel::firePaceChannelEstablished); + QSignalSpy spyPacePukEstablished(mState.data(), &StateEstablishPaceChannel::firePacePukEstablished); + QSignalSpy spyAbort(mState.data(), &StateEstablishPaceChannel::fireAbort); + QSignalSpy spyContinue(mState.data(), &StateEstablishPaceChannel::fireContinue); + + mState->mPasswordId = password; const QSharedPointer worker(new MockCardConnectionWorker()); const QSharedPointer command(new MockEstablishPaceChannelCommand(worker, PacePasswordId::PACE_PIN)); worker->moveToThread(&mWorkerThread); const QSharedPointer connection(new CardConnection(worker)); - const CardInfo cInfo(CardType::NONE, QSharedPointer(), 3, false, false); + const CardInfo cInfo(CardType::NONE, QSharedPointer(), retryCounter, false, false); ReaderInfo rInfo; rInfo.setCardInfo(cInfo); - connection->mReaderInfo = rInfo; + Q_EMIT worker->fireReaderInfoChanged(rInfo); mAuthContext->setCardConnection(connection); + mAuthContext->setCanAllowedMode(canAllowed); + command->setReturnCode(code); - QSignalSpy spyContinue(&state, &StateEstablishPaceChannel::fireContinue); - QSignalSpy spyPaceChannelEstablished(&state, &StateEstablishPaceChannel::firePaceChannelEstablished); - QSignalSpy spyAbort(&state, &StateEstablishPaceChannel::fireAbort); + if (code == CardReturnCode::OK && password == PacePasswordId::PACE_PIN) + { + QTest::ignoreMessage(QtDebugMsg, "PACE PIN succeeded. Setting expected retry counter to: 3"); + mState->onEstablishConnectionDone(command); + QCOMPARE(mAuthContext->getLastPaceResult(), result); + QCOMPARE(mAuthContext->getExpectedRetryCounter(), 3); + QCOMPARE(spyPaceChannelEstablished.count(), 1); + return; + } - command->setReturnCode(CardReturnCode::OK); - state.onEstablishConnectionDone(command); - QCOMPARE(mAuthContext->getLastPaceResult(), CardReturnCode::OK); - QCOMPARE(spyPaceChannelEstablished.count(), 1); + if (code == CardReturnCode::OK && password == PacePasswordId::PACE_CAN) + { + if (!canAllowed) + { + mState->onEstablishConnectionDone(command); + QCOMPARE(spyContinue.count(), 1); + return; + } + mState->onEstablishConnectionDone(command); + QCOMPARE(mAuthContext->getLastPaceResult(), result); + QCOMPARE(spyPaceChannelEstablished.count(), 1); + return; + } - mAuthContext->setStatus(GlobalStatus::Code::No_Error); - command->setReturnCode(CardReturnCode::CANCELLATION_BY_USER); - state.onEstablishConnectionDone(command); - QVERIFY(mAuthContext->getCardConnection()); - QCOMPARE(mAuthContext->getLastPaceResult(), CardReturnCode::CANCELLATION_BY_USER); - QCOMPARE(mAuthContext->getStatus().getStatusCode(), GlobalStatus::Code::Card_Cancellation_By_User); + if (code == CardReturnCode::OK && password == PacePasswordId::PACE_PUK) + { + QTest::ignoreMessage(QtDebugMsg, "PACE PUK succeeded. Resetting PACE passwords and setting expected retry counter to: -1"); + mState->onEstablishConnectionDone(command); + QCOMPARE(mAuthContext->getLastPaceResult(), result); + QCOMPARE(mAuthContext->getExpectedRetryCounter(), -1); + QCOMPARE(spyPacePukEstablished.count(), 1); + return; + } + + mState->onEstablishConnectionDone(command); + + if (code == CardReturnCode::PUK_INOPERATIVE) + { + QCOMPARE(mAuthContext->getStatus().getStatusCode(), GlobalStatus::Code::Card_Puk_Blocked); + } + + if (code == CardReturnCode::CANCELLATION_BY_USER) + { + QCOMPARE(mAuthContext->getStatus().getStatusCode(), GlobalStatus::Code::Card_Cancellation_By_User); + } + + QCOMPARE(mAuthContext->getLastPaceResult(), result); QCOMPARE(spyAbort.count(), 1); - - command->setReturnCode(CardReturnCode::INVALID_PIN); - mAuthContext->setCardConnection(connection); - state.onEstablishConnectionDone(command); - QCOMPARE(mAuthContext->getLastPaceResult(), CardReturnCode::INVALID_PIN); - QCOMPARE(spyAbort.count(), 2); - - QCOMPARE(spyContinue.count(), 0); - } - - - void test_OnEstablishConnectionDone_Can() - { - const QSharedPointer worker(new MockCardConnectionWorker()); - worker->moveToThread(&mWorkerThread); - const QSharedPointer connection(new CardConnection(worker)); - const CardInfo cardInfo(CardType::NONE, QSharedPointer(), 2, false, false); - const ReaderInfo readerInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo); - connection->onReaderInfoChanged(readerInfo); - const QSharedPointer context(new AuthContext(nullptr)); - context->setCardConnection(connection); - StateEstablishPaceChannel state(context); - state.mPasswordId = PacePasswordId::PACE_CAN; - QSharedPointer command(new MockEstablishPaceChannelCommand(worker, PacePasswordId::PACE_CAN)); - - QSignalSpy spyContinue(&state, &StateEstablishPaceChannel::fireContinue); - QSignalSpy spyAbort(&state, &StateEstablishPaceChannel::fireAbort); - - command->setReturnCode(CardReturnCode::OK); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getLastPaceResult(), CardReturnCode::OK); - QCOMPARE(spyContinue.count(), 1); - - command->setReturnCode(CardReturnCode::CANCELLATION_BY_USER); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getStatus().getStatusCode(), GlobalStatus::Code::Card_Cancellation_By_User); - QCOMPARE(context->getLastPaceResult(), CardReturnCode::CANCELLATION_BY_USER); - QCOMPARE(spyAbort.count(), 1); - - command->setReturnCode(CardReturnCode::INVALID_CAN); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getLastPaceResult(), CardReturnCode::INVALID_CAN); - QCOMPARE(spyAbort.count(), 2); - } - - - void test_OnEstablishConnectionDone_Puk() - { - const QSharedPointer worker(new MockCardConnectionWorker()); - worker->moveToThread(&mWorkerThread); - const QSharedPointer connection(new CardConnection(worker)); - const CardInfo cInfo(CardType::UNKNOWN, QSharedPointer(), 3, false, false); - const ReaderInfo rInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cInfo); - connection->onReaderInfoChanged(rInfo); - const QSharedPointer context(new ChangePinContext()); - context->setCardConnection(connection); - const QSharedPointer command(new MockUnblockPinCommand(worker)); - - StateEstablishPaceChannel state(context); - state.mPasswordId = PacePasswordId::PACE_PUK; - QSignalSpy spyContinue(&state, &StateEstablishPaceChannel::fireContinue); - QSignalSpy spyPacePukEstablished(&state, &StateEstablishPaceChannel::firePacePukEstablished); - QSignalSpy spyAbort(&state, &StateEstablishPaceChannel::fireAbort); - - command->setReturnCode(CardReturnCode::OK); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getLastPaceResult(), CardReturnCode::OK_PUK); - QCOMPARE(context->getSuccessMessage(), tr("PIN successfully unblocked")); - QCOMPARE(spyPacePukEstablished.count(), 1); - - command->setReturnCode(CardReturnCode::CANCELLATION_BY_USER); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getLastPaceResult(), CardReturnCode::CANCELLATION_BY_USER); - QCOMPARE(context->getStatus().getStatusCode(), GlobalStatus::Code::Card_Cancellation_By_User); - QCOMPARE(spyAbort.count(), 1); - - command->setReturnCode(CardReturnCode::INVALID_PUK); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getLastPaceResult(), CardReturnCode::INVALID_PUK); - QCOMPARE(spyAbort.count(), 2); - - context->setStatus(GlobalStatus::Code::No_Error); - command->setReturnCode(CardReturnCode::PUK_INOPERATIVE); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getLastPaceResult(), CardReturnCode::PUK_INOPERATIVE); - QCOMPARE(context->getStatus().getStatusCode(), GlobalStatus::Code::Card_Puk_Blocked); - QCOMPARE(spyAbort.count(), 3); - - context->setStatus(GlobalStatus::Code::No_Error); - command->setReturnCode(CardReturnCode::UNKNOWN); - state.onEstablishConnectionDone(command); - QCOMPARE(context->getStatus().getStatusCode(), GlobalStatus::Code::No_Error); - QCOMPARE(spyAbort.count(), 4); - - QCOMPARE(spyContinue.count(), 0); } diff --git a/test/qt/core/states/test_StateEstablishPaceChannelRemote.cpp b/test/qt/core/states/test_StateEstablishPaceChannelRemote.cpp index 87ad151..d5adc46 100644 --- a/test/qt/core/states/test_StateEstablishPaceChannelRemote.cpp +++ b/test/qt/core/states/test_StateEstablishPaceChannelRemote.cpp @@ -10,48 +10,168 @@ #include "MockCardConnectionWorker.h" #include "MockRemoteServer.h" -#include +#include using namespace governikus; +class MockEstablishPaceChannelCommand + : public EstablishPaceChannelCommand +{ + Q_OBJECT + + public: + explicit MockEstablishPaceChannelCommand(const QSharedPointer& pCardConnectionWorker) + : EstablishPaceChannelCommand(pCardConnectionWorker, PacePasswordId::PACE_PIN, QString("0000"), QByteArray(), QByteArray()) + { + EstablishPaceChannelOutput output; + output.setPaceReturnCode(CardReturnCode::OK); + mPaceOutput = output; + } + + + ~MockEstablishPaceChannelCommand() override = default; + + void setPaceReturnCode(CardReturnCode pCode) + { + EstablishPaceChannelOutput output; + output.setPaceReturnCode(pCode); + mPaceOutput = output; + } + + +}; + +class MockUnblockPinCommand + : public UnblockPinCommand +{ + Q_OBJECT + + public: + explicit MockUnblockPinCommand(const QSharedPointer& pCardConnectionWorker) + : UnblockPinCommand(pCardConnectionWorker, QString("0000")) + { + } + + + ~MockUnblockPinCommand() override = default; + + void setReturnCode(CardReturnCode pCode) + { + mReturnCode = pCode; + } + + +}; + class test_StateEstablishPaceChannelRemote : public QObject { Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + QSharedPointer mWorker; + QThread mThread; private Q_SLOTS: - void initTestCase() + void init() { - Env::setCreator(std::function([&] { - return new MockRemoteServer(); - })); + mThread.start(); + mContext.reset(new RemoteServiceContext()); + mState.reset(new StateEstablishPaceChannelRemote(mContext)); + mWorker.reset(new MockCardConnectionWorker()); + } + + + void cleanup() + { + mState.clear(); + mContext.clear(); + mWorker.clear(); + mThread.quit(); + mThread.wait(); + } + + + void test_RunNoCardConnection() + { + const QSharedPointer message(new IfdEstablishPaceChannel("NFC Reader", "abc")); + mContext->setEstablishPaceChannelMessage(message); + QSignalSpy spy(mState.data(), &StateEstablishPaceChannelRemote::fireContinue); + + mState->run(); + QCOMPARE(spy.count(), 1); } void test_Run() { - QThread connectionThread; - connectionThread.start(); + const QSharedPointer message(new IfdEstablishPaceChannel("NFC Reader", "input")); + mContext->setEstablishPaceChannelMessage(message); + mWorker->moveToThread(&mThread); + const QSharedPointer connection(new CardConnection(mWorker)); + mContext->setCardConnection(connection); + mContext->setPin("0000"); - const QSharedPointer context(new RemoteServiceContext()); - StateEstablishPaceChannelRemote state(context); - const QString slotHandle = QStringLiteral("slothandle"); - const QByteArray input("abc"); - const QSharedPointer message(new IfdEstablishPaceChannel(slotHandle, input)); - context->setEstablishPaceChannelMessage(message); - const QSharedPointer worker(new MockCardConnectionWorker()); - worker->moveToThread(&connectionThread); - const QSharedPointer connection(new CardConnection(worker)); - context->setCardConnection(connection); - context->setPin(QString("1234")); + mState->run(); + QCOMPARE(mState->mConnections.size(), 1); + } - state.run(); - QCOMPARE(context->getPin(), QString("1234")); - QCOMPARE(state.mConnections.size(), 1); - connectionThread.quit(); - connectionThread.wait(); + void test_OnReaderInfoChanged() + { + ReaderInfo info; + QSignalSpy spy(mState.data(), &StateEstablishPaceChannelRemote::fireContinue); + + mState->onReaderInfoChanged(info); + QCOMPARE(mContext->getEstablishPaceChannelOutput().getPaceReturnCode(), CardReturnCode::CARD_NOT_FOUND); + QCOMPARE(spy.count(), 1); + } + + + void test_OnEstablishConnectionDoneEstablishPaceChannelCommand() + { + QSignalSpy spy(mState.data(), &StateEstablishPaceChannelRemote::fireContinue); + const QSharedPointer command(new MockEstablishPaceChannelCommand(mWorker)); + mContext->setExpectedRetryCounter(2); + + mState->mPasswordId = PacePasswordId::PACE_PIN; + QTest::ignoreMessage(QtDebugMsg, "Correct PACE password. Expected retry counter is now 3"); + mState->onEstablishConnectionDone(command); + QCOMPARE(mContext->getExpectedRetryCounter(), 3); + + mContext->setExpectedRetryCounter(2); + command->setPaceReturnCode(CardReturnCode::INVALID_PIN); + QTest::ignoreMessage(QtDebugMsg, "Wrong PACE password. Decreasing expected retry counter to 1"); + mState->onEstablishConnectionDone(command); + QCOMPARE(mContext->getExpectedRetryCounter(), 1); + + QCOMPARE(spy.count(), 2); + } + + + void test_OnEstablishConnectionDoneUnblockPinCommand() + { + QSignalSpy spy(mState.data(), &StateEstablishPaceChannelRemote::fireContinue); + const QSharedPointer command(new MockUnblockPinCommand(mWorker)); + + command->setReturnCode(CardReturnCode::OK); + QTest::ignoreMessage(QtDebugMsg, "Resetting PACE passwords and setting expected retry counter to -1"); + mState->onEstablishConnectionDone(command); + QCOMPARE(mContext->getExpectedRetryCounter(), -1); + QCOMPARE(mContext->getNewPin(), QString()); + + command->setReturnCode(CardReturnCode::INVALID_PUK); + QTest::ignoreMessage(QtDebugMsg, "Resetting PACE passwords and setting expected retry counter to -1"); + mState->onEstablishConnectionDone(command); + QCOMPARE(mContext->getExpectedRetryCounter(), -1); + QCOMPARE(mContext->getNewPin(), QString()); + + command->setReturnCode(CardReturnCode::UNDEFINED); + mState->onEstablishConnectionDone(command); + QCOMPARE(mContext->getEstablishPaceChannelOutput().getPaceReturnCode(), CardReturnCode::UNDEFINED); + + QCOMPARE(spy.count(), 3); } diff --git a/test/qt/core/states/test_StateEstablishPaceChannelResponse.cpp b/test/qt/core/states/test_StateEstablishPaceChannelResponse.cpp new file mode 100644 index 0000000..7b5dd22 --- /dev/null +++ b/test/qt/core/states/test_StateEstablishPaceChannelResponse.cpp @@ -0,0 +1,137 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/remote_service/StateEstablishPaceChannelResponse.h" + +#include "states/StateBuilder.h" + +#include "MockDataChannel.h" +#include "MockRemoteServer.h" + +#include + +using namespace governikus; + +class MockServerMsgHandler + : public ServerMessageHandler +{ + Q_OBJECT + QString mResponse; + + public: + explicit MockServerMsgHandler() + : ServerMessageHandler() + , mResponse() + { + } + + + virtual void sendEstablishPaceChannelResponse(const QString& pSlotHandle, const EstablishPaceChannelOutput& pChannelOutput) override + { + Q_UNUSED(pChannelOutput); + mResponse = pSlotHandle; + } + + + virtual void sendModifyPinResponse(const QString& pSlotHandle, const ResponseApdu& pResponseApdu) override + { + Q_UNUSED(pSlotHandle); + Q_UNUSED(pResponseApdu); + } + + + QString getResponse() + { + return mResponse; + } + + +}; + +class test_StateEstablishPaceChannelResponse + : public QObject +{ + Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + + private Q_SLOTS: + void initTestCase() + { + Env::setCreator(std::function([&] { + return new MockRemoteServer(); + })); + } + + + void init() + { + mContext.reset(new RemoteServiceContext()); + mState.reset(StateBuilder::createState(mContext)); + } + + + void cleanup() + { + mContext.clear(); + mState.clear(); + } + + + void test_Run_data() + { + QTest::addColumn("hexBytes"); + QTest::addColumn("wrongPacePasswordCounter"); + QTest::addColumn("continueCounter"); + + QByteArray data1 = QByteArray("30 10" + "a1 06 04 04 f00663c2" + "a2 04 04 02 0000" + "a3 00" + "9000"); + QByteArray data2 = QByteArray("30 5A" + "A1 06 04 04 F0200001" + "A2 04 04 02 9000" + "A3 02 31 00" + "A4 22 04 20 24e41d62b8c848226b86fcc6c7657577dca47ad2bf21573617bae84807f85c6b" + "A5 10 04 0e 4445435643416549443030313033" + "A6 10 04 0e 4445435643416549443030313032" + "9000"); + + QTest::newRow("wrongPacePassword") << data1 << 1 << 0; + QTest::newRow("correctPacePassword") << data2 << 0 << 1; + } + + + void test_Run() + { + QFETCH(QByteArray, hexBytes); + QFETCH(int, wrongPacePasswordCounter); + QFETCH(int, continueCounter); + + QSignalSpy spyWrongPacePassword(mState.data(), &StateEstablishPaceChannelResponse::fireWrongPacePassword); + QSignalSpy spyContinue(mState.data(), &StateEstablishPaceChannelResponse::fireContinue); + + const QString slotHandle("slot handle"); + const QSharedPointer msg(new IfdEstablishPaceChannel(slotHandle)); + mContext->setEstablishPaceChannelMessage(msg); + EstablishPaceChannelOutput channelOutput; + channelOutput.parseFromCcid(QByteArray::fromHex(hexBytes), PacePasswordId::PACE_PIN); + mContext->setEstablishPaceChannelOutput(channelOutput); + const QSharedPointer msgHandler(new MockServerMsgHandler()); + auto server = mContext->getRemoteServer().staticCast(); + server->setMessageHandler(msgHandler); + + mContext->setStateApproved(); + mState->onStateApprovedChanged(); + QCOMPARE(spyWrongPacePassword.count(), wrongPacePasswordCounter); + QCOMPARE(spyContinue.count(), continueCounter); + QCOMPARE(msgHandler->getResponse(), slotHandle); + } + + +}; + +QTEST_GUILESS_MAIN(test_StateEstablishPaceChannelResponse) +#include "test_StateEstablishPaceChannelResponse.moc" diff --git a/test/qt/core/states/test_StateExtractCvcsFromEac1InputType.cpp b/test/qt/core/states/test_StateExtractCvcsFromEac1InputType.cpp index 5777492..9a317d6 100644 --- a/test/qt/core/states/test_StateExtractCvcsFromEac1InputType.cpp +++ b/test/qt/core/states/test_StateExtractCvcsFromEac1InputType.cpp @@ -6,6 +6,8 @@ #include "states/StateExtractCvcsFromEac1InputType.h" +#include "states/StateBuilder.h" + #include "TestAuthContext.h" #include "TestFileHelper.h" @@ -22,7 +24,7 @@ class test_StateExtractCvcsFromEac1InputType QVector > mTerminalCvcs, mDvCvcs, mLinkCvcs, mCvcas; QScopedPointer mState; - QSharedPointer mAuthContext; + QSharedPointer mAuthContext; Q_SIGNALS: void fireStateStart(QEvent* pEvent); @@ -44,10 +46,10 @@ class test_StateExtractCvcsFromEac1InputType { mAuthContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1_3.xml")); - mState.reset(new StateExtractCvcsFromEac1InputType(mAuthContext)); + mState.reset(StateBuilder::createState(mAuthContext)); mState->setStateName("StateExtractCvcsFromEac1InputType"); - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.clear(); + mAuthContext->clearCvCertificates(); connect(this, &test_StateExtractCvcsFromEac1InputType::fireStateStart, mState.data(), &AbstractState::onEntry, Qt::ConnectionType::DirectConnection); } @@ -61,7 +63,7 @@ class test_StateExtractCvcsFromEac1InputType void testNoDvCvc() { - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mTerminalCvcs.at(0)); + mAuthContext->addCvCertificate(mTerminalCvcs.at(0)); QSignalSpy spy(mState.data(), &StateExtractCvcsFromEac1InputType::fireAbort); Q_EMIT fireStateStart(nullptr); @@ -73,9 +75,9 @@ class test_StateExtractCvcsFromEac1InputType void testMoreThanOneDvCvc() { - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mTerminalCvcs.at(0)); - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mDvCvcs.at(0)); - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mDvCvcs.at(1)); + mAuthContext->addCvCertificate(mTerminalCvcs.at(0)); + mAuthContext->addCvCertificate(mDvCvcs.at(0)); + mAuthContext->addCvCertificate(mDvCvcs.at(1)); QSignalSpy spy(mState.data(), &StateExtractCvcsFromEac1InputType::fireAbort); Q_EMIT fireStateStart(nullptr); @@ -87,7 +89,7 @@ class test_StateExtractCvcsFromEac1InputType void testNoTerminalCvc() { - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mDvCvcs.at(0)); + mAuthContext->addCvCertificate(mDvCvcs.at(0)); QSignalSpy spy(mState.data(), &StateExtractCvcsFromEac1InputType::fireAbort); Q_EMIT fireStateStart(nullptr); @@ -99,9 +101,9 @@ class test_StateExtractCvcsFromEac1InputType void testMoreThanOneTerminalCvc() { - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mDvCvcs.at(0)); - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mTerminalCvcs.at(0)); - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mTerminalCvcs.at(1)); + mAuthContext->addCvCertificate(mDvCvcs.at(0)); + mAuthContext->addCvCertificate(mTerminalCvcs.at(0)); + mAuthContext->addCvCertificate(mTerminalCvcs.at(1)); QSignalSpy spy(mState.data(), &StateExtractCvcsFromEac1InputType::fireAbort); Q_EMIT fireStateStart(nullptr); @@ -113,8 +115,8 @@ class test_StateExtractCvcsFromEac1InputType void testSuccess() { - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mDvCvcs.at(0)); - mAuthContext->getDidAuthenticateEac1()->mEac1InputType.mCvCertificates.append(mTerminalCvcs.at(0)); + mAuthContext->addCvCertificate(mDvCvcs.at(0)); + mAuthContext->addCvCertificate(mTerminalCvcs.at(0)); QSignalSpy spy(mState.data(), &StateExtractCvcsFromEac1InputType::fireContinue); Q_EMIT fireStateStart(nullptr); diff --git a/test/qt/core/states/test_StateGenericSendReceive.cpp b/test/qt/core/states/test_StateGenericSendReceive.cpp index 70d3b24..69c790a 100644 --- a/test/qt/core/states/test_StateGenericSendReceive.cpp +++ b/test/qt/core/states/test_StateGenericSendReceive.cpp @@ -123,19 +123,25 @@ class test_StateGenericSendReceive void onPreSharedKeyAuthenticationRequired() { - const QByteArray data("data"); - const QByteArray psk("psk"); - const QByteArray sessionIdentifier("session"); + const QByteArray data("" + "" + " https://eid-server.example.de/entrypoint" + " 1A2BB129" + " https://service.example.de/loggedin?7eb39f62" + " urn:liberty:paos:2006-08 " + " urn:ietf:rfc:4279 " + " " + " 4BC1A0B5 " + " " + ""); const QSharedPointer token(new TcToken(data)); - token->mPsk = psk; - token->mSessionIdentifier = sessionIdentifier; mAuthContext->setTcToken(token); auto* authenticator = new QSslPreSharedKeyAuthenticator(); QTest::ignoreMessage(QtDebugMsg, "pre-shared key authentication requested: \"\""); mState->onPreSharedKeyAuthenticationRequired(authenticator); - QCOMPARE(authenticator->identity(), sessionIdentifier); - QCOMPARE(authenticator->preSharedKey(), QByteArray::fromHex(psk)); + QCOMPARE(authenticator->identity(), QByteArray("1A2BB129")); + QCOMPARE(authenticator->preSharedKey(), QByteArray::fromHex("4BC1A0B5")); } @@ -215,7 +221,7 @@ class test_StateGenericSendReceive << GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Certificate_Unsupported_Algorithm_Or_Length << GlobalStatus::Code::Workflow_TrustedChannel_TimeOut << GlobalStatus::Code::Workflow_TrustedChannel_Proxy_Error - << GlobalStatus::Code::Workflow_TrustedChannel_Ssl_Establishment_Error + << GlobalStatus::Code::Workflow_TrustedChannel_Establishment_Error << GlobalStatus::Code::Workflow_TrustedChannel_Server_Format_Error << GlobalStatus::Code::Workflow_TrustedChannel_Other_Network_Error; diff --git a/test/qt/core/states/test_StateGetSelfAuthenticationData.cpp b/test/qt/core/states/test_StateGetSelfAuthenticationData.cpp new file mode 100644 index 0000000..7acd4f7 --- /dev/null +++ b/test/qt/core/states/test_StateGetSelfAuthenticationData.cpp @@ -0,0 +1,147 @@ +/*! + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/StateGetSelfAuthenticationData.h" + +#include "HttpServer.h" +#include "LogHandler.h" + +#include "MockNetworkReply.h" +#include "TestAuthContext.h" +#include "TestFileHelper.h" + +#include + +Q_DECLARE_LOGGING_CATEGORY(network) + +using namespace governikus; + +class test_StateGetSelfAuthenticationData + : public QObject +{ + Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + + private Q_SLOTS: + void init() + { + Env::getSingleton()->init(); + mContext.reset(new SelfAuthContext()); + mState.reset(new StateGetSelfAuthenticationData(mContext)); + } + + + void cleanup() + { + mState.clear(); + mContext.clear(); + } + + + void test_ReportCommunicationError() + { + MockNetworkReply reply; + mState->mReply = QPointer(&reply); + + QSignalSpy spy(mState.data(), &StateGetSelfAuthenticationData::fireAbort); + QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog); + + mState->reportCommunicationError(GlobalStatus::Code::Unknown_Error); + QVERIFY(logSpy.takeLast().at(0).toString().contains("Operation aborted")); + QVERIFY(logSpy.takeLast().at(0).toString().contains("Unknown_Error | \"An unexpected error has occurred during processing.\"")); + QCOMPARE(mContext->getStatus(), GlobalStatus::Code::Unknown_Error); + QCOMPARE(spy.count(), 1); + + mContext->setStatus(GlobalStatus::Code::No_Error); + + mState->reportCommunicationError(GlobalStatus::Code::Card_Not_Found); + QVERIFY(logSpy.takeLast().at(0).toString().contains("Operation aborted")); + QVERIFY(logSpy.takeLast().at(0).toString().contains("Card_Not_Found | \"Card does not exist\"")); + QCOMPARE(mContext->getStatus(), GlobalStatus::Code::Card_Not_Found); + QCOMPARE(spy.count(), 2); + } + + + void test_OnSslHandshakeDone() + { + MockNetworkReply reply; + mState->mReply = QPointer(&reply); + + QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog); + + mState->onSslHandshakeDone(); + QVERIFY(logSpy.takeLast().at(0).toString().contains("Operation aborted")); + + reply.setSslConfiguration(QSslConfiguration()); + mState->onSslHandshakeDone(); + const QString logMsg(logSpy.at(0).at(0).toString()); + QVERIFY(logMsg.contains("Used session cipher")); + } + + + void test_OnSslErrors() + { + MockNetworkReply reply; + mState->mReply = QPointer(&reply); + QSignalSpy spy(mState.data(), &StateGetSelfAuthenticationData::fireAbort); + + mState->onSslErrors(QList()); + QCOMPARE(spy.count(), 0); + + const QList errorList = {QSslError::CertificateNotYetValid, QSslError::CertificateUntrusted}; + mState->onSslErrors(errorList); + QCOMPARE(spy.count(), 1); + } + + + void test_OnNetworkReplyNoValidData() + { + MockNetworkReply emptyReply; + mState->mReply = QPointer(&emptyReply); + + QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog); + QSignalSpy spyAbort(mState.data(), &StateGetSelfAuthenticationData::fireAbort); + + mState->onNetworkReply(); + const QString logMsg(logSpy.takeLast().at(0).toString()); + QVERIFY(logMsg.contains("No valid data of self-authentication.")); + QCOMPARE(spyAbort.count(), 1); + QCOMPARE(mState->getContext()->getStatus(), GlobalStatus::Code::Workflow_Server_Incomplete_Information_Provided); + } + + + void test_OnNetworkReplyValidData() + { + const auto& data = TestFileHelper::readFile(":/self/SelfAuthenticationData.json"); + MockNetworkReply reply(data); + mState->mReply = QPointer(&reply); + QSignalSpy spyContinue(mState.data(), &StateGetSelfAuthenticationData::fireContinue); + + mState->onNetworkReply(); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_OnNetworkReplyWrongHttpStatus() + { + MockNetworkReply reply; + reply.setAttribute(QNetworkRequest::Attribute::HttpStatusCodeAttribute, 500); + mState->mReply = QPointer(&reply); + + QSignalSpy logSpy(Env::getSingleton(), &LogHandler::fireLog); + QSignalSpy spyAbort(mState.data(), &StateGetSelfAuthenticationData::fireAbort); + + mState->onNetworkReply(); + const QString logMsg(logSpy.takeLast().at(0).toString()); + QVERIFY(logMsg.contains("Could not read data for self-authentication.")); + QCOMPARE(spyAbort.count(), 1); + QCOMPARE(mState->getContext()->getStatus(), GlobalStatus::Code::Workflow_Server_Incomplete_Information_Provided); + } + + +}; + +QTEST_GUILESS_MAIN(test_StateGetSelfAuthenticationData) +#include "test_StateGetSelfAuthenticationData.moc" diff --git a/test/qt/core/states/test_StateInitializeFramework.cpp b/test/qt/core/states/test_StateInitializeFramework.cpp index 75267de..fd7fd51 100644 --- a/test/qt/core/states/test_StateInitializeFramework.cpp +++ b/test/qt/core/states/test_StateInitializeFramework.cpp @@ -6,8 +6,8 @@ #include "states/StateInitializeFramework.h" #include "TestFileHelper.h" -#include -#include +#include +#include #include diff --git a/test/qt/core/states/test_StateMaintainCardConnection.cpp b/test/qt/core/states/test_StateMaintainCardConnection.cpp new file mode 100644 index 0000000..b7815ce --- /dev/null +++ b/test/qt/core/states/test_StateMaintainCardConnection.cpp @@ -0,0 +1,200 @@ +/*! + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/StateMaintainCardConnection.h" + +#include "MockCardConnectionWorker.h" + +#include + +using namespace governikus; + +class test_StateMaintainCardConnection + : public QObject +{ + Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + QThread workerThread; + + private Q_SLOTS: + void init() + { + workerThread.start(); + mContext.reset(new WorkflowContext()); + mState.reset(new StateMaintainCardConnection(mContext)); + } + + + void cleanup() + { + mContext.clear(); + mState.reset(); + workerThread.quit(); + workerThread.wait(); + } + + + void test_Run_Error() + { + QSignalSpy spy(mState.data(), &StateMaintainCardConnection::fireAbort); + + mContext->setStatus(GlobalStatus::Code::Unknown_Error); + mState->run(); + QCOMPARE(spy.count(), 1); + } + + + void test_Run_ResultUnrecoverable_data() + { + QTest::addColumn("code"); + QTest::addColumn("status"); + + QTest::newRow("cancellation_by_user") << CardReturnCode::CANCELLATION_BY_USER << GlobalStatus::Code::Card_Cancellation_By_User; + QTest::newRow("puk_inoperative") << CardReturnCode::PUK_INOPERATIVE << GlobalStatus::Code::Card_Puk_Blocked; + QTest::newRow("input_timeout") << CardReturnCode::INPUT_TIME_OUT << GlobalStatus::Code::Card_Input_TimeOut; + } + + + void test_Run_ResultUnrecoverable() + { + QFETCH(CardReturnCode, code); + QFETCH(GlobalStatus::Code, status); + QSignalSpy spy(mState.data(), &StateMaintainCardConnection::fireAbort); + + mContext->setLastPaceResult(code); + QTest::ignoreMessage(QtDebugMsg, "Last PACE result is unrecoverable. Aborting."); + mState->run(); + QCOMPARE(mContext->getStatus(), status); + QCOMPARE(spy.count(), 1); + } + + + void test_Run_WrongPacePassword_data() + { + QTest::addColumn("code"); + + QTest::newRow("invalid_can") << CardReturnCode::INVALID_CAN; + QTest::newRow("invalid_pin") << CardReturnCode::INVALID_PIN; + QTest::newRow("invalid_pin_2") << CardReturnCode::INVALID_PIN_2; + QTest::newRow("invalid_pin_3") << CardReturnCode::INVALID_PIN_3; + QTest::newRow("invalid_puk") << CardReturnCode::INVALID_PUK; + QTest::newRow("new_pin_mismatch") << CardReturnCode::NEW_PIN_MISMATCH; + QTest::newRow("new_pin_invalid_length") << CardReturnCode::NEW_PIN_INVALID_LENGTH; + QTest::newRow("pin_not_blocked") << CardReturnCode::PIN_NOT_BLOCKED; + QTest::newRow("pin_blocked") << CardReturnCode::PIN_BLOCKED; + } + + + void test_Run_WrongPacePassword() + { + QFETCH(CardReturnCode, code); + + QSignalSpy spyNoCardConnection(mState.data(), &StateMaintainCardConnection::fireNoCardConnection); + QSignalSpy spyUpdateRetryCounter(mState.data(), &StateMaintainCardConnection::fireForceUpdateRetryCounter); + + const QString password("111111"); + mContext->setPin(password); + mContext->setCan(password); + mContext->setPuk(password); + mContext->setLastPaceResult(code); + + QTest::ignoreMessage(QtDebugMsg, "Reseting all PACE passwords."); + QTest::ignoreMessage(QtDebugMsg, "No card connection available."); + mState->run(); + QCOMPARE(spyNoCardConnection.count(), 1); + + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + mContext->setCardConnection(connection); + + QTest::ignoreMessage(QtDebugMsg, "Reseting all PACE passwords."); + QTest::ignoreMessage(QtDebugMsg, "Trigger retry counter update."); + mState->run(); + QCOMPARE(spyUpdateRetryCounter.count(), 1); + + QCOMPARE(mContext->getPin(), QString()); + QCOMPARE(mContext->getCan(), QString()); + QCOMPARE(mContext->getPuk(), QString()); + } + + + void test_Run_ResetCardConnectionAndLastPaceResult_data() + { + QTest::addColumn("code"); + QTest::addColumn("doReset"); + + QTest::newRow("card_not_found") << CardReturnCode::CARD_NOT_FOUND << true; + QTest::newRow("retry_allowed") << CardReturnCode::RETRY_ALLOWED << true; + + QTest::newRow("undefined") << CardReturnCode::UNDEFINED << false; + QTest::newRow("unknown") << CardReturnCode::UNKNOWN << false; + QTest::newRow("command_failed") << CardReturnCode::COMMAND_FAILED << false; + QTest::newRow("protocol_error") << CardReturnCode::PROTOCOL_ERROR << false; + QTest::newRow("unexpectd_transmit_status") << CardReturnCode::UNEXPECTED_TRANSMIT_STATUS << false; + } + + + void test_Run_ResetCardConnectionAndLastPaceResult() + { + QFETCH(CardReturnCode, code); + QFETCH(bool, doReset); + QSignalSpy spyNoCard(mState.data(), &StateMaintainCardConnection::fireNoCardConnection); + QSignalSpy spyAbort(mState.data(), &StateMaintainCardConnection::fireAbort); + + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + mContext->setCardConnection(connection); + mContext->setLastPaceResult(code); + if (doReset) + { + QTest::ignoreMessage(QtDebugMsg, "No card connection available."); + } + else + { + QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Last PACE result: .*")); + QTest::ignoreMessage(QtDebugMsg, "Last PACE result is unrecoverable. Aborting."); + } + mState->run(); + QCOMPARE(mContext->getCardConnection(), doReset ? QSharedPointer() : connection); + QCOMPARE(mContext->getLastPaceResult(), doReset ? CardReturnCode::OK : code); + QCOMPARE(spyNoCard.count(), doReset ? 1 : 0); + QCOMPARE(spyAbort.count(), doReset ? 0 : 1); + } + + + void test_Run_Ok() + { + QSignalSpy spyNoCardConnection(mState.data(), &StateMaintainCardConnection::fireNoCardConnection); + QSignalSpy spyContinue(mState.data(), &StateMaintainCardConnection::fireContinue); + QSignalSpy spyUpdateRetryCounter(mState.data(), &StateMaintainCardConnection::fireForceUpdateRetryCounter); + + mContext->setLastPaceResult(CardReturnCode::OK); + QTest::ignoreMessage(QtDebugMsg, "No card connection available."); + mState->run(); + QCOMPARE(spyNoCardConnection.count(), 1); + + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + mContext->setCardConnection(connection); + + QTest::ignoreMessage(QtDebugMsg, "Card connection is fine. Proceeding."); + mState->run(); + QCOMPARE(spyContinue.count(), 1); + + mContext->setLastPaceResult(CardReturnCode::OK_PUK); + QTest::ignoreMessage(QtDebugMsg, "PIN unblocked! Triggering retry counter update."); + mState->run(); + QCOMPARE(spyUpdateRetryCounter.count(), 1); + QCOMPARE(mContext->getLastPaceResult(), CardReturnCode::OK); + } + + +}; + +QTEST_GUILESS_MAIN(test_StateMaintainCardConnection) +#include "test_StateMaintainCardConnection.moc" diff --git a/test/qt/core/states/test_StatePreVerification.cpp b/test/qt/core/states/test_StatePreVerification.cpp index 2b29cfb..ba37008 100644 --- a/test/qt/core/states/test_StatePreVerification.cpp +++ b/test/qt/core/states/test_StatePreVerification.cpp @@ -75,7 +75,7 @@ class test_StatePreVerification void testSignatureInvalid() { const_cast(&mState->mValidationDateTime)->setDate(QDate(2013, 12, 1)); - auto signature = mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.at(0)->getEcdsaSignature(); + auto signature = mAuthContext->getDidAuthenticateEac1()->getCvCertificates().at(0)->getEcdsaSignature(); #if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) BIGNUM* signaturePart = signature->r; #else @@ -139,13 +139,13 @@ class test_StatePreVerification } settings.save(); - const int expectedCvcaSize = 12; + const int expectedCvcaSize = 13; QCOMPARE(mState->mTrustedCvcas.size(), expectedCvcaSize); const_cast(&mState->mValidationDateTime)->setDate(QDate(2013, 12, 1)); auto& trustedCvcas = const_cast >&>(mState->mTrustedCvcas); - remove(trustedCvcas, mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.at(3)); - remove(trustedCvcas, mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.at(2)); + remove(trustedCvcas, mAuthContext->getDidAuthenticateEac1()->getCvCertificates().at(3)); + remove(trustedCvcas, mAuthContext->getDidAuthenticateEac1()->getCvCertificates().at(2)); QCOMPARE(mState->mTrustedCvcas.size(), expectedCvcaSize - 2); diff --git a/test/qt/core/states/test_StatePreparePace.cpp b/test/qt/core/states/test_StatePreparePace.cpp new file mode 100644 index 0000000..a5675b5 --- /dev/null +++ b/test/qt/core/states/test_StatePreparePace.cpp @@ -0,0 +1,155 @@ +/*! + * \brief Unit tests for \ref StatePreparePace + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/StatePreparePace.h" + +#include "states/StateBuilder.h" + +#include "MockCardConnectionWorker.h" + +#include +#include + + +using namespace governikus; + +class test_StatePreparePace + : public QObject +{ + Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + QThread workerThread; + + private Q_SLOTS: + void init() + { + mContext.reset(new WorkflowContext()); + mState.reset(StateBuilder::createState(mContext)); + workerThread.start(); + mState->onEntry(nullptr); + } + + + void cleanup() + { + workerThread.quit(); + workerThread.wait(); + mContext.clear(); + mState.clear(); + } + + + void test_Run_NoCardConnection() + { + QSignalSpy spyAbort(mState.data(), &StatePreparePace::fireAbort); + + QTest::ignoreMessage(QtDebugMsg, "Card connection lost."); + mContext->setStateApproved(); + QCOMPARE(spyAbort.count(), 1); + QCOMPARE(mContext->getEstablishPaceChannelType(), PacePasswordId::UNKNOWN); + } + + + void test_Run_CanAllowed() + { + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + mContext->setCardConnection(connection); + mContext->setCanAllowedMode(true); + QTest::ignoreMessage(QtDebugMsg, "CAN allowed required"); + mContext->setStateApproved(); + QCOMPARE(mContext->getEstablishPaceChannelType(), PacePasswordId::PACE_CAN); + } + + + void test_Run_RetryCounter0() + { + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + const CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), 0); + const ReaderInfo readerInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo); + mContext->setCardConnection(connection); + Q_EMIT worker->fireReaderInfoChanged(readerInfo); + QSignalSpy spyEnterPacePassword(mState.data(), &StatePreparePace::fireEnterPacePassword); + QSignalSpy spyEstablishPaceChannel(mState.data(), &StatePreparePace::fireEstablishPaceChannel); + + QTest::ignoreMessage(QtDebugMsg, "PUK required"); + mContext->setStateApproved(); + QCOMPARE(spyEnterPacePassword.count(), 1); + QCOMPARE(mContext->getEstablishPaceChannelType(), PacePasswordId::PACE_PUK); + + mContext->setStateApproved(false); + + const QString puk("0987654321"); + mContext->setPuk(puk); + mContext->setStateApproved(); + QCOMPARE(spyEstablishPaceChannel.count(), 1); + } + + + void test_Run_RetryCounter1() + { + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + const CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), 1); + const ReaderInfo readerInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo); + QSignalSpy spyEnterPacePassword(mState.data(), &StatePreparePace::fireEnterPacePassword); + QSignalSpy spyEstablishPaceChannel(mState.data(), &StatePreparePace::fireEstablishPaceChannel); + mContext->setCardConnection(connection); + Q_EMIT worker->fireReaderInfoChanged(readerInfo); + + QTest::ignoreMessage(QtDebugMsg, "CAN required"); + QTest::ignoreMessage(QtDebugMsg, "PACE CAN done: false"); + mContext->setStateApproved(); + + mContext->setStateApproved(false); + + const QString can("000000"); + mContext->setCan(can); + QTest::ignoreMessage(QtDebugMsg, "CAN required"); + QTest::ignoreMessage(QtDebugMsg, "PACE CAN done: false"); + mContext->setStateApproved(); + QCOMPARE(spyEstablishPaceChannel.count(), 1); + } + + + void test_Run_RetryCounter3() + { + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + const CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), 3); + const ReaderInfo readerInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo); + mContext->setCardConnection(connection); + Q_EMIT worker->fireReaderInfoChanged(readerInfo); + QSignalSpy spyEnterPacePassword(mState.data(), &StatePreparePace::fireEnterPacePassword); + QSignalSpy spyEstablishPaceChannel(mState.data(), &StatePreparePace::fireEstablishPaceChannel); + + QTest::ignoreMessage(QtDebugMsg, "PIN allowed"); + QTest::ignoreMessage(QtDebugMsg, "PACE PIN done: false"); + mContext->setStateApproved(); + QCOMPARE(spyEnterPacePassword.count(), 1); + QCOMPARE(spyEstablishPaceChannel.count(), 0); + QCOMPARE(mContext->getEstablishPaceChannelType(), PacePasswordId::PACE_PIN); + + mContext->setStateApproved(false); + + const QString pin("000000"); + mContext->setPin(pin); + mContext->setStateApproved(); + QCOMPARE(spyEnterPacePassword.count(), 1); + QCOMPARE(spyEstablishPaceChannel.count(), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_StatePreparePace) +#include "test_StatePreparePace.moc" diff --git a/test/qt/core/states/test_StatePreparePaceRemote.cpp b/test/qt/core/states/test_StatePreparePaceRemote.cpp new file mode 100644 index 0000000..52fc12d --- /dev/null +++ b/test/qt/core/states/test_StatePreparePaceRemote.cpp @@ -0,0 +1,127 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/remote_service/StatePreparePaceRemote.h" + +#include "AppSettings.h" +#include "EstablishPaceChannelParser.h" +#include "states/StateBuilder.h" + +#include + + +using namespace governikus; + +class test_StatePreparePaceRemote + : public QObject +{ + Q_OBJECT + QSharedPointer mContext; + QSharedPointer mState; + + static QSharedPointer createMessage(PacePasswordId pId) + { + EstablishPaceChannel builder; + builder.setPasswordId(pId); + const auto command = builder.createCommandDataCcid(); + const auto& buffer = command.getBuffer(); + return QSharedPointer(new IfdEstablishPaceChannel("slot", buffer)); + } + + + private Q_SLOTS: + void init() + { + mContext.reset(new RemoteServiceContext()); + mState.reset(StateBuilder::createState(mContext)); + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(true); + + mState->onEntry(nullptr); + } + + + void cleanup() + { + mContext.clear(); + mState.clear(); + } + + + void test_RunPin() + { + const auto& message = createMessage(PacePasswordId::PACE_PIN); + mContext->setEstablishPaceChannelMessage(message); + QSignalSpy spyEnterPacePassword(mState.data(), &StatePreparePaceRemote::fireEnterPacePassword); + QSignalSpy spyContinue(mState.data(), &StatePreparePaceRemote::fireContinue); + + mContext->setStateApproved(); + QCOMPARE(spyEnterPacePassword.count(), 1); + + mContext->setPin(QString("111111")); + mContext->setStateApproved(false); + mContext->setStateApproved(); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_RunCan() + { + const auto& message = createMessage(PacePasswordId::PACE_CAN); + mContext->setEstablishPaceChannelMessage(message); + QSignalSpy spyEnterPacePassword(mState.data(), &StatePreparePaceRemote::fireEnterPacePassword); + QSignalSpy spyContinue(mState.data(), &StatePreparePaceRemote::fireContinue); + + mContext->setStateApproved(); + QCOMPARE(spyEnterPacePassword.count(), 1); + + mContext->setCan(QString("111111")); + mContext->setStateApproved(false); + mContext->setStateApproved(); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_RunPuk() + { + const auto& message = createMessage(PacePasswordId::PACE_PUK); + mContext->setEstablishPaceChannelMessage(message); + QSignalSpy spyEnterPacePassword(mState.data(), &StatePreparePaceRemote::fireEnterPacePassword); + QSignalSpy spyContinue(mState.data(), &StatePreparePaceRemote::fireContinue); + + mContext->setStateApproved(); + QCOMPARE(spyEnterPacePassword.count(), 1); + + mContext->setPuk(QString("111111")); + mContext->setStateApproved(false); + mContext->setStateApproved(); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_RunUnknown() + { + const auto& message = createMessage(PacePasswordId::UNKNOWN); + mContext->setEstablishPaceChannelMessage(message); + QSignalSpy spyContinue(mState.data(), &StatePreparePaceRemote::fireContinue); + + QTest::ignoreMessage(QtCriticalMsg, "Cannot handle PacePasswordId: UNKNOWN"); + mContext->setStateApproved(); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_RunPinPadModeFalse() + { + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(false); + QSignalSpy spyContinue(mState.data(), &StatePreparePaceRemote::fireContinue); + + mContext->setStateApproved(); + QCOMPARE(spyContinue.count(), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_StatePreparePaceRemote) +#include "test_StatePreparePaceRemote.moc" diff --git a/test/qt/core/states/test_StateProcessCertificatesFromEac2.cpp b/test/qt/core/states/test_StateProcessCertificatesFromEac2.cpp index 71a80ce..968fd16 100644 --- a/test/qt/core/states/test_StateProcessCertificatesFromEac2.cpp +++ b/test/qt/core/states/test_StateProcessCertificatesFromEac2.cpp @@ -7,10 +7,11 @@ #include "states/StateProcessCertificatesFromEac2.h" #include "asn1/CVCertificateChainBuilder.h" -#include "Commands.h" #include "paos/retrieve/DidAuthenticateEac1.h" #include "paos/retrieve/DidAuthenticateEac1Parser.h" #include "paos/retrieve/DidAuthenticateEac2Parser.h" +#include "states/StateBuilder.h" + #include "TestAuthContext.h" #include "TestFileHelper.h" @@ -25,7 +26,7 @@ class test_StateProcessCertificatesFromEac2 { Q_OBJECT QScopedPointer mState; - QSharedPointer mAuthContext; + QSharedPointer mAuthContext; Q_SIGNALS: void fireStateStart(QEvent* pEvent); @@ -40,7 +41,7 @@ class test_StateProcessCertificatesFromEac2 paceOutput.parse(QByteArray::fromHex(TestFileHelper::readFile(":/card/EstablishPaceChannelOutput.hex")), PacePasswordId::PACE_PIN); mAuthContext->setPaceOutputData(paceOutput); - mState.reset(new StateProcessCertificatesFromEac2(mAuthContext)); + mState.reset(StateBuilder::createState(mAuthContext)); mState->setStateName("StateProcessCertificatesFromEac2"); connect(this, &test_StateProcessCertificatesFromEac2::fireStateStart, mState.data(), &AbstractState::onEntry); } @@ -69,8 +70,8 @@ class test_StateProcessCertificatesFromEac2 void testDoNotTakeTerminalCvcFromEac2() { // move terminal cvc from eac1 to eac2 - mAuthContext->mDIDAuthenticateEAC2->mEac2.mCvCertificates.append(mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.at(0)); - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.removeAt(0); + mAuthContext->mDIDAuthenticateEAC2->mEac2.mCvCertificates.append(mAuthContext->getDidAuthenticateEac1()->getCvCertificates().at(0)); + mAuthContext->clearCvCertificates(); mAuthContext->initCvcChainBuilder(); QSignalSpy spy(mState.data(), &StateProcessCertificatesFromEac2::fireAbort); @@ -85,10 +86,10 @@ class test_StateProcessCertificatesFromEac2 void testCvcFromEac2() { // move terminal dv from eac1 to eac2 - mAuthContext->mDIDAuthenticateEAC2->mEac2.mCvCertificates.append(mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.at(1)); - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.removeAt(3); - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.removeAt(2); - mAuthContext->mDIDAuthenticateEAC1->mEac1InputType.mCvCertificates.removeAt(1); + mAuthContext->mDIDAuthenticateEAC2->mEac2.mCvCertificates.append(mAuthContext->getDidAuthenticateEac1()->getCvCertificates().at(1)); + mAuthContext->removeCvCertAt(3); + mAuthContext->removeCvCertAt(2); + mAuthContext->removeCvCertAt(1); mAuthContext->initCvcChainBuilder(); QSignalSpy spy(mState.data(), &StateProcessCertificatesFromEac2::fireContinue); diff --git a/test/qt/core/states/test_StateProcessRemoteMessages.cpp b/test/qt/core/states/test_StateProcessRemoteMessages.cpp index 8d2c428..43befc1 100644 --- a/test/qt/core/states/test_StateProcessRemoteMessages.cpp +++ b/test/qt/core/states/test_StateProcessRemoteMessages.cpp @@ -9,7 +9,7 @@ #include "MockCardConnectionWorker.h" #include "MockRemoteServer.h" -#include +#include using namespace governikus; @@ -33,7 +33,7 @@ class test_StateProcessRemoteMessages const QSharedPointer context(new RemoteServiceContext()); StateProcessRemoteMessages state(context); state.run(); - QCOMPARE(state.mConnections.size(), 1); + QCOMPARE(state.mConnections.size(), 2); QCOMPARE(state.mMessageConnections.size(), 4); } diff --git a/test/qt/core/states/test_StateSelectPasswordId.cpp b/test/qt/core/states/test_StateSelectPasswordId.cpp index cff4412..c770199 100644 --- a/test/qt/core/states/test_StateSelectPasswordId.cpp +++ b/test/qt/core/states/test_StateSelectPasswordId.cpp @@ -6,6 +6,8 @@ #include "states/StateSelectPasswordId.h" +#include "states/StateBuilder.h" + #include using namespace governikus; @@ -20,18 +22,21 @@ class test_StateSelectPasswordId void test_Run() { QSharedPointer context(new WorkflowContext()); - StateSelectPasswordId id(context); - QSignalSpy spyPasswordIdCAN(&id, &StateSelectPasswordId::firePasswordIdCAN); - QSignalSpy spyContinue(&id, &StateSelectPasswordId::fireContinue); + const auto& state = StateBuilder::createState(context); + QSignalSpy spyPasswordIdCAN(state, &StateSelectPasswordId::firePasswordIdCAN); + QSignalSpy spyContinue(state, &StateSelectPasswordId::fireContinue); context->setCanAllowedMode(true); + context->setStateApproved(); QTest::ignoreMessage(QtDebugMsg, "CAN allowed: true"); - id.run(); + QTest::ignoreMessage(QtDebugMsg, "Running state \"StateSelectPasswordId\""); + state->onStateApprovedChanged(); QCOMPARE(spyPasswordIdCAN.count(), 1); context->setCanAllowedMode(false); QTest::ignoreMessage(QtDebugMsg, "CAN allowed: false"); - id.run(); + QTest::ignoreMessage(QtDebugMsg, "Running state \"StateSelectPasswordId\""); + state->onStateApprovedChanged(); QCOMPARE(spyContinue.count(), 1); } diff --git a/test/qt/core/states/test_StateSelectReader.cpp b/test/qt/core/states/test_StateSelectReader.cpp index 4590ad6..c52d13e 100644 --- a/test/qt/core/states/test_StateSelectReader.cpp +++ b/test/qt/core/states/test_StateSelectReader.cpp @@ -6,6 +6,10 @@ #include "states/StateSelectReader.h" +#include "Env.h" +#include "ReaderManager.h" +#include "states/StateBuilder.h" + #include using namespace governikus; @@ -15,65 +19,63 @@ class test_StateSelectReader : public QObject { Q_OBJECT + QScopedPointer mState; + QSharedPointer mContext; private Q_SLOTS: - void test_RequiresCard() + void init() { - const QSharedPointer context(new WorkflowContext()); - StateSelectReader state(context); + mContext.reset(new WorkflowContext()); + mState.reset(StateBuilder::createState(mContext)); + } - QVERIFY(state.requiresCard(ReaderManagerPlugInType::PCSC)); - QVERIFY(state.requiresCard(ReaderManagerPlugInType::REMOTE)); - QVERIFY(!state.requiresCard(ReaderManagerPlugInType::UNKNOWN)); - QVERIFY(!state.requiresCard(ReaderManagerPlugInType::BLUETOOTH)); + + void cleanup() + { + mState.reset(); + mContext.clear(); } void test_OnReaderInfoChangedNoSelectableReaders() { - const QSharedPointer context(new WorkflowContext()); - context->setReaderPlugInTypes({ReaderManagerPlugInType::PCSC, ReaderManagerPlugInType::UNKNOWN, ReaderManagerPlugInType::REMOTE}); - StateSelectReader state(context); + mContext->setReaderPlugInTypes({ReaderManagerPlugInType::PCSC, ReaderManagerPlugInType::UNKNOWN, ReaderManagerPlugInType::REMOTE}); + mContext->setStateApproved(); + mState->onStateApprovedChanged(); + const auto readerManager = Env::getSingleton(); QTest::ignoreMessage(QtDebugMsg, "No selectable reader detected"); - state.onReaderInfoChanged(); + Q_EMIT readerManager->fireReaderAdded(QString()); } void test_OnReaderDeviceError() { - const QSharedPointer context(new WorkflowContext()); - StateSelectReader state(context); - QSignalSpy spyAbort(&state, &StateSelectReader::fireAbort); + QSignalSpy spyAbort(mState.data(), &StateSelectReader::fireAbort); + mContext->setStateApproved(); + mState->onStateApprovedChanged(); + const auto readerManager = Env::getSingleton(); - state.onReaderDeviceError(GlobalStatus::Code::No_Error); + Q_EMIT readerManager->fireReaderDeviceError(GlobalStatus::Code::No_Error); QCOMPARE(spyAbort.count(), 0); - state.onReaderDeviceError(GlobalStatus::Code::Workflow_Reader_Device_Scan_Error); + Q_EMIT readerManager->fireReaderDeviceError(GlobalStatus::Code::Workflow_Reader_Device_Scan_Error); QCOMPARE(spyAbort.count(), 0); - state.onReaderDeviceError(GlobalStatus::Code::Card_Communication_Error); + Q_EMIT readerManager->fireReaderDeviceError(GlobalStatus::Code::Card_Communication_Error); QCOMPARE(spyAbort.count(), 1); - QCOMPARE(context->getStatus().getStatusCode(), GlobalStatus::Code::Card_Communication_Error); + QCOMPARE(mContext->getStatus().getStatusCode(), GlobalStatus::Code::Card_Communication_Error); } void test_OnEntry() { - const QSharedPointer context(new WorkflowContext()); - StateSelectReader state(context); - const QString stateName("name"); - state.setStateName(stateName); + QSignalSpy spyRetry(mState.data(), &StateSelectReader::fireRetry); - QSignalSpy spyRetry(&state, &StateSelectReader::fireRetry); + mState->onEntry(nullptr); - state.onEntry(nullptr); - - Q_EMIT context->fireAbortCardSelection(); + Q_EMIT mContext->fireReaderPlugInTypesChanged(); QCOMPARE(spyRetry.count(), 1); - - Q_EMIT context->fireReaderPlugInTypesChanged(); - QCOMPARE(spyRetry.count(), 2); } diff --git a/test/qt/core/states/test_StateSendWhitelistSurvey.cpp b/test/qt/core/states/test_StateSendWhitelistSurvey.cpp new file mode 100644 index 0000000..7ecd6fd --- /dev/null +++ b/test/qt/core/states/test_StateSendWhitelistSurvey.cpp @@ -0,0 +1,180 @@ +/*! + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/StateSendWhitelistSurvey.h" + +#include "AppSettings.h" +#include "HttpServer.h" +#include "LogHandler.h" +#include "states/StateBuilder.h" +#include "SecureStorage.h" + +#include "MockCardConnectionWorker.h" +#include "MockRemoteServer.h" +#include "TestAuthContext.h" + +#include + + +using namespace governikus; + +class MockSecureStorage + : public SecureStorage +{ + Q_GADGET + + public: + explicit MockSecureStorage(const QUrl& url) + : SecureStorage() + { + mWhitelistServerBaseUrl = url; + } + + + virtual ~MockSecureStorage() override; +}; + +MockSecureStorage::~MockSecureStorage() +{ +} + + +class test_StateSendWhitelistSurvey + : public QObject +{ + Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + + private Q_SLOTS: + void init() + { + mContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1.xml")); + mState.reset(StateBuilder::createState(mContext)); + mState->onEntry(nullptr); + } + + + void cleanup() + { + mState.clear(); + mContext.clear(); + Env::getSingleton()->resetBacklog(); + } + + + void test_Run_NoSurveyPending() + { + Env::getSingleton()->getGeneralSettings().setDeviceSurveyPending(false); + QSignalSpy spy(mState.data(), &StateSendWhitelistSurvey::fireContinue); + + QTest::ignoreMessage(QtDebugMsg, "No survey pending."); + mContext->setStateApproved(); + QCOMPARE(spy.count(), 1); + } + + + void test_Run_StatusIsError() + { + // Implementation at this time not possible. + // Q_ASSERT handling unsupported. + } + + + void test_Run_EffectiveAccessRightsEmpty() + { + // Implementation at this time not possible. + // Q_ASSERT handling unsupported. + } + + + void test_Run_DidAuthenticateEac1IsNullptr() + { + // Implementation at this time not possible. + // Q_ASSERT handling unsupported. + } + + + void test_Run_data() + { + QTest::addColumn("port"); + QTest::addColumn("spyCounter"); + QTest::addColumn("url"); + + QTest::newRow("successful") << quint16(25000) << 1 << QUrl("http://localhost:25000"); + QTest::newRow("invalidPort") << quint16(1515) << 0 << QUrl("http://localhost:25000"); + QTest::newRow("emptyPort") << quint16() << 0 << QUrl("http://localhost:25000"); + QTest::newRow("emptyPortinUrl") << quint16(1515) << 0 << QUrl("http://localhost"); + QTest::newRow("invalidHost") << quint16(25000) << 0 << QUrl("http://test:25000"); + } + + + void test_Run() + { + QFETCH(quint16, port); + QFETCH(int, spyCounter); + QFETCH(QUrl, url); + + Env::getSingleton()->init(); + Env::getSingleton()->getGeneralSettings().setDeviceSurveyPending(true); + QSignalSpy spyContinue(mState.data(), &StateSendWhitelistSurvey::fireContinue); + QSignalSpy spyLog(Env::getSingleton(), &LogHandler::fireLog); + + HttpServer server(port); + QSignalSpy spy(&server, &HttpServer::fireNewHttpRequest); + + const QString name("reader"); + mContext->setReaderName(name); + MockSecureStorage storage(url); + Env::set(SecureStorage::staticMetaObject, &storage); + + mContext->setStateApproved(); + QTRY_COMPARE(spy.count(), spyCounter); + QVERIFY(!Env::getSingleton()->getGeneralSettings().isDeviceSurveyPending()); + QCOMPARE(spyContinue.count(), 1); + + bool surveySent = false; + QString message; + for (int i = 0; i < spyLog.size(); i++) + { + if (spyLog.at(i).at(0).toString().contains("Sent survey to whitelist server:")) + { + surveySent = true; + message = spyLog.at(i).at(0).toString(); + break; + } + } + + QVERIFY(surveySent); + QVERIFY(message.contains("AusweisAppVersionNumber")); + QVERIFY(message.contains("ModelName")); + QVERIFY(message.contains("ModelNumber")); + QVERIFY(message.contains("Rom")); + QVERIFY(message.contains("AndroidVersion")); + QVERIFY(message.contains("BuildNumber")); + QVERIFY(message.contains("KernelVersion")); + QVERIFY(message.contains("\"MaximumNfcPacketLength\": 0")); + QVERIFY(message.contains("Vendor")); + + if (spyCounter != 0) + { + const QSharedPointer request = spy.at(0).at(0).value >(); + QCOMPARE(request->getUrl(), QUrl("/new")); + QCOMPARE(request->getHeader(QByteArray("host")), QByteArray("localhost:25000")); + QCOMPARE(request->getHeader(QByteArray("content-type")), QByteArray("application/json; charset=UTF-8")); + QJsonDocument json = QJsonDocument::fromJson(request->getBody()); + QJsonObject jsonObject = json.object(); + QVERIFY(jsonObject.contains("AusweisAppVersionNumber")); + QVERIFY(jsonObject.contains("ModelName")); + QVERIFY(jsonObject.contains("ModelNumber")); + QVERIFY(jsonObject.contains("Rom")); + QVERIFY(jsonObject.contains("Vendor")); + } + } + + +}; + +QTEST_GUILESS_MAIN(test_StateSendWhitelistSurvey) +#include "test_StateSendWhitelistSurvey.moc" diff --git a/test/qt/core/states/test_StateStartPaosResponse.cpp b/test/qt/core/states/test_StateStartPaosResponse.cpp index 5d13618..e645ead 100644 --- a/test/qt/core/states/test_StateStartPaosResponse.cpp +++ b/test/qt/core/states/test_StateStartPaosResponse.cpp @@ -2,8 +2,8 @@ * \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include #include "states/StateBuilder.h" diff --git a/test/qt/core/states/test_StateStartRemoteService.cpp b/test/qt/core/states/test_StateStartRemoteService.cpp index 18a5b49..dc2dee3 100644 --- a/test/qt/core/states/test_StateStartRemoteService.cpp +++ b/test/qt/core/states/test_StateStartRemoteService.cpp @@ -6,8 +6,9 @@ #include "MockCardConnectionWorker.h" #include "MockRemoteServer.h" +#include "states/StateBuilder.h" -#include +#include using namespace governikus; @@ -29,12 +30,25 @@ class test_StateStartRemoteService void test_Run() { const QSharedPointer context(new RemoteServiceContext()); - StateStartRemoteService state(context); - QSignalSpy spyContinue(&state, &StateStartRemoteService::fireContinue); + const QSharedPointer state(StateBuilder::createState(context)); + QSignalSpy spyContinue(state.data(), &StateStartRemoteService::fireContinue); - state.run(); + state->onEntry(nullptr); + context->setStateApproved(); QCOMPARE(spyContinue.count(), 1); - state.onMessageHandlerAdded(nullptr); + + const auto& server = context->getRemoteServer(); + const QSharedPointer handler(new ServerMessageHandlerImpl(nullptr)); + Q_EMIT server->fireMessageHandlerAdded(handler); + Q_EMIT handler->fireClosed(); + QCOMPARE(context->getNewPin(), QString()); + QCOMPARE(context->getPin(), QString()); + QCOMPARE(context->getCan(), QString()); + QCOMPARE(context->getPuk(), QString()); + QCOMPARE(context->getCardConnection(), QSharedPointer()); + QCOMPARE(context->getLastPaceResult(), CardReturnCode::OK); + QCOMPARE(context->getEstablishPaceChannelMessage(), QSharedPointer()); + QCOMPARE(context->getModifyPinMessage(), QSharedPointer()); } diff --git a/test/qt/core/states/test_StateStopRemoteService.cpp b/test/qt/core/states/test_StateStopRemoteService.cpp index f831707..570440e 100644 --- a/test/qt/core/states/test_StateStopRemoteService.cpp +++ b/test/qt/core/states/test_StateStopRemoteService.cpp @@ -5,11 +5,12 @@ #include "states/remote_service/StateStopRemoteService.h" #include "context/RemoteServiceContext.h" +#include "states/StateBuilder.h" #include "MockCardConnectionWorker.h" #include "MockRemoteServer.h" -#include +#include using namespace governikus; @@ -18,6 +19,8 @@ class test_StateStopRemoteService : public QObject { Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; private Q_SLOTS: void initTestCase() @@ -28,25 +31,35 @@ class test_StateStopRemoteService } + void init() + { + mContext.reset(new RemoteServiceContext()); + mState.reset(StateBuilder::createState(mContext)); + } + + + void cleanup() + { + mContext.clear(); + mState.clear(); + } + + void test_Run() { - const QSharedPointer context(new RemoteServiceContext()); - StateStopRemoteService state(context); - QSignalSpy spyContinue(&state, &StateStopRemoteService::fireContinue); - - state.run(); + QSignalSpy spyContinue(mState.data(), &StateStopRemoteService::fireContinue); + mState->onEntry(nullptr); + mContext->setStateApproved(); QCOMPARE(spyContinue.count(), 1); } void test_OnExit() { - const QSharedPointer context(new RemoteServiceContext()); - StateStopRemoteService state(context); const QString name("name"); - state.setStateName(name); - state.onExit(nullptr); - QVERIFY(!context->getRemoteServer()->isRunning()); + mState->setStateName(name); + Q_EMIT mContext->fireCancelWorkflow(); + QVERIFY(!mContext->getRemoteServer()->isRunning()); } diff --git a/test/qt/core/states/test_StateVerifyRetryCounter.cpp b/test/qt/core/states/test_StateVerifyRetryCounter.cpp new file mode 100644 index 0000000..99f2fc1 --- /dev/null +++ b/test/qt/core/states/test_StateVerifyRetryCounter.cpp @@ -0,0 +1,133 @@ +/*! + * \brief Unit tests for \ref StateVerifyRetryCounter + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/StateVerifyRetryCounter.h" + +#include "states/StateBuilder.h" + +#include "MockCardConnectionWorker.h" + +#include +#include + + +using namespace governikus; + +class test_StateVerifyRetryCounter + : public QObject +{ + Q_OBJECT + QSharedPointer mState; + QSharedPointer mContext; + QThread mWorkerThread; + + private Q_SLOTS: + void init() + { + mContext.reset(new WorkflowContext()); + mState.reset(StateBuilder::createState(mContext)); + mState->onEntry(nullptr); + mWorkerThread.start(); + } + + + void cleanup() + { + mWorkerThread.quit(); + mWorkerThread.wait(); + mState.clear(); + mContext.clear(); + } + + + void test_Run() + { + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&mWorkerThread); + const QSharedPointer connection(new CardConnection(worker)); + const CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), 3); + const ReaderInfo readerInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo); + Q_EMIT worker->fireReaderInfoChanged(readerInfo); + mContext->setCardConnection(connection); + mContext->setExpectedRetryCounter(3); + QSignalSpy spyContinue(mState.data(), &StateVerifyRetryCounter::fireContinue); + + QTest::ignoreMessage(QtDebugMsg, "Retry counter | actual: 3 / expected: 3"); + mContext->setStateApproved(); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_Run_NoConnection() + { + QSignalSpy spyAbort(mState.data(), &StateVerifyRetryCounter::fireAbort); + + QTest::ignoreMessage(QtDebugMsg, "Card connection lost."); + mContext->setStateApproved(); + QCOMPARE(spyAbort.count(), 1); + } + + + void test_Run_NotExpectedReader() + { + const QString password("000000"); + mContext->setPin(password); + mContext->setCan(password); + mContext->setPuk(password); + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&mWorkerThread); + const QSharedPointer connection(new CardConnection(worker)); + const CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), 2); + const ReaderInfo readerInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo); + Q_EMIT worker->fireReaderInfoChanged(readerInfo); + mContext->setCardConnection(connection); + mContext->setExpectedRetryCounter(2); + mContext->setReaderName(QString("test reader")); + QSignalSpy spyContinue(mState.data(), &StateVerifyRetryCounter::fireContinue); + + QTest::ignoreMessage(QtDebugMsg, "Retry counter | actual: 2 / expected: 2"); + QTest::ignoreMessage(QtDebugMsg, "The reader changed or the connected card has an unexpected retry counter. Clearing PACE passwords."); + mContext->setStateApproved(); + QCOMPARE(mContext->getPin(), QString()); + QCOMPARE(mContext->getCan(), QString()); + QCOMPARE(mContext->getPuk(), QString()); + QVERIFY(mContext->isExpectedReader()); + QCOMPARE(mContext->getExpectedRetryCounter(), 2); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_Run_ActualNotEqualExpectedRetryCounter() + { + const QString password("000000"); + mContext->setPin(password); + mContext->setCan(password); + mContext->setPuk(password); + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&mWorkerThread); + const QSharedPointer connection(new CardConnection(worker)); + const CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), 2); + const ReaderInfo readerInfo(QString(), ReaderManagerPlugInType::UNKNOWN, cardInfo); + Q_EMIT worker->fireReaderInfoChanged(readerInfo); + mContext->setCardConnection(connection); + QSignalSpy spyContinue(mState.data(), &StateVerifyRetryCounter::fireContinue); + + QTest::ignoreMessage(QtDebugMsg, "Retry counter | actual: 2 / expected: -1"); + QTest::ignoreMessage(QtDebugMsg, "The reader changed or the connected card has an unexpected retry counter. Clearing PACE passwords."); + mContext->setStateApproved(); + QCOMPARE(mContext->getPin(), QString()); + QCOMPARE(mContext->getCan(), QString()); + QCOMPARE(mContext->getPuk(), QString()); + QVERIFY(mContext->isExpectedReader()); + QCOMPARE(mContext->getExpectedRetryCounter(), 2); + QCOMPARE(spyContinue.count(), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_StateVerifyRetryCounter) +#include "test_StateVerifyRetryCounter.moc" diff --git a/test/qt/core/states/test_StateWriteHistory.cpp b/test/qt/core/states/test_StateWriteHistory.cpp new file mode 100644 index 0000000..e1b2de9 --- /dev/null +++ b/test/qt/core/states/test_StateWriteHistory.cpp @@ -0,0 +1,93 @@ +/*! + * \brief Unit tests for \ref StateWriteHistory + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "states/StateWriteHistory.h" + +#include "AppSettings.h" +#include "Env.h" +#include "states/StateBuilder.h" + +#include "MockCardConnectionWorker.h" +#include "TestAuthContext.h" + +#include +#include + + +using namespace governikus; + +class test_StateWriteHistory + : public QObject +{ + Q_OBJECT + QSharedPointer mContext; + QSharedPointer mState; + + private Q_SLOTS: + void init() + { + mContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1_2.xml")); + mState.reset(StateBuilder::createState(mContext)); + mState->onEntry(nullptr); + } + + + void cleanup() + { + mContext.clear(); + mState.clear(); + } + + + void test_RunHistoryDisabled() + { + QSignalSpy spyContinue(mState.data(), &StateWriteHistory::fireContinue); + Env::getSingleton()->getHistorySettings().setEnabled(false); + + QTest::ignoreMessage(QtDebugMsg, "History disabled"); + mContext->setStateApproved(); + QCOMPARE(spyContinue.count(), 1); + } + + + void test_RunNoEffectiveAccessRights() + { + QSignalSpy spyAbort(mState.data(), &StateWriteHistory::fireAbort); + Env::getSingleton()->getHistorySettings().setEnabled(true); + mContext->setEffectiveAccessRights(QSet()); + + QTest::ignoreMessage(QtWarningMsg, "No EAC1 structure or effective CHAT in model."); + mContext->setStateApproved(); + QCOMPARE(spyAbort.count(), 1); + } + + + void test_RunNoError() + { + auto& historySettings = Env::getSingleton()->getHistorySettings(); + QSignalSpy spyContinue(mState.data(), &StateWriteHistory::fireContinue); + historySettings.setEnabled(true); + const QSet rights = {AccessRight::READ_DG01, AccessRight::READ_DG02}; + mContext->setEffectiveAccessRights(rights); + + mContext->setStatus(GlobalStatus::Code::No_Error); + mContext->setStateApproved(); + const auto historyInfo = historySettings.getHistoryInfos().at(0); + QCOMPARE(historyInfo.getSubjectName(), mState->getContext()->getDidAuthenticateEac1()->getCertificateDescription()->getSubjectName()); + QCOMPARE(historyInfo.getSubjectUrl(), mState->getContext()->getDidAuthenticateEac1()->getCertificateDescription()->getSubjectUrl()); + QCOMPARE(historyInfo.getPurpose(), mState->getContext()->getDidAuthenticateEac1()->getCertificateDescription()->getPurpose()); + QVERIFY(historyInfo.getTermOfUsage().contains(mState->getContext()->getDidAuthenticateEac1()->getCertificateDescription()->getTermsOfUsage())); + qDebug() << historyInfo.getRequestedData(); + QStringList list = {"DocumentType", "IssuingCountry"}; + QCOMPARE(historyInfo.getRequestedData(), list); + QCOMPARE(spyContinue.count(), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_StateWriteHistory) +#include "test_StateWriteHistory.moc" diff --git a/test/qt/core/test_CertificateChecker.cpp b/test/qt/core/test_CertificateChecker.cpp index b6bb4ef..c6107e7 100644 --- a/test/qt/core/test_CertificateChecker.cpp +++ b/test/qt/core/test_CertificateChecker.cpp @@ -25,7 +25,7 @@ class test_CertificateChecker private Q_SLOTS: void initTestCase() { - certs = SecureStorage::getInstance().getUpdateCertificates(); + certs = Env::getSingleton()->getUpdateCertificates(); QVERIFY(certs.size() > 0); } diff --git a/test/qt/core/test_DiagnosisAntivirusDetection.cpp b/test/qt/core/test_DiagnosisAntivirusDetection.cpp index 734154e..2e63a54 100644 --- a/test/qt/core/test_DiagnosisAntivirusDetection.cpp +++ b/test/qt/core/test_DiagnosisAntivirusDetection.cpp @@ -1,7 +1,7 @@ /*! * \brief Unit tests for \ref DiagnosisAntivirusDetection * - * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany */ #include "DiagnosisAntivirusDetection.h" diff --git a/test/qt/core/test_DiagnosisConnectionTest.cpp b/test/qt/core/test_DiagnosisConnectionTest.cpp index 4f9ca44..f936f53 100644 --- a/test/qt/core/test_DiagnosisConnectionTest.cpp +++ b/test/qt/core/test_DiagnosisConnectionTest.cpp @@ -118,6 +118,37 @@ class test_DiagnosisConnectionTest } + void test_StartConnectionTest_NoProxy() + { + QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy); + mTest->startConnectionTest(); + QVERIFY(mTest->mProxyPingDone); + QVERIFY(!mTest->mConnectionTestWithoutProxyDone); + QVERIFY(mTest->mConnectionTestWithProxyDone); + QVERIFY(!mTest->mIsProxySet); + QCOMPARE(mTest->mTcpSocketWithoutProxy.proxy(), QNetworkProxy::NoProxy); + QCOMPARE(mTest->mTcpSocketWithoutProxy.state(), QAbstractSocket::SocketState::HostLookupState); + } + + + void test_StartConnectionTest() + { + QNetworkProxy testProxy(QNetworkProxy::ProxyType::HttpProxy, QString("localhost"), 25000); + QNetworkProxy::setApplicationProxy(testProxy); + + mTest->startConnectionTest(); + QVERIFY(mTest->mIsProxySet); + QCOMPARE(mTest->mProxyHostName, QString("localhost")); + QCOMPARE(mTest->mProxyPort, QString("25000")); + QCOMPARE(mTest->mProxyType, QString("HttpProxy")); + QCOMPARE(mTest->mProxyType, QString("HttpProxy")); + QCOMPARE(mTest->mPingSocketToProxy.proxy(), QNetworkProxy::NoProxy); + QCOMPARE(mTest->mPingSocketToProxy.state(), QAbstractSocket::SocketState::HostLookupState); + QCOMPARE(mTest->mTcpSocketWithProxy.proxy(), testProxy); + QCOMPARE(mTest->mTcpSocketWithProxy.state(), QAbstractSocket::SocketState::ConnectingState); + } + + }; QTEST_GUILESS_MAIN(test_DiagnosisConnectionTest) diff --git a/test/qt/core/test_DiagnosisModel.cpp b/test/qt/core/test_DiagnosisModel.cpp index b66a9a5..5ac0231 100644 --- a/test/qt/core/test_DiagnosisModel.cpp +++ b/test/qt/core/test_DiagnosisModel.cpp @@ -19,6 +19,46 @@ class test_DiagnosisModel QSharedPointer mContext; QSharedPointer mModel; + private: + QString getTestData(const QString& pFilename) + { + QString filePath = QStringLiteral(":/core/diagnosis/") + pFilename; + QByteArray rawData = TestFileHelper::readFile(filePath); + return QString::fromUtf8(rawData); + } + + + bool verifyOrder(const QSharedPointer& pSection, + const QVector >& pSectionOrder) + { + QVector > > contentOrder; + for (const auto& section : pSectionOrder) + { + contentOrder.append(section->mContentItems); + } + + return verifyOrder(pSection->mContentItems, contentOrder); + } + + + bool verifyOrder(const QVector >& pSection, + const QVector > >& pOrder) + { + int offset = 0; + for (const auto& subsection : pOrder) + { + const auto& slice = pSection.mid(offset, subsection.size()); + if (slice != subsection) + { + return false; + } + offset += subsection.size(); + } + + return offset == pSection.size(); + } + + private Q_SLOTS: void init() { @@ -37,44 +77,42 @@ class test_DiagnosisModel void test_newDiagnosisModel() { QCOMPARE(mModel->mContext, mContext); - QCOMPARE(mModel->mRootItem->getText(), QString("Diagnosis data")); - QCOMPARE(mModel->mOperatingSystemItem->getText(), QString("Operating system")); - QCOMPARE(mModel->mReaderItem->getText(), QString("Card reader")); - QCOMPARE(mModel->mPcScItem->getText(), QString("PC/SC")); - QCOMPARE(mModel->mPairedDevices->getText(), QString("Paired devices")); - QCOMPARE(mModel->mNetworkInterfaces->getText(), QString("Network interfaces")); - QCOMPARE(mModel->mNetworkConnectionTest->getText(), QString("Network connection test")); - QCOMPARE(mModel->mInstalledAntivirus->getText(), QString("Installed antivirus software")); - QCOMPARE(mModel->mWindowsFirewall->getText(), QString("Firewall")); - QCOMPARE(mModel->mTimestampItem->getText(), QString("Time of diagnosis")); + QCOMPARE(mModel->mSections.size(), 4); - QCOMPARE(mModel->mRootItem->childCount(), 10); - QCOMPARE(mModel->mRootItem->getChild(0), mModel->mAppVersionItem); - QCOMPARE(mModel->mRootItem->getChild(1), mModel->mOperatingSystemItem); - QCOMPARE(mModel->mRootItem->getChild(2), mModel->mReaderItem); - QCOMPARE(mModel->mRootItem->getChild(3), mModel->mPcScItem); - QCOMPARE(mModel->mRootItem->getChild(4), mModel->mPairedDevices); - QCOMPARE(mModel->mRootItem->getChild(5), mModel->mNetworkInterfaces); - QCOMPARE(mModel->mRootItem->getChild(6), mModel->mNetworkConnectionTest); - QCOMPARE(mModel->mRootItem->getChild(7), mModel->mInstalledAntivirus); - QCOMPARE(mModel->mRootItem->getChild(8), mModel->mWindowsFirewall); - QCOMPARE(mModel->mRootItem->getChild(9), mModel->mTimestampItem); + QCOMPARE(mModel->mSections.at(0).first, QCoreApplication::applicationName()); + QCOMPARE(mModel->mSections.at(1).first, QString("Card reader")); + QCOMPARE(mModel->mSections.at(2).first, QString("Network")); + QCOMPARE(mModel->mSections.at(3).first, QString("Antivirus and firewall")); - QCOMPARE(mModel->mOperatingSystemItem->childCount(), 3); + QCOMPARE(mModel->mSections.at(0).second->mContentItems.last(), mModel->mTimestampItem); - QCOMPARE(mModel->mReaderItem->childCount(), 1); - QCOMPARE(mModel->mReaderItem->getChild(0)->getText(), QString("Diagnosis is running...")); + QCOMPARE(mModel->mSections.at(1).second, mModel->mCombinedReaderSection); + QCOMPARE(mModel->mSections.at(2).second, mModel->mCombinedNetworkSection); + QCOMPARE(mModel->mSections.at(3).second, mModel->mCombinedAntivirusFirewallSection); - QCOMPARE(mModel->mNetworkConnectionTest->childCount(), 1); - QCOMPARE(mModel->mNetworkConnectionTest->getChild(0)->getText(), QString("Diagnosis is running...")); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.at(0)->mTitle, QString("Card reader")); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.at(1)->mContent, QString("Diagnosis is running...")); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.at(2)->mTitle, QString("Paired remote devices")); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.at(4)->mTitle, QString("PC/SC information")); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.at(5)->mContent, QString("Diagnosis is running...")); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.mid(0, 2), mModel->mCardReaderSection->mContentItems); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.mid(2, 2), mModel->mRemoteDeviceSection->mContentItems); + QCOMPARE(mModel->mSections.at(1).second->mContentItems.mid(4, 2), mModel->mPcscSection->mContentItems); + + QCOMPARE(true, verifyOrder(mModel->mSections.at(1).second, + {mModel->mCardReaderSection, mModel->mRemoteDeviceSection, mModel->mPcscSection})); + QCOMPARE(true, verifyOrder(mModel->mSections.at(2).second, + {mModel->mNetworkConnectionSection, mModel->mNetworkInterfaceSection})); + QCOMPARE(true, verifyOrder(mModel->mSections.at(3).second, + {mModel->mAntivirusSection, mModel->mFirewallSection})); } void test_OnReaderInfosChanged() { mModel->onReaderInfosChanged(); - QCOMPARE(mModel->mReaderItem->childCount(), 1); - QCOMPARE(mModel->mReaderItem->getChild(0)->getText(), QString("Not recognised")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.size(), 2); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(1)->mContent, QString("No supported reader found.")); ReaderInfo defaultInfo; ReaderInfo infoEidCard(QString("testInfo"), ReaderManagerPlugInType::PCSC, CardInfo(CardType::EID_CARD)); @@ -84,45 +122,62 @@ class test_DiagnosisModel mContext->setReaderInfos(readerInfos); mModel->onReaderInfosChanged(); - QCOMPARE(mModel->mReaderItem->childCount(), 3); - QCOMPARE(mModel->mReaderItem->getChild(0)->getText(), QString()); - QCOMPARE(mModel->mReaderItem->getChild(1)->getText(), QString("testInfo")); - QCOMPARE(mModel->mReaderItem->getChild(2)->getText(), QString("name")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.size(), 4); - auto child1 = mModel->mReaderItem->getChild(0); - QCOMPARE(child1->childCount(), 2); - QCOMPARE(child1->getChild(0)->getText(), QString("Type: Basic card reader")); - QCOMPARE(child1->getChild(1)->getText(), QString("Card: not inserted")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(0)->mTitle, QString("Connected Card reader")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(1)->mTitle, QString()); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(2)->mTitle, QString("testInfo")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(3)->mTitle, QString("name")); - auto child2 = mModel->mReaderItem->getChild(1); - QCOMPARE(child2->childCount(), 3); - QCOMPARE(child2->getChild(0)->getText(), QString("Type: Basic card reader")); - QCOMPARE(child2->getChild(1)->getText(), QString("Card: ID card (PA/eAT)")); - QCOMPARE(child2->getChild(2)->getText(), QString("Retry counter: 4")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(0)->mContent, QString()); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(1)->mContent, QString("Type: Basic card reader\nCard: not inserted")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(2)->mContent, QString("Type: Basic card reader\nCard: ID card (PA/eAT)\nRetry counter: -1")); + QCOMPARE(mModel->mCardReaderSection->mContentItems.at(3)->mContent, QString("Type: Standard / comfort card reader\nCard: unknown type")); - auto child3 = mModel->mReaderItem->getChild(2); - QCOMPARE(child3->childCount(), 2); - QCOMPARE(child3->getChild(0)->getText(), QString("Type: Standard / comfort card reader")); - QCOMPARE(child3->getChild(1)->getText(), QString("Card: unknown type")); + QCOMPARE(true, verifyOrder(mModel->mCombinedReaderSection->mContentItems, { + mModel->mCardReaderSection->mContentItems, + mModel->mRemoteDeviceSection->mContentItems, + mModel->mPcscSection->mContentItems})); } - void test_onPcscInfoChanged() + void test_OnRemoteInfosChanged() + { + mModel->onRemoteInfosChanged(); + QCOMPARE(mModel->mRemoteDeviceSection->mContentItems.size(), 2); + QCOMPARE(mModel->mRemoteDeviceSection->mContentItems.at(0)->mTitle, QString("Paired remote devices")); + QCOMPARE(mModel->mRemoteDeviceSection->mContentItems.at(1)->mContent, QString("No devices paired.")); + QCOMPARE(true, verifyOrder(mModel->mCombinedReaderSection->mContentItems, { + mModel->mCardReaderSection->mContentItems, + mModel->mRemoteDeviceSection->mContentItems, + mModel->mPcscSection->mContentItems})); + } + + + void test_OnPcscInfoChanged() { const QString version("version"); - const DiagnosisContext::ComponentInfo component1; - const DiagnosisContext::ComponentInfo component2; - const DiagnosisContext::ComponentInfo driver1; - const DiagnosisContext::ComponentInfo driver2; + const DiagnosisContext::ComponentInfo component1(QString("/path/to/component1"), QString("description1"), QString("version1"), QString("vendor1")); + const DiagnosisContext::ComponentInfo component2(QString("/path/to/component2"), QString("description2"), QString("version2"), QString("vendor2")); + const DiagnosisContext::ComponentInfo driver1(QString("/path/to/driver1"), QString("description1"), QString("version1"), QString("vendor1")); + const DiagnosisContext::ComponentInfo driver2(QString("/path/to/driver2"), QString("description2"), QString("version2"), QString("vendor2")); QVector components = {component1, component2}; QVector drivers = {driver1, driver2}; mContext->setPcscInfo(version, components, drivers); - mModel->onPcscInfoChanged(); - QCOMPARE(mModel->mPcScItem->childCount(), 3); - QCOMPARE(mModel->mPcScItem->getChild(0)->getText(), QString("Version: version")); - QCOMPARE(mModel->mPcScItem->getChild(1)->getText(), QString("Components")); - QCOMPARE(mModel->mPcScItem->getChild(2)->getText(), QString("Driver")); + + QCOMPARE(mModel->mPcscSection->mContentItems.size(), 4); + + QCOMPARE(mModel->mPcscSection->mContentItems.at(0)->mTitle, QString("PC/SC information")); + QCOMPARE(mModel->mPcscSection->mContentItems.at(1)->mContent, QString("Version: version")); + QCOMPARE(mModel->mPcscSection->mContentItems.at(2)->mTitle, QString("Components")); + QCOMPARE(mModel->mPcscSection->mContentItems.at(2)->mContent, QString("description1\nVendor: vendor1\nVersion: version1\nFile path: /path/to/component1\ndescription2\nVendor: vendor2\nVersion: version2\nFile path: /path/to/component2")); + QCOMPARE(mModel->mPcscSection->mContentItems.at(3)->mTitle, QString("Driver")); + QCOMPARE(mModel->mPcscSection->mContentItems.at(3)->mContent, QString("description1\nVendor: vendor1\nVersion: version1\nFile path: /path/to/driver1\ndescription2\nVendor: vendor2\nVersion: version2\nFile path: /path/to/driver2")); + QCOMPARE(true, verifyOrder(mModel->mCombinedReaderSection->mContentItems, { + mModel->mCardReaderSection->mContentItems, + mModel->mRemoteDeviceSection->mContentItems, + mModel->mPcscSection->mContentItems})); } @@ -135,13 +190,13 @@ class test_DiagnosisModel mContext->setTimestamp(invalid); mModel->onTimestampChanged(); - QCOMPARE(mModel->mTimestampItem->childCount(), 1); - QCOMPARE(mModel->mTimestampItem->getChild(0)->getText(), QString("Initial diagnosis running, please wait.")); + QCOMPARE(mModel->mTimestampItem->mTitle, QString("Time of diagnosis")); + QCOMPARE(mModel->mTimestampItem->mContent, QString("Failed to retrieve date & time")); mContext->setTimestamp(valid); mModel->onTimestampChanged(); - QCOMPARE(mModel->mTimestampItem->childCount(), 1); - QCOMPARE(mModel->mTimestampItem->getChild(0)->getText(), QString("12. October 2018, 12:00:00 PM")); + QCOMPARE(mModel->mTimestampItem->mTitle, QString("Time of diagnosis")); + QCOMPARE(mModel->mTimestampItem->mContent, QString("12. October 2018, 12:00:00 PM")); } @@ -151,31 +206,110 @@ class test_DiagnosisModel const QNetworkInterface interface2; const QNetworkInterface interface3; QList interfaces = {interface1, interface2, interface3}; - mContext->setNetworkInterfaces(interfaces); mModel->onNetworkInfoChanged(); - QCOMPARE(mModel->mNetworkInterfaces->childCount(), 3); - for (int i = 0; i < mModel->mNetworkInterfaces->childCount(); i++) + + QCOMPARE(mModel->mNetworkInterfaceSection->mContentItems.size(), 3); + for (const auto& item : qAsConst(mModel->mNetworkInterfaceSection->mContentItems)) { - const auto& interface = mModel->mNetworkInterfaces->getChild(i); - QCOMPARE(interface->childCount(), 2); + QCOMPARE(item->mTitle, QString("Interface: \"\"")); + QCOMPARE(item->mContent, QString("Hardware address: \nNo IP addresses assigned")); } + + QCOMPARE(true, verifyOrder(mModel->mCombinedNetworkSection, {mModel->mNetworkConnectionSection, mModel->mNetworkInterfaceSection})); } void test_OnAntivirusDetectionFailed() { mModel->onAntivirusDetectionFailed(); - QCOMPARE(mModel->mInstalledAntivirus->childCount(), 1); - QCOMPARE(mModel->mInstalledAntivirus->getChild(0)->getText(), QString("Antivirus detection failed.")); + QCOMPARE(mModel->mAntivirusSection->mContentItems.size(), 1); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(0)->mTitle, QString("Antivirus information")); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(0)->mContent, QString("Antivirus detection failed.")); + QCOMPARE(true, verifyOrder(mModel->mCombinedAntivirusFirewallSection, {mModel->mAntivirusSection, mModel->mFirewallSection})); + } + + + void test_OnAntivirusInformationChanged() + { + mModel->onAntivirusInformationChanged(); + QCOMPARE(mModel->mAntivirusSection->mContentItems.size(), 1); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(0)->mTitle, QString("Antivirus information")); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(0)->mContent, QString("No Antivirus software detected.")); + QCOMPARE(true, verifyOrder(mModel->mCombinedAntivirusFirewallSection, {mModel->mAntivirusSection, mModel->mFirewallSection})); + + const QString& fileContent = getTestData(QStringLiteral("antivir_two_antivirus.txt")); + mModel->mAntivirusDetection.parseAntivirInfos(fileContent); + mModel->onAntivirusInformationChanged(); + + QCOMPARE(mModel->mAntivirusSection->mContentItems.size(), 3); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(0)->mTitle, QString("Antivirus information")); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(1)->mTitle, QString("BullGuard Antivirus")); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(1)->mContent, QString("Last updated: Fri, 30 Nov 2018 15:04:13 GMT\nExecutable path: C:\\Program Files\\BullGuard Ltd\\BullGuard\\BullGuard.exe")); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(2)->mTitle, QString("Windows Defender")); + QCOMPARE(mModel->mAntivirusSection->mContentItems.at(2)->mContent, QString("Last updated: Mon, 26 Nov 2018 10:34:23 GMT\nExecutable path: windowsdefender://")); + QCOMPARE(true, verifyOrder(mModel->mCombinedAntivirusFirewallSection, {mModel->mAntivirusSection, mModel->mFirewallSection})); } void test_OnFirewallInformationFailed() { mModel->onFirewallInformationFailed(); - QCOMPARE(mModel->mWindowsFirewall->childCount(), 1); - QCOMPARE(mModel->mWindowsFirewall->getChild(0)->getText(), QString("An error occurred while trying to gather firewall information. Please check the log for more information.")); + QCOMPARE(mModel->mFirewallSection->mContentItems.size(), 1); + QCOMPARE(mModel->mFirewallSection->mContentItems.at(0)->mTitle, QString("Firewall information")); + QCOMPARE(mModel->mFirewallSection->mContentItems.at(0)->mContent, QString("An error occurred while trying to gather firewall information. Please check the log for more information.")); + QCOMPARE(true, verifyOrder(mModel->mCombinedAntivirusFirewallSection, {mModel->mAntivirusSection, mModel->mFirewallSection})); + } + + + void test_OnConnectionTestDone_data() + { + QTest::addColumn("proxySet"); + QTest::addColumn("pingTestOnProxy"); + QTest::addColumn("connectionTestOnProxy"); + QTest::addColumn("connectionTestWithoutProxy"); + + QTest::newRow("proxyConnectionSuccessful") << true << true << true << false; + QTest::newRow("connectionWithoutProxySuccessful") << false << false << false << true; + QTest::newRow("proxyConnectionNotSuccessful") << true << false << false << false; + QTest::newRow("noConnection") << false << false << false << false; + } + + + void test_OnConnectionTestDone() + { + QFETCH(bool, proxySet); + QFETCH(bool, pingTestOnProxy); + QFETCH(bool, connectionTestOnProxy); + QFETCH(bool, connectionTestWithoutProxy); + + mModel->mConnectionTest.mIsProxySet = proxySet; + mModel->mConnectionTest.mPingTestOnProxySuccessful = pingTestOnProxy; + mModel->mConnectionTest.mConnectionTestWithProxySuccessful = connectionTestOnProxy; + mModel->mConnectionTest.mConnectionTestWithoutProxySuccessful = connectionTestWithoutProxy; + + mModel->onConnectionTestDone(); + QCOMPARE(mModel->mNetworkConnectionSection->mContentItems.size(), 1); + QCOMPARE(mModel->mNetworkConnectionSection->mContentItems.at(0)->mTitle, QString("Proxy information")); + + QString contentString; + if (proxySet) + { + contentString = QString("Hostname: \nPort: \nType: \nCapabilities: \nPing test to proxy: "); + contentString += pingTestOnProxy ? QString("Successful") : QString("Failed"); + contentString += QString("\nConnection test with proxy: "); + contentString += connectionTestOnProxy ? QString("Successful") : QString("Failed"); + } + else + { + contentString = QString("No proxy found"); + } + + contentString += QString("\nConnection test without proxy: "); + contentString += connectionTestWithoutProxy ? QString("Successful") : QString("Failed"); + + QCOMPARE(mModel->mNetworkConnectionSection->mContentItems.at(0)->mContent, contentString); + QCOMPARE(true, verifyOrder(mModel->mCombinedNetworkSection, {mModel->mNetworkConnectionSection, mModel->mNetworkInterfaceSection})); } diff --git a/test/qt/core/test_DiagnosisTreeModel.cpp b/test/qt/core/test_DiagnosisTreeModel.cpp new file mode 100644 index 0000000..53b9d18 --- /dev/null +++ b/test/qt/core/test_DiagnosisTreeModel.cpp @@ -0,0 +1,296 @@ +/*! + * \brief Unit tests for \ref DiagnosisModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "DiagnosisTreeModel.h" + +#include "TestFileHelper.h" + +#include + +using namespace governikus; + +class test_DiagnosisTreeModel + : public QObject +{ + Q_OBJECT + QSharedPointer mContext; + QSharedPointer mModel; + + private: + QString getTestData(const QString& pFilename) + { + QString filePath = QStringLiteral(":/core/diagnosis/") + pFilename; + QByteArray rawData = TestFileHelper::readFile(filePath); + return QString::fromUtf8(rawData); + } + + + private Q_SLOTS: + void init() + { + mContext.reset(new DiagnosisContext()); + mModel.reset(new DiagnosisTreeModel(mContext)); + } + + + void cleanup() + { + mModel.clear(); + mContext.clear(); + } + + + void test_newDiagnosisTreeModel() + { + QCOMPARE(mModel->mContext, mContext); + QCOMPARE(mModel->mRootItem->getText(), QString("Diagnosis data")); + QCOMPARE(mModel->mOperatingSystemItem->getText(), QString("Operating system")); + QCOMPARE(mModel->mReaderItem->getText(), QString("Card reader")); + QCOMPARE(mModel->mPcScItem->getText(), QString("PC/SC")); + QCOMPARE(mModel->mPairedDevices->getText(), QString("Paired devices")); + QCOMPARE(mModel->mNetworkInterfaces->getText(), QString("Network interfaces")); + QCOMPARE(mModel->mNetworkConnectionTest->getText(), QString("Network connection test")); + QCOMPARE(mModel->mInstalledAntivirus->getText(), QString("Installed antivirus software")); + QCOMPARE(mModel->mWindowsFirewall->getText(), QString("Firewall")); + QCOMPARE(mModel->mTimestampItem->getText(), QString("Time of diagnosis")); + + QCOMPARE(mModel->mRootItem->childCount(), 10); + QCOMPARE(mModel->mRootItem->getChild(0), mModel->mAppVersionItem); + QCOMPARE(mModel->mRootItem->getChild(1), mModel->mOperatingSystemItem); + QCOMPARE(mModel->mRootItem->getChild(2), mModel->mReaderItem); + QCOMPARE(mModel->mRootItem->getChild(3), mModel->mPcScItem); + QCOMPARE(mModel->mRootItem->getChild(4), mModel->mPairedDevices); + QCOMPARE(mModel->mRootItem->getChild(5), mModel->mNetworkInterfaces); + QCOMPARE(mModel->mRootItem->getChild(6), mModel->mNetworkConnectionTest); + QCOMPARE(mModel->mRootItem->getChild(7), mModel->mInstalledAntivirus); + QCOMPARE(mModel->mRootItem->getChild(8), mModel->mWindowsFirewall); + QCOMPARE(mModel->mRootItem->getChild(9), mModel->mTimestampItem); + + QCOMPARE(mModel->mOperatingSystemItem->childCount(), 3); + + QCOMPARE(mModel->mReaderItem->childCount(), 1); + QCOMPARE(mModel->mReaderItem->getChild(0)->getText(), QString("Diagnosis is running...")); + + QCOMPARE(mModel->mNetworkConnectionTest->childCount(), 1); + QCOMPARE(mModel->mNetworkConnectionTest->getChild(0)->getText(), QString("Diagnosis is running...")); + } + + + void test_OnReaderInfosChanged() + { + mModel->onReaderInfosChanged(); + QCOMPARE(mModel->mReaderItem->childCount(), 1); + QCOMPARE(mModel->mReaderItem->getChild(0)->getText(), QString("Not recognised")); + + ReaderInfo defaultInfo; + ReaderInfo infoEidCard(QString("testInfo"), ReaderManagerPlugInType::PCSC, CardInfo(CardType::EID_CARD)); + ReaderInfo comfortReaderInfo(QString("name"), ReaderManagerPlugInType::BLUETOOTH, CardInfo(CardType::UNKNOWN)); + comfortReaderInfo.setBasicReader(false); + const QVector readerInfos = {defaultInfo, infoEidCard, comfortReaderInfo}; + mContext->setReaderInfos(readerInfos); + mModel->onReaderInfosChanged(); + + QCOMPARE(mModel->mReaderItem->childCount(), 3); + QCOMPARE(mModel->mReaderItem->getChild(0)->getText(), QString()); + QCOMPARE(mModel->mReaderItem->getChild(1)->getText(), QString("testInfo")); + QCOMPARE(mModel->mReaderItem->getChild(2)->getText(), QString("name")); + + auto child1 = mModel->mReaderItem->getChild(0); + QCOMPARE(child1->childCount(), 2); + QCOMPARE(child1->getChild(0)->getText(), QString("Type: Basic card reader")); + QCOMPARE(child1->getChild(1)->getText(), QString("Card: not inserted")); + + auto child2 = mModel->mReaderItem->getChild(1); + QCOMPARE(child2->childCount(), 3); + QCOMPARE(child2->getChild(0)->getText(), QString("Type: Basic card reader")); + QCOMPARE(child2->getChild(1)->getText(), QString("Card: ID card (PA/eAT)")); + QCOMPARE(child2->getChild(2)->getText(), QString("Retry counter: -1")); + + auto child3 = mModel->mReaderItem->getChild(2); + QCOMPARE(child3->childCount(), 2); + QCOMPARE(child3->getChild(0)->getText(), QString("Type: Standard / comfort card reader")); + QCOMPARE(child3->getChild(1)->getText(), QString("Card: unknown type")); + } + + + void test_onPcscInfoChanged() + { + const QString version("version"); + const DiagnosisContext::ComponentInfo component1; + const DiagnosisContext::ComponentInfo component2; + const DiagnosisContext::ComponentInfo driver1; + const DiagnosisContext::ComponentInfo driver2; + QVector components = {component1, component2}; + QVector drivers = {driver1, driver2}; + mContext->setPcscInfo(version, components, drivers); + + mModel->onPcscInfoChanged(); + QCOMPARE(mModel->mPcScItem->childCount(), 3); + QCOMPARE(mModel->mPcScItem->getChild(0)->getText(), QString("Version: version")); + QCOMPARE(mModel->mPcScItem->getChild(1)->getText(), QString("Components")); + QCOMPARE(mModel->mPcScItem->getChild(2)->getText(), QString("Driver")); + } + + + void test_OnTimestampChanged() + { + const QDateTime invalid; + const QDate date(2018, 10, 12); + const QTime time(12, 0); + const QDateTime valid(date, time); + + mContext->setTimestamp(invalid); + mModel->onTimestampChanged(); + QCOMPARE(mModel->mTimestampItem->childCount(), 1); + QCOMPARE(mModel->mTimestampItem->getChild(0)->getText(), QString("Initial diagnosis running, please wait.")); + + mContext->setTimestamp(valid); + mModel->onTimestampChanged(); + QCOMPARE(mModel->mTimestampItem->childCount(), 1); + QCOMPARE(mModel->mTimestampItem->getChild(0)->getText(), QString("12. October 2018, 12:00:00 PM")); + } + + + void test_OnNetworkInfoChanged() + { + const QNetworkInterface interface1; + const QNetworkInterface interface2; + const QNetworkInterface interface3; + QList interfaces = {interface1, interface2, interface3}; + + mContext->setNetworkInterfaces(interfaces); + mModel->onNetworkInfoChanged(); + QCOMPARE(mModel->mNetworkInterfaces->childCount(), 3); + for (int i = 0; i < mModel->mNetworkInterfaces->childCount(); i++) + { + const auto& interface = mModel->mNetworkInterfaces->getChild(i); + QCOMPARE(interface->childCount(), 2); + } + } + + + void test_OnAntivirusDetectionFailed() + { + mModel->onAntivirusDetectionFailed(); + QCOMPARE(mModel->mInstalledAntivirus->childCount(), 1); + QCOMPARE(mModel->mInstalledAntivirus->getChild(0)->getText(), QString("Antivirus detection failed.")); + } + + + void test_OnFirewallInformationFailed() + { + mModel->onFirewallInformationFailed(); + QCOMPARE(mModel->mWindowsFirewall->childCount(), 1); + QCOMPARE(mModel->mWindowsFirewall->getChild(0)->getText(), QString("An error occurred while trying to gather firewall information. Please check the log for more information.")); + } + + + void test_OnConnectionTestDone_data() + { + QTest::addColumn("proxySet"); + QTest::addColumn("pingTestOnProxy"); + QTest::addColumn("connectionTestOnProxy"); + QTest::addColumn("connectionTestWithoutProxy"); + QTest::addColumn("childCount"); + + QTest::newRow("proxyConnectionSuccessful") << true << true << true << false << 3; + QTest::newRow("connectionWithoutProxySuccessful") << false << false << false << true << 2; + QTest::newRow("proxyConnectionNotSuccessful") << true << false << false << false << 3; + QTest::newRow("noConnection") << false << false << false << false << 2; + } + + + void test_OnConnectionTestDone() + { + QFETCH(bool, proxySet); + QFETCH(bool, pingTestOnProxy); + QFETCH(bool, connectionTestOnProxy); + QFETCH(bool, connectionTestWithoutProxy); + QFETCH(int, childCount); + + mModel->mConnectionTest.mIsProxySet = proxySet; + mModel->mConnectionTest.mPingTestOnProxySuccessful = pingTestOnProxy; + mModel->mConnectionTest.mConnectionTestWithProxySuccessful = connectionTestOnProxy; + mModel->mConnectionTest.mConnectionTestWithoutProxySuccessful = connectionTestWithoutProxy; + + auto connectionTestModelIndex = mModel->index(6, 0); + QSignalSpy spyInsert(mModel.data(), &DiagnosisTreeModel::rowsInserted); + + mModel->onConnectionTestDone(); + + if (proxySet) + { + QCOMPARE(mModel->mNetworkConnectionTest->childCount(), childCount); + + auto proxy = mModel->mNetworkConnectionTest->getChild(0); + + QCOMPARE(proxy->getText(), QString("Proxy")); + QCOMPARE(proxy->childCount(), 5); + QVERIFY(proxy->getChild(0)->getText().contains("Hostname:")); + QVERIFY(proxy->getChild(1)->getText().contains("Port:")); + QVERIFY(proxy->getChild(2)->getText().contains("Type:")); + QVERIFY(proxy->getChild(3)->getText().contains("Capabilities:")); + QCOMPARE(proxy->getChild(4)->getText(), QString("Ping test to proxy: %1").arg(pingTestOnProxy ? QString("Successful") : QString("Failed"))); + QCOMPARE(mModel->mNetworkConnectionTest->getChild(1)->getText(), QString("Connection test with proxy: %1").arg(connectionTestOnProxy ? QString("Successful") : QString("Failed"))); + QCOMPARE(spyInsert.count(), 1); + QList argumentsInsert = spyInsert.takeFirst(); + QCOMPARE(argumentsInsert.at(0), connectionTestModelIndex); + QCOMPARE(argumentsInsert.at(1).toInt(), 0); + QCOMPARE(argumentsInsert.at(2).toInt(), 2); + } + else + { + QCOMPARE(mModel->mNetworkConnectionTest->childCount(), childCount); + QCOMPARE(mModel->mNetworkConnectionTest->getChild(0)->getText(), QString("No Proxy Found")); + QCOMPARE(spyInsert.count(), 1); + QList argumentsInsert = spyInsert.takeFirst(); + QCOMPARE(argumentsInsert.at(0), connectionTestModelIndex); + QCOMPARE(argumentsInsert.at(1).toInt(), 0); + QCOMPARE(argumentsInsert.at(2).toInt(), 1); + } + QCOMPARE(mModel->mNetworkConnectionTest->getChild(childCount - 1)->getText(), QString("Connection test without proxy: %1").arg(connectionTestWithoutProxy ? QString("Successful") : QString("Failed"))); + } + + + void test_OnAntivirusInformationChanged() + { + auto installedAntivirusModelIndex = mModel->index(7, 0); + QSignalSpy spyInsert(mModel.data(), &DiagnosisTreeModel::rowsInserted); + mModel->onAntivirusInformationChanged(); + QCOMPARE(mModel->mInstalledAntivirus->childCount(), 1); + QCOMPARE(mModel->mInstalledAntivirus->getChild(0)->getText(), QString("No Antivirus software detected.")); + QCOMPARE(spyInsert.count(), 1); + QList argumentsInsert1 = spyInsert.takeFirst(); + QCOMPARE(argumentsInsert1.at(0), installedAntivirusModelIndex); + QCOMPARE(argumentsInsert1.at(1).toInt(), 0); + QCOMPARE(argumentsInsert1.at(2).toInt(), 0); + + const QString& fileContent = getTestData(QStringLiteral("antivir_two_antivirus.txt")); + mModel->mAntivirusDetection.parseAntivirInfos(fileContent); + mModel->onAntivirusInformationChanged(); + QCOMPARE(mModel->mInstalledAntivirus->childCount(), 2); + + auto antivirus1 = mModel->mInstalledAntivirus->getChild(0); + QCOMPARE(antivirus1->getText(), QString("BullGuard Antivirus")); + QCOMPARE(antivirus1->getChild(0)->getText(), QString("Last updated: Fri, 30 Nov 2018 15:04:13 GMT")); + QCOMPARE(antivirus1->getChild(1)->getText(), QString("Executable path: C:\\Program Files\\BullGuard Ltd\\BullGuard\\BullGuard.exe")); + + auto antivirus2 = mModel->mInstalledAntivirus->getChild(1); + QCOMPARE(antivirus2->getText(), QString("Windows Defender")); + QCOMPARE(antivirus2->getChild(0)->getText(), QString("Last updated: Mon, 26 Nov 2018 10:34:23 GMT")); + QCOMPARE(antivirus2->getChild(1)->getText(), QString("Executable path: windowsdefender://")); + + QList argumentsInsert2 = spyInsert.takeFirst(); + QCOMPARE(argumentsInsert2.at(0), installedAntivirusModelIndex); + QCOMPARE(argumentsInsert2.at(1).toInt(), 0); + QCOMPARE(argumentsInsert2.at(2).toInt(), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_DiagnosisTreeModel) +#include "test_DiagnosisTreeModel.moc" diff --git a/test/qt/file_provider/test_Downloader.cpp b/test/qt/file_provider/test_Downloader.cpp index a627cdc..2ad3505 100644 --- a/test/qt/file_provider/test_Downloader.cpp +++ b/test/qt/file_provider/test_Downloader.cpp @@ -93,11 +93,11 @@ class test_Downloader { const QByteArray fileContent("Some icon data"); const QDateTime timestampOnServer(QDate(2017, 6, 1), QTime(12, 00, 0, 0)); - MockNetworkReply* const reply = new MockNetworkReply(fileContent, HTTP_STATUS_OK); + auto* const reply = new MockNetworkReply(fileContent, HTTP_STATUS_OK); reply->setFileModificationTimestamp(timestampOnServer); mMockNetworkManager.setNextReply(reply); - Downloader* const downloader = Env::getSingleton(); + auto* const downloader = Env::getSingleton(); QSignalSpy spy(downloader, &Downloader::fireDownloadSuccess); const QUrl url("http://server/reader/icons/icon.png"); @@ -114,7 +114,7 @@ class test_Downloader MockNetworkReply* const reply = new MockNetworkReply(QByteArray(), HTTP_STATUS_NOT_FOUND); mMockNetworkManager.setNextReply(reply); - Downloader* const downloader = Env::getSingleton(); + auto* const downloader = Env::getSingleton(); QSignalSpy spy(downloader, &Downloader::fireDownloadFailed); const QUrl url("http://server/reader/icons/icon.png"); @@ -129,12 +129,12 @@ class test_Downloader void conditionalDownloadOfNewerFile() { const QByteArray fileContent("Some icon data"); - MockNetworkReply* const reply = new MockNetworkReply(fileContent, HTTP_STATUS_OK); + auto* const reply = new MockNetworkReply(fileContent, HTTP_STATUS_OK); const QDateTime timestampOnServer(QDate(2017, 7, 1), QTime(12, 00, 0, 0)); reply->setFileModificationTimestamp(timestampOnServer); mMockNetworkManager.setNextReply(reply); - Downloader* const downloader = Env::getSingleton(); + auto* const downloader = Env::getSingleton(); QSignalSpy spy(downloader, &Downloader::fireDownloadSuccess); const QUrl url("http://server/reader/icons/icon.png"); @@ -159,7 +159,7 @@ class test_Downloader reply->setFileModificationTimestamp(timestampOnServer); mMockNetworkManager.setNextReply(reply); - Downloader* const downloader = Env::getSingleton(); + auto* const downloader = Env::getSingleton(); QSignalSpy spy(downloader, &Downloader::fireDownloadUnnecessary); const QUrl url("http://server/reader/icons/icon.png"); diff --git a/test/qt/file_provider/test_FileProvider.cpp b/test/qt/file_provider/test_FileProvider.cpp index fc1de51..ddcf126 100644 --- a/test/qt/file_provider/test_FileProvider.cpp +++ b/test/qt/file_provider/test_FileProvider.cpp @@ -4,7 +4,7 @@ #include "FileProvider.h" -#include +#include using namespace governikus; diff --git a/test/qt/file_provider/test_UpdatableFile.cpp b/test/qt/file_provider/test_UpdatableFile.cpp index 023c610..5025678 100644 --- a/test/qt/file_provider/test_UpdatableFile.cpp +++ b/test/qt/file_provider/test_UpdatableFile.cpp @@ -8,7 +8,7 @@ #include "Env.h" #include "MockDownloader.h" -#include +#include using namespace governikus; diff --git a/test/qt/global/test_CardReturnCode.cpp b/test/qt/global/test_CardReturnCode.cpp index 5e3e482..cfde5f1 100644 --- a/test/qt/global/test_CardReturnCode.cpp +++ b/test/qt/global/test_CardReturnCode.cpp @@ -43,7 +43,8 @@ class test_CardReturnCode void checkConsistency() { - for (auto returnCode : Enum::getList()) + const auto list = Enum::getList(); + for (auto returnCode : list) { QVERIFY(!CardReturnCodeUtil::toGlobalStatus(returnCode).toErrorDescription().isEmpty()); } diff --git a/test/qt/global/test_ECardApiResult.cpp b/test/qt/global/test_ECardApiResult.cpp index 2f1423c..84c91f1 100644 --- a/test/qt/global/test_ECardApiResult.cpp +++ b/test/qt/global/test_ECardApiResult.cpp @@ -7,7 +7,7 @@ #include "LogHandler.h" #include -#include +#include using namespace governikus; @@ -152,7 +152,7 @@ class test_ECardApiResult const QMetaEnum& metaEnum = QMetaEnum::fromType(); for (int i = 0; i < metaEnum.keyCount(); i++) { - const ECardApiResult::Minor minor = static_cast(i); + const auto minor = static_cast(i); const char* name = metaEnum.valueToKey(i); if (minor == ECardApiResult::Minor::null) @@ -180,7 +180,7 @@ class test_ECardApiResult const QMetaEnum& metaEnum = QMetaEnum::fromType(); for (int i = 0; i < metaEnum.keyCount(); i++) { - const ECardApiResult::Minor minor = static_cast(i); + const auto minor = static_cast(i); const char* name = metaEnum.valueToKey(i); if (minor == ECardApiResult::Minor::null) @@ -261,7 +261,7 @@ class test_ECardApiResult const QMetaEnum& metaEnum = QMetaEnum::fromType(); for (int i = 0; i < metaEnum.keyCount(); i++) { - const GlobalStatus::Code statusCode = static_cast(i); + const auto statusCode = static_cast(i); const char* name = metaEnum.valueToKey(i); QTest::newRow(name) << statusCode; } diff --git a/test/qt/global/test_EnumHelper.cpp b/test/qt/global/test_EnumHelper.cpp index 7f5f6b4..43d0160 100644 --- a/test/qt/global/test_EnumHelper.cpp +++ b/test/qt/global/test_EnumHelper.cpp @@ -38,7 +38,7 @@ class test_EnumHelper { QSignalSpy spy(Env::getSingleton(), &LogHandler::fireLog); - TestEnum1 badEnumValue = static_cast(pValue); + auto badEnumValue = static_cast(pValue); QCOMPARE(Enum::getName(badEnumValue), QLatin1String()); QCOMPARE(spy.count(), 1); @@ -120,7 +120,6 @@ class test_EnumHelper QCOMPARE(list2.size(), 3); QCOMPARE(list1, list2); - QVERIFY(&list1 == &list2); QCOMPARE(list1[0], TestEnum2::FIRST); QCOMPARE(list1[1], TestEnum2::SECOND); diff --git a/test/qt/global/test_FileDestination.cpp b/test/qt/global/test_FileDestination.cpp index 3bfe51c..478eaba 100644 --- a/test/qt/global/test_FileDestination.cpp +++ b/test/qt/global/test_FileDestination.cpp @@ -17,18 +17,11 @@ class test_FileDestination Q_OBJECT private Q_SLOTS: - void getPathCharPtr() - { - QString path = FileDestination::getPath("qtlogging.ini"); - QVERIFY(path.endsWith("qtlogging.ini")); - QVERIFY(QFile::exists(path)); - } - - void getPath() { - QString path = FileDestination::getPath(QStringLiteral("qtlogging.ini")); - QVERIFY(path.endsWith("qtlogging.ini")); + const auto filename = QStringLiteral("config.json"); + QString path = FileDestination::getPath(filename); + QVERIFY(path.endsWith(filename)); QVERIFY(QFile::exists(path)); } diff --git a/test/qt/global/test_GlobalStatus.cpp b/test/qt/global/test_GlobalStatus.cpp index cb04b94..74d0cd3 100644 --- a/test/qt/global/test_GlobalStatus.cpp +++ b/test/qt/global/test_GlobalStatus.cpp @@ -46,8 +46,8 @@ class test_GlobalStatus QTest::addColumn("message"); QTest::newRow("inProgress") << GlobalStatus::Code::Workflow_AlreadyInProgress_Error << tr("Cannot start authentication. An operation is already in progress."); - QTest::newRow("cardRemoved") << GlobalStatus::Code::Workflow_Card_Removed << tr("The ID card has been removed. The process is aborted."); - QTest::newRow("unknownPaos") << GlobalStatus::Code::Workflow_Unknown_Paos_Form_EidServer << tr("The program received an unknown message from the server."); + QTest::newRow("cardRemoved") << GlobalStatus::Code::Workflow_Card_Removed << tr("The connection to the ID card has been lost. The process was aborted."); + QTest::newRow("unknownPaos") << GlobalStatus::Code::Workflow_Unknown_Paos_From_EidServer << tr("The program received an unknown message from the server."); QTest::newRow("unexpectedMessage") << GlobalStatus::Code::Workflow_Unexpected_Message_From_EidServer << tr("The program received an unexpected message from the server."); QTest::newRow("pinBlocked") << GlobalStatus::Code::Workflow_Pin_Blocked_And_Puk_Objectionable << tr("After three wrong entries your PIN is blocked. Please use the PIN management in this app to unblock it with the help of your PUK."); QTest::newRow("preverificationDevelopermode") << GlobalStatus::Code::Workflow_Preverification_Developermode_Error << tr("Using the developer mode is only allowed in a test environment."); @@ -59,15 +59,11 @@ class test_GlobalStatus QTest::newRow("hashError") << GlobalStatus::Code::Workflow_Certificate_Hash_Error << tr("The certificate description does not match the certificate."); QTest::newRow("certificateSop") << GlobalStatus::Code::Workflow_Certificate_Sop_Error << tr("The subject URL in the certificate description and the TCToken URL don't satisfy the same origin policy."); QTest::newRow("wrongParameter") << GlobalStatus::Code::Workflow_Wrong_Parameter_Invocation << tr("Application was invoked with wrong parameters."); - QTest::newRow("readerCommunication") << GlobalStatus::Code::Workflow_Reader_Communication_Error << tr("An error occurred while communicating with the card reader."); QTest::newRow("incompleteInformation") << GlobalStatus::Code::Workflow_Server_Incomplete_Information_Provided << tr("The server provided no or incomplete information. Your personal data could not be read out."); - QTest::newRow("deviceConnection") << GlobalStatus::Code::Workflow_Reader_Device_Connection_Error << tr("An error occurred while connecting to a reader device."); + QTest::newRow("deviceConnection") << GlobalStatus::Code::Workflow_Bluetooth_Reader_Connection_Error << tr("An error occurred while connecting to a reader device."); QTest::newRow("deviceScan") << GlobalStatus::Code::Workflow_Reader_Device_Scan_Error << tr("An error occurred while scanning for reader devices."); - QTest::newRow("normalClose") << GlobalStatus::Code::RemoteReader_CloseCode_NormalClose << tr("The remote reader connection was closed properly."); QTest::newRow("abnormalClose") << GlobalStatus::Code::RemoteReader_CloseCode_AbnormalClose << tr("The remote card reader connection was not closed properly."); - QTest::newRow("closeUndefined") << GlobalStatus::Code::RemoteReader_CloseCode_Undefined << tr("Undefined error code occured when the remote card reader connection was closed."); QTest::newRow("invalidRequest") << GlobalStatus::Code::RemoteConnector_InvalidRequest << tr("Remote reader connection request contains invalid parameters."); - QTest::newRow("emptyPassword") << GlobalStatus::Code::RemoteConnector_EmptyPassword << tr("Empty password in extended encryption of remote reader connection request."); QTest::newRow("noSupportedApiLevel") << GlobalStatus::Code::RemoteConnector_NoSupportedApiLevel << tr("Your remote reader version is incompatible with the local version. Please install the latest AusweisApp2 version on both your smartphone and your computer."); QTest::newRow("connectionTimeout") << GlobalStatus::Code::RemoteConnector_ConnectionTimeout << tr("A timeout occurred while trying to establish a connection to a remote reader."); QTest::newRow("connectionError") << GlobalStatus::Code::RemoteConnector_ConnectionError << tr("An error occurred while trying to establish a connection to a remote reader."); diff --git a/test/qt/global/test_Initializer.cpp b/test/qt/global/test_Initializer.cpp index 2a800cb..2c0a400 100644 --- a/test/qt/global/test_Initializer.cpp +++ b/test/qt/global/test_Initializer.cpp @@ -6,7 +6,7 @@ #include "Initializer.h" -#include +#include using namespace governikus; diff --git a/test/qt/global/test_LogHandler.cpp b/test/qt/global/test_LogHandler.cpp index 605a2bf..4cb22d2 100644 --- a/test/qt/global/test_LogHandler.cpp +++ b/test/qt/global/test_LogHandler.cpp @@ -28,7 +28,7 @@ class test_LogHandler void fakeLastModifiedAndLastAccessTime(const QString& pPath) { #ifdef Q_OS_WIN - Q_UNUSED(pPath); + Q_UNUSED(pPath) #else struct timeval tv[2]; @@ -84,6 +84,10 @@ class test_LogHandler Env::getSingleton()->resetBacklog(); blog = Env::getSingleton()->getBacklog(); QCOMPARE(blog.size(), 0); + + blog = Env::getSingleton()->getBacklog(true); + QVERIFY(blog.size() > 0); + QVERIFY(blog.contains(msg)); } diff --git a/test/qt/global/test_ResourceLoader.cpp b/test/qt/global/test_ResourceLoader.cpp index 005ed00..2514c7c 100644 --- a/test/qt/global/test_ResourceLoader.cpp +++ b/test/qt/global/test_ResourceLoader.cpp @@ -8,7 +8,7 @@ #include "LogHandler.h" -#include +#include using namespace governikus; diff --git a/test/qt/global/test_ScopeGuard.cpp b/test/qt/global/test_ScopeGuard.cpp index fcbb97b..63fe458 100644 --- a/test/qt/global/test_ScopeGuard.cpp +++ b/test/qt/global/test_ScopeGuard.cpp @@ -10,6 +10,8 @@ #include +QT_WARNING_DISABLE_DEPRECATED + using namespace governikus; class test_ScopeGuard diff --git a/test/qt/global/test_VersionInfo.cpp b/test/qt/global/test_VersionInfo.cpp index 20afa30..75452eb 100644 --- a/test/qt/global/test_VersionInfo.cpp +++ b/test/qt/global/test_VersionInfo.cpp @@ -2,8 +2,8 @@ * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany */ -#include -#include +#include +#include #include "LogHandler.h" #include "VersionInfo.h" diff --git a/test/qt/global/test_VersionNumber.cpp b/test/qt/global/test_VersionNumber.cpp index 879da93..7a3d9fb 100644 --- a/test/qt/global/test_VersionNumber.cpp +++ b/test/qt/global/test_VersionNumber.cpp @@ -6,7 +6,7 @@ #include "VersionNumber.h" -#include +#include using namespace governikus; @@ -72,114 +72,115 @@ class test_VersionNumber } + void distance_data() + { + QTest::addColumn("distance"); + + QTest::newRow("1.99+432") << 432; + QTest::newRow("1.99+98-default-et43t") << 98; + QTest::newRow("1.99+1-stable") << 1; + QTest::newRow("1.91.2.2.2.2") << -1; + QTest::newRow("1.91.2.7+534533") << 534533; + QTest::newRow("1.91.2.7+12++4243+2+2-default") << -1; + QTest::newRow("1.91.2.7+12++4243+2+2default") << -1; + } + + void distance() { - VersionNumber number1("1.99+432"); - QCOMPARE(number1.getDistance(), 432); + QFETCH(int, distance); - VersionNumber number2("1.99+98-default-et43t"); - QCOMPARE(number2.getDistance(), 98); + const auto& version = QString::fromLatin1(QTest::currentDataTag()); + QCOMPARE(VersionNumber(version).getDistance(), distance); + } - VersionNumber number3("1.99+1-stable"); - QCOMPARE(number3.getDistance(), 1); - VersionNumber number4("1.91.2.2.2.2"); - QCOMPARE(number4.getDistance(), -1); + void branch_data() + { + QTest::addColumn("branch"); - VersionNumber number5("1.91.2.7+534533"); - QCOMPARE(number5.getDistance(), 534533); - - VersionNumber number6("1.91.2.7+12++4243+2+2-default"); - QCOMPARE(number6.getDistance(), -1); - - VersionNumber number7("1.91.2.7+12++4243+2+2default"); - QCOMPARE(number7.getDistance(), -1); + QTest::newRow("1.99+432") << QString(); + QTest::newRow("1.99+98-default-et43t") << QString("default"); + QTest::newRow("1.99+1-stable") << QString("stable"); + QTest::newRow("1.99+98-default-et43t+") << QString("default"); + QTest::newRow("1.99+98-default-draft-et43t+") << QString("default"); } void branch() { - VersionNumber number1("1.99+432"); - QCOMPARE(number1.getBranch(), QString()); + QFETCH(QString, branch); - VersionNumber number2("1.99+98-default-et43t"); - QCOMPARE(number2.getBranch(), QString("default")); + const auto& version = QString::fromLatin1(QTest::currentDataTag()); + QCOMPARE(VersionNumber(version).getBranch(), branch); + } - VersionNumber number3("1.99+1-stable"); - QCOMPARE(number3.getBranch(), QString("stable")); - VersionNumber number4("1.99+98-default-et43t+"); - QCOMPARE(number4.getBranch(), QString("default")); + void revision_data() + { + QTest::addColumn("revision"); - VersionNumber number5("1.99+98-default-draft-et43t+"); - QCOMPARE(number5.getBranch(), QString("default")); + QTest::newRow("1.99+432") << QString(); + QTest::newRow("1.99+98-default-et43t") << QString("et43t"); + QTest::newRow("1.99+1-stable") << QString(); + QTest::newRow("1.99+98-default-draft-et43t+") << QString("et43t+"); } void revision() { - VersionNumber number1("1.99+432"); - QCOMPARE(number1.getRevision(), QString()); + QFETCH(QString, revision); - VersionNumber number2("1.99+98-default-et43t"); - QCOMPARE(number2.getRevision(), QString("et43t")); + const auto& version = QString::fromLatin1(QTest::currentDataTag()); + QCOMPARE(VersionNumber(version).getRevision(), revision); + } - VersionNumber number3("1.99+1-stable"); - QCOMPARE(number3.getRevision(), QString()); - VersionNumber number4("1.99+98-default-draft-et43t+"); - QCOMPARE(number4.getRevision(), QString("et43t+")); + void isDraft_data() + { + QTest::addColumn("draft"); + + QTest::newRow("1.5.0+16-default-secret") << true; + QTest::newRow("1.6.0+1-draft-t34t53+") << true; + QTest::newRow("1.6.0+12-stable-abc123") << false; } void isDraft() { - VersionNumber number1("1.5.0+16-default-secret"); - QVERIFY(number1.isDraft()); + QFETCH(bool, draft); - VersionNumber number2("1.6.0+1-draft-t34t53+"); - QVERIFY(number2.isDraft()); + const auto& version = QString::fromLatin1(QTest::currentDataTag()); + QCOMPARE(VersionNumber(version).isDraft(), draft); + } - VersionNumber number3("1.6.0+12-stable-abc123"); - QVERIFY(!number3.isDraft()); + + void isDeveloper_data() + { + QTest::addColumn("developer"); + + QTest::newRow("") << true; + QTest::newRow("1.5.0+16-default-secret") << true; + QTest::newRow("1.6.0+1-draft-t34t53+") << true; + QTest::newRow("1.5.0") << true; + QTest::newRow("1.6.0") << false; + QTest::newRow("1.5.0+0") << true; + QTest::newRow("1.6.0+0") << true; + QTest::newRow("1.6.0+422312-stable-2143eg435") << true; + QTest::newRow("1.9.0+422312-stable-2143eg435") << true; + QTest::newRow("3.28.1") << false; + QTest::newRow("3.28.1+23-default") << true; + QTest::newRow(" 3.28.1+23-default ") << true; + QTest::newRow(" 1.10.0 ") << false; } void isDeveloper() { - QString empty; - VersionNumber number0(empty); - QVERIFY(number0.isDeveloperVersion()); + QFETCH(bool, developer); - VersionNumber number1("1.5.0"); - QVERIFY(number1.isDeveloperVersion()); - - VersionNumber number2("1.6.0"); - QVERIFY(!number2.isDeveloperVersion()); - - VersionNumber number3("1.5.0+0"); - QVERIFY(number3.isDeveloperVersion()); - - VersionNumber number4("1.6.0+0"); - QVERIFY(number4.isDeveloperVersion()); - - VersionNumber number5("1.6.0+422312-stable-2143eg435"); - QVERIFY(number5.isDeveloperVersion()); - - VersionNumber number6("1.9.0+422312-stable-2143eg435"); - QVERIFY(number6.isDeveloperVersion()); - - VersionNumber number7("3.28.1"); - QVERIFY(!number7.isDeveloperVersion()); - - VersionNumber number8("3.28.1+23-default"); - QVERIFY(number8.isDeveloperVersion()); - - VersionNumber number9(" 3.28.1+23-default "); - QVERIFY(number9.isDeveloperVersion()); - - VersionNumber number10(" 1.10.0 "); - QVERIFY(!number10.isDeveloperVersion()); + const auto& version = QString::fromLatin1(QTest::currentDataTag()); + QCOMPARE(VersionNumber(version).isDeveloperVersion(), developer); } diff --git a/test/qt/network/test_DatagramHandlerImpl.cpp b/test/qt/network/test_DatagramHandlerImpl.cpp index 23e8988..abc0adc 100644 --- a/test/qt/network/test_DatagramHandlerImpl.cpp +++ b/test/qt/network/test_DatagramHandlerImpl.cpp @@ -12,6 +12,9 @@ #include #include #include +#ifdef Q_OS_MACOS +#include +#endif using namespace governikus; @@ -63,6 +66,13 @@ class test_DatagramHandlerImpl QSKIP("Windows does not block privileged ports"); #endif + #ifdef Q_OS_MACOS + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 14)) + { + QSKIP("macOS >= 10.14 does not block privileged ports - https://news.ycombinator.com/item?id=18302380"); + } + #endif + DatagramHandlerImpl::cPort = 80; QSignalSpy spy(Env::getSingleton(), &LogHandler::fireLog); @@ -168,11 +178,11 @@ class test_DatagramHandlerImpl #ifdef Q_OS_FREEBSD QSKIP("FreeBSD does not like that"); #endif - QVERIFY(datagramHandlerImpl->send(doc.toJson(QJsonDocument::Compact), receiver.localPort())); + QVERIFY(datagramHandlerImpl->sendToAllAddressEntries(doc.toJson(QJsonDocument::Compact), receiver.localPort())); } else { - QVERIFY(datagramHandlerImpl->send(doc.toJson(QJsonDocument::Compact), QHostAddress::LocalHost, receiver.localPort())); + QVERIFY(datagramHandlerImpl->sendToAddress(doc.toJson(QJsonDocument::Compact), QHostAddress::LocalHost, receiver.localPort())); } QTRY_COMPARE(spyReceiver.count(), 1); diff --git a/test/qt/network/test_HttpRequest.cpp b/test/qt/network/test_HttpRequest.cpp index f612cfc..74f697e 100644 --- a/test/qt/network/test_HttpRequest.cpp +++ b/test/qt/network/test_HttpRequest.cpp @@ -21,7 +21,7 @@ class test_HttpRequest private Q_SLOTS: void parseEmptyBody() { - MockSocket* socket = new MockSocket; + auto* socket = new MockSocket; socket->mReadBuffer = QByteArray("GET /favicon.ico HTTP/1.1\r\n" "Host: Dummy.de\r\n" "\r\n\r\n"); @@ -38,7 +38,7 @@ class test_HttpRequest void isUpgrade() { - MockSocket* socket = new MockSocket; + auto* socket = new MockSocket; socket->mReadBuffer = QByteArray("GET / HTTP/1.1\r\n" "Host: server.example.com\r\n" "Upgrade: websocket\r\n" @@ -63,7 +63,7 @@ class test_HttpRequest void tcTokenURL() { - MockSocket* socket = new MockSocket; + auto* socket = new MockSocket; socket->mReadBuffer = QByteArray("GET /eID-Client?tcTokenURL=https%3A%2F%2Ftest.governikus-eid.de%3A443%2FAutent-DemoApplication%2FRequestServlet%3Fprovider%3Ddemo_epa_20%26redirect%3Dtrue HTTP/1.1\r\n" "Host: 127.0.0.1:24727\r\n" "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0\r\n" diff --git a/test/qt/network/test_NetworkManager.cpp b/test/qt/network/test_NetworkManager.cpp index 527c33d..6f3ce43 100644 --- a/test/qt/network/test_NetworkManager.cpp +++ b/test/qt/network/test_NetworkManager.cpp @@ -50,7 +50,7 @@ class test_NetworkManager QCOMPARE(reply->request(), request); QCOMPARE(request.sslConfiguration().ellipticCurves().size(), 6); QVERIFY(request.sslConfiguration().ellipticCurves().contains(QSslEllipticCurve::fromLongName("prime256v1"))); - const int cipherCount = SecureStorage::getInstance().getTlsConfig().getCiphers().size(); + const int cipherCount = Env::getSingleton()->getTlsConfig().getCiphers().size(); QCOMPARE(request.sslConfiguration().ciphers().size(), cipherCount); QVERIFY(request.sslConfiguration().ciphers().contains(QSslCipher("ECDHE-RSA-AES256-GCM-SHA384"))); } @@ -64,7 +64,7 @@ class test_NetworkManager QCOMPARE(request.rawHeader("PAOS"), QByteArray("ver=\"paosNamespace\"")); QCOMPARE(reply->request(), request); QCOMPARE(request.sslConfiguration().ellipticCurves().size(), 0); - const int cipherCount = SecureStorage::getInstance().getTlsConfig(SecureStorage::TlsSuite::PSK).getCiphers().size(); + const int cipherCount = Env::getSingleton()->getTlsConfig(SecureStorage::TlsSuite::PSK).getCiphers().size(); QCOMPARE(request.sslConfiguration().ciphers().size(), cipherCount); QVERIFY(request.sslConfiguration().ciphers().contains(QSslCipher("RSA-PSK-AES128-CBC-SHA256"))); QVERIFY(request.sslConfiguration().ciphers().contains(QSslCipher("RSA-PSK-AES128-GCM-SHA256"))); diff --git a/test/qt/network/test_TlsChecker.cpp b/test/qt/network/test_TlsChecker.cpp index 6cc91aa..cd21a61 100644 --- a/test/qt/network/test_TlsChecker.cpp +++ b/test/qt/network/test_TlsChecker.cpp @@ -42,7 +42,7 @@ class test_TlsChecker void initTestCase() { Env::getSingleton()->init(); - certs = SecureStorage::getInstance().getUpdateCertificates(); + certs = Env::getSingleton()->getUpdateCertificates(); QVERIFY(certs.size() > 0); } diff --git a/test/qt/qml/test_AuthModel.cpp b/test/qt/qml/test_AuthModel.cpp deleted file mode 100644 index bafab38..0000000 --- a/test/qt/qml/test_AuthModel.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/*! - * \brief Unit tests for \ref AuthModel - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "AuthModel.h" - -#include "context/AuthContext.h" - -#include "MockActivationContext.h" - -#include -#include - - -using namespace governikus; - - -class test_AuthModel - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void test_ResetContext() - { - AuthModel model; - const QSharedPointer context(new AuthContext(nullptr)); - const QString transactionInfo = QStringLiteral("info"); - - QSignalSpy spyCurrentStateChanged(&model, &WorkflowModel::fireCurrentStateChanged); - QSignalSpy spyTransactionInfoChanged(&model, &AuthModel::fireTransactionInfoChanged); - - model.resetContext(nullptr); - QCOMPARE(spyCurrentStateChanged.count(), 1); - QCOMPARE(spyTransactionInfoChanged.count(), 0); - - model.mTransactionInfo = transactionInfo; - model.resetContext(context); - QVERIFY(model.mTransactionInfo.isEmpty()); - QCOMPARE(spyCurrentStateChanged.count(), 2); - QCOMPARE(spyTransactionInfoChanged.count(), 1); - } - - - void test_OnDidAuthenticateEac1Changed() - { - AuthModel model; - const QSharedPointer context(new AuthContext(nullptr)); - const QString transactionInfo = QStringLiteral("info"); - const QSharedPointer eac1(new DIDAuthenticateEAC1()); - Eac1InputType type; - const QString info = QStringLiteral("new info"); - QSignalSpy spy(&model, &AuthModel::fireTransactionInfoChanged); - - model.mContext = context; - model.mTransactionInfo = transactionInfo; - model.onDidAuthenticateEac1Changed(); - QCOMPARE(model.mTransactionInfo, QString()); - QCOMPARE(spy.count(), 1); - - type.setTransactionInfo(info); - eac1->setEac1InputType(type); - context->setDidAuthenticateEac1(eac1); - model.onDidAuthenticateEac1Changed(); - QCOMPARE(model.mTransactionInfo, info); - QCOMPARE(spy.count(), 2); - } - - -}; - -QTEST_GUILESS_MAIN(test_AuthModel) -#include "test_AuthModel.moc" diff --git a/test/qt/qml/test_ChatModel.cpp b/test/qt/qml/test_ChatModel.cpp deleted file mode 100644 index e9a8810..0000000 --- a/test/qt/qml/test_ChatModel.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/*! - * \brief Unit tests for \ref ChatModel - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "ChatModel.h" - -#include "context/SelfAuthContext.h" - -#include "MockActivationContext.h" - -#include -#include - - -using namespace governikus; - - -class test_ChatModel - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void test_ResetContext() - { - ChatModel model; - QSharedPointer activationContext(new MockActivationContext()); - QSharedPointer authContext(new AuthContext(activationContext)); - QSharedPointer selfAuthContext(new SelfAuthContext()); - - model.resetContext(nullptr); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG05)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG13)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG04)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG07)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG08)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG09)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG17)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG01)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG10)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG06)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG02)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG19)); - QCOMPARE(model.mSelectedRights, model.mAllRights.toSet()); - - model.resetContext(selfAuthContext); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG05)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG13)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG04)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG07)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG08)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG09)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG17)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG01)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG10)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG06)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG02)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG19)); - QCOMPARE(model.mSelectedRights, model.mAllRights.toSet()); - - model.resetContext(authContext); - QVERIFY(model.mAllRights.isEmpty()); - QVERIFY(model.mOptionalRights.isEmpty()); - QVERIFY(model.mSelectedRights.isEmpty()); - } - - - void test_OnAuthenticationDataChanged() - { - ChatModel model; - QSharedPointer activationContext(new MockActivationContext()); - QSharedPointer authContext(new AuthContext(activationContext)); - model.mAuthContext = authContext; - - model.onAuthenticationDataChanged(); - QVERIFY(model.mAllRights.isEmpty()); - QVERIFY(model.mOptionalRights.isEmpty()); - QVERIFY(model.mSelectedRights.isEmpty()); - - authContext->mRequiredAccessRights += AccessRight::READ_DG01; - authContext->mRequiredAccessRights += AccessRight::READ_DG04; - - model.onAuthenticationDataChanged(); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG01)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG04)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG01)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG04)); - QVERIFY(model.mOptionalRights.isEmpty()); - - authContext->mOptionalAccessRights += AccessRight::READ_DG10; - authContext->mOptionalAccessRights += AccessRight::READ_DG17; - - model.onAuthenticationDataChanged(); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG01)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG04)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG10)); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG17)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG01)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG04)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG10)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG17)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG10)); - QVERIFY(model.mSelectedRights.contains(AccessRight::READ_DG17)); - } - - - void test_SetOrderedAllRights() - { - ChatModel model; - QSet rights; - rights.insert(AccessRight::READ_DG01); - rights.insert(AccessRight::INSTALL_QUAL_CERT); - rights.insert(AccessRight::CAN_ALLOWED); - model.setOrderedAllRights(rights); - QVERIFY(model.mAllRights.contains(AccessRight::READ_DG01)); - QVERIFY(model.mAllRights.contains(AccessRight::INSTALL_QUAL_CERT)); - QVERIFY(!model.mAllRights.contains(AccessRight::CAN_ALLOWED)); - } - - - void test_TransferAccessRights() - { - ChatModel model; - QSharedPointer activationContext(new MockActivationContext()); - QSharedPointer authContext(new AuthContext(activationContext)); - authContext->mOptionalAccessRights += model.mSelectedRights += AccessRight::INSTALL_QUAL_CERT; - authContext->mOptionalAccessRights += model.mSelectedRights += AccessRight::READ_DG01; - QVERIFY(!authContext->getEffectiveAccessRights().contains(AccessRight::INSTALL_QUAL_CERT)); - QVERIFY(!authContext->getEffectiveAccessRights().contains(AccessRight::READ_DG01)); - - model.mAuthContext = authContext; - model.mSelectedRights += AccessRight::INSTALL_QUAL_CERT; - model.mSelectedRights += AccessRight::READ_DG01; - - model.transferAccessRights(); - QVERIFY(authContext->getEffectiveAccessRights().contains(AccessRight::INSTALL_QUAL_CERT)); - QVERIFY(authContext->getEffectiveAccessRights().contains(AccessRight::READ_DG01)); - } - - -}; - -QTEST_GUILESS_MAIN(test_ChatModel) -#include "test_ChatModel.moc" diff --git a/test/qt/qml/test_LogModel.cpp b/test/qt/qml/test_LogModel.cpp deleted file mode 100644 index e3c620f..0000000 --- a/test/qt/qml/test_LogModel.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/*! - * \brief Unit tests for \ref LogModel - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "LogModel.h" - -#include "LogHandler.h" - -#include -#include - - -using namespace governikus; - -class test_LogModel - : public QObject -{ - Q_OBJECT - QSharedPointer mModel; - - private Q_SLOTS: - void init() - { - mModel.reset(new LogModel()); - } - - - void cleanup() - { - mModel.clear(); - } - - - void test_AddLogEntry_data() - { - QTest::addColumn("input"); - QTest::addColumn("entry1"); - QTest::addColumn("entry2"); - - QTest::newRow("validEntry") << QString("input : test") << QString("input") << QString("test"); - QTest::newRow("empty") << QString(" : ") << QString() << QString(); - QTest::newRow("leftEmpty") << QString(" : test") << QString() << QString("test"); - QTest::newRow("rightEmpty") << QString("input : ") << QString("input") << QString(); - QTest::newRow("NoSpaceRight") << QString("input :test") << QString("input :test") << QString(); - QTest::newRow("NoSpaceLeft") << QString("input: test") << QString("input: test") << QString(); - QTest::newRow("invalidEntry") << QString("inputTest") << QString("inputTest") << QString(); - QTest::newRow("NoSpaces") << QString("input:test") << QString("input:test") << QString(); - QTest::newRow("emptyString") << QString() << QString() << QString(); - QTest::newRow("::") << QString("::") << QString("::") << QString(); - QTest::newRow("a : b : c") << QString("a : b : c") << QString("a") << QString("b : c"); - } - - - void test_AddLogEntry() - { - QFETCH(QString, input); - QFETCH(QString, entry1); - QFETCH(QString, entry2); - - mModel->addLogEntry(input); - QCOMPARE(mModel->mLogEntries.at(0), entry1); - QCOMPARE(mModel->mLogEntries.at(1), entry2); - } - - - void test_MoveViewNoChange_data() - { - QTest::addColumn("fileName"); - - QTest::newRow("Empty") << QString(":/logfiles/empty.txt"); - QTest::newRow("Size78") << QString(":/logfiles/size78.txt"); - QTest::newRow("Size80") << QString(":/logfiles/size80.txt"); - } - - - void test_MoveViewNoChange() - { - QFETCH(QString, fileName); - QFile file(fileName); - file.open(QIODevice::ReadOnly); - QTextStream stream(&file); - mModel->setLogEntries(stream); - - QSignalSpy spyRemove(mModel.data(), &LogModel::rowsRemoved); - QSignalSpy spyInsert(mModel.data(), &LogModel::rowsInserted); - QSignalSpy spyVisibleAreaChanged(mModel.data(), &LogModel::fireVisibleAreaChanged); - - for (int i = -5; i <= 5; i++) - { - mModel->moveView(i); - QCOMPARE(spyRemove.count(), 0); - QCOMPARE(spyInsert.count(), 0); - QCOMPARE(spyVisibleAreaChanged.count(), 0); - } - } - - - void test_MoveView_data() - { - QTest::addColumn("fileName"); - QTest::addColumn("input"); - QTest::addColumn("index"); - QTest::addColumn("rowsRemovedStart"); - QTest::addColumn("rowsRemovedEnd"); - QTest::addColumn("rowsInsertedStart"); - QTest::addColumn("rowsInsertedEnd"); - QTest::addColumn("newIndex"); - QTest::addColumn("dataNewIndex"); - - QTest::newRow("ScrollUpSuccessful_Size82") << QString(":/logfiles/size82.txt") << -2 << 2 << 78 << 79 << 0 << 1 << 0 << QString("1 input"); - QTest::newRow("ScrollDownSuccessful_Size82") << QString(":/logfiles/size82.txt") << 1 << 0 << 0 << 0 << 79 << 79 << 1 << QString("1 test"); - QTest::newRow("ScrollUp_DistanceOutOfRange_Size82") << QString(":/logfiles/size82.txt") << -50 << 20 << 60 << 79 << 0 << 19 << 0 << QString("1 input"); - QTest::newRow("ScrollDown_DistanceOutOfRange_Size82") << QString(":/logfiles/size82.txt") << 50 << 70 << 12 << 79 << 0 << 67 << 2 << QString("2 input"); - - QTest::newRow("ScrollUpSuccessful_Size160") << QString(":/logfiles/size160.txt") << -20 << 50 << 60 << 79 << 0 << 19 << 30 << QString("16 input"); - QTest::newRow("ScrollDownSuccessful_Size160") << QString(":/logfiles/size160.txt") << 25 << 0 << 0 << 24 << 55 << 79 << 25 << QString("13 test"); - QTest::newRow("ScrollUp_DistanceOutOfRange_Size160") << QString(":/logfiles/size160.txt") << -41 << 40 << 40 << 79 << 0 << 39 << 0 << QString("1 input"); - QTest::newRow("ScrollDown_DistanceOutOfRange_Size160") << QString(":/logfiles/size160.txt") << 82 << 79 << 0 << 0 << 79 << 79 << 80 << QString("41 input"); - } - - - void test_MoveView() - { - QFETCH(QString, fileName); - QFETCH(int, index); - QFETCH(int, input); - QFETCH(int, rowsRemovedStart); - QFETCH(int, rowsRemovedEnd); - QFETCH(int, rowsInsertedStart); - QFETCH(int, rowsInsertedEnd); - QFETCH(int, newIndex); - QFETCH(QString, dataNewIndex); - - QFile file(fileName); - file.open(QIODevice::ReadOnly); - QTextStream stream(&file); - mModel->setLogEntries(stream); - mModel->mIndex = index; - QSignalSpy spyRemove(mModel.data(), &LogModel::rowsRemoved); - QSignalSpy spyInsert(mModel.data(), &LogModel::rowsInserted); - QSignalSpy spyVisibleAreaChanged(mModel.data(), &LogModel::fireVisibleAreaChanged); - - mModel->moveView(input); - QCOMPARE(spyRemove.count(), 1); - QCOMPARE(spyInsert.count(), 1); - QCOMPARE(spyVisibleAreaChanged.count(), 1); - QList argumentsRemove = spyRemove.takeFirst(); - QCOMPARE(argumentsRemove.at(1).toInt(), rowsRemovedStart); - QCOMPARE(argumentsRemove.at(2).toInt(), rowsRemovedEnd); - QList argumentsInsert = spyInsert.takeFirst(); - QCOMPARE(argumentsInsert.at(1).toInt(), rowsInsertedStart); - QCOMPARE(argumentsInsert.at(2).toInt(), rowsInsertedEnd); - QCOMPARE(mModel->mIndex, newIndex); - - if (!mModel->mLogEntries.isEmpty() && !mModel->mLogEntries.at(newIndex).isNull()) - { - QModelIndex indexBegin = mModel->createIndex(0, 0); - QCOMPARE(mModel->data(indexBegin, 0), QVariant(dataNewIndex)); - } - } - - - void test_SetLogEntries_data() - { - QTest::addColumn("fileName"); - QTest::addColumn("logEntriesSize"); - QTest::addColumn("count"); - - QTest::newRow("empty") << QString(":/logfiles/empty.txt") << 0 << 0; - QTest::newRow("size78") << QString(":/logfiles/size78.txt") << 78 << 78; - QTest::newRow("size80") << QString(":/logfiles/size80.txt") << 80 << 80; - QTest::newRow("size82") << QString(":/logfiles/size82.txt") << 82 << 80; - QTest::newRow("size160") << QString(":/logfiles/size160.txt") << 160 << 80; - } - - - void test_SetLogEntries() - { - QFETCH(QString, fileName); - QFETCH(int, logEntriesSize); - QFETCH(int, count); - - QFile file(fileName); - file.open(QIODevice::ReadOnly); - QTextStream stream(&file); - QSignalSpy spy(mModel.data(), &LogModel::fireVisibleAreaChanged); - - mModel->setLogEntries(stream); - QCOMPARE(mModel->mLogEntries.size(), logEntriesSize); - QCOMPARE(mModel->mCount, count); - QCOMPARE(mModel->mIndex, 0); - QCOMPARE(spy.count(), 1); - } - - - void test_OnNewLogMsg_data() - { - QTest::addColumn("msg"); - QTest::addColumn("fileName"); - QTest::addColumn("autoFlick"); - QTest::addColumn("index"); - QTest::addColumn("selectedFile"); - QTest::addColumn("visibleAreaChangedCounter"); - QTest::addColumn("newLogMsgCounter"); - - QTest::newRow("emptyFile_MsgAdded") << QString(" : ") << QString(":/logfiles/empty.txt") << true << 1 << 0 << 1 << 0; - QTest::newRow("emptyFile_MsgNotAdded") << QString(" : ") << QString(":/logfiles/empty.txt") << false << 0 << 1 << 0 << 0; - QTest::newRow("emptyFile_MsgAdded_ViewChanged") << QString("test : input") << QString(":/logfiles/empty.txt") << true << 0 << 0 << 2 << 1; - - QTest::newRow("MsgAdded_Size78") << QString() << QString(":/logfiles/size78.txt") << false << 5 << 0 << 1 << 0; - QTest::newRow("MsgAdded_ViewChanged_Size78") << QString("test : input") << QString(":/logfiles/size78.txt") << true << 0 << 0 << 2 << 1; - QTest::newRow("MsgNotAdded_Size78") << QString("test : input") << QString(":/logfiles/size78.txt") << true << 5 << 2 << 0 << 0; - - QTest::newRow("MsgAdded_Size80") << QString() << QString(":/logfiles/size80.txt") << false << 5 << 0 << 1 << 0; - QTest::newRow("MsgNotAdded_Size80") << QString("test : input") << QString(":/logfiles/size80.txt") << false << 0 << 1 << 0 << 0; - QTest::newRow("MsgAdded_ViewChanged_Size80") << QString("test : input") << QString(":/logfiles/size80.txt") << true << 0 << 0 << 2 << 1; - - QTest::newRow("MsgAdded_Size82") << QString("test : input") << QString(":/logfiles/size82.txt") << true << 0 << 0 << 1 << 0; - QTest::newRow("MsgNotAdded_Size82") << QString(" : ") << QString(":/logfiles/size82.txt") << true << 0 << 3 << 0 << 0; - QTest::newRow("MsgAdded_ViewChanged_Size82") << QString("test : input") << QString(":/logfiles/size82.txt") << true << 2 << 0 << 2 << 1; - } - - - void test_OnNewLogMsg() - { - QFETCH(QString, msg); - QFETCH(QString, fileName); - QFETCH(bool, autoFlick); - QFETCH(int, index); - QFETCH(int, selectedFile); - QFETCH(int, visibleAreaChangedCounter); - QFETCH(int, newLogMsgCounter); - - QFile file(fileName); - file.open(QIODevice::ReadOnly); - QTextStream stream(&file); - mModel->setLogEntries(stream); - int oldSize = mModel->mLogEntries.size(); - mModel->mSelectedLogFile = selectedFile; - mModel->mIndex = index; - mModel->mAutoFlick = autoFlick; - QSignalSpy spyVisibleAreaChanged(mModel.data(), &LogModel::fireVisibleAreaChanged); - QSignalSpy spyNewLogMsg(mModel.data(), &LogModel::fireNewLogMsg); - - mModel->onNewLogMsg(msg); - QCOMPARE(spyVisibleAreaChanged.count(), visibleAreaChangedCounter); - QCOMPARE(spyNewLogMsg.count(), newLogMsgCounter); - - if (visibleAreaChangedCounter == 0) - { - QCOMPARE(mModel->mLogEntries.size(), oldSize); - } - else - { - QCOMPARE(mModel->mLogEntries.size(), oldSize + 2); - } - } - - -}; - -QTEST_GUILESS_MAIN(test_LogModel) -#include "test_LogModel.moc" diff --git a/test/qt/qml/test_NumberModel.cpp b/test/qt/qml/test_NumberModel.cpp deleted file mode 100644 index 1272e9d..0000000 --- a/test/qt/qml/test_NumberModel.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/*! - * \brief Unit tests for \ref NumberModel - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "NumberModel.h" - -#include "context/ChangePinContext.h" -#include "context/RemoteServiceContext.h" - -#include "MockCardConnectionWorker.h" - -#include -#include - -using namespace governikus; - - -class test_NumberModel - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void test_ResetContext() - { - NumberModel model; - QSharedPointer context(new WorkflowContext()); - QSharedPointer pinContext(new ChangePinContext()); - - QSignalSpy spyCanChanged(&model, &NumberModel::fireCanChanged); - QSignalSpy spyPinChanged(&model, &NumberModel::firePinChanged); - QSignalSpy spyNewPinChanged(&model, &NumberModel::fireNewPinChanged); - QSignalSpy spyCanAllowed(&model, &NumberModel::fireCanAllowedModeChanged); - QSignalSpy spyPukChanged(&model, &NumberModel::firePukChanged); - QSignalSpy spyReaderNameChanged(&model, &NumberModel::fireReaderInfoChanged); - QSignalSpy spyLastPaceResultChanged(&model, &NumberModel::fireInputErrorChanged); - - model.resetContext(); - QCOMPARE(spyCanChanged.count(), 1); - QCOMPARE(spyPinChanged.count(), 1); - QCOMPARE(spyNewPinChanged.count(), 1); - QCOMPARE(spyCanAllowed.count(), 1); - QCOMPARE(spyPukChanged.count(), 1); - QCOMPARE(spyReaderNameChanged.count(), 1); - QCOMPARE(spyLastPaceResultChanged.count(), 1); - - model.resetContext(context); - QCOMPARE(model.mContext, context); - QCOMPARE(spyCanChanged.count(), 2); - QCOMPARE(spyPinChanged.count(), 2); - QCOMPARE(spyNewPinChanged.count(), 2); - QCOMPARE(spyCanAllowed.count(), 2); - QCOMPARE(spyPukChanged.count(), 2); - QCOMPARE(spyReaderNameChanged.count(), 2); - QCOMPARE(spyLastPaceResultChanged.count(), 2); - Q_EMIT context->fireCanChanged(); - QCOMPARE(spyCanChanged.count(), 3); - Q_EMIT context->firePinChanged(); - QCOMPARE(spyPinChanged.count(), 3); - Q_EMIT context->fireCanAllowedModeChanged(); - QCOMPARE(spyCanAllowed.count(), 3); - Q_EMIT context->fireReaderNameChanged(); - QCOMPARE(spyReaderNameChanged.count(), 3); - Q_EMIT context->fireLastPaceResultChanged(); - QCOMPARE(spyLastPaceResultChanged.count(), 3); - - model.resetContext(pinContext); - QCOMPARE(model.mContext, pinContext); - QCOMPARE(spyCanChanged.count(), 4); - QCOMPARE(spyPinChanged.count(), 4); - QCOMPARE(spyNewPinChanged.count(), 3); - QCOMPARE(spyCanAllowed.count(), 4); - QCOMPARE(spyPukChanged.count(), 3); - QCOMPARE(spyReaderNameChanged.count(), 4); - QCOMPARE(spyLastPaceResultChanged.count(), 4); - - Q_EMIT pinContext->fireCanChanged(); - QCOMPARE(spyCanChanged.count(), 5); - Q_EMIT pinContext->firePinChanged(); - QCOMPARE(spyPinChanged.count(), 5); - Q_EMIT pinContext->fireCanAllowedModeChanged(); - QCOMPARE(spyCanAllowed.count(), 5); - Q_EMIT pinContext->fireReaderNameChanged(); - QCOMPARE(spyReaderNameChanged.count(), 5); - Q_EMIT pinContext->fireLastPaceResultChanged(); - QCOMPARE(spyLastPaceResultChanged.count(), 5); - Q_EMIT pinContext->fireNewPinChanged(); - QCOMPARE(spyNewPinChanged.count(), 4); - Q_EMIT pinContext->firePukChanged(); - QCOMPARE(spyPukChanged.count(), 4); - } - - - void test_Can() - { - NumberModel model; - QSharedPointer context(new WorkflowContext()); - - const QString can = QStringLiteral("111111"); - model.setCan(can); - QCOMPARE(model.getCan(), QString()); - - model.mContext = context; - model.setCan(can); - QCOMPARE(model.getCan(), can); - QCOMPARE(context->getCan(), can); - } - - - void test_Pin() - { - NumberModel model; - QSharedPointer context(new WorkflowContext()); - - const QString pin = QStringLiteral("111111"); - model.setPin(pin); - QCOMPARE(model.getPin(), QString()); - - model.mContext = context; - model.setPin(pin); - QCOMPARE(model.getPin(), pin); - QCOMPARE(context->getPin(), pin); - } - - - void test_NewPin() - { - NumberModel model; - QSharedPointer workflowContext(new WorkflowContext()); - QSharedPointer changePinContext(new ChangePinContext()); - QSharedPointer remoteServiceContext(new RemoteServiceContext()); - const QString pin = QStringLiteral("111111"); - - model.mContext = workflowContext; - model.setNewPin(pin); - QCOMPARE(model.getNewPin(), QString()); - - model.mContext = changePinContext; - model.setNewPin(pin); - QCOMPARE(changePinContext->getNewPin(), pin); - QCOMPARE(model.getNewPin(), pin); - - model.mContext = remoteServiceContext; - model.setNewPin(pin); - QCOMPARE(remoteServiceContext->getNewPin(), pin); - QCOMPARE(model.getNewPin(), QString()); - } - - - void test_Puk() - { - NumberModel model; - QSharedPointer workflowContext(new WorkflowContext()); - const QString puk = QStringLiteral("111111"); - - model.mContext = workflowContext; - model.setPuk(puk); - QCOMPARE(workflowContext->getPuk(), puk); - QCOMPARE(model.getPuk(), puk); - } - - - void test_OnReaderInfoChanged() - { - NumberModel model; - QSharedPointer context(new WorkflowContext()); - QSignalSpy spyReaderNameChanged(&model, &NumberModel::fireReaderInfoChanged); - - const QString readerName = QStringLiteral("name"); - const QString test = QStringLiteral("test"); - - model.onReaderInfoChanged(readerName); - QCOMPARE(spyReaderNameChanged.count(), 0); - - context->setReaderName(test); - model.mContext = context; - model.onReaderInfoChanged(readerName); - QCOMPARE(spyReaderNameChanged.count(), 0); - - context->setReaderName(readerName); - model.mContext = context; - model.onReaderInfoChanged(readerName); - QCOMPARE(spyReaderNameChanged.count(), 1); - } - - - void test_CanAllowed() - { - NumberModel model; - QSharedPointer context(new WorkflowContext()); - - QVERIFY(!model.isCanAllowedMode()); - - model.mContext = context; - QVERIFY(!model.isCanAllowedMode()); - - context->setCanAllowedMode(true); - QVERIFY(model.isCanAllowedMode()); - } - - - void test_PinDeactivatedFalse() - { - NumberModel model; - QSharedPointer context(new WorkflowContext()); - - QVERIFY(!model.isPinDeactivated()); - - model.mContext = context; - QVERIFY(!model.isPinDeactivated()); - } - - - void test_Error() - { - QThread connectionThread; - connectionThread.start(); - - NumberModel model; - QSharedPointer context(new WorkflowContext()); - - QCOMPARE(model.getInputError(), QString()); - QVERIFY(!model.hasError()); - - context->setLastPaceResult(CardReturnCode::OK); - model.mContext = context; - QCOMPARE(model.getInputError(), QString()); - QVERIFY(!model.hasError()); - - context->setLastPaceResult(CardReturnCode::CANCELLATION_BY_USER); - QCOMPARE(model.getInputError(), QString()); - QVERIFY(!model.hasError()); - - QSharedPointer worker(new MockCardConnectionWorker()); - worker->moveToThread(&connectionThread); - QSharedPointer connection(new CardConnection(worker)); - context->setCardConnection(connection); - - context->setLastPaceResult(CardReturnCode::INVALID_PIN); - QCOMPARE(model.getInputError(), tr("The given PIN is not correct. You have 2 tries to enter the correct PIN.")); - QVERIFY(model.hasError()); - - context->setLastPaceResult(CardReturnCode::INVALID_PIN_2); - QCOMPARE(model.getInputError(), tr("You have entered the wrong PIN twice. " - "Prior to a third attempt, you have to enter your six-digit card access number first. " - "You can find your card access number on the front of your ID card.")); - QVERIFY(model.hasError()); - - context->setLastPaceResult(CardReturnCode::INVALID_PIN_3); - QCOMPARE(model.getInputError(), tr("You have entered a wrong PIN three times. " - "Your PIN is now blocked. " - "You have to enter the PUK now for unblocking.")); - QVERIFY(model.hasError()); - - context->setLastPaceResult(CardReturnCode::INVALID_CAN); - model.mContext = context; - QCOMPARE(model.getInputError(), tr("You have entered a wrong CAN, please try again.")); - - context->setLastPaceResult(CardReturnCode::INVALID_PUK); - QCOMPARE(model.getInputError(), tr("You have entered a wrong PUK. " - "Please try again.")); - QVERIFY(model.hasError()); - - context->setLastPaceResult(CardReturnCode::UNKNOWN); - QCOMPARE(model.getInputError(), tr("An unexpected error has occurred during processing.")); - - context->setLastPaceResult(CardReturnCode::UNEXPECTED_TRANSMIT_STATUS); - model.mContext = context; - QCOMPARE(model.getInputError(), QStringLiteral("%1 %3.").arg( - tr("A protocol error occurred. Please make sure that your ID card is placed correctly on the card reader and try again. If the problem occurs again, please contact our support at"), - tr("https://www.ausweisapp.bund.de/en/qa/support/"), - tr("AusweisApp2 Support"))); - QVERIFY(model.hasError()); - - connectionThread.quit(); - connectionThread.wait(); - } - - - void test_GetRetryCounter() - { - QThread connectionThread; - connectionThread.start(); - - NumberModel model; - QSharedPointer context(new WorkflowContext()); - - QCOMPARE(model.getRetryCounter(), -1); - - model.mContext = context; - QCOMPARE(model.getRetryCounter(), -1); - - const QString name = QStringLiteral("name"); - CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), - 3, true, false); - MockReader reader(name); - reader.getReaderInfo().setCardInfo(cardInfo); - QSharedPointer worker(new MockCardConnectionWorker(&reader)); - worker->moveToThread(&connectionThread); - QSharedPointer connection(new CardConnection(worker)); - context->setCardConnection(connection); - QCOMPARE(model.getRetryCounter(), 3); - - connectionThread.quit(); - connectionThread.wait(); - } - - - void test_RequestTransportPin_data() - { - QTest::addColumn >("context"); - QTest::addColumn("contextRequestedTransportPin"); - - QTest::newRow("WorkflowContext") << QSharedPointer(new WorkflowContext()) << false; - QTest::newRow("ChangePinContext") << QSharedPointer(new ChangePinContext()) << false; - QTest::newRow("ChangePinContext-false") << QSharedPointer(new ChangePinContext(false)) << false; - QTest::newRow("ChangePinContext-true") << QSharedPointer(new ChangePinContext(true)) << true; - } - - - void test_RequestTransportPin() - { - QFETCH(QSharedPointer, context); - QFETCH(bool, contextRequestedTransportPin); - - NumberModel model; - QVERIFY(!model.isRequestTransportPin()); - - model.setRequestTransportPin(true); - QVERIFY(model.isRequestTransportPin()); - model.setRequestTransportPin(false); - QVERIFY(!model.isRequestTransportPin()); - - model.resetContext(context); - QCOMPARE(model.isRequestTransportPin(), contextRequestedTransportPin); - - model.setRequestTransportPin(true); - model.resetContext(context); - QVERIFY(model.isRequestTransportPin()); - - model.setRequestTransportPin(false); - QVERIFY(!model.isRequestTransportPin()); - model.setRequestTransportPin(true); - QVERIFY(model.isRequestTransportPin()); - - model.resetContext(); - QVERIFY(!model.isRequestTransportPin()); - } - - -}; - -QTEST_GUILESS_MAIN(test_NumberModel) -#include "test_NumberModel.moc" diff --git a/test/qt/qml/test_ProviderCategoryFilterModel.cpp b/test/qt/qml/test_ProviderCategoryFilterModel.cpp deleted file mode 100644 index 86030c3..0000000 --- a/test/qt/qml/test_ProviderCategoryFilterModel.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/*! - * \brief Unit tests for \ref ProviderCategoryFilterModel - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "ProviderCategoryFilterModel.h" - -#include - - -using namespace governikus; - - -class test_ProviderCategoryFilterModel - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void test_UpdateSearchString() - { - ProviderCategoryFilterModel model; - QSignalSpy spy(&model, &ProviderCategoryFilterModel::fireCriteriaChanged); - const QString search = QStringLiteral("search"); - - model.updateSearchString(search); - QCOMPARE(model.getSearchString(), search); - QCOMPARE(spy.count(), 1); - } - - - void test_CategorySelection() - { - ProviderCategoryFilterModel model; - QSignalSpy spy(&model, &ProviderCategoryFilterModel::fireCriteriaChanged); - const QString category1 = QStringLiteral("CATEGORY"); - const QString category2 = QStringLiteral("testCATEGORY"); - - model.setCategorySelection(QString()); - QVERIFY(model.mSelectedCategories.isEmpty()); - QCOMPARE(spy.count(), 1); - - model.setCategorySelection(category1); - QVERIFY(model.mSelectedCategories.contains("category")); - QCOMPARE(spy.count(), 2); - - model.updateCategorySelection(category2, true); - QVERIFY(model.mSelectedCategories.contains("testcategory")); - QCOMPARE(spy.count(), 3); - - model.updateCategorySelection(category2, true); - QVERIFY(model.mSelectedCategories.contains("testcategory")); - QCOMPARE(spy.count(), 3); - - model.updateCategorySelection(category1, false); - QVERIFY(model.mSelectedCategories.contains("testcategory")); - QVERIFY(!model.mSelectedCategories.contains("category")); - QCOMPARE(spy.count(), 4); - } - - - void test_SortByCategoryFirst() - { - ProviderCategoryFilterModel model; - - model.sortByCategoryFirst(true); - QCOMPARE(model.sortRole(), ProviderModel::SORT_ROLE); - - model.sortByCategoryFirst(false); - QCOMPARE(model.sortRole(), ProviderModel::SHORTNAME); - } - - -}; - -QTEST_GUILESS_MAIN(test_ProviderCategoryFilterModel) -#include "test_ProviderCategoryFilterModel.moc" diff --git a/test/qt/qml/test_ProviderModel.cpp b/test/qt/qml/test_ProviderModel.cpp deleted file mode 100644 index 48a2f4c..0000000 --- a/test/qt/qml/test_ProviderModel.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/*! - * \brief Unit tests for \ref ProviderModel - * - * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "ProviderModel.h" - -#include -#include - - -using namespace governikus; - - -class test_ProviderModel - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void createAmountStringForCents() - { - QVERIFY(ProviderModel::createAmountString(3.9).contains(QString("3.9"))); - } - - - void createAmountStringForEur() - { - QVERIFY(ProviderModel::createAmountString(289).contains(QString("2.89"))); - } - - - void createCostStringMinute() - { - const auto& msg = ProviderModel::createCostString(1.9, 2.9); - QVERIFY(msg.contains(QString("1.9"))); - QVERIFY(!msg.contains(QString("2.9"))); - } - - - void createCostStringCall() - { - const auto& msg = ProviderModel::createCostString(0.0, 2.9); - QVERIFY(!msg.contains(QString("0.0"))); - QVERIFY(msg.contains(QString("2.9"))); - } - - - void createCostStringEmpty() - { - const auto& msg = ProviderModel::createCostString(0.0, 0.0); - QVERIFY(msg.isEmpty()); - } - - - void createCostStringNullCost() - { - const auto& msg = ProviderModel::createCostString(CallCost()); - QVERIFY(msg.isNull()); - } - - - void createCostString() - { - const auto& msg = ProviderModel::createCostString(CallCost(0.0, 3.9, 0.0, 42.0, 0.0)); - QVERIFY(!msg.isNull()); - } - - -}; - -QTEST_GUILESS_MAIN(test_ProviderModel) -#include "test_ProviderModel.moc" diff --git a/test/qt/qml/test_RemoteServiceModel.cpp b/test/qt/qml/test_RemoteServiceModel.cpp deleted file mode 100644 index c151014..0000000 --- a/test/qt/qml/test_RemoteServiceModel.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/*! - * \brief Unit tests for \ref ProviderModel - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "RemoteServiceModel.h" - -#include "context/RemoteServiceContext.h" -#include "MockRemoteServer.h" - -#include -#include - - -using namespace governikus; - -class test_RemoteServiceModel - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void initTestCase() - { - Env::setCreator(std::function([&] { - return new MockRemoteServer(); - })); - } - - - void test_ReaderPlugInType() - { - const QSharedPointer context(new RemoteServiceContext()); - RemoteServiceModel model; - const ReaderManagerPlugInType input1 = ReaderManagerPlugInType::NFC; - const ReaderManagerPlugInType input2 = ReaderManagerPlugInType::UNKNOWN; - - model.setReaderPlugInType(input1); - QCOMPARE(model.getReaderPlugInType(), ReaderManagerPlugInType::UNKNOWN); - - model.resetContext(context); - model.setReaderPlugInType(input1); - QCOMPARE(model.getReaderPlugInType(), input1); - - model.setReaderPlugInType(input2); - QCOMPARE(model.getReaderPlugInType(), ReaderManagerPlugInType::UNKNOWN); - } - - - void test_ErrorMessage() - { - RemoteServiceModel model; - - QCOMPARE(model.getErrorMessage(true, true, true), QString()); - QCOMPARE(model.getErrorMessage(false, true, true), tr("NFC is not available on your device.")); - QCOMPARE(model.getErrorMessage(true, false, true), tr("Please enable NFC to use the remote service.")); - QCOMPARE(model.getErrorMessage(true, true, false), tr("Please connect your WiFi to use the remote service.")); - } - - - void test_CancelPasswordRequest() - { - const QSharedPointer context(new RemoteServiceContext()); - RemoteServiceModel model; - QSignalSpy spy(context.data(), &RemoteServiceContext::fireCancelPasswordRequest); - - model.cancelPasswordRequest(); - QCOMPARE(spy.count(), 0); - - model.mContext = context; - model.cancelPasswordRequest(); - QCOMPARE(spy.count(), 1); - } - - - void test_Running() - { - const QSharedPointer context(new RemoteServiceContext()); - RemoteServiceModel model; - QSignalSpy spyStartWorkflow(&model, &RemoteServiceModel::fireStartWorkflow); - QSignalSpy spyCancelWorkflow(context.data(), &RemoteServiceContext::fireCancelWorkflow); - QSignalSpy spyIsRunningChanged(&model, &RemoteServiceModel::fireIsRunningChanged); - - QVERIFY(!model.isRunning()); - - model.mContext = context; - QVERIFY(!model.isRunning()); - - context->getRemoteServer()->start(QString()); - QVERIFY(model.isRunning()); - model.setRunning(false); - QCOMPARE(spyIsRunningChanged.count(), 1); - QCOMPARE(spyCancelWorkflow.count(), 1); - - context->getRemoteServer()->stop(); - model.setRunning(true); - QCOMPARE(spyIsRunningChanged.count(), 2); - QCOMPARE(spyStartWorkflow.count(), 1); - } - - - void test_ResetContext() - { - const QSharedPointer context(new RemoteServiceContext()); - RemoteServiceModel model; - - QSignalSpy spyConnectedChanged(&model, &RemoteServiceModel::fireConnectedChanged); - QSignalSpy spyCurrentStateChanged(&model, &WorkflowModel::fireCurrentStateChanged); - QSignalSpy spyIsRunningChanged(&model, &RemoteServiceModel::fireIsRunningChanged); - QSignalSpy spyPskChanged(&model, &RemoteServiceModel::firePskChanged); - QSignalSpy spyConnectedClientDeviceNameChanged(&model, &RemoteServiceModel::fireConnectedClientDeviceNameChanged); - - model.resetContext(context); - QCOMPARE(model.mContext, context); - QCOMPARE(spyCurrentStateChanged.count(), 1); - QCOMPARE(spyConnectedChanged.count(), 1); - - Q_EMIT context->fireStateChanged(QString()); - QCOMPARE(spyIsRunningChanged.count(), 1); - - Q_EMIT context->getRemoteServer()->firePskChanged(QByteArray()); - QCOMPARE(spyPskChanged.count(), 1); - - Q_EMIT context->getRemoteServer()->fireConnectedChanged(true); - QCOMPARE(spyConnectedChanged.count(), 2); - QCOMPARE(spyConnectedClientDeviceNameChanged.count(), 1); - } - - - void test_SetPairing() - { - const QSharedPointer context(new RemoteServiceContext()); - RemoteServiceModel model; - model.mContext = context; - const QSharedPointer server = qSharedPointerCast(context->getRemoteServer()); - - model.setPairing(true); - QVERIFY(server->getPairing()); - - model.setPairing(false); - QVERIFY(!server->getPairing()); - } - - -}; - -QTEST_GUILESS_MAIN(test_RemoteServiceModel) -#include "test_RemoteServiceModel.moc" diff --git a/test/qt/qml/test_SelfAuthModel.cpp b/test/qt/qml/test_SelfAuthModel.cpp deleted file mode 100644 index 7d47da3..0000000 --- a/test/qt/qml/test_SelfAuthModel.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/*! - * \brief Unit tests for \ref SelfAuthModel - * - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "SelfAuthModel.h" - -#include "context/SelfAuthContext.h" - -#include "MockCardConnectionWorker.h" - -#include - - -using namespace governikus; - -class test_SelfAuthModel - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void test_ResetContext() - { - SelfAuthModel model; - const QSharedPointer context(new SelfAuthContext()); - - model.resetContext(nullptr); - QVERIFY(!model.mContext); - - model.resetContext(context); - QCOMPARE(model.mContext, context); - } - - - void test_StartWorkflow() - { - SelfAuthModel model; - QSignalSpy spy(&model, &SelfAuthModel::fireStartWorkflow); - - model.startWorkflow(); - QCOMPARE(spy.count(), 1); - } - - - void test_CancelWorkflow() - { - SelfAuthModel model; - const QSharedPointer context(new SelfAuthContext()); - QSignalSpy spy(context.data(), &SelfAuthContext::fireCancelWorkflow); - - model.cancelWorkflow(); - QCOMPARE(spy.count(), 0); - - model.mContext = context; - model.cancelWorkflow(); - QCOMPARE(spy.count(), 1); - } - - - void test_IsBasicReader() - { - QThread workerThread; - workerThread.start(); - - SelfAuthModel model; - - QVERIFY(model.isBasicReader()); - - const QSharedPointer worker(new MockCardConnectionWorker()); - worker->moveToThread(&workerThread); - const QSharedPointer context(new SelfAuthContext()); - const QSharedPointer connection(new CardConnection(worker)); - context->setCardConnection(connection); - ReaderInfo info; - - info.setBasicReader(true); - connection->mReaderInfo = info; - model.mContext = context; - QVERIFY(model.isBasicReader()); - - info.setBasicReader(false); - connection->mReaderInfo = info; - QVERIFY(!model.isBasicReader()); - - workerThread.quit(); - workerThread.wait(); - } - - - void test_RoleNames() - { - SelfAuthModel model; - - QVERIFY(model.roleNames().keys().contains(SelfAuthModel::DataRoles::NAME)); - QVERIFY(model.roleNames().keys().contains(SelfAuthModel::DataRoles::VALUE)); - QVERIFY(model.roleNames().values().contains("name")); - QVERIFY(model.roleNames().values().contains("value")); - } - - -}; - -QTEST_GUILESS_MAIN(test_SelfAuthModel) -#include "test_SelfAuthModel.moc" diff --git a/test/qt/remote_device/test_RemoteClientImpl.cpp b/test/qt/remote_device/test_RemoteClientImpl.cpp index c2d4445..491225c 100644 --- a/test/qt/remote_device/test_RemoteClientImpl.cpp +++ b/test/qt/remote_device/test_RemoteClientImpl.cpp @@ -11,7 +11,7 @@ #include "messages/IfdEstablishContext.h" #include -#include +#include using namespace governikus; diff --git a/test/qt/remote_device/test_RemoteConnector.cpp b/test/qt/remote_device/test_RemoteConnector.cpp index 66642b2..809272c 100644 --- a/test/qt/remote_device/test_RemoteConnector.cpp +++ b/test/qt/remote_device/test_RemoteConnector.cpp @@ -13,7 +13,7 @@ #include "RemoteWebSocketServer.h" #include "SecureStorage.h" -#include +#include #include #include @@ -104,7 +104,7 @@ class test_RemoteConnector const QVariant errorCodeVariant = arguments.at(1); QVERIFY(errorCodeVariant.canConvert()); - const RemoteErrorCode errorCode = errorCodeVariant.value(); + const auto errorCode = errorCodeVariant.value(); const QUrl remoteUrl = descr.getUrl(); const QString remoteAddress = remoteUrl.host(); @@ -274,13 +274,13 @@ class test_RemoteConnector const KeyPair pair = KeyPair::generate(); QVERIFY(pair.isValid()); - QSslConfiguration config = SecureStorage::getInstance().getTlsConfigRemote().getConfiguration(); + QSslConfiguration config = Env::getSingleton()->getTlsConfigRemote().getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); config.setCaCertificates({KeyPair::generate().getCertificate(), settings.getCertificate(), KeyPair::generate().getCertificate()}); QTest::newRow("paired") << QString() << config << QList({KeyPair::generate().getCertificate(), pair.getCertificate(), KeyPair::generate().getCertificate()}); - config = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); + config = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); QTest::newRow("unpaired") << QString("123456") << config << QList(); @@ -363,7 +363,7 @@ class test_RemoteConnector QSignalSpy spySocketError(&webSocketServer, &QWebSocketServer::serverError); QSignalSpy spySocketSuccess(&webSocketServer, &QWebSocketServer::newConnection); - QSslConfiguration config = SecureStorage::getInstance().getTlsConfigRemote().getConfiguration(); + QSslConfiguration config = Env::getSingleton()->getTlsConfigRemote().getConfiguration(); const KeyPair pair = KeyPair::generate(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); diff --git a/test/qt/remote_device/test_RemoteDeviceDescriptor.cpp b/test/qt/remote_device/test_RemoteDeviceDescriptor.cpp index 56e730a..51ce937 100644 --- a/test/qt/remote_device/test_RemoteDeviceDescriptor.cpp +++ b/test/qt/remote_device/test_RemoteDeviceDescriptor.cpp @@ -6,7 +6,7 @@ #include "messages/Discovery.h" -#include +#include using namespace governikus; diff --git a/test/qt/remote_device/test_RemoteDeviceListImpl.cpp b/test/qt/remote_device/test_RemoteDeviceListImpl.cpp index f07af51..e01fe71 100644 --- a/test/qt/remote_device/test_RemoteDeviceListImpl.cpp +++ b/test/qt/remote_device/test_RemoteDeviceListImpl.cpp @@ -6,7 +6,7 @@ #include "messages/Discovery.h" -#include +#include using namespace governikus; diff --git a/test/qt/remote_device/test_RemoteDeviceModel.cpp b/test/qt/remote_device/test_RemoteDeviceModel.cpp index 1e7b885..3292f24 100644 --- a/test/qt/remote_device/test_RemoteDeviceModel.cpp +++ b/test/qt/remote_device/test_RemoteDeviceModel.cpp @@ -6,56 +6,65 @@ #include - using namespace governikus; +Q_DECLARE_METATYPE(RemoteDeviceModel::SettingsRemoteRoles) class test_RemoteDeviceModel : public QObject { Q_OBJECT + QSharedPointer mModel; + QSharedPointer mEntry; + QString mName; private Q_SLOTS: + void init() + { + mName = QStringLiteral("name"); + mModel.reset(new RemoteDeviceModel()); + mEntry.reset(new RemoteDeviceModelEntry(mName)); + } + + + void cleanup() + { + mModel.clear(); + mEntry.clear(); + } + + void test_Paired() { - const QString name = QStringLiteral("name"); - RemoteDeviceModelEntry entry(name); - QVERIFY(!entry.isPaired()); - entry.setPaired(true); - QVERIFY(entry.isPaired()); + QVERIFY(!mEntry->isPaired()); + mEntry->setPaired(true); + QVERIFY(mEntry->isPaired()); } void test_DeviceName() { - const QString name = QStringLiteral("name"); - RemoteDeviceModelEntry entry(name); - QCOMPARE(entry.getDeviceName(), name); + QCOMPARE(mEntry->getDeviceName(), mName); } void test_Id() { - const QString name = QStringLiteral("name"); const QString id = QStringLiteral("id"); - RemoteDeviceModelEntry entry(name); - QCOMPARE(entry.getId(), QString()); + QCOMPARE(mEntry->getId(), QString()); - entry.setId(id); - QCOMPARE(entry.getId(), id); + mEntry->setId(id); + QCOMPARE(mEntry->getId(), id); } void test_NetworkVisible() { - const QString name = QStringLiteral("name"); - RemoteDeviceModelEntry entry(name); + QVERIFY(!mEntry->isNetworkVisible()); - QVERIFY(!entry.isNetworkVisible()); - - entry.setNetworkVisible(true); - QVERIFY(entry.isNetworkVisible()); + mEntry->setNetworkVisible(true); + QVERIFY(mEntry->isNetworkVisible()); } @@ -65,7 +74,9 @@ class test_RemoteDeviceModel const QString id = QStringLiteral("id"); const QDateTime time(QDateTime::currentDateTime()); RemoteDeviceModelEntry entry1(name); - RemoteDeviceModelEntry entry2(name, id, true, true, true, time); + const RemoteDeviceDescriptor descriptor = RemoteDeviceDescriptor(); + QSharedPointer pointer(new RemoteDeviceListEntry(descriptor)); + RemoteDeviceModelEntry entry2(name, id, true, true, true, time, pointer); QVERIFY(!entry1.isSupported()); QVERIFY(entry2.isSupported()); @@ -89,31 +100,28 @@ class test_RemoteDeviceModel void test_LastConnected() { - const QString name = QStringLiteral("name"); - RemoteDeviceModelEntry entry(name); QDateTime time(QDateTime::currentDateTime()); - QCOMPARE(entry.getLastConnected(), QDateTime()); + QCOMPARE(mEntry->getLastConnected(), QDateTime()); - entry.setLastConnected(time); - QCOMPARE(entry.getLastConnected(), time); + mEntry->setLastConnected(time); + QCOMPARE(mEntry->getLastConnected(), time); } void test_RoleNames() { - RemoteDeviceModel model; - QVERIFY(model.roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::REMOTE_DEVICE_NAME)); - QVERIFY(model.roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::LAST_CONNECTED)); - QVERIFY(model.roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::DEVICE_ID)); - QVERIFY(model.roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::IS_NETWORK_VISIBLE)); - QVERIFY(model.roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::IS_SUPPORTED)); + QVERIFY(mModel->roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::REMOTE_DEVICE_NAME)); + QVERIFY(mModel->roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::LAST_CONNECTED)); + QVERIFY(mModel->roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::DEVICE_ID)); + QVERIFY(mModel->roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::IS_NETWORK_VISIBLE)); + QVERIFY(mModel->roleNames().keys().contains(RemoteDeviceModel::SettingsRemoteRoles::IS_SUPPORTED)); - QVERIFY(model.roleNames().values().contains(QByteArrayLiteral("remoteDeviceName"))); - QVERIFY(model.roleNames().values().contains(QByteArrayLiteral("lastConnected"))); - QVERIFY(model.roleNames().values().contains(QByteArrayLiteral("deviceId"))); - QVERIFY(model.roleNames().values().contains(QByteArrayLiteral("isNetworkVisible"))); - QVERIFY(model.roleNames().values().contains(QByteArrayLiteral("isSupported"))); + QVERIFY(mModel->roleNames().values().contains(QByteArrayLiteral("remoteDeviceName"))); + QVERIFY(mModel->roleNames().values().contains(QByteArrayLiteral("lastConnected"))); + QVERIFY(mModel->roleNames().values().contains(QByteArrayLiteral("deviceId"))); + QVERIFY(mModel->roleNames().values().contains(QByteArrayLiteral("isNetworkVisible"))); + QVERIFY(mModel->roleNames().values().contains(QByteArrayLiteral("isSupported"))); } @@ -121,59 +129,104 @@ class test_RemoteDeviceModel { RemoteDeviceModelEntry entry; - RemoteDeviceModel model; + QCOMPARE(mModel->getStatus(entry), QString("Not connected")); - QCOMPARE(model.getStatus(entry), QString("Not connected")); + mModel->mAllRemoteReaders.insert(0, entry); - model.mAllRemoteReaders.insert(0, entry); - - QCOMPARE(model.getStatus(entry), QString("Unsupported version")); + QCOMPARE(mModel->getStatus(entry), QString("Unsupported")); entry.mSupported = true; - QCOMPARE(model.getStatus(entry), QString("Not paired")); + QCOMPARE(mModel->getStatus(entry), QString("Not paired")); entry.setPaired(true); - QCOMPARE(model.getStatus(entry), QString("Paired, but unavailable")); + QCOMPARE(mModel->getStatus(entry), QString("Paired, but unavailable")); entry.setNetworkVisible(true); - QCOMPARE(model.getStatus(entry), QString("Paired and available")); + QCOMPARE(mModel->getStatus(entry), QString("Available")); entry.mSupported = false; - QCOMPARE(model.getStatus(entry), QString("Paired, but unsupported")); + QCOMPARE(mModel->getStatus(entry), QString("Paired, but unsupported")); } void test_HeaderData() { - RemoteDeviceModel model; - - QCOMPARE(model.headerData(3, Qt::Vertical, 3), QVariant()); - QCOMPARE(model.headerData(0, Qt::Horizontal, 3), QVariant()); - QCOMPARE(model.headerData(0, Qt::Horizontal, 0), QVariant("Device")); - QCOMPARE(model.headerData(1, Qt::Horizontal, 0), QVariant("Status")); + QCOMPARE(mModel->headerData(3, Qt::Vertical, 3), QVariant()); + QCOMPARE(mModel->headerData(0, Qt::Horizontal, 3), QVariant()); + QCOMPARE(mModel->headerData(0, Qt::Horizontal, 0), QVariant("Device")); + QCOMPARE(mModel->headerData(1, Qt::Horizontal, 0), QVariant("Status")); } void test_ColumnCount() { - RemoteDeviceModel model; - QCOMPARE(model.columnCount(), 2); + QCOMPARE(mModel->columnCount(), 2); } - void test_GetRemoteListEntry() + void test_GetRemoteDeviceListEntryId() { - RemoteDeviceModel model; RemoteDeviceModelEntry entry1; RemoteDeviceModelEntry entry2; entry1.setId(QString("id")); - QCOMPARE(model.getRemoteDeviceListEntry(QString("id")), QSharedPointer()); + QCOMPARE(mModel->getRemoteDeviceListEntry(QString("id")), QSharedPointer()); - model.mAllRemoteReaders.insert(0, entry1); - model.mAllRemoteReaders.insert(1, entry2); + mModel->mAllRemoteReaders.insert(0, entry1); + mModel->mAllRemoteReaders.insert(1, entry2); - QCOMPARE(model.getRemoteDeviceListEntry(QString("id")), nullptr); + QCOMPARE(mModel->getRemoteDeviceListEntry(QString("id")), nullptr); + } + + + void test_GetRemoteDeviceListEntryModelIndex() + { + QSharedPointer listEntry(new RemoteDeviceListEntry(RemoteDeviceDescriptor())); + RemoteDeviceModelEntry entry1(QString("entry 1"), QString("01"), listEntry); + RemoteDeviceModelEntry entry2(QString("entry 2")); + mModel->mAllRemoteReaders << entry1 << entry2; + + const auto& index1 = mModel->createIndex(0, 0); + QCOMPARE(mModel->getRemoteDeviceListEntry(index1), listEntry); + + const auto& index2 = mModel->createIndex(1, 0); + QCOMPARE(mModel->getRemoteDeviceListEntry(index2), nullptr); + } + + + void test_Data_data() + { + QTest::addColumn("role"); + QTest::addColumn("row"); + QTest::addColumn("column"); + QTest::addColumn("output"); + + QTest::newRow("device name") << RemoteDeviceModel::SettingsRemoteRoles::REMOTE_DEVICE_NAME << 0 << 0 << QVariant(QString("reader 1")); + QTest::newRow("device status") << RemoteDeviceModel::SettingsRemoteRoles::REMOTE_DEVICE_STATUS << 1 << 0 << QVariant(QString("Unsupported")); + QTest::newRow("last connected") << RemoteDeviceModel::SettingsRemoteRoles::LAST_CONNECTED << 0 << 0 << QVariant(QString("14.05.2019 12:00 AM")); + QTest::newRow("device id") << RemoteDeviceModel::SettingsRemoteRoles::DEVICE_ID << 0 << 0 << QVariant(QString("test id")); + QTest::newRow("network visible") << RemoteDeviceModel::SettingsRemoteRoles::IS_NETWORK_VISIBLE << 1 << 0 << QVariant(bool(false)); + QTest::newRow("supported") << RemoteDeviceModel::SettingsRemoteRoles::IS_SUPPORTED << 0 << 0 << QVariant(bool(true)); + QTest::newRow("paired") << RemoteDeviceModel::SettingsRemoteRoles::IS_PAIRED << 0 << 0 << QVariant(bool(true)); + QTest::newRow("link quality") << RemoteDeviceModel::SettingsRemoteRoles::LINK_QUALITY << 0 << 0 << QVariant(int(0)); + } + + + void test_Data() + { + QFETCH(RemoteDeviceModel::SettingsRemoteRoles, role); + QFETCH(int, row); + QFETCH(int, column); + QFETCH(QVariant, output); + + QVector readers; + QSharedPointer listEntry(new RemoteDeviceListEntry(RemoteDeviceDescriptor())); + const RemoteDeviceModelEntry entry1(QString("reader 1"), QString("test id"), true, true, true, QDateTime(QDate(2019, 5, 14), QTime(0, 0)), listEntry); + const RemoteDeviceModelEntry entry2(QString("reader 2")); + readers << entry1 << entry2; + mModel->mAllRemoteReaders = readers; + const auto& index = mModel->createIndex(row, column); + QCOMPARE(mModel->data(index, role), output); } diff --git a/test/qt/remote_device/test_RemoteDisp.cpp b/test/qt/remote_device/test_RemoteDisp.cpp index 3d7d179..8a5b72b 100644 --- a/test/qt/remote_device/test_RemoteDisp.cpp +++ b/test/qt/remote_device/test_RemoteDisp.cpp @@ -14,8 +14,8 @@ #include "messages/IfdTransmit.h" #include "MockDataChannel.h" -#include -#include +#include +#include using namespace governikus; @@ -53,7 +53,7 @@ class RemoteDispatcherSpy RemoteDispatcherSpy::RemoteDispatcherSpy(const QSharedPointer pRemoteDispatcher) : mRemoteDispatcher(pRemoteDispatcher) , mClosed(false) - , mCloseCode(GlobalStatus::Code::RemoteReader_CloseCode_Undefined) + , mCloseCode(GlobalStatus::Code::RemoteReader_CloseCode_AbnormalClose) { const auto client = mRemoteDispatcher.objectCast(); if (client) @@ -154,7 +154,7 @@ class test_RemoteDisp channel->close(); QVERIFY(spy.isClosed()); - QCOMPARE(spy.getCloseCode(), GlobalStatus::Code::RemoteReader_CloseCode_NormalClose); + QCOMPARE(spy.getCloseCode(), GlobalStatus::Code::No_Error); const QVector& senders = spy.getReceivedSignalSenders(); QCOMPARE(senders.size(), 1); @@ -170,7 +170,7 @@ class test_RemoteDisp channel->close(); QVERIFY(spy.isClosed()); - QCOMPARE(spy.getCloseCode(), GlobalStatus::Code::RemoteReader_CloseCode_NormalClose); + QCOMPARE(spy.getCloseCode(), GlobalStatus::Code::No_Error); const QVector& senders = spy.getReceivedSignalSenders(); QCOMPARE(senders.size(), 1); @@ -273,7 +273,7 @@ class test_RemoteDisp // Destroying a remote dispatcher should close the underlying channel. clientDispatcher.reset(); QVERIFY(spy.isClosed()); - QCOMPARE(spy.getCloseCode(), GlobalStatus::Code::RemoteReader_CloseCode_NormalClose); + QCOMPARE(spy.getCloseCode(), GlobalStatus::Code::No_Error); const QVector& senders = spy.getReceivedSignalSenders(); QCOMPARE(senders.size(), 1); diff --git a/test/qt/remote_device/test_RemoteReaderManagerPlugin.cpp b/test/qt/remote_device/test_RemoteReaderManagerPlugin.cpp index 88c0775..a5ca189 100644 --- a/test/qt/remote_device/test_RemoteReaderManagerPlugin.cpp +++ b/test/qt/remote_device/test_RemoteReaderManagerPlugin.cpp @@ -6,6 +6,7 @@ #include "plugin/RemoteReaderManagerPlugIn.h" +#include "AppSettings.h" #include "Env.h" #include "messages/IfdConnect.h" #include "messages/IfdConnect.h" @@ -23,8 +24,8 @@ #include #include -#include -#include +#include +#include using namespace governikus; @@ -67,8 +68,8 @@ bool MockRemoteClient::isDetecting() void MockRemoteClient::establishConnection(const QSharedPointer& pEntry, const QString& pPsk) { - Q_UNUSED(pEntry); - Q_UNUSED(pPsk); + Q_UNUSED(pEntry) + Q_UNUSED(pPsk) } @@ -162,7 +163,12 @@ class test_RemoteReaderManagerPlugIn QSignalSpy spyAdded(mPlugin.data(), &ReaderManagerPlugIn::fireReaderAdded); QSignalSpy spyRemoved(mPlugin.data(), &ReaderManagerPlugIn::fireReaderRemoved); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 500, true)); + ReaderInfo info(QStringLiteral("NFC Reader")); + info.setConnected(true); + info.setBasicReader(true); + info.setMaxApduLength(500); + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(false); + message.reset(new IfdStatus(info)); mDispatcher1->onReceived(message); QCOMPARE(mPlugin->getReaders().size(), 1); QCOMPARE(spySend.size(), 0); @@ -173,7 +179,8 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(mPlugin->getReaders().at(0)->getReaderInfo().isBasicReader(), true); QCOMPARE(mPlugin->getReaders().at(0)->getReaderInfo().getMaxApduLength(), 500); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 500, false)); + info.setConnected(false); + message.reset(new IfdStatus(info)); mDispatcher1->onReceived(message); QCOMPARE(mPlugin->getReaders().size(), 0); QCOMPARE(spySend.size(), 0); @@ -181,7 +188,8 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(spyRemoved.size(), 1); QCOMPARE(spyRemoved.takeFirst().at(0).toString(), QStringLiteral("NFC Reader#TestContext")); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 500, true)); + info.setConnected(true); + message.reset(new IfdStatus(info)); mDispatcher1->onReceived(message); QCOMPARE(mPlugin->getReaders().size(), 1); QCOMPARE(mPlugin->getReaders().at(0)->getName(), QStringLiteral("NFC Reader#TestContext")); @@ -208,7 +216,12 @@ class test_RemoteReaderManagerPlugIn QSignalSpy spyAdded(mPlugin.data(), &ReaderManagerPlugIn::fireReaderAdded); QSignalSpy spyRemoved(mPlugin.data(), &ReaderManagerPlugIn::fireReaderRemoved); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(true), 500, true)); + ReaderInfo info(QStringLiteral("NFC Reader")); + info.setConnected(true); + info.setBasicReader(true); + info.setMaxApduLength(500); + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(true); + message.reset(new IfdStatus(info)); mDispatcher1->onReceived(message); QCOMPARE(spySend.size(), 0); QCOMPARE(spyAdded.size(), 1); @@ -236,10 +249,21 @@ class test_RemoteReaderManagerPlugIn QSignalSpy spyAdded(mPlugin.data(), &ReaderManagerPlugIn::fireReaderAdded); QSignalSpy spyRemoved(mPlugin.data(), &ReaderManagerPlugIn::fireReaderRemoved); - message.reset(new IfdStatus(QStringLiteral("NFC Reader 1"), PaceCapabilities(), 500, true)); + ReaderInfo info1(QStringLiteral("NFC Reader 1")); + info1.setMaxApduLength(500); + info1.setConnected(true); + info1.setBasicReader(true); + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(false); + message.reset(new IfdStatus(info1)); mDispatcher1->onReceived(message); - message.reset(new IfdStatus(QStringLiteral("NFC Reader 2"), PaceCapabilities(), 500, true)); + + ReaderInfo info2(QStringLiteral("NFC Reader 2")); + info2.setMaxApduLength(500); + info2.setConnected(true); + info2.setBasicReader(true); + message.reset(new IfdStatus(info2)); mDispatcher2->onReceived(message); + QCOMPARE(spySend1.size(), 0); QCOMPARE(spySend2.size(), 0); QCOMPARE(spyAdded.size(), 2); @@ -250,8 +274,10 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(mPlugin->getReaders().at(0)->getName(), QStringLiteral("NFC Reader 1#TestContext")); QCOMPARE(mPlugin->getReaders().at(1)->getName(), QStringLiteral("NFC Reader 2#TestContext")); - message.reset(new IfdStatus(QStringLiteral("NFC Reader 1"), PaceCapabilities(), 500, false)); + info1.setConnected(false); + message.reset(new IfdStatus(info1)); mDispatcher1->onReceived(message); + QCOMPARE(spySend1.size(), 0); QCOMPARE(spySend2.size(), 0); QCOMPARE(spyAdded.size(), 0); @@ -260,8 +286,10 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(mPlugin->getReaders().size(), 1); QCOMPARE(mPlugin->getReaders().at(0)->getName(), QStringLiteral("NFC Reader 2#TestContext")); - message.reset(new IfdStatus(QStringLiteral("NFC Reader 1"), PaceCapabilities(), 500, true)); + info1.setConnected(true); + message.reset(new IfdStatus(info1)); mDispatcher1->onReceived(message); + QCOMPARE(spySend1.size(), 0); QCOMPARE(spySend2.size(), 0); QCOMPARE(spyAdded.size(), 1); @@ -304,7 +332,13 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(result->getType(), RemoteCardMessageType::IFDConnect); QSharedPointer message; - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 500, true, false)); + + ReaderInfo info1(QStringLiteral("NFC Reader")); + info1.setMaxApduLength(500); + info1.setConnected(true); + message.reset(new IfdStatus(info1)); + info1.setBasicReader(true); + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(false); mDispatcher1->onReceived(message); QCOMPARE(mPlugin->getReaders().at(0)->getCard(), nullptr); @@ -313,7 +347,8 @@ class test_RemoteReaderManagerPlugIn QSignalSpy spyChanged(mPlugin->getReaders().at(0), &Reader::fireCardRetryCounterChanged); QSignalSpy spyUpdated(mPlugin->getReaders().at(0), &Reader::fireReaderPropertiesUpdated); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 500, true, true)); + info1.setCardInfo(CardInfo(CardType::EID_CARD)); + message.reset(new IfdStatus(info1)); mDispatcher1->onReceived(message); QTRY_COMPARE(spySend.count(), 1); @@ -328,7 +363,8 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(spyChanged.size(), 0); QCOMPARE(spyUpdated.size(), 0); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 1, true, true)); + info1.setMaxApduLength(1); + message.reset(new IfdStatus(info1)); mDispatcher1->onReceived(message); QVERIFY(mPlugin->getReaders().at(0)->getCard() != nullptr); QCOMPARE(mPlugin->getReaders().at(0)->getReaderInfo().getMaxApduLength(), 1); @@ -339,7 +375,7 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(spyUpdated.size(), 1); QCOMPARE(spyUpdated.takeFirst().at(0).toString(), QStringLiteral("NFC Reader#TestContext")); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 1, true, true)); + message.reset(new IfdStatus(info1)); mDispatcher1->onReceived(message); QVERIFY(mPlugin->getReaders().at(0)->getCard() != nullptr); QCOMPARE(mPlugin->getReaders().at(0)->getReaderInfo().getMaxApduLength(), 1); @@ -349,7 +385,11 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(spyChanged.size(), 0); QCOMPARE(spyUpdated.size(), 0); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 1, true, false)); + ReaderInfo info2(QStringLiteral("NFC Reader")); + info2.setMaxApduLength(1); + info2.setConnected(true); + info2.setBasicReader(true); + message.reset(new IfdStatus(info2)); mDispatcher1->onReceived(message); QCOMPARE(mPlugin->getReaders().at(0)->getCard(), nullptr); QVERIFY(!mPlugin->getReaders().at(0)->getReaderInfo().hasCard()); @@ -359,7 +399,8 @@ class test_RemoteReaderManagerPlugIn QCOMPARE(spyChanged.size(), 0); QCOMPARE(spyUpdated.size(), 0); - message.reset(new IfdStatus(QStringLiteral("NFC Reader"), PaceCapabilities(), 1, true, true)); + info1.setCardInfo(CardInfo(CardType::EID_CARD)); + message.reset(new IfdStatus(info1)); mDispatcher1->onReceived(message); QTRY_COMPARE(spySend.count(), 1); result = qvariant_cast >(spySend.takeFirst().at(0)); diff --git a/test/qt/remote_device/test_RemoteTlsServer.cpp b/test/qt/remote_device/test_RemoteTlsServer.cpp index 083f0a9..89789fe 100644 --- a/test/qt/remote_device/test_RemoteTlsServer.cpp +++ b/test/qt/remote_device/test_RemoteTlsServer.cpp @@ -49,7 +49,7 @@ class test_RemoteTlsServer server.setPairing(serverPairing); server.listen(); - auto config = SecureStorage::getInstance().getTlsConfigRemote(clientConfig).getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote(clientConfig).getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); @@ -79,7 +79,7 @@ class test_RemoteTlsServer server.setPairing(); server.listen(); - auto config = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); @@ -136,7 +136,7 @@ class test_RemoteTlsServer server.listen(); QSignalSpy newConnection(&server, &RemoteTlsServer::newConnection); - auto config = SecureStorage::getInstance().getTlsConfigRemote().getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote().getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); @@ -184,7 +184,7 @@ class test_RemoteTlsServer RemoteTlsServer server; server.listen(); - auto config = SecureStorage::getInstance().getTlsConfigRemote().getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote().getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); config.setCaCertificates({settings.getCertificate()}); diff --git a/test/qt/remote_device/test_RemoteWebSocketServer.cpp b/test/qt/remote_device/test_RemoteWebSocketServer.cpp index 536f510..cb77b84 100644 --- a/test/qt/remote_device/test_RemoteWebSocketServer.cpp +++ b/test/qt/remote_device/test_RemoteWebSocketServer.cpp @@ -59,7 +59,7 @@ class PskHandler }; const auto& config = mWebSocket->sslConfiguration(); - const auto& pairingCiphers = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); + const auto& pairingCiphers = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); if (pairingCiphers.contains(config.sessionCipher())) { allowedErrors << QSslError::SelfSignedCertificate; @@ -164,7 +164,7 @@ class test_RemoteWebSocketServer QCOMPARE(mServer->getCurrentCertificate(), QSslCertificate()); KeyPair pair = KeyPair::generate(); QWebSocket client; - auto config = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); client.setSslConfiguration(config); @@ -191,7 +191,7 @@ class test_RemoteWebSocketServer QVERIFY(mServer->listen(QStringLiteral("TestServer"))); QWebSocket client; - auto config = SecureStorage::getInstance().getTlsConfigRemote().getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote().getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); config.setCaCertificates({settings.getCertificate()}); @@ -230,7 +230,7 @@ class test_RemoteWebSocketServer QVERIFY(mServer->listen(QStringLiteral("TestServer"))); KeyPair pair = KeyPair::generate(); - auto config = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); @@ -270,7 +270,7 @@ class test_RemoteWebSocketServer KeyPair pair = KeyPair::generate(); QWebSocket client; - auto config = SecureStorage::getInstance().getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); + auto config = Env::getSingleton()->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration(); config.setPrivateKey(pair.getKey()); config.setLocalCertificate(pair.getCertificate()); client.setSslConfiguration(config); diff --git a/test/qt/remote_device/test_ServerMessageHandler.cpp b/test/qt/remote_device/test_ServerMessageHandler.cpp index fda0934..baff3b7 100644 --- a/test/qt/remote_device/test_ServerMessageHandler.cpp +++ b/test/qt/remote_device/test_ServerMessageHandler.cpp @@ -17,10 +17,12 @@ #include "messages/IfdEstablishContextResponse.h" #include "messages/IfdEstablishPaceChannel.h" #include "messages/IfdEstablishPaceChannelResponse.h" +#include "messages/IfdModifyPinResponse.h" #include "messages/IfdStatus.h" #include "messages/IfdTransmit.h" #include "messages/IfdTransmitResponse.h" +#include "MockCardConnectionWorker.h" #include "MockDataChannel.h" #include "MockReaderManagerPlugIn.h" #include "TestFileHelper.h" @@ -30,9 +32,38 @@ Q_IMPORT_PLUGIN(MockReaderManagerPlugIn) - using namespace governikus; +Q_DECLARE_METATYPE(StatusCode) +Q_DECLARE_METATYPE(ECardApiResult::Minor) + +class MockRemoteDispatcherServer + : public RemoteDispatcherServer +{ + Q_OBJECT + QSharedPointer mMessage; + + public: + explicit MockRemoteDispatcherServer(const QSharedPointer& pDataChannel) + : RemoteDispatcherServer(pDataChannel) + { + } + + + Q_INVOKABLE void send(const QSharedPointer& pMessage) override + { + RemoteDispatcherServer::send(pMessage); + mMessage = pMessage; + } + + + QSharedPointer getMessage() + { + return mMessage; + } + + +}; class test_ServerMessageHandler : public QObject @@ -41,6 +72,7 @@ class test_ServerMessageHandler private: QSharedPointer mDataChannel; + QPointer mRemoteDispatcher; void removeReaderAndConsumeMessages(const QString& pReaderName) @@ -84,6 +116,11 @@ class test_ServerMessageHandler const auto readerManager = Env::getSingleton(); readerManager->init(); readerManager->getPlugInInfos(); // just to wait until initialization finished + + Env::setCreator(std::function& pDataChannel)>([this](const QSharedPointer ){ + mRemoteDispatcher = new MockRemoteDispatcherServer(mDataChannel); + return mRemoteDispatcher.data(); + })); } @@ -158,8 +195,15 @@ class test_ServerMessageHandler // We have a context handle: send unexpected messages and verify that an error message is sent back. sendSpy.clear(); + ReaderInfo info(QStringLiteral("NFC Reader")); + info.setMaxApduLength(500); + info.setConnected(true); + info.setBasicReader(true); + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(false); + const IfdStatus status(info); + const QByteArrayList serverMessages({ - IfdStatus("NFC Reader", PaceCapabilities(), 500, true).toByteArray(contextHandle), + status.toByteArray(contextHandle), IfdConnectResponse("NFC Reader").toByteArray(contextHandle), IfdDisconnectResponse("NFC Reader").toByteArray(contextHandle), IfdTransmitResponse("NFC Reader", "9000").toByteArray(contextHandle), @@ -600,6 +644,104 @@ class test_ServerMessageHandler } + void test_handleIfdModifyPin() + { + QSignalSpy spyLog(Env::getSingleton(), &LogHandler::fireLog); + const QByteArray message("{\n" + " \"ContextHandle\": \"TestContext\",\n" + " \"InputData\": \"abcd1234\",\n" + " \"SlotHandle\": \"SlotHandle\",\n" + " \"msg\": \"IFDModifyPIN\"\n" + "}\n"); + + const QJsonObject& obj = QJsonDocument::fromJson(message).object(); + ServerMessageHandlerImpl serverMsgHandler(mDataChannel); + QSignalSpy spyModifyPin(&serverMsgHandler, &ServerMessageHandler::fireModifyPin); + QString contextHandle; + ensureContext(contextHandle); + + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(false); + Q_EMIT mRemoteDispatcher->fireReceived(RemoteCardMessageType::IFDModifyPIN, obj, QString()); + QCOMPARE(mRemoteDispatcher->getMessage()->getType(), RemoteCardMessageType::IFDModifyPINResponse); + const auto& msg1 = mRemoteDispatcher->getMessage().staticCast(); + QCOMPARE(msg1->getResultMinor(), ECardApiResult::Minor::AL_Unknown_Error); + QCOMPARE(msg1->getSlotHandle(), "SlotHandle"); + QVERIFY(spyLog.at(3).at(0).toString().contains("ModifyPin is only available in pin pad mode.")); + + Env::getSingleton()->getRemoteServiceSettings().setPinPadMode(true); + Q_EMIT mRemoteDispatcher->fireReceived(RemoteCardMessageType::IFDModifyPIN, obj, QString()); + const auto& msg2 = mRemoteDispatcher->getMessage().staticCast(); + QCOMPARE(msg2->getResultMinor(), ECardApiResult::Minor::IFDL_InvalidSlotHandle); + QVERIFY(spyLog.at(5).at(0).toString().contains("Card is not connected")); + } + + + void test_SendModifyPinResponse_data() + { + QTest::addColumn("statusCode"); + QTest::addColumn("minor"); + + QTest::newRow("success") << StatusCode::SUCCESS << ECardApiResult::Minor::null; + QTest::newRow("empty") << StatusCode::EMPTY << ECardApiResult::Minor::IFDL_Terminal_NoCard; + QTest::newRow("inputTimeout") << StatusCode::INPUT_TIMEOUT << ECardApiResult::Minor::IFDL_Timeout_Error; + QTest::newRow("inputCancelled") << StatusCode::INPUT_CANCELLED << ECardApiResult::Minor::IFDL_CancellationByUser; + QTest::newRow("passwordsDiffer") << StatusCode::PASSWORDS_DIFFER << ECardApiResult::Minor::IFDL_IO_RepeatedDataMismatch; + QTest::newRow("passwordOutOfRange") << StatusCode::PASSWORD_OUTOF_RANGE << ECardApiResult::Minor::IFDL_IO_UnknownPINFormat; + QTest::newRow("default") << StatusCode::INVALID << ECardApiResult::Minor::AL_Unknown_Error; + } + + + void test_SendModifyPinResponse() + { + QFETCH(StatusCode, statusCode); + QFETCH(ECardApiResult::Minor, minor); + + ServerMessageHandlerImpl serverMsgHandler(mDataChannel); + const QString slotHandle("Slot Handle"); + const ResponseApdu apdu(statusCode); + + QString contextHandle; + ensureContext(contextHandle); + serverMsgHandler.sendModifyPinResponse(slotHandle, apdu); + QCOMPARE(mRemoteDispatcher->getMessage()->getType(), RemoteCardMessageType::IFDModifyPINResponse); + const auto& msg = mRemoteDispatcher->getMessage().staticCast(); + QCOMPARE(msg->getResultMinor(), minor); + QCOMPARE(msg->getSlotHandle(), slotHandle); + } + + + void test_EstablishPaceChannelResponse_data() + { + QTest::addColumn("returnCode"); + QTest::addColumn("minor"); + + QTest::newRow("unknown") << CardReturnCode::UNKNOWN << ECardApiResult::Minor::AL_Unknown_Error; + QTest::newRow("unknown") << CardReturnCode::CARD_NOT_FOUND << ECardApiResult::Minor::IFDL_Terminal_NoCard; + QTest::newRow("default") << CardReturnCode::OK << ECardApiResult::Minor::null; + } + + + void test_EstablishPaceChannelResponse() + { + QFETCH(CardReturnCode, returnCode); + QFETCH(ECardApiResult::Minor, minor); + + const QString slotHandle("Slot Handle"); + EstablishPaceChannelOutput output; + output.setPaceReturnCode(returnCode); + + ServerMessageHandlerImpl serverMsgHandler(mDataChannel); + QString contextHandle; + ensureContext(contextHandle); + + serverMsgHandler.sendEstablishPaceChannelResponse(slotHandle, output); + QCOMPARE(mRemoteDispatcher->getMessage()->getType(), RemoteCardMessageType::IFDEstablishPACEChannelResponse); + const auto& msg = mRemoteDispatcher->getMessage().staticCast(); + QCOMPARE(msg->getResultMinor(), minor); + QCOMPARE(msg->getSlotHandle(), slotHandle); + } + + }; diff --git a/test/qt/securestorage/test_SecureStorage.cpp b/test/qt/secure_storage/test_SecureStorage.cpp similarity index 73% rename from test/qt/securestorage/test_SecureStorage.cpp rename to test/qt/secure_storage/test_SecureStorage.cpp index 05091ea..ca9fc69 100644 --- a/test/qt/securestorage/test_SecureStorage.cpp +++ b/test/qt/secure_storage/test_SecureStorage.cpp @@ -22,7 +22,6 @@ class test_SecureStorage : public QObject { Q_OBJECT - SecureStorage mSecureStorage; private: QStringList loadCommentList(const QString& pCommentName) @@ -79,10 +78,11 @@ class test_SecureStorage private Q_SLOTS: void testGetCVRootCertificatesUnique() { - static const int EXPECTED_CERTIFICATE_COUNT = 12; + const auto secureStorage = Env::getSingleton(); + static const int EXPECTED_CERTIFICATE_COUNT = 13; - QVector > cvcs = CVCertificate::fromHex(mSecureStorage.getCVRootCertificates(true)) - + CVCertificate::fromHex(mSecureStorage.getCVRootCertificates(false)); + QVector > cvcs = CVCertificate::fromHex(secureStorage->getCVRootCertificates(true)) + + CVCertificate::fromHex(secureStorage->getCVRootCertificates(false)); const int count = cvcs.count(); QCOMPARE(count, EXPECTED_CERTIFICATE_COUNT); @@ -120,7 +120,7 @@ class test_SecureStorage QTest::addColumn("commentName"); QTest::newRow("production") << 4 << true << "_comment_2"; - QTest::newRow("test") << 8 << false << "_comment_4"; + QTest::newRow("test") << 9 << false << "_comment_4"; } @@ -130,7 +130,9 @@ class test_SecureStorage QFETCH(bool, isProductive); QFETCH(QString, commentName); - QVector > cvcs = CVCertificate::fromHex(mSecureStorage.getCVRootCertificates(isProductive)); + const auto secureStorage = Env::getSingleton(); + + QVector > cvcs = CVCertificate::fromHex(secureStorage->getCVRootCertificates(isProductive)); QCOMPARE(cvcs.count(), certificateCount); const QStringList& comments = loadCommentList(commentName); @@ -173,7 +175,8 @@ class test_SecureStorage void testGetUpdateCertificate() { - const auto& certificates = mSecureStorage.getUpdateCertificates(); + const auto secureStorage = Env::getSingleton(); + const auto& certificates = secureStorage->getUpdateCertificates(); QCOMPARE(certificates.count(), 2); QFETCH(int, index); @@ -192,53 +195,66 @@ class test_SecureStorage void testGetSelfAuthentication() { - QVERIFY(mSecureStorage.getSelfAuthenticationUrl(false).isValid()); - QVERIFY(mSecureStorage.getSelfAuthenticationUrl(true).isValid()); + const auto secureStorage = Env::getSingleton(); + QVERIFY(secureStorage->getSelfAuthenticationUrl(false).isValid()); + QVERIFY(secureStorage->getSelfAuthenticationUrl(true).isValid()); } void testGetUpdateServerBaseUrl() { - QVERIFY(mSecureStorage.getUpdateServerBaseUrl().isValid()); + const auto secureStorage = Env::getSingleton(); + QVERIFY(secureStorage->getUpdateServerBaseUrl().isValid()); } void testWhitelistServerBaseUrl() { - QVERIFY(mSecureStorage.getWhitelistServerBaseUrl().isValid()); + const auto secureStorage = Env::getSingleton(); + QVERIFY(secureStorage->getWhitelistServerBaseUrl().isValid()); } void testAppcast() { - QCOMPARE(mSecureStorage.getAppcastUpdateUrl(), QUrl("https://appl.governikus-asp.de/ausweisapp2/Appcast.json")); - QCOMPARE(mSecureStorage.getAppcastBetaUpdateUrl(), QUrl("https://appl.governikus-asp.de/ausweisapp2/beta/Appcast.json")); + const auto secureStorage = Env::getSingleton(); + QCOMPARE(secureStorage->getAppcastUpdateUrl(), QUrl("https://appl.governikus-asp.de/ausweisapp2/Appcast.json")); + QCOMPARE(secureStorage->getAppcastBetaUpdateUrl(), QUrl("https://appl.governikus-asp.de/ausweisapp2/beta/Appcast.json")); } void testMinStaticKeySizes() { - QCOMPARE(mSecureStorage.getMinimumStaticKeySize(QSsl::KeyAlgorithm::Rsa), 2000); - QCOMPARE(mSecureStorage.getMinimumStaticKeySize(QSsl::KeyAlgorithm::Dsa), 2000); - QCOMPARE(mSecureStorage.getMinimumStaticKeySize(QSsl::KeyAlgorithm::Ec), 224); + const auto secureStorage = Env::getSingleton(); + QCOMPARE(secureStorage->getMinimumStaticKeySize(QSsl::KeyAlgorithm::Rsa), 2000); + QCOMPARE(secureStorage->getMinimumStaticKeySize(QSsl::KeyAlgorithm::Dsa), 2000); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)) + QCOMPARE(secureStorage->getMinimumStaticKeySize(QSsl::KeyAlgorithm::Dh), 2000); +#endif + QCOMPARE(secureStorage->getMinimumStaticKeySize(QSsl::KeyAlgorithm::Ec), 224); } void testMinEphemeralKeySizes() { - QCOMPARE(mSecureStorage.getMinimumEphemeralKeySize(QSsl::KeyAlgorithm::Rsa), 2000); - QCOMPARE(mSecureStorage.getMinimumEphemeralKeySize(QSsl::KeyAlgorithm::Dsa), 2000); - QCOMPARE(mSecureStorage.getMinimumEphemeralKeySize(QSsl::KeyAlgorithm::Ec), 224); + const auto secureStorage = Env::getSingleton(); + QCOMPARE(secureStorage->getMinimumEphemeralKeySize(QSsl::KeyAlgorithm::Rsa), 2000); + QCOMPARE(secureStorage->getMinimumEphemeralKeySize(QSsl::KeyAlgorithm::Dsa), 2000); +#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0)) + QCOMPARE(secureStorage->getMinimumEphemeralKeySize(QSsl::KeyAlgorithm::Dh), 2000); +#endif + QCOMPARE(secureStorage->getMinimumEphemeralKeySize(QSsl::KeyAlgorithm::Ec), 224); } void testSignatureAlgorithms() { + const auto secureStorage = Env::getSingleton(); #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) QSKIP("SignatureAlgorithms not supported"); #endif - const auto& tlsSettings = mSecureStorage.getTlsConfig(); + const auto& tlsSettings = secureStorage->getTlsConfig(); QCOMPARE(tlsSettings.getSignatureAlgorithms().size(), 12); QCOMPARE(tlsSettings.getSignatureAlgorithms().constFirst(), QByteArray("RSA+SHA512")); QCOMPARE(tlsSettings.getSignatureAlgorithms().constLast(), QByteArray("ECDSA+SHA224")); @@ -247,11 +263,12 @@ class test_SecureStorage void testSignatureAlgorithmsPsk() { + const auto secureStorage = Env::getSingleton(); #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) QSKIP("SignatureAlgorithms not supported"); #endif - const auto& tlsSettings = mSecureStorage.getTlsConfig(SecureStorage::TlsSuite::PSK); + const auto& tlsSettings = secureStorage->getTlsConfig(SecureStorage::TlsSuite::PSK); QCOMPARE(tlsSettings.getSignatureAlgorithms().size(), 4); QCOMPARE(tlsSettings.getSignatureAlgorithms().constFirst(), QByteArray("RSA+SHA512")); QCOMPARE(tlsSettings.getSignatureAlgorithms().constLast(), QByteArray("RSA+SHA224")); @@ -260,43 +277,45 @@ class test_SecureStorage void testSignatureAlgorithmsRemoteReader() { + const auto secureStorage = Env::getSingleton(); #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) QSKIP("SignatureAlgorithms not supported"); #endif - const auto& config = mSecureStorage.getTlsConfigRemote(); + const auto& config = secureStorage->getTlsConfigRemote(); QCOMPARE(config.getSignatureAlgorithms().size(), 3); - const auto& configPairing = mSecureStorage.getTlsConfigRemote(); + const auto& configPairing = secureStorage->getTlsConfigRemote(); QCOMPARE(configPairing.getSignatureAlgorithms().size(), 3); } void orderOfCiphers() { - const auto& ciphersForwardSecrecy = mSecureStorage.getTlsConfig().getCiphers(); + const auto secureStorage = Env::getSingleton(); + const auto& ciphersForwardSecrecy = secureStorage->getTlsConfig().getCiphers(); QCOMPARE(ciphersForwardSecrecy.first(), QSslCipher("ECDHE-ECDSA-AES256-GCM-SHA384")); QCOMPARE(ciphersForwardSecrecy.last(), QSslCipher("DHE-RSA-AES128-SHA256")); - const auto& ciphersPsk = mSecureStorage.getTlsConfig(SecureStorage::TlsSuite::PSK).getCiphers(); + const auto& ciphersPsk = secureStorage->getTlsConfig(SecureStorage::TlsSuite::PSK).getCiphers(); QVERIFY(ciphersPsk.count() > 0); QCOMPARE(ciphersPsk.first(), QSslCipher("RSA-PSK-AES256-GCM-SHA384")); QCOMPARE(ciphersPsk.last(), QSslCipher("RSA-PSK-AES256-CBC-SHA")); - const auto& ciphersEc = mSecureStorage.getTlsConfig().getEllipticCurves(); + const auto& ciphersEc = secureStorage->getTlsConfig().getEllipticCurves(); QCOMPARE(ciphersEc.count(), 6); QCOMPARE(ciphersEc.first(), QSslEllipticCurve::fromLongName("brainpoolP512r1")); QCOMPARE(ciphersEc.last(), QSslEllipticCurve::fromLongName("secp224r1")); - const auto& ciphersEcRemoteReader = mSecureStorage.getTlsConfigRemote().getEllipticCurves(); + const auto& ciphersEcRemoteReader = secureStorage->getTlsConfigRemote().getEllipticCurves(); QCOMPARE(ciphersEcRemoteReader.count(), 6); QCOMPARE(ciphersEcRemoteReader.first(), QSslEllipticCurve::fromLongName("brainpoolP512r1")); QCOMPARE(ciphersEcRemoteReader.last(), QSslEllipticCurve::fromLongName("secp224r1")); - const auto& ciphersEcRemoteReaderPairing = mSecureStorage.getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getEllipticCurves(); + const auto& ciphersEcRemoteReaderPairing = secureStorage->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getEllipticCurves(); QCOMPARE(ciphersEcRemoteReaderPairing.count(), 0); - const auto& ciphersRemoteReader = mSecureStorage.getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); + const auto& ciphersRemoteReader = secureStorage->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getCiphers(); QVERIFY(ciphersRemoteReader.count() > 0); QCOMPARE(ciphersRemoteReader.first(), QSslCipher("RSA-PSK-AES256-GCM-SHA384")); QCOMPARE(ciphersRemoteReader.last(), QSslCipher("RSA-PSK-AES256-CBC-SHA")); @@ -318,7 +337,9 @@ class test_SecureStorage QFETCH(SecureStorage::TlsSuite, suite); QFETCH(QSsl::SslProtocol, protocol); - QCOMPARE(mSecureStorage.getTlsConfig(suite).getProtocolVersion(), protocol); + const auto secureStorage = Env::getSingleton(); + + QCOMPARE(secureStorage->getTlsConfig(suite).getProtocolVersion(), protocol); } @@ -327,10 +348,12 @@ class test_SecureStorage QTest::addColumn("configuration"); QTest::addColumn("cipherSize"); - QTest::newRow("ciphers non PSK") << mSecureStorage.getTlsConfig().getConfiguration() << 12; - QTest::newRow("ciphers for PSK") << mSecureStorage.getTlsConfig(SecureStorage::TlsSuite::PSK).getConfiguration() << 5; - QTest::newRow("remote reader") << mSecureStorage.getTlsConfigRemote().getConfiguration() << 7; - QTest::newRow("remote reader pairing") << mSecureStorage.getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration() << 5; + const auto secureStorage = Env::getSingleton(); + + QTest::newRow("ciphers non PSK") << secureStorage->getTlsConfig().getConfiguration() << 12; + QTest::newRow("ciphers for PSK") << secureStorage->getTlsConfig(SecureStorage::TlsSuite::PSK).getConfiguration() << 5; + QTest::newRow("remote reader") << secureStorage->getTlsConfigRemote().getConfiguration() << 7; + QTest::newRow("remote reader pairing") << secureStorage->getTlsConfigRemote(SecureStorage::TlsSuite::PSK).getConfiguration() << 5; } diff --git a/test/qt/securestorage/test_TlsConfiguration.cpp b/test/qt/secure_storage/test_TlsConfiguration.cpp similarity index 100% rename from test/qt/securestorage/test_TlsConfiguration.cpp rename to test/qt/secure_storage/test_TlsConfiguration.cpp diff --git a/test/qt/services/test_AppUpdatr.cpp b/test/qt/services/test_AppUpdatr.cpp index bc182c8..4e8ed92 100644 --- a/test/qt/services/test_AppUpdatr.cpp +++ b/test/qt/services/test_AppUpdatr.cpp @@ -84,7 +84,7 @@ class test_AppUpdater } - void setJsonItemField(QJsonDocument& pDocument, QString pField, QString pValue) + void setJsonItemField(QJsonDocument& pDocument, const QString& pField, const QString& pValue) { auto itemArray = pDocument.object()["items"].toArray(); int i = 0; @@ -101,7 +101,7 @@ class test_AppUpdater } - QJsonValue getJsonItemField(QJsonDocument& pDocument, QString pField) + QJsonValue getJsonItemField(QJsonDocument& pDocument, const QString& pField) { #ifdef Q_OS_WIN QString platform = "win"; @@ -133,8 +133,8 @@ class test_AppUpdater { Env::set(Downloader::staticMetaObject, &mDownloader); - const SecureStorage& secureStorage = SecureStorage::getInstance(); - mAppCastLocation = VersionNumber::getApplicationVersion().isDeveloperVersion() ? secureStorage.getAppcastBetaUpdateUrl() : secureStorage.getAppcastUpdateUrl(); + const auto* secureStorage = Env::getSingleton(); + mAppCastLocation = VersionNumber::getApplicationVersion().isDeveloperVersion() ? secureStorage->getAppcastBetaUpdateUrl() : secureStorage->getAppcastUpdateUrl(); mJsonDocument = QJsonDocument::fromJson(test_jsonData); mReleaseNoteLocation = getJsonItemField(mJsonDocument, "notes").toString(); diff --git a/test/qt/settings/test_GeneralSettings.cpp b/test/qt/settings/test_GeneralSettings.cpp index d23a7c1..052dcd8 100644 --- a/test/qt/settings/test_GeneralSettings.cpp +++ b/test/qt/settings/test_GeneralSettings.cpp @@ -11,6 +11,8 @@ #include "GeneralSettings.h" +#include "AppSettings.h" +#include "Env.h" using namespace governikus; @@ -18,57 +20,58 @@ class test_GeneralSettings : public QObject { Q_OBJECT - QScopedPointer mSettings; private Q_SLOTS: void init() { AbstractSettings::mTestDir.clear(); - mSettings.reset(new GeneralSettings()); } void testAutoCloseWindowAfterAuthentication() { - bool initial = mSettings->isAutoCloseWindowAfterAuthentication(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + bool initial = settings.isAutoCloseWindowAfterAuthentication(); bool newValue = !initial; - mSettings->setAutoCloseWindowAfterAuthentication(newValue); - QCOMPARE(mSettings->isAutoCloseWindowAfterAuthentication(), newValue); - mSettings->save(); + settings.setAutoCloseWindowAfterAuthentication(newValue); + QCOMPARE(settings.isAutoCloseWindowAfterAuthentication(), newValue); + settings.save(); - mSettings->setAutoCloseWindowAfterAuthentication(initial); - QCOMPARE(mSettings->isAutoCloseWindowAfterAuthentication(), initial); - mSettings->save(); + settings.setAutoCloseWindowAfterAuthentication(initial); + QCOMPARE(settings.isAutoCloseWindowAfterAuthentication(), initial); + settings.save(); } void testAutoCheck() { - bool initial = mSettings->isAutoUpdateCheck(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + bool initial = settings.isAutoUpdateCheck(); - mSettings->setAutoUpdateCheck(!initial); - QCOMPARE(mSettings->isAutoUpdateCheck(), !initial); - mSettings->save(); + settings.setAutoUpdateCheck(!initial); + QCOMPARE(settings.isAutoUpdateCheck(), !initial); + settings.save(); - mSettings->setAutoUpdateCheck(initial); - QCOMPARE(mSettings->isAutoUpdateCheck(), initial); - mSettings->save(); + settings.setAutoUpdateCheck(initial); + QCOMPARE(settings.isAutoUpdateCheck(), initial); + settings.save(); } void testAutoStart() { #if defined(Q_OS_WIN) || defined(Q_OS_MACOS) - bool initial = mSettings->isAutoStart(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + bool initial = settings.isAutoStart(); - mSettings->setAutoStart(!initial); - QCOMPARE(mSettings->isAutoStart(), !initial); - mSettings->save(); + settings.setAutoStart(!initial); + QCOMPARE(settings.isAutoStart(), !initial); + settings.save(); - mSettings->setAutoStart(initial); - QCOMPARE(mSettings->isAutoStart(), initial); - mSettings->save(); + settings.setAutoStart(initial); + QCOMPARE(settings.isAutoStart(), initial); + settings.save(); #else QSKIP("Autostart currently only on windows and mac os"); @@ -78,142 +81,174 @@ class test_GeneralSettings void testUseScreenKeyboard() { - bool initial = mSettings->isUseScreenKeyboard(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + bool initial = settings.isUseScreenKeyboard(); - mSettings->setUseScreenKeyboard(!initial); - QCOMPARE(mSettings->isUseScreenKeyboard(), !initial); - mSettings->save(); + settings.setUseScreenKeyboard(!initial); + QCOMPARE(settings.isUseScreenKeyboard(), !initial); + settings.save(); - mSettings->setUseScreenKeyboard(initial); - QCOMPARE(mSettings->isUseScreenKeyboard(), initial); - mSettings->save(); + settings.setUseScreenKeyboard(initial); + QCOMPARE(settings.isUseScreenKeyboard(), initial); + settings.save(); + } + + + void testShuffleScreenKeyboard() + { + auto& settings = Env::getSingleton()->getGeneralSettings(); + bool initial = settings.isShuffleScreenKeyboard(); + + settings.setShuffleScreenKeyboard(!initial); + QCOMPARE(settings.isShuffleScreenKeyboard(), !initial); + settings.save(); + + settings.setShuffleScreenKeyboard(initial); + QCOMPARE(settings.isShuffleScreenKeyboard(), initial); + settings.save(); } void testDefaultValues() { - QCOMPARE(mSettings->isAutoCloseWindowAfterAuthentication(), true); - QCOMPARE(mSettings->isAutoStart(), GENERAL_SETTINGS_DEFAULT_AUTOSTART); - QCOMPARE(mSettings->isAutoUpdateCheck(), true); - QCOMPARE(mSettings->isUseScreenKeyboard(), false); - QCOMPARE(mSettings->isShowSetupAssistant(), true); - QCOMPARE(mSettings->isRemindUserToClose(), true); - QCOMPARE(mSettings->isTransportPinReminder(), true); - QCOMPARE(mSettings->getPersistentSettingsVersion(), QString()); - QCOMPARE(mSettings->isDeveloperMode(), false); - QCOMPARE(mSettings->useSelfAuthTestUri(), false); - QCOMPARE(mSettings->getLastReaderPluginType(), QString()); + auto& settings = Env::getSingleton()->getGeneralSettings(); + + QCOMPARE(settings.isAutoCloseWindowAfterAuthentication(), true); + QCOMPARE(settings.isAutoStart(), GENERAL_SETTINGS_DEFAULT_AUTOSTART); + QCOMPARE(settings.isAutoUpdateCheck(), true); + QCOMPARE(settings.isUseScreenKeyboard(), false); + QCOMPARE(settings.isShowSetupAssistant(), true); + QCOMPARE(settings.isRemindUserToClose(), true); + QCOMPARE(settings.isTransportPinReminder(), true); + QCOMPARE(settings.getPersistentSettingsVersion(), QString()); + QCOMPARE(settings.isDeveloperMode(), false); + QCOMPARE(settings.useSelfAuthTestUri(), false); + QCOMPARE(settings.getLastReaderPluginType(), QString()); } void testRemindStartupWizard() { - bool initial = mSettings->isShowSetupAssistant(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + + bool initial = settings.isShowSetupAssistant(); bool newValue = !initial; - mSettings->setShowSetupAssistant(newValue); - QCOMPARE(mSettings->isShowSetupAssistant(), newValue); - mSettings->save(); + settings.setShowSetupAssistant(newValue); + QCOMPARE(settings.isShowSetupAssistant(), newValue); + settings.save(); - mSettings->setShowSetupAssistant(initial); - QCOMPARE(mSettings->isShowSetupAssistant(), initial); - mSettings->save(); + settings.setShowSetupAssistant(initial); + QCOMPARE(settings.isShowSetupAssistant(), initial); + settings.save(); } void testRemindUserToClose() { - bool initial = mSettings->isRemindUserToClose(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + + bool initial = settings.isRemindUserToClose(); bool newValue = !initial; - mSettings->setRemindUserToClose(newValue); - QCOMPARE(mSettings->isRemindUserToClose(), newValue); - mSettings->save(); + settings.setRemindUserToClose(newValue); + QCOMPARE(settings.isRemindUserToClose(), newValue); + settings.save(); - mSettings->setRemindUserToClose(initial); - QCOMPARE(mSettings->isRemindUserToClose(), initial); - mSettings->save(); + settings.setRemindUserToClose(initial); + QCOMPARE(settings.isRemindUserToClose(), initial); + settings.save(); } void testPersistentSettingsVersion() { + auto& settings = Env::getSingleton()->getGeneralSettings(); + QCoreApplication::setApplicationVersion(QStringLiteral("X.Y.Z")); // the persistent settings version contains the application version number // last saving the settings --> in this test the settings have // never been saved, so the empty string is expected - QCOMPARE(mSettings->getPersistentSettingsVersion(), QString()); + QCOMPARE(settings.getPersistentSettingsVersion(), QString()); - mSettings->save(); - QCOMPARE(mSettings->getPersistentSettingsVersion(), QCoreApplication::applicationVersion()); + settings.save(); + QCOMPARE(settings.getPersistentSettingsVersion(), QCoreApplication::applicationVersion()); } void testTransportPinReminder() { - bool initialValue = mSettings->isTransportPinReminder(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + + bool initialValue = settings.isTransportPinReminder(); bool newValue = !initialValue; - mSettings->save(); - mSettings->setTransportPinReminder(newValue); - QCOMPARE(mSettings->isTransportPinReminder(), newValue); - mSettings->save(); + settings.save(); + settings.setTransportPinReminder(newValue); + QCOMPARE(settings.isTransportPinReminder(), newValue); + settings.save(); - mSettings->setTransportPinReminder(initialValue); - QCOMPARE(mSettings->isTransportPinReminder(), initialValue); - mSettings->save(); + settings.setTransportPinReminder(initialValue); + QCOMPARE(settings.isTransportPinReminder(), initialValue); + settings.save(); } void testLanguage() { - const QLocale::Language initialValue = mSettings->getLanguage(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + + const QLocale::Language initialValue = settings.getLanguage(); const QLocale::Language newValue = QLocale::English; - mSettings->save(); - mSettings->setLanguage(newValue); - QCOMPARE(mSettings->getLanguage(), newValue); - mSettings->save(); + settings.save(); + settings.setLanguage(newValue); + QCOMPARE(settings.getLanguage(), newValue); + settings.save(); - mSettings->setLanguage(initialValue); - QCOMPARE(mSettings->getLanguage(), initialValue); + settings.setLanguage(initialValue); + QCOMPARE(settings.getLanguage(), initialValue); } void testLastReaderPluginType() { - QString initial = mSettings->getLastReaderPluginType(); + auto& settings = Env::getSingleton()->getGeneralSettings(); + + QString initial = settings.getLastReaderPluginType(); QCOMPARE(initial, QString()); - QSignalSpy spy(mSettings.data(), &GeneralSettings::fireSettingsChanged); + QSignalSpy spy(&settings, &GeneralSettings::fireSettingsChanged); QString newValue; - mSettings->setLastReaderPluginType(newValue); + settings.setLastReaderPluginType(newValue); - QCOMPARE(mSettings->getLastReaderPluginType(), newValue); - mSettings->save(); + QCOMPARE(settings.getLastReaderPluginType(), newValue); + settings.save(); QCOMPARE(spy.count(), 0); newValue = QStringLiteral("REMOTE"); - mSettings->setLastReaderPluginType(newValue); - QCOMPARE(mSettings->getLastReaderPluginType(), newValue); + settings.setLastReaderPluginType(newValue); + QCOMPARE(settings.getLastReaderPluginType(), newValue); QCOMPARE(spy.count(), 1); - mSettings->save(); + settings.save(); } void testStoreFeedbackRequested() { + auto& settings = Env::getSingleton()->getGeneralSettings(); + #if defined(Q_OS_IOS) - QCOMPARE(mSettings->isRequestStoreFeedback(), false); + QCOMPARE(settings.isRequestStoreFeedback(), false); #else - QCOMPARE(mSettings->isRequestStoreFeedback(), false); + QCOMPARE(settings.isRequestStoreFeedback(), false); #endif - mSettings->setRequestStoreFeedback(true); - mSettings->save(); - QCOMPARE(mSettings->isRequestStoreFeedback(), true); - mSettings->setRequestStoreFeedback(false); - mSettings->save(); - QCOMPARE(mSettings->isRequestStoreFeedback(), false); + settings.setRequestStoreFeedback(true); + settings.save(); + QCOMPARE(settings.isRequestStoreFeedback(), true); + settings.setRequestStoreFeedback(false); + settings.save(); + QCOMPARE(settings.isRequestStoreFeedback(), false); } diff --git a/test/qt/settings/test_HistorySettings.cpp b/test/qt/settings/test_HistorySettings.cpp index d7718dd..97d5296 100644 --- a/test/qt/settings/test_HistorySettings.cpp +++ b/test/qt/settings/test_HistorySettings.cpp @@ -9,6 +9,9 @@ #include "HistorySettings.h" +#include "AppSettings.h" +#include "Env.h" + #include "TestFileHelper.h" #include @@ -20,64 +23,66 @@ class test_HistorySettings : public QObject { Q_OBJECT - QScopedPointer settings; private Q_SLOTS: void init() { QCoreApplication::setOrganizationName(QStringLiteral("dummy")); - AbstractSettings::mTestDir.clear(); - settings.reset(new HistorySettings()); + Env::getSingleton()->getHistorySettings().deleteSettings(); } void testEnabled() { - bool initial = settings->isEnabled(); + auto& settings = Env::getSingleton()->getHistorySettings(); + bool initial = settings.isEnabled(); - settings->setEnabled(!initial); - QCOMPARE(settings->isEnabled(), !initial); - settings->save(); + settings.setEnabled(!initial); + QCOMPARE(settings.isEnabled(), !initial); + settings.save(); - settings->setEnabled(initial); - QCOMPARE(settings->isEnabled(), initial); + settings.setEnabled(initial); + QCOMPARE(settings.isEnabled(), initial); } void testHistoryEntries() { - QVector initial = settings->getHistoryInfos(); + auto& settings = Env::getSingleton()->getHistorySettings(); + QVector initial = settings.getHistoryInfos(); HistoryInfo info("pSubjectName", "pSubjectUrl", "pUsage", QDateTime(), "pTermOfUsage", {"pRequestedData"}); QVector newValue(initial); newValue.prepend(info); // new values will be prepended, so that it appears on top - settings->addHistoryInfo(info); - QCOMPARE(settings->getHistoryInfos(), newValue); + settings.addHistoryInfo(info); + QCOMPARE(settings.getHistoryInfos(), newValue); } void testDeleteHistory() { + auto& settings = Env::getSingleton()->getHistorySettings(); HistoryInfo info("pSubjectName", "pSubjectUrl", "pUsage", QDateTime(), "pTermOfUsage", {"pRequestedData"}); - settings->addHistoryInfo(info); + settings.addHistoryInfo(info); - QCOMPARE(settings->getHistoryInfos().size(), 1); + QCOMPARE(settings.getHistoryInfos().size(), 1); - settings->deleteSettings(); + settings.deleteSettings(); - QCOMPARE(settings->getHistoryInfos().size(), 0); + QCOMPARE(settings.getHistoryInfos().size(), 0); } void testDeleteHistoryFromFile() { + auto& settings = Env::getSingleton()->getHistorySettings(); const auto file = AbstractSettings::mTestDir->path() + QStringLiteral("/dummy/Test_settings_HistorySettings.ini"); HistoryInfo info("pSubjectXYZ", "pSubjectUrlXYZ", "pUsageXYZ", QDateTime(), "pTermOfUsageXYZ", {"pRequestedDataXYZ"}); - settings->addHistoryInfo(info); - settings->addHistoryInfo(info); - settings->addHistoryInfo(info); - settings->save(); + settings.addHistoryInfo(info); + settings.addHistoryInfo(info); + settings.addHistoryInfo(info); + settings.save(); QVERIFY(QFile::exists(file)); auto content = TestFileHelper::readFile(file); @@ -87,8 +92,8 @@ class test_HistorySettings QVERIFY(content.contains("pTermOfUsageXYZ")); QVERIFY(content.contains("pRequestedDataXYZ")); - settings->deleteSettings(); - settings->save(); + settings.deleteSettings(); + settings.save(); content = TestFileHelper::readFile(file); QVERIFY(!content.contains("pSubjectXYZ")); diff --git a/test/qt/aidl/test_PskManager.cpp b/test/qt/ui/aidl/test_PskManager.cpp similarity index 100% rename from test/qt/aidl/test_PskManager.cpp rename to test/qt/ui/aidl/test_PskManager.cpp diff --git a/test/qt/jsonapi/test_Message.cpp b/test/qt/ui/json/test_Message.cpp similarity index 97% rename from test/qt/jsonapi/test_Message.cpp rename to test/qt/ui/json/test_Message.cpp index 1a52569..53f8cfb 100644 --- a/test/qt/jsonapi/test_Message.cpp +++ b/test/qt/ui/json/test_Message.cpp @@ -83,9 +83,11 @@ class test_Message auto versionInfo = VersionInfo::getInstance().toJson(QJsonDocument::Compact); const auto& result = dispatcher.processCommand(msg); - QVERIFY(result.contains(versionInfo)); - QVERIFY(result.contains("\"VersionInfo\":{")); - QVERIFY(result.contains("\"msg\":\"INFO\"")); + QCOMPARE(result, MsgType::INFO); + const QByteArray data = result; + QVERIFY(data.contains(versionInfo)); + QVERIFY(data.contains("\"VersionInfo\":{")); + QVERIFY(data.contains("\"msg\":\"INFO\"")); } diff --git a/test/qt/jsonapi/test_MsgContext.cpp b/test/qt/ui/json/test_MsgContext.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgContext.cpp rename to test/qt/ui/json/test_MsgContext.cpp diff --git a/test/qt/jsonapi/test_MsgHandler.cpp b/test/qt/ui/json/test_MsgHandler.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandler.cpp rename to test/qt/ui/json/test_MsgHandler.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerAccessRights.cpp b/test/qt/ui/json/test_MsgHandlerAccessRights.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerAccessRights.cpp rename to test/qt/ui/json/test_MsgHandlerAccessRights.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerApiLevel.cpp b/test/qt/ui/json/test_MsgHandlerApiLevel.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerApiLevel.cpp rename to test/qt/ui/json/test_MsgHandlerApiLevel.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerAuth.cpp b/test/qt/ui/json/test_MsgHandlerAuth.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerAuth.cpp rename to test/qt/ui/json/test_MsgHandlerAuth.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerCertificate.cpp b/test/qt/ui/json/test_MsgHandlerCertificate.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerCertificate.cpp rename to test/qt/ui/json/test_MsgHandlerCertificate.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerEnterCan.cpp b/test/qt/ui/json/test_MsgHandlerEnterCan.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerEnterCan.cpp rename to test/qt/ui/json/test_MsgHandlerEnterCan.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerEnterPin.cpp b/test/qt/ui/json/test_MsgHandlerEnterPin.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerEnterPin.cpp rename to test/qt/ui/json/test_MsgHandlerEnterPin.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerEnterPuk.cpp b/test/qt/ui/json/test_MsgHandlerEnterPuk.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerEnterPuk.cpp rename to test/qt/ui/json/test_MsgHandlerEnterPuk.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerInsertCard.cpp b/test/qt/ui/json/test_MsgHandlerInsertCard.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerInsertCard.cpp rename to test/qt/ui/json/test_MsgHandlerInsertCard.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerInternalError.cpp b/test/qt/ui/json/test_MsgHandlerInternalError.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerInternalError.cpp rename to test/qt/ui/json/test_MsgHandlerInternalError.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerReader.cpp b/test/qt/ui/json/test_MsgHandlerReader.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerReader.cpp rename to test/qt/ui/json/test_MsgHandlerReader.cpp diff --git a/test/qt/jsonapi/test_MsgHandlerReaderList.cpp b/test/qt/ui/json/test_MsgHandlerReaderList.cpp similarity index 100% rename from test/qt/jsonapi/test_MsgHandlerReaderList.cpp rename to test/qt/ui/json/test_MsgHandlerReaderList.cpp diff --git a/test/qt/ui/json/test_UIPlugInJson.cpp b/test/qt/ui/json/test_UIPlugInJson.cpp new file mode 100644 index 0000000..f3f90d8 --- /dev/null +++ b/test/qt/ui/json/test_UIPlugInJson.cpp @@ -0,0 +1,81 @@ +/*! + * \brief Unit tests for \ref UIPlugInJsonApi + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "UIPlugInJson.h" + +#include "LogHandler.h" + +#include +#include + +using namespace governikus; + +class test_UIPlugInJson + : public QObject +{ + Q_OBJECT + + private: + QJsonObject getJsonObject(const QByteArray& pData) + { + QJsonParseError jsonError; + const auto& json = QJsonDocument::fromJson(pData, &jsonError); + if (jsonError.error == QJsonParseError::NoError) + { + return json.object(); + } + + return QJsonObject(); + } + + + private Q_SLOTS: + void cleanup() + { + Env::getSingleton()->reset(); + } + + + void log() + { + Env::getSingleton()->init(); + const QLatin1String testDummy("Yeah, piece of cake!"); + qDebug() << testDummy; + + const QByteArray msg(R"({"cmd": "GET_LOG"})"); + QByteArray result; + UIPlugInJson api; + connect(&api, &UIPlugInJson::fireMessage, this, [&](const QByteArray& pMsg){result = pMsg;}); + api.setEnabled(); + + api.doMessageProcessing(msg); + QVERIFY(!result.isEmpty()); + QVERIFY(result.contains(R"("msg":"LOG")")); + auto json = getJsonObject(result); + QVERIFY(!json.isEmpty()); + auto data = json["data"].toString(); + QVERIFY(!data.isEmpty()); + + const QLatin1String loggedType("Process type: GET_LOG"); + QCOMPARE(data.count(loggedType), 1); + QCOMPARE(data.count(testDummy), 1); + + result.clear(); + api.doMessageProcessing(msg); + QVERIFY(!result.isEmpty()); + json = getJsonObject(result); + QVERIFY(!json.isEmpty()); + data = json["data"].toString(); + QVERIFY(!data.isEmpty()); + QCOMPARE(data.count(loggedType), 2); + QCOMPARE(data.count(testDummy), 1); + } + + +}; + +QTEST_GUILESS_MAIN(test_UIPlugInJson) +#include "test_UIPlugInJson.moc" diff --git a/test/qt/ui/qml/test_AuthModel.cpp b/test/qt/ui/qml/test_AuthModel.cpp new file mode 100644 index 0000000..b69015b --- /dev/null +++ b/test/qt/ui/qml/test_AuthModel.cpp @@ -0,0 +1,56 @@ +/*! + * \brief Unit tests for \ref AuthModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "AuthModel.h" + +#include "context/AuthContext.h" + +#include "paos/retrieve/DidAuthenticateEac1Parser.h" + +#include "TestFileHelper.h" + +#include +#include + + +using namespace governikus; + + +class test_AuthModel + : public QObject +{ + Q_OBJECT + + private Q_SLOTS: + void test_ResetContext() + { + const auto model = Env::getSingleton(); + const QSharedPointer context(new AuthContext(nullptr)); + + QSignalSpy spyCurrentStateChanged(model, &WorkflowModel::fireCurrentStateChanged); + QSignalSpy spyTransactionInfoChanged(model, &AuthModel::fireTransactionInfoChanged); + + model->resetContext(context); + QCOMPARE(spyCurrentStateChanged.count(), 1); + QCOMPARE(spyTransactionInfoChanged.count(), 0); + + QByteArray content = TestFileHelper::readFile(":/paos/DIDAuthenticateEAC1.xml"); + QSharedPointer eac1(static_cast(DidAuthenticateEac1Parser().parse(content))); + context->setDidAuthenticateEac1(eac1); + QCOMPARE(model->getTransactionInfo(), QString("this is a test for TransactionInfo")); + model->resetContext(context); + QVERIFY(model->getTransactionInfo().isEmpty()); + Q_EMIT context->fireDidAuthenticateEac1Changed(); + QCOMPARE(model->getTransactionInfo(), QString("this is a test for TransactionInfo")); + QCOMPARE(spyCurrentStateChanged.count(), 2); + QCOMPARE(spyTransactionInfoChanged.count(), 3); + } + + +}; + +QTEST_GUILESS_MAIN(test_AuthModel) +#include "test_AuthModel.moc" diff --git a/test/qt/ui/qml/test_CertificateDescriptionModel.cpp b/test/qt/ui/qml/test_CertificateDescriptionModel.cpp new file mode 100644 index 0000000..c432781 --- /dev/null +++ b/test/qt/ui/qml/test_CertificateDescriptionModel.cpp @@ -0,0 +1,79 @@ +/*! + * \brief Unit tests for \ref CertificateDescriptionModel + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "CertificateDescriptionModel.h" + +#include "TestAuthContext.h" +#include "TestFileHelper.h" + +#include +#include + + +using namespace governikus; + + +class test_CertificateDescriptionModel + : public QObject +{ + Q_OBJECT + QSharedPointer mModel; + QSharedPointer mContext; + + private Q_SLOTS: + void init() + { + mContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1.xml")); + mModel.reset(new CertificateDescriptionModel()); + } + + + void cleanup() + { + mModel.clear(); + mContext.clear(); + } + + + void test_ResetContext() + { + QSignalSpy spy(mModel.data(), &CertificateDescriptionModel::fireChanged); + mModel->resetContext(mContext); + QCOMPARE(mModel->rowCount(), 4); + + const QString termsOfUsage = QStringLiteral("Anschrift:\nbremen online services GmbH & Co. KG\nAm Fallturm 9\n28359 Bremen\n\nE-Mail-Adresse:\nhb@bos-bremen.de\n\nZweck des Auslesevorgangs:\nDemonstration des eID-Service\n\nZust\u00E4ndige Datenschutzaufsicht:\nDie Landesbeauftragte f\u00FCr Datenschutz und Informationsfreiheit der Freien Hansestadt Bremen\nArndtstra\u00DFe 1\n27570 Bremerhaven"); + QCOMPARE(mModel->data(mModel->index(0), CertificateDescriptionModel::UserRoles::LABEL), QString("Service provider")); + QCOMPARE(mModel->data(mModel->index(0), CertificateDescriptionModel::UserRoles::TEXT), QStringLiteral("bos KG\nhttps://dev-demo.governikus-eid.de:8443")); + QCOMPARE(mModel->data(mModel->index(1), CertificateDescriptionModel::UserRoles::LABEL), QString("Certificate issuer")); + QCOMPARE(mModel->data(mModel->index(1), CertificateDescriptionModel::UserRoles::TEXT), QStringLiteral("Deutsche Post Com, Gesch\u00E4ftsfeld Signtrust\nhttp://www.signtrust.de")); + QCOMPARE(mModel->data(mModel->index(2), CertificateDescriptionModel::UserRoles::LABEL), QString("Service provider information")); + QCOMPARE(mModel->data(mModel->index(2), CertificateDescriptionModel::UserRoles::TEXT), termsOfUsage); + QCOMPARE(mModel->data(mModel->index(3), CertificateDescriptionModel::UserRoles::LABEL), QString("Validity")); + QCOMPARE(spy.count(), 1); + } + + + void test_Data() + { + mModel->resetContext(mContext); + + QCOMPARE(mModel->data(QModelIndex(), CertificateDescriptionModel::UserRoles::LABEL), QVariant()); + + const auto& rowTooLarge = mModel->index(7, 0); + QCOMPARE(mModel->data(rowTooLarge, CertificateDescriptionModel::UserRoles::LABEL), QVariant()); + + const auto& validModel = mModel->index(1, 0); + + QCOMPARE(mModel->data(validModel, CertificateDescriptionModel::UserRoles::LABEL), QString("Certificate issuer")); + QCOMPARE(mModel->data(validModel, CertificateDescriptionModel::UserRoles::TEXT), QStringLiteral("Deutsche Post Com, Gesch\u00E4ftsfeld Signtrust\nhttp://www.signtrust.de")); + QCOMPARE(mModel->data(validModel, 0), QVariant()); + } + + +}; + +QTEST_GUILESS_MAIN(test_CertificateDescriptionModel) +#include "test_CertificateDescriptionModel.moc" diff --git a/test/qt/qml/test_ChangePinModel.cpp b/test/qt/ui/qml/test_ChangePinModel.cpp similarity index 68% rename from test/qt/qml/test_ChangePinModel.cpp rename to test/qt/ui/qml/test_ChangePinModel.cpp index b02eee4..d29bdee 100644 --- a/test/qt/qml/test_ChangePinModel.cpp +++ b/test/qt/ui/qml/test_ChangePinModel.cpp @@ -20,20 +20,20 @@ class test_ChangePinModel private Q_SLOTS: void test_ResetContext() { - ChangePinModel model; + const auto& model = Env::getSingleton(); QSharedPointer context(new ChangePinContext()); - QSignalSpy resultChanged(&model, &ChangePinModel::fireResultChanged); - QSignalSpy newContextSet(&model, &ChangePinModel::fireNewContextSet); + QSignalSpy resultChanged(model, &ChangePinModel::fireResultChanged); + QSignalSpy newContextSet(model, &ChangePinModel::fireNewContextSet); - model.resetContext(); + model->resetContext(); QCOMPARE(resultChanged.count(), 1); QCOMPARE(newContextSet.count(), 0); Q_EMIT context->fireSuccessMessageChanged(); QCOMPARE(resultChanged.count(), 1); - model.resetContext(context); + model->resetContext(context); QCOMPARE(resultChanged.count(), 2); QCOMPARE(newContextSet.count(), 1); @@ -44,15 +44,15 @@ class test_ChangePinModel void test_GetResultString() { - ChangePinModel model; + const auto& model = Env::getSingleton(); QSharedPointer context(new ChangePinContext()); - QCOMPARE(model.getResultString(), QString()); + QCOMPARE(model->getResultString(), QString()); context->setStatus(GlobalStatus::Code::No_Error); context->setSuccessMessage(QStringLiteral("success")); - model.mContext = context; - QCOMPARE(model.getResultString(), QStringLiteral("success")); + model->resetContext(context); + QCOMPARE(model->getResultString(), QStringLiteral("success")); } diff --git a/test/qt/ui/qml/test_ChatModel.cpp b/test/qt/ui/qml/test_ChatModel.cpp new file mode 100644 index 0000000..3ef4f89 --- /dev/null +++ b/test/qt/ui/qml/test_ChatModel.cpp @@ -0,0 +1,213 @@ +/*! + * \brief Unit tests for \ref ChatModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ChatModel.h" + +#include "context/SelfAuthContext.h" + +#include "paos/retrieve/DidAuthenticateEac1Parser.h" + +#include "MockActivationContext.h" +#include "TestFileHelper.h" + +#include +#include + + +using namespace governikus; + + +class test_ChatModel + : public QObject +{ + Q_OBJECT + QSharedPointer mModel; + QSharedPointer mActContext; + QSharedPointer mAuthContext; + + private Q_SLOTS: + void init() + { + mModel.reset(new ChatModel()); + mActContext.reset(new MockActivationContext()); + mAuthContext.reset(new AuthContext(mActContext)); + } + + + void cleanup() + { + mModel.clear(); + mActContext.clear(); + mAuthContext.clear(); + } + + + void test_ResetContext() + { + QSharedPointer selfAuthContext(new SelfAuthContext()); + + mModel->resetContext(nullptr); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG05)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG13)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG07)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG08)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG09)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG17)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG10)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG06)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG02)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG19)); + QCOMPARE(mModel->mSelectedRights, mModel->mAllRights.toSet()); + + mModel->resetContext(selfAuthContext); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG05)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG13)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG07)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG08)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG09)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG17)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG10)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG06)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG02)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG19)); + QCOMPARE(mModel->mSelectedRights, mModel->mAllRights.toSet()); + + mModel->resetContext(mAuthContext); + QVERIFY(mModel->mAllRights.isEmpty()); + QVERIFY(mModel->mOptionalRights.isEmpty()); + QVERIFY(mModel->mSelectedRights.isEmpty()); + } + + + void test_OnAuthenticationDataChanged() + { + mModel->mAuthContext = mAuthContext; + + mModel->onAuthenticationDataChanged(); + QVERIFY(mModel->mAllRights.isEmpty()); + QVERIFY(mModel->mOptionalRights.isEmpty()); + QVERIFY(mModel->mSelectedRights.isEmpty()); + + mAuthContext->mRequiredAccessRights += AccessRight::READ_DG01; + mAuthContext->mRequiredAccessRights += AccessRight::READ_DG04; + + mModel->onAuthenticationDataChanged(); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG01)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG04)); + QVERIFY(mModel->mOptionalRights.isEmpty()); + + mAuthContext->mOptionalAccessRights += AccessRight::READ_DG10; + mAuthContext->mOptionalAccessRights += AccessRight::READ_DG17; + + mModel->onAuthenticationDataChanged(); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG04)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG10)); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG17)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG01)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG04)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG10)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG17)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG10)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG17)); + } + + + void test_SetOrderedAllRights() + { + QSet rights; + rights.insert(AccessRight::READ_DG01); + rights.insert(AccessRight::INSTALL_QUAL_CERT); + rights.insert(AccessRight::CAN_ALLOWED); + mModel->setOrderedAllRights(rights); + QVERIFY(mModel->mAllRights.contains(AccessRight::READ_DG01)); + QVERIFY(mModel->mAllRights.contains(AccessRight::INSTALL_QUAL_CERT)); + QVERIFY(!mModel->mAllRights.contains(AccessRight::CAN_ALLOWED)); + } + + + void test_TransferAccessRights() + { + mAuthContext->mOptionalAccessRights += mModel->mSelectedRights += AccessRight::INSTALL_QUAL_CERT; + mAuthContext->mOptionalAccessRights += mModel->mSelectedRights += AccessRight::READ_DG01; + QVERIFY(!mAuthContext->getEffectiveAccessRights().contains(AccessRight::INSTALL_QUAL_CERT)); + QVERIFY(!mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG01)); + + mModel->mAuthContext = mAuthContext; + mModel->mSelectedRights += AccessRight::INSTALL_QUAL_CERT; + mModel->mSelectedRights += AccessRight::READ_DG01; + + mModel->transferAccessRights(); + QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::INSTALL_QUAL_CERT)); + QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG01)); + } + + + void test_Data_InvalidIndex() + { + QCOMPARE(mModel->data(QModelIndex(), 1), QVariant()); + } + + + void test_DataOptionalRole() + { + QModelIndex index = mModel->createIndex(0, 0); + QList rights = {AccessRight::READ_DG01, AccessRight::READ_DG02}; + mModel->mAllRights = rights; + + QCOMPARE(mModel->data(index, ChatModel::ChatRoles::OPTIONAL_ROLE), false); + + mModel->mOptionalRights.insert(AccessRight::READ_DG01); + QCOMPARE(mModel->data(index, ChatModel::ChatRoles::OPTIONAL_ROLE), true); + } + + + void test_DataSelectedRole() + { + QSignalSpy spy(mModel.data(), &ChatModel::dataChanged); + QModelIndex index = mModel->createIndex(0, 0); + QList rights = {AccessRight::READ_DG16, AccessRight::READ_DG02}; + mModel->mAllRights = rights; + mModel->mSelectedRights = QSet(); + + QCOMPARE(mModel->data(index, ChatModel::ChatRoles::SELECTED_ROLE), false); + QVERIFY(mModel->setData(index, true, ChatModel::ChatRoles::SELECTED_ROLE)); + QVERIFY(mModel->mSelectedRights.contains(AccessRight::READ_DG16)); + QCOMPARE(spy.count(), 1); + auto arguments = spy.takeFirst(); + auto role = arguments.at(2).value >(); + QCOMPARE(arguments.at(0), index); + QCOMPARE(arguments.at(1), index); + QCOMPARE(role.at(0), ChatModel::ChatRoles::SELECTED_ROLE); + } + + + void test_DataNameRole() + { + mModel->resetContext(mAuthContext); + QModelIndex index = mModel->createIndex(0, 0); + QList rights = {AccessRight::AGE_VERIFICATION, AccessRight::READ_DG15}; + mModel->mAllRights = rights; + QByteArray content = TestFileHelper::readFile(":/paos/DIDAuthenticateEAC1.xml"); + QSharedPointer eac1(static_cast(DidAuthenticateEac1Parser().parse(content))); + mAuthContext->setDidAuthenticateEac1(eac1); + const QString requiredAge = mAuthContext->getRequiredAge(); + + QVERIFY(!requiredAge.isEmpty()); + QCOMPARE(mModel->data(index, ChatModel::ChatRoles::NAME_ROLE), "Age verification (" + requiredAge + ")"); + } + + +}; + +QTEST_GUILESS_MAIN(test_ChatModel) +#include "test_ChatModel.moc" diff --git a/test/qt/qml/test_ConnectivityManager.cpp b/test/qt/ui/qml/test_ConnectivityManager.cpp similarity index 100% rename from test/qt/qml/test_ConnectivityManager.cpp rename to test/qt/ui/qml/test_ConnectivityManager.cpp diff --git a/test/qt/ui/qml/test_HistoryModel.cpp b/test/qt/ui/qml/test_HistoryModel.cpp new file mode 100644 index 0000000..ff81f07 --- /dev/null +++ b/test/qt/ui/qml/test_HistoryModel.cpp @@ -0,0 +1,231 @@ +/*! + * \brief Unit tests for \ref HistoryModel + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "HistoryModel.h" + +#include "AppSettings.h" +#include "Env.h" +#include "ProviderConfiguration.h" + +#include +#include + + +using namespace governikus; + +Q_DECLARE_METATYPE(HistoryModel::HistoryRoles) + +class test_HistoryModel + : public QObject +{ + Q_OBJECT + QSharedPointer mModel; + + static ProviderConfigurationInfo createProviderInfo(const QStringList& subjectUrls) + { + if (subjectUrls.isEmpty()) + { + return ProviderConfigurationInfo(); + } + return ProviderConfigurationInfo( + /* short name */ QStringLiteral("Provider 1"), + /* long name */ QStringLiteral("Provider 1 - long name"), + /* short description */ QStringLiteral("Provider description short"), + /* long description */ QStringLiteral("Provider description long"), + /* address */ QStringLiteral("https://www.homepage.com/"), + /* homepage */ QStringLiteral("https://www.homepage.com/"), + /* category */ QStringLiteral("CategoryA"), + /* phone */ QStringLiteral("0421 123456"), + /* email */ QStringLiteral("abc@def.de"), + /* postal address */ QStringLiteral("Am Fallturm 9\n28359 Bremen"), + /* icon */ QString(), + /* image */ QString(), + /* tcTokenUrl */ QStringLiteral("https://npa.allianz.de/azservice/NpaEIDService/nparef/-wnf"), + /* clientUrl */ QStringLiteral("https://www.bva.bund.de/bafoeg-online/Bafoeg/flow/anmeld"), + /* subjectUrls */ subjectUrls); + } + + + static QVector setTestProviders(int size) + { + + QStringList subjectUrls1({QStringLiteral("https://test.test/"), QStringLiteral("https://abc.abc/"), QStringLiteral("abc.abc")}); + QStringList subjectUrls2({QStringLiteral("abc.abc")}); + QStringList subjectUrls3({QStringLiteral("https://npa.allianz.de/bla1"), QStringLiteral("https://npa.allianz.de/bla1")}); + + auto& infos = Env::getSingleton()->mProviderConfigurationInfos; + infos.clear(); + + switch (size) + { + case 1: + infos.append(createProviderInfo(subjectUrls1)); + break; + + case 3: + infos.append(createProviderInfo(subjectUrls1)); + infos.append(createProviderInfo(subjectUrls2)); + infos.append(createProviderInfo(subjectUrls3)); + } + return infos; + } + + + private Q_SLOTS: + void init() + { + mModel.reset(new HistoryModel()); + } + + + void cleanup() + { + mModel.clear(); + } + + + void test_updateConnections_data() + { + QTest::addColumn("entriesSize"); + QTest::addColumn("size"); + + QTest::newRow("empty") << 0 << 0; + QTest::newRow("2") << 2 << 4; + QTest::newRow("10") << 10 << 20; + } + + + void test_updateConnections() + { + QFETCH(int, entriesSize); + QFETCH(int, size); + + HistoryInfo info("SubjectName", "SubjectUrl", "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + QVector entries(entriesSize, info); + + Env::getSingleton()->getHistorySettings().setHistoryInfos(entries); + + mModel->updateConnections(); + QCOMPARE(mModel->mConnections.size(), size); + } + + + void test_DeterminateProviderForEmptyProviderList() + { + HistoryInfo info("SubjectName", "SubjectUrl", "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + QCOMPARE(mModel->determineProviderFor(info), ProviderConfigurationInfo()); + } + + + void test_DeterminateProviderForProviderListSize1() + { + const auto providers = setTestProviders(1); + + HistoryInfo historyInfo1("SubjectName", "", "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + QCOMPARE(mModel->determineProviderFor(historyInfo1), ProviderConfigurationInfo()); + + HistoryInfo historyInfo2("SubjectName", QString("https://test.test/"), "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + QCOMPARE(mModel->determineProviderFor(historyInfo2), providers.at(0)); + } + + + void test_DeterminateProviderForProviderListSize3() + { + const auto providers = setTestProviders(3); + + HistoryInfo historyInfo1("SubjectName", QString("https://test/"), "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + HistoryInfo historyInfo2("SubjectName", QString("https://test.test/"), "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + HistoryInfo historyInfo3("SubjectName", QString("https://abc.abc/"), "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + HistoryInfo historyInfo4("SubjectName", QString("test.test"), "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + + QCOMPARE(mModel->determineProviderFor(historyInfo1), ProviderConfigurationInfo()); + QCOMPARE(mModel->determineProviderFor(historyInfo2), providers.at(0)); + QCOMPARE(mModel->determineProviderFor(historyInfo3), providers.at(0)); + QCOMPARE(mModel->determineProviderFor(historyInfo4), ProviderConfigurationInfo()); + } + + + void test_Data_data() + { + QTest::addColumn("role"); + QTest::addColumn("result"); + + QTest::newRow("subject") << HistoryModel::HistoryRoles::SUBJECT << "SubjectName"; + QTest::newRow("purpose") << HistoryModel::HistoryRoles::PURPOSE << "Usage"; + QTest::newRow("termOfUsage") << HistoryModel::HistoryRoles::TERMSOFUSAGE << "TermOfUsage"; + QTest::newRow("requestedData") << HistoryModel::HistoryRoles::REQUESTEDDATA << "RequestedData"; + QTest::newRow("providerCategory") << HistoryModel::HistoryRoles::PROVIDER_CATEGORY << "CategoryA"; + QTest::newRow("providerShortname") << HistoryModel::HistoryRoles::PROVIDER_SHORTNAME << "Provider 1"; + QTest::newRow("providerLongname") << HistoryModel::HistoryRoles::PROVIDER_LONGNAME << "Provider 1 - long name"; + QTest::newRow("providerShortdescription") << HistoryModel::HistoryRoles::PROVIDER_SHORTDESCRIPTION << "Provider description short"; + QTest::newRow("providerLongdescription") << HistoryModel::HistoryRoles::PROVIDER_LONGDESCRIPTION << "Provider description long"; + QTest::newRow("providerAddress") << HistoryModel::HistoryRoles::PROVIDER_ADDRESS << "https://www.homepage.com/"; + QTest::newRow("providerAddressDomain") << HistoryModel::HistoryRoles::PROVIDER_ADDRESS_DOMAIN << "www.homepage.com"; + QTest::newRow("providerHomepage") << HistoryModel::HistoryRoles::PROVIDER_HOMEPAGE << "https://www.homepage.com/"; + QTest::newRow("providerHomepageBase") << HistoryModel::HistoryRoles::PROVIDER_HOMEPAGE_BASE << "www.homepage.com"; + QTest::newRow("providerPhone") << HistoryModel::HistoryRoles::PROVIDER_PHONE << "0421 123456"; + QTest::newRow("providerPhoneCost") << HistoryModel::HistoryRoles::PROVIDER_PHONE_COST << QString(); + QTest::newRow("providerPostalAddress") << HistoryModel::HistoryRoles::PROVIDER_POSTALADDRESS << "Am Fallturm 9\n28359 Bremen"; + } + + + void test_Data() + { + QFETCH(HistoryModel::HistoryRoles, role); + QFETCH(QString, result); + + HistoryInfo historyInfo("SubjectName", "https://test.test/", "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + QVector infos = {historyInfo}; + + setTestProviders(1); + + Env::getSingleton()->getHistorySettings().setHistoryInfos(infos); + QModelIndex index = mModel->createIndex(0, 0); + + QCOMPARE(mModel->data(index, role), result); + } + + + void test_RemoveRows_data() + { + QTest::addColumn("oldSize"); + QTest::addColumn("row"); + QTest::addColumn("count"); + QTest::addColumn("newSize"); + + QTest::newRow("size5") << 5 << 0 << 5 << 0; + QTest::newRow("size10") << 10 << 1 << 3 << 7; + QTest::newRow("size15") << 15 << 8 << 0 << 15; + } + + + void test_RemoveRows() + { + QFETCH(int, oldSize); + QFETCH(int, row); + QFETCH(int, count); + QFETCH(int, newSize); + + HistoryInfo historyInfo("SubjectName", "https://npa.allianz.de/bla1", "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + QVector infos(oldSize, historyInfo); + + QSignalSpy spyRemove(mModel.data(), &HistoryModel::rowsAboutToBeRemoved); + + Env::getSingleton()->getHistorySettings().setHistoryInfos(infos); + if (mModel->removeRows(row, count)) + { + QCOMPARE(Env::getSingleton()->getHistorySettings().getHistoryInfos().size(), newSize); + QList argumentsRemove = spyRemove.takeFirst(); + QCOMPARE(argumentsRemove.at(1).toInt(), row); + QCOMPARE(argumentsRemove.at(2).toInt(), row + count - 1); + } + } + + +}; + +QTEST_GUILESS_MAIN(test_HistoryModel) +#include "test_HistoryModel.moc" diff --git a/test/qt/ui/qml/test_LogModel.cpp b/test/qt/ui/qml/test_LogModel.cpp new file mode 100644 index 0000000..0d406ec --- /dev/null +++ b/test/qt/ui/qml/test_LogModel.cpp @@ -0,0 +1,147 @@ +/*! + * \brief Unit tests for \ref LogModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "LogModel.h" + +#include "LogHandler.h" + +#include +#include + + +using namespace governikus; + +class test_LogModel + : public QObject +{ + Q_OBJECT + QSharedPointer mModel; + + private Q_SLOTS: + void init() + { + mModel.reset(new LogModel()); + } + + + void cleanup() + { + mModel.clear(); + } + + + void test_AddLogEntry_data() + { + QTest::addColumn("input"); + QTest::addColumn("entry1"); + QTest::addColumn("entry2"); + + QTest::newRow("validEntry") << QString("input : test") << QString("input") << QString("test"); + QTest::newRow("empty") << QString(" : ") << QString() << QString(); + QTest::newRow("leftEmpty") << QString(" : test") << QString() << QString("test"); + QTest::newRow("rightEmpty") << QString("input : ") << QString("input") << QString(); + QTest::newRow("NoSpaceRight") << QString("input :test") << QString("input :test") << QString(); + QTest::newRow("NoSpaceLeft") << QString("input: test") << QString("input: test") << QString(); + QTest::newRow("invalidEntry") << QString("inputTest") << QString("inputTest") << QString(); + QTest::newRow("NoSpaces") << QString("input:test") << QString("input:test") << QString(); + QTest::newRow("emptyString") << QString() << QString() << QString(); + QTest::newRow("::") << QString("::") << QString("::") << QString(); + QTest::newRow("a : b : c") << QString("a : b : c") << QString("a") << QString("b : c"); + } + + + void test_AddLogEntry() + { + QFETCH(QString, input); + QFETCH(QString, entry1); + QFETCH(QString, entry2); + + mModel->addLogEntry(input); + QCOMPARE(mModel->mLogEntries.at(0), entry1); + QCOMPARE(mModel->mLogEntries.at(1), entry2); + } + + + void test_SetLogEntries_data() + { + QTest::addColumn("fileName"); + QTest::addColumn("logEntriesSize"); + QTest::addColumn("count"); + + QTest::newRow("empty") << QString(":/logfiles/empty.txt") << 0 << 0; + QTest::newRow("size78") << QString(":/logfiles/size78.txt") << 78 << 78; + QTest::newRow("size80") << QString(":/logfiles/size80.txt") << 80 << 80; + QTest::newRow("size82") << QString(":/logfiles/size82.txt") << 82 << 80; + QTest::newRow("size160") << QString(":/logfiles/size160.txt") << 160 << 80; + } + + + void test_SetLogEntries() + { + QFETCH(QString, fileName); + QFETCH(int, logEntriesSize); + + QFile file(fileName); + file.open(QIODevice::ReadOnly); + QTextStream stream(&file); + + mModel->setLogEntries(stream); + QCOMPARE(mModel->mLogEntries.size(), logEntriesSize); + } + + + void test_OnNewLogMsg_data() + { + QTest::addColumn("msg"); + QTest::addColumn("fileName"); + QTest::addColumn("selectedFile"); + QTest::addColumn("newLogMsgCounter"); + QTest::addColumn("logEntriesSizeChange"); + + QTest::newRow("emptyFile_MsgAdded") << QString(" : ") << QString(":/logfiles/empty.txt") << 0 << 1 << 2; + QTest::newRow("emptyFile_MsgNotAdded") << QString(" : ") << QString(":/logfiles/empty.txt") << 1 << 0 << 0; + QTest::newRow("emptyFile_MsgAdded_ViewChanged") << QString("test : input") << QString(":/logfiles/empty.txt") << 0 << 1 << 2; + + QTest::newRow("MsgAdded_Size78") << QString() << QString(":/logfiles/size78.txt") << 0 << 1 << 2; + QTest::newRow("MsgAdded_ViewChanged_Size78") << QString("test : input") << QString(":/logfiles/size78.txt") << 0 << 1 << 2; + QTest::newRow("MsgNotAdded_Size78") << QString("test : input") << QString(":/logfiles/size78.txt") << 2 << 0 << 0; + + QTest::newRow("MsgAdded_Size80") << QString() << QString(":/logfiles/size80.txt") << 0 << 1 << 2; + QTest::newRow("MsgNotAdded_Size80") << QString("test : input") << QString(":/logfiles/size80.txt") << 1 << 0 << 0; + QTest::newRow("MsgAdded_ViewChanged_Size80") << QString("test : input") << QString(":/logfiles/size80.txt") << 0 << 1 << 2; + + QTest::newRow("MsgAdded_Size82") << QString("test : input") << QString(":/logfiles/size82.txt") << 0 << 1 << 2; + QTest::newRow("MsgNotAdded_Size82") << QString(" : ") << QString(":/logfiles/size82.txt") << 3 << 0 << 0; + QTest::newRow("MsgAdded_ViewChanged_Size82") << QString("test : input") << QString(":/logfiles/size82.txt") << 0 << 1 << 2; + } + + + void test_OnNewLogMsg() + { + QFETCH(QString, msg); + QFETCH(QString, fileName); + QFETCH(int, selectedFile); + QFETCH(int, newLogMsgCounter); + QFETCH(int, logEntriesSizeChange); + + QFile file(fileName); + file.open(QIODevice::ReadOnly); + QTextStream stream(&file); + mModel->setLogEntries(stream); + int oldSize = mModel->mLogEntries.size(); + mModel->mSelectedLogFile = selectedFile; + QSignalSpy spyNewLogMsg(mModel.data(), &LogModel::fireNewLogMsg); + + mModel->onNewLogMsg(msg); + QCOMPARE(spyNewLogMsg.count(), newLogMsgCounter); + QCOMPARE(mModel->mLogEntries.size(), oldSize + logEntriesSizeChange); + } + + +}; + +QTEST_GUILESS_MAIN(test_LogModel) +#include "test_LogModel.moc" diff --git a/test/qt/ui/qml/test_NotificationModel.cpp b/test/qt/ui/qml/test_NotificationModel.cpp new file mode 100644 index 0000000..9b4aaef --- /dev/null +++ b/test/qt/ui/qml/test_NotificationModel.cpp @@ -0,0 +1,95 @@ +/*! + * \brief Unit tests for \ref NotificationModel + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + +#include "NotificationModel.h" + + +#include +#include + +using namespace governikus; + +class test_NotificationModel + : public QObject +{ + + Q_OBJECT + QSharedPointer mModel; + + private Q_SLOTS: + void init() + { + mModel.reset(new NotificationModel()); + } + + + void cleanup() + { + mModel.clear(); + } + + + void test_OnNewLogMsg() + { + QSignalSpy spy(mModel.data(), &NotificationModel::fireLastTypeChanged); + + const QString msg("message"); + const QString developermode("developermode"); + for (int i = 0; i < 20; i++) + { + mModel->onNewLogMsg(msg, developermode); + QCOMPARE(mModel->mNotificationEntries.at(i).mText, msg); + QCOMPARE(mModel->mNotificationEntries.at(i).mType, developermode); + } + const QString newMsg("new message"); + const QString feedback("feedback"); + mModel->onNewLogMsg(newMsg, feedback); + QCOMPARE(mModel->mNotificationEntries.at(20).mText, newMsg); + QCOMPARE(mModel->mNotificationEntries.at(20).mType, feedback); + QCOMPARE(spy.count(), 21); + } + + + void test_Data_data() + { + QTest::addColumn("row"); + QTest::addColumn("size"); + QTest::addColumn("role"); + QTest::addColumn("output"); + + int type = NotificationModel::UserRoles::TYPE; + int time = NotificationModel::UserRoles::TIME; + + QTest::newRow("entriesEmpty") << 0 << 0 << 0 << QVariant(); + QTest::newRow("RowNumberEqualsSize") << 2 << 2 << type << QVariant(); + QTest::newRow("entriesFirstIndex0Type") << 4 << 5 << type << QVariant(QString("developermode")); + QTest::newRow("entriesFirstIndex2Text") << 3 << 22 << 5 << QVariant(QString("message")); + QTest::newRow("indexOutOfRange") << 10 << 5 << time << QVariant(); + } + + + void test_Data() + { + QFETCH(int, row); + QFETCH(int, size); + QFETCH(int, role); + QFETCH(QVariant, output); + + QModelIndex index = mModel->createIndex(row, 0); + const QString msg("message"); + const QString developermode("developermode"); + for (int i = 0; i < size; i++) + { + mModel->onNewLogMsg(msg, developermode); + } + QCOMPARE(mModel->data(index, role), output); + } + + +}; + +QTEST_GUILESS_MAIN(test_NotificationModel) +#include "test_NotificationModel.moc" diff --git a/test/qt/ui/qml/test_NumberModel.cpp b/test/qt/ui/qml/test_NumberModel.cpp new file mode 100644 index 0000000..a358a90 --- /dev/null +++ b/test/qt/ui/qml/test_NumberModel.cpp @@ -0,0 +1,424 @@ +/*! + * \brief Unit tests for \ref NumberModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "NumberModel.h" + +#include "context/ChangePinContext.h" +#include "context/RemoteServiceContext.h" + +#include "MockCardConnectionWorker.h" + +#include +#include + +using namespace governikus; + + +class test_NumberModel + : public QObject +{ + Q_OBJECT + NumberModel * mModel; + + private Q_SLOTS: + void init() + { + mModel = Env::getSingleton(); + } + + + void cleanup() + { + mModel->resetContext(); + } + + + void cleanupTestCase() + { + mModel->deleteLater(); + } + + + void test_ResetContext() + { + const QSharedPointer pinContext(new ChangePinContext()); + const QSharedPointer context(new WorkflowContext()); + + QSignalSpy spyCanChanged(mModel, &NumberModel::fireCanChanged); + QSignalSpy spyPinChanged(mModel, &NumberModel::firePinChanged); + QSignalSpy spyNewPinChanged(mModel, &NumberModel::fireNewPinChanged); + QSignalSpy spyCanAllowed(mModel, &NumberModel::fireCanAllowedModeChanged); + QSignalSpy spyPukChanged(mModel, &NumberModel::firePukChanged); + QSignalSpy spyReaderNameChanged(mModel, &NumberModel::fireReaderInfoChanged); + QSignalSpy spyLastPaceResultChanged(mModel, &NumberModel::fireInputErrorChanged); + + mModel->resetContext(); + QCOMPARE(spyCanChanged.count(), 1); + QCOMPARE(spyPinChanged.count(), 1); + QCOMPARE(spyNewPinChanged.count(), 1); + QCOMPARE(spyCanAllowed.count(), 1); + QCOMPARE(spyPukChanged.count(), 1); + QCOMPARE(spyReaderNameChanged.count(), 1); + QCOMPARE(spyLastPaceResultChanged.count(), 1); + + mModel->resetContext(context); + QCOMPARE(spyCanChanged.count(), 2); + QCOMPARE(spyPinChanged.count(), 2); + QCOMPARE(spyNewPinChanged.count(), 2); + QCOMPARE(spyCanAllowed.count(), 2); + QCOMPARE(spyPukChanged.count(), 2); + QCOMPARE(spyReaderNameChanged.count(), 2); + QCOMPARE(spyLastPaceResultChanged.count(), 2); + Q_EMIT context->fireCanChanged(); + QCOMPARE(spyCanChanged.count(), 3); + Q_EMIT context->firePinChanged(); + QCOMPARE(spyPinChanged.count(), 3); + Q_EMIT context->fireCanAllowedModeChanged(); + QCOMPARE(spyCanAllowed.count(), 3); + Q_EMIT context->fireReaderNameChanged(); + QCOMPARE(spyReaderNameChanged.count(), 3); + Q_EMIT context->firePaceResultUpdated(); + QCOMPARE(spyLastPaceResultChanged.count(), 4); + + mModel->resetContext(pinContext); + QCOMPARE(spyCanChanged.count(), 4); + QCOMPARE(spyPinChanged.count(), 4); + QCOMPARE(spyNewPinChanged.count(), 3); + QCOMPARE(spyCanAllowed.count(), 4); + QCOMPARE(spyPukChanged.count(), 3); + QCOMPARE(spyReaderNameChanged.count(), 4); + QCOMPARE(spyLastPaceResultChanged.count(), 5); + + Q_EMIT pinContext->fireCanChanged(); + QCOMPARE(spyCanChanged.count(), 5); + Q_EMIT pinContext->firePinChanged(); + QCOMPARE(spyPinChanged.count(), 5); + Q_EMIT pinContext->fireCanAllowedModeChanged(); + QCOMPARE(spyCanAllowed.count(), 5); + Q_EMIT pinContext->fireReaderNameChanged(); + QCOMPARE(spyReaderNameChanged.count(), 5); + Q_EMIT pinContext->firePaceResultUpdated(); + QCOMPARE(spyLastPaceResultChanged.count(), 7); + Q_EMIT pinContext->fireNewPinChanged(); + QCOMPARE(spyNewPinChanged.count(), 4); + Q_EMIT pinContext->firePukChanged(); + QCOMPARE(spyPukChanged.count(), 4); + } + + + void test_Can() + { + const QSharedPointer context(new WorkflowContext()); + const QString can = QStringLiteral("111111"); + + mModel->setCan(can); + QCOMPARE(mModel->getCan(), QString()); + + mModel->resetContext(context); + mModel->setCan(can); + QCOMPARE(mModel->getCan(), can); + QCOMPARE(context->getCan(), can); + } + + + void test_Pin() + { + const QSharedPointer context(new WorkflowContext()); + const QString pin = QStringLiteral("111111"); + mModel->setPin(pin); + QCOMPARE(mModel->getPin(), QString()); + + mModel->resetContext(context); + mModel->setPin(pin); + QCOMPARE(mModel->getPin(), pin); + QCOMPARE(context->getPin(), pin); + } + + + void test_NewPin() + { + const QSharedPointer context(new WorkflowContext()); + const QSharedPointer changePinContext(new ChangePinContext()); + const QSharedPointer remoteServiceContext(new RemoteServiceContext()); + const QString pin = QStringLiteral("111111"); + + mModel->resetContext(context); + mModel->setNewPin(pin); + QCOMPARE(mModel->getNewPin(), QString()); + + mModel->resetContext(changePinContext); + mModel->setNewPin(pin); + QCOMPARE(changePinContext->getNewPin(), pin); + QCOMPARE(mModel->getNewPin(), pin); + + mModel->resetContext(remoteServiceContext); + mModel->setNewPin(pin); + QCOMPARE(remoteServiceContext->getNewPin(), pin); + QCOMPARE(mModel->getNewPin(), QString()); + } + + + void test_Puk() + { + const QSharedPointer context(new WorkflowContext()); + const QString puk = QStringLiteral("111111"); + + mModel->resetContext(context); + mModel->setPuk(puk); + QCOMPARE(context->getPuk(), puk); + QCOMPARE(mModel->getPuk(), puk); + } + + + void test_OnReaderInfoChanged() + { + const QSharedPointer context(new WorkflowContext()); + QSignalSpy spyReaderNameChanged(mModel, &NumberModel::fireReaderInfoChanged); + + const QString readerName = QStringLiteral("name"); + const QString test = QStringLiteral("test"); + + const auto readerManager = Env::getSingleton(); + Q_EMIT readerManager->fireReaderPropertiesUpdated(QString()); + QCOMPARE(spyReaderNameChanged.count(), 0); + + context->setReaderName(test); + mModel->resetContext(context); + Q_EMIT readerManager->fireReaderPropertiesUpdated(QString()); + QCOMPARE(spyReaderNameChanged.count(), 1); + + context->setReaderName(readerName); + mModel->resetContext(context); + Q_EMIT readerManager->fireReaderPropertiesUpdated(QString()); + QCOMPARE(spyReaderNameChanged.count(), 3); + } + + + void test_CanAllowed() + { + const QSharedPointer context(new WorkflowContext()); + QVERIFY(!mModel->isCanAllowedMode()); + + mModel->resetContext(context); + QVERIFY(!mModel->isCanAllowedMode()); + + context->setCanAllowedMode(true); + QVERIFY(mModel->isCanAllowedMode()); + } + + + void test_PinDeactivatedFalse() + { + QVERIFY(!mModel->isPinDeactivated()); + + const QSharedPointer context(new WorkflowContext()); + mModel->resetContext(context); + QVERIFY(!mModel->isPinDeactivated()); + } + + + void test_Error() + { + QThread connectionThread; + connectionThread.start(); + + const QSharedPointer context(new WorkflowContext()); + + QCOMPARE(mModel->getInputError(), QString()); + QVERIFY(!mModel->hasError()); + + context->setLastPaceResult(CardReturnCode::OK); + mModel->resetContext(context); + QCOMPARE(mModel->getInputError(), QString()); + QVERIFY(!mModel->hasError()); + + context->setLastPaceResult(CardReturnCode::CANCELLATION_BY_USER); + QCOMPARE(mModel->getInputError(), QString()); + QVERIFY(!mModel->hasError()); + + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&connectionThread); + const QSharedPointer connection(new CardConnection(worker)); + context->setCardConnection(connection); + + context->setLastPaceResult(CardReturnCode::INVALID_PIN); + QCOMPARE(mModel->getInputError(), tr("The given PIN is not correct. You have 2 tries to enter the correct PIN.")); + QVERIFY(mModel->hasError()); + + context->setLastPaceResult(CardReturnCode::INVALID_PIN_2); + QCOMPARE(mModel->getInputError(), tr("You have entered the wrong PIN twice. " + "Prior to a third attempt, you have to enter your six-digit card access number first. " + "You can find your card access number on the front of your ID card.")); + QVERIFY(mModel->hasError()); + + context->setLastPaceResult(CardReturnCode::INVALID_PIN_3); + QCOMPARE(mModel->getInputError(), tr("You have entered a wrong PIN three times. " + "Your PIN is now blocked. " + "You have to enter the PUK now for unblocking.")); + QVERIFY(mModel->hasError()); + + context->setLastPaceResult(CardReturnCode::INVALID_CAN); + QCOMPARE(mModel->getInputError(), tr("You have entered a wrong CAN, please try again.")); + + context->setLastPaceResult(CardReturnCode::INVALID_PUK); + QCOMPARE(mModel->getInputError(), tr("You have entered a wrong PUK. " + "Please try again.")); + QVERIFY(mModel->hasError()); + + context->setLastPaceResult(CardReturnCode::UNKNOWN); + QCOMPARE(mModel->getInputError(), tr("An unexpected error has occurred during processing.")); + + context->setLastPaceResult(CardReturnCode::UNEXPECTED_TRANSMIT_STATUS); + QCOMPARE(mModel->getInputError(), QStringLiteral("%1 %3.").arg( + tr("A protocol error occurred. Please make sure that your ID card is placed correctly on the card reader and try again. If the problem occurs again, please contact our support at"), + tr("https://www.ausweisapp.bund.de/en/qa/support/"), + tr("AusweisApp2 Support"))); + QVERIFY(mModel->hasError()); + + connectionThread.quit(); + connectionThread.wait(); + } + + + void test_GetRetryCounter() + { + QThread connectionThread; + connectionThread.start(); + + const QSharedPointer context(new WorkflowContext()); + + QCOMPARE(mModel->getRetryCounter(), -1); + + mModel->resetContext(context); + QCOMPARE(mModel->getRetryCounter(), -1); + + const QString name = QStringLiteral("name"); + const CardInfo cardInfo(CardType::EID_CARD, QSharedPointer(), + 3, true, false); + MockReader reader(name); + reader.getReaderInfo().setCardInfo(cardInfo); + const QSharedPointer worker(new MockCardConnectionWorker(&reader)); + worker->moveToThread(&connectionThread); + const QSharedPointer connection(new CardConnection(worker)); + context->setCardConnection(connection); + QCOMPARE(mModel->getRetryCounter(), 3); + + connectionThread.quit(); + connectionThread.wait(); + } + + + void test_RequestTransportPin_data() + { + QTest::addColumn >("context"); + QTest::addColumn("contextRequestedTransportPin"); + + QTest::newRow("WorkflowContext") << QSharedPointer(new WorkflowContext()) << false; + QTest::newRow("ChangePinContext") << QSharedPointer(new ChangePinContext()) << false; + QTest::newRow("ChangePinContext-false") << QSharedPointer(new ChangePinContext(false)) << false; + QTest::newRow("ChangePinContext-true") << QSharedPointer(new ChangePinContext(true)) << true; + } + + + void test_RequestTransportPin() + { + QFETCH(QSharedPointer, context); + QFETCH(bool, contextRequestedTransportPin); + + QVERIFY(!mModel->isRequestTransportPin()); + + mModel->setRequestTransportPin(true); + QVERIFY(mModel->isRequestTransportPin()); + mModel->setRequestTransportPin(false); + QVERIFY(!mModel->isRequestTransportPin()); + + mModel->resetContext(context); + QCOMPARE(mModel->isRequestTransportPin(), contextRequestedTransportPin); + + mModel->setRequestTransportPin(true); + QVERIFY(mModel->isRequestTransportPin()); + + mModel->setRequestTransportPin(false); + QVERIFY(!mModel->isRequestTransportPin()); + mModel->setRequestTransportPin(true); + QVERIFY(mModel->isRequestTransportPin()); + + mModel->resetContext(); + QVERIFY(!mModel->isRequestTransportPin()); + } + + + void test_GetPasswordType_ContextIsNullptr() + { + QCOMPARE(mModel->getPasswordType(), NumberModel::QmlPasswordType::PASSWORD_PIN); + } + + + void test_GetPasswordType_RequestNewPin() + { + const QSharedPointer context(new WorkflowContext()); + + mModel->resetContext(context); + mModel->requestNewPin(); + + QCOMPARE(mModel->getPasswordType(), NumberModel::QmlPasswordType::PASSWORD_NEW_PIN); + } + + + void test_GetPasswordType_data() + { + QTest::addColumn("passwordId"); + QTest::addColumn("passwordType"); + + QTest::newRow("unknown") << PacePasswordId::UNKNOWN << NumberModel::QmlPasswordType::PASSWORD_PIN; + QTest::newRow("mrz") << PacePasswordId::PACE_MRZ << NumberModel::QmlPasswordType::PASSWORD_PIN; + QTest::newRow("pin") << PacePasswordId::PACE_PIN << NumberModel::QmlPasswordType::PASSWORD_PIN; + QTest::newRow("can") << PacePasswordId::PACE_CAN << NumberModel::QmlPasswordType::PASSWORD_CAN; + QTest::newRow("puk") << PacePasswordId::PACE_PUK << NumberModel::QmlPasswordType::PASSWORD_PUK; + } + + + void test_GetPasswordType() + { + QFETCH(PacePasswordId, passwordId); + QFETCH(NumberModel::QmlPasswordType, passwordType); + + const QSharedPointer context(new WorkflowContext()); + + mModel->resetContext(context); + + context->setEstablishPaceChannelType(passwordId); + QCOMPARE(mModel->getPasswordType(), passwordType); + } + + + void test_OnCardConnectionChanged() + { + QThread connectionThread; + connectionThread.start(); + + const QSharedPointer context(new WorkflowContext()); + + mModel->resetContext(context); + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&connectionThread); + const QSharedPointer connection(new CardConnection(worker)); + context->setCardConnection(connection); + QSignalSpy spy(mModel, &NumberModel::fireReaderInfoChanged); + + Q_EMIT context->fireCardConnectionChanged(); + Q_EMIT connection->fireReaderInfoChanged(ReaderInfo()); + QCOMPARE(spy.count(), 3); + + connectionThread.quit(); + connectionThread.wait(); + } + + +}; + +QTEST_GUILESS_MAIN(test_NumberModel) +#include "test_NumberModel.moc" diff --git a/test/qt/ui/qml/test_ProviderCategoryFilterModel.cpp b/test/qt/ui/qml/test_ProviderCategoryFilterModel.cpp new file mode 100644 index 0000000..7ca5bea --- /dev/null +++ b/test/qt/ui/qml/test_ProviderCategoryFilterModel.cpp @@ -0,0 +1,212 @@ +/*! + * \brief Unit tests for \ref ProviderCategoryFilterModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ProviderCategoryFilterModel.h" + +#include + +using namespace governikus; + +class MockProviderModel + : public QAbstractListModel +{ + Q_OBJECT + QMap mData; + + public: + explicit MockProviderModel() + : mData() + { + } + + + int rowCount(const QModelIndex& parent) const override + { + Q_UNUSED(parent); + return 1; + } + + + QVariant data(const QModelIndex& index, int role) const override + { + Q_UNUSED(index); + return mData.value(role); + } + + + QModelIndex index(int row, int column, const QModelIndex& parent) const override + { + Q_UNUSED(parent); + QModelIndex index = createIndex(row, column); + return index; + } + + + QModelIndex parent(const QModelIndex& pIndex) const override + { + return pIndex.parent(); + } + + + int columnCount(const QModelIndex& parent) const override + { + Q_UNUSED(parent); + return 1; + } + + + void addData(int pRole, const QVariant& pValue) + { + mData.insert(pRole, pValue); + } + + +}; + + +class test_ProviderCategoryFilterModel + : public QObject +{ + Q_OBJECT + QSharedPointer mModel; + + private Q_SLOTS: + void init() + { + mModel.reset(new ProviderCategoryFilterModel()); + } + + + void cleanup() + { + mModel.reset(); + } + + + void test_UpdateSearchString() + { + QSignalSpy spy(mModel.data(), &ProviderCategoryFilterModel::fireCriteriaChanged); + const QString search = QStringLiteral("search"); + + mModel->updateSearchString(search); + QCOMPARE(mModel->getSearchString(), search); + QCOMPARE(spy.count(), 1); + } + + + void test_CategorySelection() + { + QSignalSpy spy(mModel.data(), &ProviderCategoryFilterModel::fireCriteriaChanged); + const QString category1 = QStringLiteral("CATEGORY"); + const QString category2 = QStringLiteral("testCATEGORY"); + + mModel->setCategorySelection(QString()); + QVERIFY(mModel->mSelectedCategories.isEmpty()); + QCOMPARE(spy.count(), 1); + + mModel->setCategorySelection(category1); + QVERIFY(mModel->mSelectedCategories.contains("category")); + QCOMPARE(spy.count(), 2); + + mModel->updateCategorySelection(category2, true); + QVERIFY(mModel->mSelectedCategories.contains("testcategory")); + QCOMPARE(spy.count(), 3); + + mModel->updateCategorySelection(category2, true); + QVERIFY(mModel->mSelectedCategories.contains("testcategory")); + QCOMPARE(spy.count(), 3); + + mModel->updateCategorySelection(category1, false); + QVERIFY(mModel->mSelectedCategories.contains("testcategory")); + QVERIFY(!mModel->mSelectedCategories.contains("category")); + QCOMPARE(spy.count(), 4); + } + + + void test_SortByCategoryFirst() + { + mModel->sortByCategoryFirst(true); + QCOMPARE(mModel->sortRole(), ProviderModel::SORT_ROLE); + + mModel->sortByCategoryFirst(false); + QCOMPARE(mModel->sortRole(), ProviderModel::SHORTNAME); + } + + + void test_AddAdditionalResultCategories() + { + QSignalSpy spy(mModel.data(), &ProviderCategoryFilterModel::fireCriteriaChanged); + + mModel->addAdditionalResultCategories(); + QVERIFY(mModel->getSelectedCategories().isEmpty()); + QCOMPARE(spy.count(), 0); + + const QString category("citizen"); + const QString selected("other"); + const QString searchString("provider1"); + mModel->setCategorySelection(selected); + mModel->updateSearchString(searchString); + MockProviderModel model; + model.addData(Qt::DisplayRole, searchString); + model.addData(ProviderModel::CATEGORY, category); + mModel->setSourceModel(&model); + + mModel->addAdditionalResultCategories(); + QVERIFY(mModel->getSelectedCategories().contains(category)); + QCOMPARE(spy.count(), 3); + } + + + void test_ResultCountForFilter() + { + const QSet categories({"citizen"}); + const QString selected("other"); + const QString searchString("provider1"); + + QCOMPARE(mModel->resultCountForFilter(categories, searchString), 0); + + mModel->setCategorySelection(selected); + mModel->updateSearchString(searchString); + MockProviderModel model; + model.addData(Qt::DisplayRole, searchString); + model.addData(ProviderModel::CATEGORY, "citizen"); + mModel->setSourceModel(&model); + QCOMPARE(mModel->resultCountForFilter(categories, searchString), 1); + + const QSet unknownCategories({"test category"}); + QCOMPARE(mModel->resultCountForFilter(unknownCategories, searchString), 0); + } + + + void test_FilterAcceptsRow() + { + QVERIFY(mModel->filterAcceptsRow(0, QModelIndex())); + + const QString all("all"); + mModel->setCategorySelection(all); + QVERIFY(mModel->filterAcceptsRow(0, QModelIndex())); + + const QString citizen("citizen"); + mModel->setCategorySelection(citizen); + MockProviderModel model; + model.addData(ProviderModel::CATEGORY, citizen); + mModel->setSourceModel(&model); + QVERIFY(mModel->filterAcceptsRow(0, QModelIndex())); + + const QString unknownCategory("test category"); + mModel->setCategorySelection(unknownCategory); + QVERIFY(!mModel->filterAcceptsRow(0, QModelIndex())); + + const QString searchString("search"); + mModel->updateSearchString(searchString); + QVERIFY(!mModel->filterAcceptsRow(0, QModelIndex())); + } + + +}; + +QTEST_GUILESS_MAIN(test_ProviderCategoryFilterModel) +#include "test_ProviderCategoryFilterModel.moc" diff --git a/test/qt/ui/qml/test_ProviderModel.cpp b/test/qt/ui/qml/test_ProviderModel.cpp new file mode 100644 index 0000000..01225fd --- /dev/null +++ b/test/qt/ui/qml/test_ProviderModel.cpp @@ -0,0 +1,69 @@ +/*! + * \brief Unit tests for \ref ProviderModel + * + * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "ProviderModel.h" + +#include +#include + + +using namespace governikus; + + +class test_ProviderModel + : public QObject +{ + Q_OBJECT + + private Q_SLOTS: + void createCostStringNullCost() + { + const auto& msg = ProviderModel::createCostString(CallCost()); + QVERIFY(msg.isNull()); + } + + + void createCostString_data() + { + QTest::addColumn("freeSeconds"); + QTest::addColumn("lLineCentsPMin"); + QTest::addColumn("lLineCentsPCall"); + QTest::addColumn("mobCentsPMin"); + QTest::addColumn("mobCentsPCall"); + QTest::addColumn("msg"); + + const QString msg1 = QStringLiteral("10 seconds free, afterwards landline costs 0.5 ct/min; mobile costs may vary."); + const QString msg2 = QStringLiteral("landline costs 20 ct/call; mobile costs may vary."); + const QString msg3 = QStringLiteral("landline costs 15 ct/min; mobile costs 25 ct/min"); + const QString msg4 = QStringLiteral("20 seconds free, afterwards landline costs 15 ct/min; mobile costs 1.01 EUR/call"); + const QString msg5 = QStringLiteral("60 seconds free, afterwards landline costs 2 EUR/call; mobile costs 55 ct/call"); + + QTest::newRow("landlineProMin") << 10 << 0.5 << 2.4 << 0.0 << 0.0 << msg1; + QTest::newRow("landlineProCall") << 0 << 0.0 << 20.0 << 0.0 << 0.0 << msg2; + QTest::newRow("landlineAndMobProMin") << 0 << 15.0 << 30.0 << 25.0 << 0.0 << msg3; + QTest::newRow("landlineProMinMobProCall") << 20 << 15.0 << 30.0 << 0.0 << 101.0 << msg4; + QTest::newRow("landlineAndMobProCall") << 60 << 0.0 << 200.0 << 0.0 << 55.0 << msg5; + } + + + void createCostString() + { + QFETCH(int, freeSeconds); + QFETCH(double, lLineCentsPMin); + QFETCH(double, lLineCentsPCall); + QFETCH(double, mobCentsPMin); + QFETCH(double, mobCentsPCall); + QFETCH(QString, msg); + + const CallCost cost(freeSeconds, lLineCentsPMin, lLineCentsPCall, mobCentsPMin, mobCentsPCall); + QCOMPARE(ProviderModel::createCostString(cost), msg); + } + + +}; + +QTEST_GUILESS_MAIN(test_ProviderModel) +#include "test_ProviderModel.moc" diff --git a/test/qt/ui/qml/test_ProviderNameFilterModel.cpp b/test/qt/ui/qml/test_ProviderNameFilterModel.cpp new file mode 100644 index 0000000..1642547 --- /dev/null +++ b/test/qt/ui/qml/test_ProviderNameFilterModel.cpp @@ -0,0 +1,79 @@ +/*! + * \brief Unit tests for \ref ProviderNameFilterModel + * + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ +#include "ProviderNameFilterModel.h" + +#include "AppSettings.h" +#include "HistoryModel.h" +#include "ProviderConfiguration.h" +#include "ResourceLoader.h" + +#include + + +using namespace governikus; + + +class test_ProviderNameFilterModel + : public QObject +{ + Q_OBJECT + QSharedPointer mModel; + + private Q_SLOTS: + void initTestCase() + { + ResourceLoader::getInstance().init(); + } + + + void init() + { + mModel.reset(new ProviderNameFilterModel()); + } + + + void cleanup() + { + mModel.clear(); + } + + + void test_FilterAcceptsRow() + { + QVERIFY(!mModel->filterAcceptsRow(0, QModelIndex())); + + HistoryModel model; + mModel->setSourceModel(&model); + + HistoryInfo historyInfo1("SubjectName", QString("https://makler.allianz.de"), "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + HistoryInfo historyInfo2("SubjectName", QString("https://test.de"), "Usage", QDateTime::currentDateTime(), "TermOfUsage", {"RequestedData"}); + Env::getSingleton()->getHistorySettings().addHistoryInfo(historyInfo1); + Env::getSingleton()->getHistorySettings().addHistoryInfo(historyInfo2); + const QString providerAddress("https://makler.allianz.de"); + mModel->setProviderAddress(providerAddress); + + QVERIFY(!mModel->filterAcceptsRow(0, QModelIndex())); + QVERIFY(mModel->filterAcceptsRow(1, QModelIndex())); + } + + + void test_SetProviderAddress() + { + const QString invalidProviderAddress("https://test.de/"); + QTest::ignoreMessage(QtWarningMsg, "Cannot select provider with address \"https://test.de/\""); + mModel->setProviderAddress(invalidProviderAddress); + QCOMPARE(mModel->mProvider.getAddress(), QString()); + + const QString validProviderAddress("https://makler.allianz.de"); + mModel->setProviderAddress(validProviderAddress); + QCOMPARE(mModel->mProvider.getAddress(), validProviderAddress); + } + + +}; + +QTEST_GUILESS_MAIN(test_ProviderNameFilterModel) +#include "test_ProviderNameFilterModel.moc" diff --git a/test/qt/qml/test_QmlFileStructure.cpp b/test/qt/ui/qml/test_QmlFileStructure.cpp similarity index 92% rename from test/qt/qml/test_QmlFileStructure.cpp rename to test/qt/ui/qml/test_QmlFileStructure.cpp index b9e950f..1c0737f 100644 --- a/test/qt/qml/test_QmlFileStructure.cpp +++ b/test/qt/ui/qml/test_QmlFileStructure.cpp @@ -67,7 +67,7 @@ class test_QmlFileStructure for (const QString& file : qAsConst(mQmlFiles)) { - if (file.contains(QStringLiteral("+phone")) || file.contains(QStringLiteral("+tablet"))) + if (file.contains(QLatin1String("+phone")) || file.contains(QLatin1String("+tablet"))) { const QFileInfo info(file); QTest::newRow(info.fileName().toLatin1().data()) << info; @@ -85,7 +85,7 @@ class test_QmlFileStructure dir.cdUp(); const auto& parentFolder = dir.dirName(); - if (parentFolder == QStringLiteral("+android") || parentFolder == QStringLiteral("+ios")) + if (parentFolder == QLatin1String("+android") || parentFolder == QLatin1String("+ios")) { dir.cdUp(); dir.cd(device); diff --git a/test/qt/ui/qml/test_RemoteServiceModel.cpp b/test/qt/ui/qml/test_RemoteServiceModel.cpp new file mode 100644 index 0000000..8b244d6 --- /dev/null +++ b/test/qt/ui/qml/test_RemoteServiceModel.cpp @@ -0,0 +1,194 @@ +/*! + * \brief Unit tests for \ref ProviderModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "RemoteServiceModel.h" + +#include "context/RemoteServiceContext.h" +#include "EstablishPaceChannelParser.h" +#include "MockRemoteServer.h" + +#include +#include + + +using namespace governikus; + +class test_RemoteServiceModel + : public QObject +{ + Q_OBJECT + RemoteServiceModel * mModel; + QSharedPointer mContext; + + static QByteArray createDataToParse(const PacePasswordId& pinId) + { + const QByteArray chat = QByteArray::fromHex("7F4C12060904007F00070301020253050000000F0F"); + const QByteArray certDescription = QByteArray::fromHex("30 8202A4" + " 06 0A 04007F00070301030103" + " A1 0E 0C0C442D547275737420476D6248" + " A3 3A 0C38476573616D7476657262616E64206465722064657574736368656E20566572736963686572756E67737769727473636861667420652E562E" + " A5 820248" + " 04 820244 4E616D652C20416E7363687269667420756E6420452D4D61696C2D4164726573736520646573204469656E737465616E626965746572733A0D0A476573616D7476657262616E64206465722064657574736368656E20566572736963686572756E67737769727473636861667420652E562E0D0A57696C68656C6D73747261C39F652034332F3433670D0A3130313137204265726C696E0D0A6265726C696E406764762E64650D0A0D0A4765736368C3A46674737A7765636B3A0D0A2D52656769737472696572756E6720756E64204C6F67696E20616D204744562D4D616B6C6572706F7274616C2D0D0A0D0A48696E7765697320617566206469652066C3BC722064656E204469656E737465616E626965746572207A757374C3A46E646967656E205374656C6C656E2C20646965206469652045696E68616C74756E672064657220566F7273636872696674656E207A756D20446174656E73636875747A206B6F6E74726F6C6C696572656E3A0D0A4265726C696E6572204265617566747261677465722066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E7366726569686569740D0A416E20646572205572616E696120342D31300D0A3130373837204265726C696E0D0A3033302F3133382038392D300D0A6D61696C626F7840646174656E73636875747A2D6265726C696E2E64650D0A687474703A2F2F7777772E646174656E73636875747A2D6265726C696E2E64650D0A416E737072656368706172746E65723A2044722E20416C6578616E64657220446978"); + + EstablishPaceChannel builder; + builder.setPasswordId(pinId); + builder.setChat(chat); + builder.setCertificateDescription(certDescription); + const auto command = builder.createCommandDataCcid(); + + return command.getBuffer(); + } + + + private Q_SLOTS: + void initTestCase() + { + Env::setCreator(std::function([&] { + return new MockRemoteServer(); + })); + mModel = Env::getSingleton(); + } + + + void init() + { + mContext.reset(new RemoteServiceContext()); + } + + + void cleanup() + { + mModel->resetContext(); + mContext.clear(); + } + + + void test_ReaderPlugInType() + { + const ReaderManagerPlugInType input1 = ReaderManagerPlugInType::NFC; + const ReaderManagerPlugInType input2 = ReaderManagerPlugInType::UNKNOWN; + + mModel->setReaderPlugInType(input1); + QCOMPARE(mModel->getReaderPlugInType(), ReaderManagerPlugInType::UNKNOWN); + + mModel->resetContext(mContext); + mModel->setReaderPlugInType(input1); + QCOMPARE(mModel->getReaderPlugInType(), input1); + + mModel->setReaderPlugInType(input2); + QCOMPARE(mModel->getReaderPlugInType(), ReaderManagerPlugInType::UNKNOWN); + } + + + void test_CancelPasswordRequest() + { + QSignalSpy spy(mContext.data(), &RemoteServiceContext::fireCancelPasswordRequest); + + mModel->cancelPasswordRequest(); + QCOMPARE(spy.count(), 0); + + mModel->resetContext(mContext); + mModel->cancelPasswordRequest(); + QCOMPARE(spy.count(), 1); + } + + + void test_Running() + { + QSignalSpy spyStartWorkflow(mModel, &RemoteServiceModel::fireStartWorkflow); + QSignalSpy spyCancelWorkflow(mContext.data(), &RemoteServiceContext::fireCancelWorkflow); + QSignalSpy spyIsRunningChanged(mModel, &RemoteServiceModel::fireIsRunningChanged); + + QVERIFY(!mModel->isRunning()); + + mModel->resetContext(mContext); + QVERIFY(!mModel->isRunning()); + + mContext->getRemoteServer()->start(QString()); + QVERIFY(mModel->isRunning()); + mModel->setRunning(false); + QCOMPARE(spyIsRunningChanged.count(), 1); + QCOMPARE(spyCancelWorkflow.count(), 1); + + mContext->getRemoteServer()->stop(); + mModel->setRunning(true); + QCOMPARE(spyIsRunningChanged.count(), 2); + QCOMPARE(spyStartWorkflow.count(), 1); + } + + + void test_ResetContext() + { + QSignalSpy spyConnectedChanged(mModel, &RemoteServiceModel::fireConnectedChanged); + QSignalSpy spyCurrentStateChanged(mModel, &WorkflowModel::fireCurrentStateChanged); + QSignalSpy spyIsRunningChanged(mModel, &RemoteServiceModel::fireIsRunningChanged); + QSignalSpy spyPskChanged(mModel, &RemoteServiceModel::firePskChanged); + QSignalSpy spyConnectedClientDeviceNameChanged(mModel, &RemoteServiceModel::fireConnectionInfoChanged); + + mModel->resetContext(mContext); + QCOMPARE(spyCurrentStateChanged.count(), 1); + QCOMPARE(spyConnectedChanged.count(), 1); + + Q_EMIT mContext->fireStateChanged(QString()); + QCOMPARE(spyIsRunningChanged.count(), 1); + + Q_EMIT mContext->getRemoteServer()->firePskChanged(QByteArray()); + QCOMPARE(spyPskChanged.count(), 1); + + Q_EMIT mContext->getRemoteServer()->fireConnectedChanged(true); + QCOMPARE(spyConnectedChanged.count(), 2); + QCOMPARE(spyConnectedClientDeviceNameChanged.count(), 1); + } + + + void test_SetPairing() + { + mModel->resetContext(mContext); + const QSharedPointer server = qSharedPointerCast(mContext->getRemoteServer()); + + mModel->setPairing(true); + QVERIFY(server->getPairing()); + + mModel->setPairing(false); + QVERIFY(!server->getPairing()); + } + + + void test_GetPasswordTypeContextIsNull() + { + QCOMPARE(mModel->getPasswordType(), QString()); + } + + + void test_GetPassword_data() + { + QTest::addColumn("password"); + QTest::addColumn("output"); + + QTest::newRow("pin") << PacePasswordId::PACE_PIN << QString("PIN"); + QTest::newRow("can") << PacePasswordId::PACE_CAN << QString("CAN"); + QTest::newRow("puk") << PacePasswordId::PACE_PUK << QString("PUK"); + QTest::newRow("unknown") << PacePasswordId::UNKNOWN << QString(); + } + + + void test_GetPassword() + { + QFETCH(PacePasswordId, password); + QFETCH(QString, output); + + auto data = createDataToParse(password); + QSharedPointer message(new IfdEstablishPaceChannel(QString(), data)); + mContext->setEstablishPaceChannelMessage(message); + mModel->resetContext(mContext); + QCOMPARE(mModel->getPasswordType(), output); + } + + +}; + +QTEST_GUILESS_MAIN(test_RemoteServiceModel) +#include "test_RemoteServiceModel.moc" diff --git a/test/qt/ui/qml/test_SelfAuthModel.cpp b/test/qt/ui/qml/test_SelfAuthModel.cpp new file mode 100644 index 0000000..f272e80 --- /dev/null +++ b/test/qt/ui/qml/test_SelfAuthModel.cpp @@ -0,0 +1,119 @@ +/*! + * \brief Unit tests for \ref SelfAuthModel + * + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "SelfAuthModel.h" + +#include "context/SelfAuthContext.h" + +#include "MockCardConnectionWorker.h" +#include "TestFileHelper.h" + +#include + + +using namespace governikus; + +class test_SelfAuthModel + : public QObject +{ + Q_OBJECT + QSharedPointer mContext; + SelfAuthModel* mModel; + + private Q_SLOTS: + void init() + { + mContext.reset(new SelfAuthContext()); + mModel = Env::getSingleton(); + } + + + void cleanup() + { + mContext.clear(); + mModel->resetContext(); + } + + + void test_StartWorkflow() + { + QSignalSpy spy(mModel, &SelfAuthModel::fireStartWorkflow); + + mModel->startWorkflow(); + QCOMPARE(spy.count(), 1); + } + + + void test_CancelWorkflow() + { + QSignalSpy spy(mContext.data(), &SelfAuthContext::fireCancelWorkflow); + + mModel->cancelWorkflow(); + QCOMPARE(spy.count(), 0); + + mModel->resetContext(mContext); + mModel->cancelWorkflow(); + QCOMPARE(spy.count(), 1); + } + + + void test_IsBasicReader() + { + + QThread workerThread; + workerThread.start(); + + QVERIFY(mModel->isBasicReader()); + + const QSharedPointer worker(new MockCardConnectionWorker()); + worker->moveToThread(&workerThread); + const QSharedPointer connection(new CardConnection(worker)); + mContext->setCardConnection(connection); + ReaderInfo info; + + info.setBasicReader(true); + Q_EMIT worker->fireReaderInfoChanged(info); + mModel->resetContext(mContext); + QVERIFY(mModel->isBasicReader()); + + info.setBasicReader(false); + Q_EMIT worker->fireReaderInfoChanged(info); + QVERIFY(!mModel->isBasicReader()); + + workerThread.quit(); + workerThread.wait(); + } + + + void test_RoleNames() + { + QVERIFY(mModel->roleNames().keys().contains(SelfAuthModel::DataRoles::NAME)); + QVERIFY(mModel->roleNames().keys().contains(SelfAuthModel::DataRoles::VALUE)); + QVERIFY(mModel->roleNames().values().contains("name")); + QVERIFY(mModel->roleNames().values().contains("value")); + } + + + void test_OnSelfAuthenticationDataChanged() + { + const auto& data = TestFileHelper::readFile(":/self/SelfAuthenticationDataNoAddress.json"); + SelfAuthenticationData selfAuthenticationData(data); + mContext->setSelfAuthenticationData(selfAuthenticationData); + mModel->resetContext(mContext); + for (int i = 0; i < selfAuthenticationData.getOrderedSelfData().length(); i++) + { + QModelIndex index = mModel->index(i, 0); + QCOMPARE(mModel->data(index, SelfAuthModel::DataRoles::NAME), selfAuthenticationData.getOrderedSelfData().at(i).first); + QCOMPARE(mModel->data(index, SelfAuthModel::DataRoles::VALUE), selfAuthenticationData.getOrderedSelfData().at(i).second); + QCOMPARE(mModel->data(index, 100), QVariant()); + } + } + + +}; + +QTEST_GUILESS_MAIN(test_SelfAuthModel) +#include "test_SelfAuthModel.moc" diff --git a/test/qt/ui/qml/test_UIPlugInQml.cpp b/test/qt/ui/qml/test_UIPlugInQml.cpp new file mode 100644 index 0000000..17ada66 --- /dev/null +++ b/test/qt/ui/qml/test_UIPlugInQml.cpp @@ -0,0 +1,172 @@ +/*! + * \copyright Copyright (c) 2019 Governikus GmbH & Co. KG, Germany + */ + + +#include "PortFile.h" +#include "WebSocketHelper.h" + +#include +#include +#include + +using namespace governikus; + + +class test_UIPlugInQml + : public QObject +{ + Q_OBJECT + + private: + static const int PROCESS_TIMEOUT = 75000; + + QScopedPointer mApp2; + QScopedPointer mHelper; + + bool isQmlEngineInitDone(const bool pCheckDoneAndSuccessful) + { + mHelper->sendMessage(QStringLiteral("{\"cmd\": \"GET_LOG\"}")); + + bool initContainedInLog = false; + bool initContainedAndSuccess = false; + QString logData; + mHelper->waitForMessage([&initContainedInLog, &initContainedAndSuccess, &logData](const QJsonObject& pMessage){ + if (pMessage[QLatin1String("data")].isNull()) + { + return false; + } + + const QString& data = pMessage[QLatin1String("data")].toString(); + logData = data; + initContainedInLog = data.contains(QLatin1String("QML engine initialization finished")); + initContainedAndSuccess = data.contains(QLatin1String("QML engine initialization finished with 0 warnings.")); + return true; + }); + + if (pCheckDoneAndSuccessful) + { + if (initContainedAndSuccess) + { + return true; + } + + qDebug().noquote() << "Error output from AusweisApp2 process:\n" << logData; + return false; + } + + return initContainedInLog; + } + + + private Q_SLOTS: + void initTestCase() + { + qRegisterMetaType("QProcess::ProcessState"); + } + + + void test_qmlEngineInit_data() + { + QTest::addColumn("platformSelector"); + + QTest::newRow("Android") << QString("mobile,android,phone"); + QTest::newRow("Android Tablet") << QString("mobile,android,tablet"); + QTest::newRow("iOS") << QString("mobile,ios,phone"); + QTest::newRow("iOS Tablet") << QString("mobile,ios,tablet"); + QTest::newRow("macOS") << QString("desktop,mac"); + QTest::newRow("Windows") << QString("desktop,win"); + } + + + void test_qmlEngineInit() + { + QFETCH(QString, platformSelector); + + const QString& path = QCoreApplication::applicationDirPath() + "/../../src/"; + const QString& app = path + "AusweisApp2" +#ifdef Q_OS_WIN + + ".exe" +#endif + ; + + QStringList args; + args << "--ui" << "qml"; + args << "--ui" << "websocket"; + args << "--port" << "0"; + args << "-platform" << "minimal"; + + mApp2.reset(new QProcess()); + mApp2->setProgram(app); + mApp2->setWorkingDirectory(path); + mApp2->setArguments(args); + + QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); + env.insert("OVERRIDE_PLATFORM_SELECTOR", platformSelector); + mApp2->setProcessEnvironment(env); + + mApp2->start(); + QVERIFY(mApp2->waitForStarted(PROCESS_TIMEOUT)); + + QFile portInfoFile(PortFile::getPortFilename(QString(), mApp2->processId(), QStringLiteral("AusweisApp2"))); + QTRY_COMPARE_WITH_TIMEOUT(portInfoFile.exists(), true, PROCESS_TIMEOUT); + QVERIFY(portInfoFile.open(QIODevice::ReadOnly)); + + quint16 webSocketPort = 0; + QTextStream(&portInfoFile) >> webSocketPort; + QVERIFY(webSocketPort > 0); + + mHelper.reset(new WebSocketHelper(webSocketPort)); + QCOMPARE(mHelper->getState(), QAbstractSocket::SocketState::ConnectedState); + + QTRY_VERIFY_WITH_TIMEOUT(isQmlEngineInitDone(false), PROCESS_TIMEOUT); + QVERIFY(isQmlEngineInitDone(true)); + } + + + void cleanup() + { + const QString portFile = PortFile::getPortFilename(QString(), mApp2->processId(), QStringLiteral("AusweisApp2")); + QVERIFY(QFile::exists(portFile)); + mHelper.reset(); + + if (mApp2->state() == QProcess::NotRunning) + { + return; + } + +#ifndef Q_OS_WIN + // QProcess::terminate() sends WM_CLOSE on Windows. We can not handle this signal + // since it does not clearly indicate a quit request. It might simply be a closing + // window, too. + mApp2->terminate(); + if (!mApp2->waitForFinished(PROCESS_TIMEOUT)) + { + QWARN("Application didn't terminate."); + } +#endif + + if (mApp2->state() != QProcess::NotRunning) + { +#ifndef Q_OS_WIN + QWARN("Killing application."); +#endif + mApp2->kill(); + } + QTRY_COMPARE_WITH_TIMEOUT(mApp2->state(), QProcess::NotRunning, PROCESS_TIMEOUT); + if (mApp2->exitStatus() != QProcess::NormalExit) + { + QWARN(mApp2->readAllStandardError().constData()); + } + +#ifdef Q_OS_WIN + QFile::remove(portFile); +#endif + QVERIFY(!QFile::exists(portFile)); + } + + +}; + +QTEST_GUILESS_MAIN(test_UIPlugInQml) +#include "test_UIPlugInQml.moc" diff --git a/test/qt/qml/test_WorkflowModel.cpp b/test/qt/ui/qml/test_WorkflowModel.cpp similarity index 100% rename from test/qt/qml/test_WorkflowModel.cpp rename to test/qt/ui/qml/test_WorkflowModel.cpp diff --git a/test/qt/websocket/test_UIPlugInWebSocket.cpp b/test/qt/ui/websocket/test_UIPlugInWebSocket.cpp similarity index 88% rename from test/qt/websocket/test_UIPlugInWebSocket.cpp rename to test/qt/ui/websocket/test_UIPlugInWebSocket.cpp index 2a9b705..a1ad24c 100644 --- a/test/qt/websocket/test_UIPlugInWebSocket.cpp +++ b/test/qt/ui/websocket/test_UIPlugInWebSocket.cpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include using namespace governikus; @@ -26,22 +26,17 @@ class test_UIPlugInWebSocket static const int PROCESS_TIMEOUT = 15000; QScopedPointer mApp2; - QScopedPointer mWebSocket; QScopedPointer mHelper; private Q_SLOTS: void initTestCase() { - #ifdef Q_OS_WIN - QSKIP("Not supported"); - #endif + qRegisterMetaType("QProcess::ProcessState"); } void init() { - qRegisterMetaType("QProcess::ProcessState"); - QString path = QCoreApplication::applicationDirPath() + "/../../src/"; QString app = path + "AusweisApp2"; #ifdef Q_OS_WIN @@ -85,20 +80,32 @@ class test_UIPlugInWebSocket QCOMPARE(mApp2->state(), QProcess::Running); + #ifndef Q_OS_WIN + // QProcess::terminate() sends WM_CLOSE on Windows. We can not handle this signal + // since it does not clearly indicate a quit request. It might simply be a closing + // window, too. mApp2->terminate(); mApp2->waitForFinished(PROCESS_TIMEOUT); + #endif if (mApp2->state() != QProcess::NotRunning) { mApp2->kill(); } - QCOMPARE(mApp2->state(), QProcess::NotRunning); + QTRY_COMPARE_WITH_TIMEOUT(mApp2->state(), QProcess::NotRunning, PROCESS_TIMEOUT); + #ifndef Q_OS_WIN + // There will never be a clean shutdown on Windows. if (mApp2->exitCode() != 0) { qDebug().noquote() << "Error output from AusweisApp2 process:\n" << mApp2->readAllStandardError(); } QCOMPARE(mApp2->exitCode(), 0); + #endif + + #ifdef Q_OS_WIN + QFile::remove(portFile); + #endif QVERIFY(!QFile::exists(portFile)); } diff --git a/test/qt/widget/test_HelpAction.cpp b/test/qt/ui/widget/test_HelpAction.cpp similarity index 99% rename from test/qt/widget/test_HelpAction.cpp rename to test/qt/ui/widget/test_HelpAction.cpp index 23e339c..ba6ecd9 100644 --- a/test/qt/widget/test_HelpAction.cpp +++ b/test/qt/ui/widget/test_HelpAction.cpp @@ -6,7 +6,7 @@ #include "TestFileHelper.h" -#include +#include #include "HelpAction.h" #include "LanguageLoader.h" diff --git a/test/qt/widget/test_ReaderDriverModel.cpp b/test/qt/ui/widget/test_ReaderDriverModel.cpp similarity index 99% rename from test/qt/widget/test_ReaderDriverModel.cpp rename to test/qt/ui/widget/test_ReaderDriverModel.cpp index 004c585..b8776d2 100644 --- a/test/qt/widget/test_ReaderDriverModel.cpp +++ b/test/qt/ui/widget/test_ReaderDriverModel.cpp @@ -39,7 +39,7 @@ MockReaderManager::MockReaderManager(const QVector& pReaderInfos) : QVector MockReaderManager::getReaderInfos(const ReaderFilter& pFilter) const { - Q_UNUSED(pFilter); + Q_UNUSED(pFilter) return mReaderInfos; } diff --git a/test/qt/whitelist_client/test_Survey.cpp b/test/qt/whitelist_client/test_Survey.cpp deleted file mode 100644 index 3b6dc0c..0000000 --- a/test/qt/whitelist_client/test_Survey.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! - * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany - */ - -#include "Survey.h" - -#include - -using namespace governikus; - - -class test_Survey - : public QObject -{ - Q_OBJECT - - private Q_SLOTS: - void testValidInvalid() - { - const Survey nonNullSurvey( - QStringLiteral("37.0.A.2.248"), - QStringLiteral("6.0"), - QStringLiteral("3.18.19+"), - 128, - QStringLiteral("Sony"), - QStringLiteral("F3311"), - QStringLiteral("XPERIA E5"), - QStringLiteral("1.15.1")); - QVERIFY(!nonNullSurvey.isNull()); - - const Survey nullSurvey; - QVERIFY(nullSurvey.isNull()); - } - - - void testToJSON() - { - const Survey survey( - QStringLiteral("37.0.A.2.248"), - QStringLiteral("6.0"), - QStringLiteral("3.18.19+"), - 128, - QStringLiteral("Sony"), - QStringLiteral("F3311"), - QStringLiteral("XPERIA E5"), - QStringLiteral("1.15.1")); - - const QByteArray& byteArray = survey.toJsonByteArray(); - QCOMPARE(byteArray, - QByteArray("{\n" - " \"AusweisAppVersionNumber\": \"1.15.1\",\n" - " \"ModelName\": \"XPERIA E5\",\n" - " \"ModelNumber\": \"F3311\",\n" - " \"Rom\": {\n" - " \"AndroidVersion\": \"6.0\",\n" - " \"BuildNumber\": \"37.0.A.2.248\",\n" - " \"KernelVersion\": \"3.18.19+\",\n" - " \"MaximumNfcPacketLength\": 128\n" - " },\n" - " \"Vendor\": \"Sony\"\n" - "}\n")); - } - - -}; - -QTEST_GUILESS_MAIN(test_Survey) -#include "test_Survey.moc" diff --git a/test/qt/whitelist_client/test_SurveyModel.cpp b/test/qt/whitelist_client/test_SurveyModel.cpp new file mode 100644 index 0000000..3edf6f1 --- /dev/null +++ b/test/qt/whitelist_client/test_SurveyModel.cpp @@ -0,0 +1,84 @@ +/*! + * \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany + */ + +#include "SurveyModel.h" + +#include "DeviceInfo.h" +#include "Env.h" +#include "MockNetworkManager.h" + +#include +#include + +using namespace governikus; + +class test_SurveyModel + : public QObject +{ + Q_OBJECT + + private: + QPointer mNetworkManager; + + private Q_SLOTS: + void init() + { + mNetworkManager = new MockNetworkManager(); + Env::set(NetworkManager::staticMetaObject, mNetworkManager.data()); + } + + + void testTransmitSurvey() + { + SurveyModel model; + + model.transmitSurvey(); + const QByteArray json = mNetworkManager->getLastData(); + auto result = QJsonDocument::fromJson(json); + + QVERIFY(result["Rom"].isObject()); + auto rom = result["Rom"].toObject(); + QVERIFY(rom["BuildNumber"].isString()); + QCOMPARE(rom["BuildNumber"].toString(), DeviceInfo::getOSBuildNumber()); + QVERIFY(rom["AndroidVersion"].isString()); + QCOMPARE(rom["AndroidVersion"].toString(), DeviceInfo::getOSVersion()); + QVERIFY(rom["KernelVersion"].isString()); + QCOMPARE(rom["KernelVersion"].toString(), DeviceInfo::getKernelVersion()); + QVERIFY(rom["MaximumNfcPacketLength"].isDouble()); + QCOMPARE(rom["MaximumNfcPacketLength"].toDouble(), 0); + + QVERIFY(result["Vendor"].isString()); + QCOMPARE(result["Vendor"].toString(), DeviceInfo::getVendor()); + QVERIFY(result["ModelNumber"].isString()); + QCOMPARE(result["ModelNumber"].toString(), DeviceInfo::getModelNumber()); + QVERIFY(result["ModelName"].isString()); + QCOMPARE(result["ModelName"].toString(), DeviceInfo::getModelName()); + QVERIFY(result["AusweisAppVersionNumber"].isString()); + QCOMPARE(result["AusweisAppVersionNumber"].toString(), QCoreApplication::applicationVersion()); + } + + + void testMaximumPacketLength() + { + SurveyModel model; + + model.transmitSurvey(); + QByteArray json = mNetworkManager->getLastData(); + auto result = QJsonDocument::fromJson(json); + auto rom = result["Rom"].toObject(); + QCOMPARE(rom["MaximumNfcPacketLength"].toDouble(), 0); + + model.setMaximumNfcPacketLength(9999); + model.transmitSurvey(); + json = mNetworkManager->getLastData(); + result = QJsonDocument::fromJson(json); + rom = result["Rom"].toObject(); + QCOMPARE(rom["MaximumNfcPacketLength"].toDouble(), 9999); + } + + +}; + +QTEST_GUILESS_MAIN(test_SurveyModel) +#include "test_SurveyModel.moc" diff --git a/uncrustify.cfg b/uncrustify.cfg index 0513850..5a69ccc 100644 --- a/uncrustify.cfg +++ b/uncrustify.cfg @@ -1,4 +1,4 @@ -# Uncrustify-0.68_f +# Uncrustify-0.69.0_f newlines = lf input_tab_size = 4 output_tab_size = 4 @@ -56,6 +56,7 @@ sp_before_template_paren = ignore sp_template_angle = remove sp_before_angle = remove sp_inside_angle = remove +sp_inside_angle_empty = ignore sp_angle_colon = ignore sp_after_angle = force sp_angle_paren = remove @@ -91,7 +92,10 @@ sp_between_mdatype_commas = ignore sp_paren_comma = force sp_before_ellipsis = ignore sp_type_ellipsis = ignore +sp_type_question = ignore sp_paren_ellipsis = ignore +sp_paren_qualifier = ignore +sp_paren_noexcept = ignore sp_after_class_colon = force sp_before_class_colon = remove sp_after_constr_colon = ignore @@ -145,6 +149,7 @@ sp_throw_paren = remove sp_after_throw = ignore sp_catch_paren = force sp_oc_catch_paren = ignore +sp_oc_classname_paren = ignore sp_version_paren = ignore sp_scope_paren = ignore sp_super_paren = remove @@ -219,6 +224,7 @@ sp_num_before_tr_emb_cmt = 0 sp_annotation_paren = ignore sp_skip_vbrace_tokens = false sp_after_noexcept = ignore +sp_vala_after_translation = ignore force_tab_after_define = false indent_columns = 4 indent_continue = 8 @@ -272,6 +278,7 @@ indent_switch_pp = true indent_case_shift = 0 indent_case_brace = 0 indent_col1_comment = true +indent_col1_multi_string_literal = false indent_label = 1 indent_access_spec = 0 indent_access_spec_body = true @@ -331,13 +338,6 @@ nl_assign_brace = remove nl_assign_square = ignore nl_tsquare_brace = ignore nl_after_square_assign = ignore -nl_func_var_def_blk = 0 -nl_typedef_blk_start = 0 -nl_typedef_blk_end = 0 -nl_typedef_blk_in = 0 -nl_var_def_blk_start = 0 -nl_var_def_blk_end = 0 -nl_var_def_blk_in = 0 nl_fcall_brace = ignore nl_enum_brace = force nl_enum_class = remove @@ -415,11 +415,13 @@ nl_func_def_end_multi_line = false nl_func_decl_empty = ignore nl_func_def_empty = ignore nl_func_call_empty = ignore +nl_func_call_start = ignore nl_func_call_start_multi_line = false nl_func_call_args_multi_line = false nl_func_call_end_multi_line = false nl_oc_msg_args = false nl_fdef_brace = force +nl_fdef_brace_cond = ignore nl_cpp_ldef_brace = ignore nl_return_expr = remove nl_after_semicolon = true @@ -450,6 +452,8 @@ nl_before_synchronized = ignore nl_after_synchronized = ignore nl_before_do = ignore nl_after_do = ignore +nl_before_return = false +nl_after_return = true nl_ds_struct_enum_cmt = false nl_ds_struct_enum_close_brace = false nl_class_colon = force @@ -476,6 +480,13 @@ nl_class_leave_one_liner_groups = false nl_after_func_body = 3 nl_after_func_body_class = 0 nl_after_func_body_one_liner = 0 +nl_func_var_def_blk = 0 +nl_typedef_blk_start = 0 +nl_typedef_blk_end = 0 +nl_typedef_blk_in = 0 +nl_var_def_blk_start = 0 +nl_var_def_blk_end = 0 +nl_var_def_blk_in = 0 nl_before_block_comment = 2 nl_before_c_comment = 0 nl_before_cpp_comment = 0 @@ -495,8 +506,6 @@ nl_inside_namespace = 0 eat_blanks_after_open_brace = false eat_blanks_before_close_brace = false nl_remove_extra_newlines = 0 -nl_before_return = false -nl_after_return = true nl_after_annotation = ignore nl_between_annotation = ignore pos_arith = ignore @@ -523,6 +532,9 @@ align_func_params = false align_func_params_span = 0 align_func_params_thresh = 0 align_func_params_gap = 0 +align_constr_value_span = 0 +align_constr_value_thresh = 0 +align_constr_value_gap = 0 align_same_func_call_params = false align_same_func_call_params_span = 0 align_same_func_call_params_thresh = 0 @@ -536,6 +548,7 @@ align_var_def_colon_gap = 0 align_var_def_attribute = false align_var_def_inline = false align_assign_span = 0 +align_assign_func_proto_span = 0 align_assign_thresh = 0 align_assign_decl_func = 0 align_enum_equ_span = 0 @@ -547,17 +560,18 @@ align_var_struct_span = 0 align_var_struct_thresh = 0 align_var_struct_gap = 0 align_struct_init_span = 0 -align_typedef_gap = 0 align_typedef_span = 0 +align_typedef_gap = 0 align_typedef_func = 0 align_typedef_star_style = 0 align_typedef_amp_style = 0 align_right_cmt_span = 0 +align_right_cmt_gap = 0 align_right_cmt_mix = false align_right_cmt_same_level = false -align_right_cmt_gap = 0 align_right_cmt_at_col = 0 align_func_proto_span = 0 +align_func_proto_thresh = 0 align_func_proto_gap = 0 align_on_operator = false align_mix_var_proto = false @@ -567,8 +581,8 @@ align_single_line_brace_gap = 0 align_oc_msg_spec_span = 0 align_nl_cont = false align_pp_define_together = false -align_pp_define_gap = 0 align_pp_define_span = 0 +align_pp_define_gap = 0 align_left_shift = true align_asm_colon = false align_oc_msg_colon_span = 0 @@ -658,6 +672,5 @@ use_options_overriding_for_qt_macros = true warn_level_tabs_found_in_verbatim_string_literals = 2 macro-open ASN1_ITEM_TEMPLATE macro-close ASN1_ITEM_TEMPLATE_END -set PRIVATE Q_SIGNALS # option(s) with 'not default' value: 157 #

    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�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

IUk))D`U~xnI)fy|LiVe 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�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®W4kNeO?;RWcO|s1THixS- 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

nH;EVijm637YunOtrnebKRNJ6~9^3OD1 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 eufVl8(fc17Yh0}-l-C^q0000 + + + + + + + + diff --git a/resources/images/desktop/bell_red.svg b/resources/images/desktop/bell_red.svg new file mode 100644 index 0000000..e7d1194 --- /dev/null +++ b/resources/images/desktop/bell_red.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/desktop/bell_white.svg b/resources/images/desktop/bell_white.svg new file mode 100644 index 0000000..246cc4b --- /dev/null +++ b/resources/images/desktop/bell_white.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/desktop/id_card.png b/resources/images/desktop/id_card.png new file mode 100644 index 0000000000000000000000000000000000000000..448ed85f52aae0ae4add44e58e518321ae1791e6 GIT binary patch literal 584984 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%0Ad%wCTvQQHOp!LDLumJR5D|8Cqz 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�&N9Q^!q+Md)?txG(uw@fZ|x2QH*GBohWlWt^0 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