Merge v1.14.1 into community
3
AUTHORS
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2014-2016 Governikus GmbH & Co. KG
|
||||
Copyright (c) 2014-2018 Governikus GmbH & Co. KG
|
||||
|
||||
|
||||
Authors
|
||||
|
@ -10,6 +10,7 @@ Ingo Weinhold
|
|||
Giorgio Busatto
|
||||
Jan Murawski
|
||||
Lars Schmertmann
|
||||
Jens Trillmann
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ ELSE()
|
|||
ENDIF()
|
||||
|
||||
|
||||
PROJECT(AusweisApp2 VERSION 1.14.0 LANGUAGES ${LANGUAGES})
|
||||
PROJECT(AusweisApp2 VERSION 1.14.1 LANGUAGES ${LANGUAGES})
|
||||
|
||||
# Set TWEAK if not defined in PROJECT_VERSION above to
|
||||
# have a valid tweak version without propagating it
|
||||
|
|
|
@ -8,7 +8,7 @@ Bitte lesen Sie zunächst die Allgemeinen Geschäftsbedingungen so wie die Lizen
|
|||
Allgemeine Geschäftsbedingungen
|
||||
|
||||
§ 1 Nutzungsbedingungen und Datenschutzhinweis
|
||||
(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesministerium des Innern (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.
|
||||
(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
|
||||
|
|
|
@ -18,7 +18,7 @@ IF(MAC OR LINUX OR WIN32)
|
|||
ENDIF()
|
||||
|
||||
MESSAGE(STATUS "Processing: ${file}")
|
||||
IF(NOT "${_system}" STREQUAL "SOURCES")
|
||||
IF(NOT "${_system}" STREQUAL "src")
|
||||
FILE(READ ${PACKAGING_DIR}/updater/Appcast.item.json.in item)
|
||||
|
||||
STRING(REPLACE "AusweisApp2-" "" APPCAST_FILE_VERSION ${file})
|
||||
|
|
|
@ -26,6 +26,7 @@ IF(MSVC)
|
|||
IF(WARNINGS_ARE_ERRORS)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
||||
ENDIF()
|
||||
ADD_FLAG(/Qspectre)
|
||||
ELSE()
|
||||
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
|
||||
|
||||
|
@ -61,9 +62,10 @@ ELSE()
|
|||
|
||||
|
||||
IF(ANDROID)
|
||||
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
|
||||
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64 -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finline-limit=64")
|
||||
ENDIF()
|
||||
SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||
ENDIF()
|
||||
|
|
|
@ -54,6 +54,25 @@ FUNCTION(ADD_FLAG)
|
|||
ENDFUNCTION()
|
||||
|
||||
|
||||
FUNCTION(QUERY_QMAKE _out _var)
|
||||
IF(NOT TARGET Qt5::qmake)
|
||||
MESSAGE(WARNING "qmake not found")
|
||||
RETURN()
|
||||
ENDIF()
|
||||
|
||||
GET_TARGET_PROPERTY(qmake_bin Qt5::qmake LOCATION)
|
||||
EXECUTE_PROCESS(COMMAND "${qmake_bin}" -query ${_var}
|
||||
RESULT_VARIABLE _result
|
||||
OUTPUT_VARIABLE _output
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
IF(_result EQUAL 0)
|
||||
SET(${_out} "${_output}" PARENT_SCOPE)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
|
||||
FUNCTION(GET_FILE_MATCHER _result_remove _result_keep)
|
||||
IF(NOT ANDROID)
|
||||
LIST(APPEND matcher_remove "_android")
|
||||
|
|
|
@ -44,6 +44,10 @@ FOREACH(dest "" "share/qt" "share/qt5")
|
|||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
IF(NOT QT_TRANSLATIONS_DIR)
|
||||
QUERY_QMAKE(QT_TRANSLATIONS_DIR QT_INSTALL_TRANSLATIONS)
|
||||
ENDIF()
|
||||
|
||||
MESSAGE(STATUS "QT_HOST_PREFIX: ${QT_HOST_PREFIX}")
|
||||
MESSAGE(STATUS "QT_TRANSLATIONS_DIR: ${QT_TRANSLATIONS_DIR}")
|
||||
|
||||
|
|
|
@ -3,6 +3,21 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.7.1)
|
|||
SET(ANDROID_SDK $ENV{ANDROID_HOME})
|
||||
SET(ANDROID_BUILD_TOOLS_REVISION $ENV{ANDROID_BUILD_TOOLS_REVISION})
|
||||
|
||||
IF(NOT EXISTS "${ANDROID_SDK}")
|
||||
MESSAGE(FATAL_ERROR "Environment variable ANDROID_HOME is undefined")
|
||||
ENDIF()
|
||||
|
||||
IF(NOT ANDROID_BUILD_TOOLS_REVISION)
|
||||
SET(_android_build_tools_dir "${ANDROID_SDK}/build-tools")
|
||||
FILE(GLOB build_tools ${_android_build_tools_dir}/*)
|
||||
LIST(LENGTH build_tools build_tools_len)
|
||||
IF(NOT build_tools_len EQUAL 1)
|
||||
MESSAGE(FATAL_ERROR "Cannot determine ANDROID_BUILD_TOOLS_REVISION: ${_android_build_tools_dir}")
|
||||
ENDIF()
|
||||
|
||||
GET_FILENAME_COMPONENT(ANDROID_BUILD_TOOLS_REVISION "${build_tools}" NAME)
|
||||
ENDIF()
|
||||
|
||||
SET(CMAKE_SYSTEM_NAME Android)
|
||||
SET(CMAKE_ANDROID_STL_TYPE gnustl_shared)
|
||||
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
AusweisApp2 1.14.1
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Releasedatum:** 28. März 2018
|
||||
|
||||
|
||||
|
||||
Anwender
|
||||
""""""""
|
||||
- Die Nutzung der PIN-Verwaltung ist nun auch mit der Funktion
|
||||
"Smartphone als Kartenleser" möglich.
|
||||
|
||||
- Die mobile Startseite wurde überarbeitet.
|
||||
|
||||
- Beim Koppeln von zwei Geräten für die Funktion "Smartphone als Kartenleser"
|
||||
wird nun eine einheitliche PIN-Tastatur verwendet.
|
||||
|
||||
- Während einer Authentisierung wird nun eine Fortschrittsanzeige
|
||||
zusammen mit dem Namen des aktuellen Authentisierungsschrittes angezeigt.
|
||||
|
||||
- Während der Verwendung der Funktion "Smartphone als Kartenleser" wird auf
|
||||
beiden Geräten jeweils der Name des verbundenen Gerätes angezeigt.
|
||||
|
||||
- Die Anzeige der unterstützten Kartenlesegeräte wurde optimiert.
|
||||
|
||||
- Das Koppeln für die Funktion "Smartphone als Kartenleser" ist jetzt während
|
||||
eines Authentisierungsvorgangs möglich und führt nicht mehr zum Abbruch des
|
||||
Vorgangs.
|
||||
|
||||
- Bei der Android-Version der AusweisApp2 ist es jetzt möglich, den Verlauf
|
||||
zu deaktivieren und Einträge zu löschen.
|
||||
|
||||
- Die AusweisApp2 kommt nun auch beim erneuten Starten aus dem Launchpad oder
|
||||
per Doppelklick in den Vordergrund. Voraussetzung ist, dass sie bereits
|
||||
vorher gestartet wurde.
|
||||
|
||||
- Bei einem Update bleibt der Autostart-Eintrag erhalten.
|
||||
|
||||
- Bei der Android-Version wird die letzte Auswahl einer
|
||||
Authentisierungsmethode (NFC, Bluetooth oder WLAN) nun als bevorzugte
|
||||
Methode gespeichert.
|
||||
|
||||
- Bei der Android-Version wurden die Fehlermeldungen / Hinweise bei
|
||||
Fehleingaben optimiert.
|
||||
|
||||
- Der Begriff "Handbuch" wurde gegen "Online-Hilfe" ausgetauscht und an
|
||||
geeigneten Stellen wurden Verlinkungen eingefügt.
|
||||
|
||||
- Optimierung der Anzeige der Diensteanbieter im Anbieterverzeichnis
|
||||
(macOS und Windows).
|
||||
|
||||
- Die Funktion "Smartphone als Kartenleser" unterstützt nun auch einen
|
||||
mobilen Hotspot des selben Gerätes.
|
||||
|
||||
- Die Unterstützung von Bildschirmlesern wurde verbessert.
|
||||
|
||||
|
||||
Entwickler
|
||||
""""""""""
|
||||
- Beim Aufruf von "eID-Client?status" wird nun auch
|
||||
der Header "Access-Control-Allow-Origin" gesetzt.
|
||||
|
||||
- Im Protokoll wird nun auch das TLS-Zertifikat angezeigt,
|
||||
welches einen Fehler verursacht.
|
||||
|
||||
- Es wird nun TLS-Session-Resumption beim Attached-eID erzwungen.
|
||||
|
||||
- Fehlercode bei fehlgeschlagenen Transmits korrigiert.
|
|
@ -1,7 +1,13 @@
|
|||
Abkündigungen
|
||||
=============
|
||||
|
||||
Mit der Version 1.14.0 der AusweisApp2 wird die Unterstützung
|
||||
Mit der Version 1.16.0 der AusweisApp2 wird die Unterstützung
|
||||
folgender Systeme eingestellt.
|
||||
|
||||
- OS X 10.10
|
||||
|
||||
|
||||
Mit der Version 1.14.0 der AusweisApp2 wurde die Unterstützung
|
||||
folgender Systeme eingestellt.
|
||||
|
||||
- OS X 10.9
|
||||
|
|
|
@ -4,6 +4,7 @@ Release Notes
|
|||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
1.14.1
|
||||
1.14.0
|
||||
announce
|
||||
issues
|
||||
|
|
|
@ -22,8 +22,5 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
|
|||
oder eine PIN-Änderung mit Komfort-Kartenlesegerät durchgeführt wird,
|
||||
kann es unter Windows und macOS zu einem Absturz kommen.
|
||||
|
||||
- Die PIN-Änderung über ein Smartphone als Kartenlesegerät wird nicht
|
||||
unterstützt.
|
||||
|
||||
- Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
|
||||
auf Android.
|
||||
|
|
|
@ -6,6 +6,7 @@ Versionszweig 1.14
|
|||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
1.14.1
|
||||
1.14.0
|
||||
|
||||
|
||||
|
|
|
@ -29,9 +29,7 @@ secure connection to AusweisApp2.
|
|||
with another session ID.
|
||||
|
||||
- An attacker cannot grab the session ID of the previous app because
|
||||
AusweisApp2 uses multiple sources of secure random number generator and
|
||||
provides an optional API for the app to provide additional random number
|
||||
entropy.
|
||||
AusweisApp2 uses multiple sources of secure random number generator.
|
||||
|
||||
- An attacker cannot fake AusweisApp2 for other apps because the connection
|
||||
via AIDL is bound with package name "com.governikus.ausweisapp2". Google
|
||||
|
@ -130,7 +128,7 @@ fingerprint of the authentic SDK certificate is the following:
|
|||
|
||||
.. code-block:: text
|
||||
|
||||
B0:2A:C7:6B:50:A4:97:AE:81:0A:EA:C2:25:98:18:7B:3D:42:90:27:7D:08:51:A7:FA:8E:1A:EA:5A:97:98:70
|
||||
B0 2A C7 6B 50 A4 97 AE 81 0A EA C2 25 98 18 7B 3D 42 90 27 7D 08 51 A7 FA 8E 1A EA 5A 97 98 70
|
||||
|
||||
|
||||
|
||||
|
@ -637,11 +635,11 @@ are shown in code listing below.
|
|||
|
||||
class ForegroundDispatcher
|
||||
{
|
||||
private Activity mActivity;
|
||||
private NfcAdapter mAdapter;
|
||||
private PendingIntent mPendingIntent;
|
||||
private IntentFilter[] mFilters;
|
||||
private String[][] mTechLists;
|
||||
private final Activity mActivity;
|
||||
private final NfcAdapter mAdapter;
|
||||
private final PendingIntent mPendingIntent;
|
||||
private final IntentFilter[] mFilters;
|
||||
private final String[][] mTechLists;
|
||||
|
||||
ForegroundDispatcher(Activity pActivity)
|
||||
{
|
||||
|
|
|
@ -313,6 +313,7 @@ ExternalProject_Add(qt
|
|||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Avoid-using-deprecated-APIs-on-iOS-10.0.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-macOS-iOS-Fix-garbled-text-under-some-conditions.patch &&
|
||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Fix-reopening-on-macOS.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}
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
From d9c149dbc2021ed1e82cd34ae30dfd39f7d82a8d Mon Sep 17 00:00:00 2001
|
||||
From: Jens Trillmann <jens.trillmann@governikus.de>
|
||||
Date: Mon, 12 Mar 2018 12:06:05 +0100
|
||||
Subject: [PATCH] Fix reopening on macOS
|
||||
|
||||
When a user reopens an application while the application is already
|
||||
running, then macOS does not run the application a second time but
|
||||
sends kAEReopenApplication to inform the running instance.
|
||||
Qt ignores this event and the application does not open. To handle this
|
||||
event a new event handler is registered. The application state is set
|
||||
to Qt::ApplicationActive when the handler is called. An application that
|
||||
wants to react to reopening has to react to QEvent::ApplicationActivate
|
||||
in the running QApplication.
|
||||
|
||||
Change-Id: Ic3adeb6b334c85f36671c254657170c71a2dfb59
|
||||
---
|
||||
src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git x/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm y/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
|
||||
index a94e0dc517..ccf16addea 100644
|
||||
--- x/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
|
||||
+++ y/qtbase/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
|
||||
@@ -259,6 +259,10 @@ - (void) applicationWillFinishLaunching:(NSNotification *)notification
|
||||
andSelector:@selector(appleEventQuit:withReplyEvent:)
|
||||
forEventClass:kCoreEventClass
|
||||
andEventID:kAEQuitApplication];
|
||||
+ [eventManager setEventHandler:self
|
||||
+ andSelector:@selector(appleEventReopen:withReplyEvent:)
|
||||
+ forEventClass:kCoreEventClass
|
||||
+ andEventID:kAEReopenApplication];
|
||||
[eventManager setEventHandler:self
|
||||
andSelector:@selector(getUrl:withReplyEvent:)
|
||||
forEventClass:kInternetEventClass
|
||||
@@ -438,4 +442,11 @@ - (void)appleEventQuit:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEv
|
||||
[NSApp terminate:self];
|
||||
}
|
||||
|
||||
+- (void)appleEventReopen:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
|
||||
+{
|
||||
+ Q_UNUSED(event);
|
||||
+ Q_UNUSED(replyEvent);
|
||||
+ QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationActive, true);
|
||||
+}
|
||||
+
|
||||
@end
|
||||
--
|
||||
2.14.3 (Apple Git-98)
|
||||
|
|
@ -85,5 +85,6 @@
|
|||
<file>images/phone_bluetooth.svg</file>
|
||||
<file>images/location_flag_de.svg</file>
|
||||
<file>images/location_flag_en.svg</file>
|
||||
<file>images/siteWithLogo.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -2,9 +2,6 @@
|
|||
<qresource prefix="/">
|
||||
<file>html_templates/alreadyactive.html</file>
|
||||
<file>html_templates/error.html</file>
|
||||
<file>stylesheets/common.qss</file>
|
||||
<file>stylesheets/macos.qss</file>
|
||||
<file>stylesheets/windows.qss</file>
|
||||
<file>stylesheets/desktop.qss</file>
|
||||
<file>images/beta.svg</file>
|
||||
<file>images/green_check_mark.svg</file>
|
||||
|
@ -12,7 +9,6 @@
|
|||
<file>images/MenuUnselected.png</file>
|
||||
<file>images/MenuUnselectedDisabled.png</file>
|
||||
<file>images/npa.ico</file>
|
||||
<file>images/siteWithLogo.png</file>
|
||||
<file>images/Logo_AutentApp2_2014.png</file>
|
||||
<file>images/AppLogo_AutentApp2_2014.png</file>
|
||||
<file>images/start_nPA_eAT.png</file>
|
||||
|
|
|
@ -21,11 +21,6 @@
|
|||
<file>images/android/navigation/support.svg</file>
|
||||
<file>images/android/navigation/bewerten.svg</file>
|
||||
<file>images/android/navigation/teilen.svg</file>
|
||||
<file>images/android/mdpi/haken.png</file>
|
||||
<file>images/android/hdpi/haken.png</file>
|
||||
<file>images/android/xhdpi/haken.png</file>
|
||||
<file>images/android/xxhdpi/haken.png</file>
|
||||
<file>images/android/xxxhdpi/haken.png</file>
|
||||
<file>images/android/checkbox_0.svg</file>
|
||||
<file>images/android/checkbox_1.svg</file>
|
||||
<file>images/android/tabDivider.svg</file>
|
||||
|
|
|
@ -173,9 +173,7 @@
|
|||
"selfAuthentication": {
|
||||
"_comment_1": "TCTokenURL for self authentication (AusweisAuskunft)",
|
||||
"url": "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml",
|
||||
"certDescr": "308202E0060A04007F00070301030101A10E0C0C442D547275737420476D6248A2181316687474703A2F2F7777772E642D74727573742E6E6574A3190C17476F7665726E696B757320476D6248202620436F2E4B47A41A131868747470733A2F2F7777772E617574656E746170702E6465A58202050C8202014E616D652C20416E7363687269667420756E6420452D4D61696C2D4164726573736520646573204469656E737465616E626965746572733A0D0A476F7665726E696B757320476D6248202620436F2E4B470D0A416D2046616C6C7475726D20390D0A3238333539204272656D656E0D0A6B6F6E74616B7440676F7665726E696B75732E636F6D0D0A0D0A4765736368C3A46674737A7765636B3A0D0A53656C6273746175736B756E66740D0A0D0A48696E7765697320617566206469652066C3BC722064656E204469656E737465616E626965746572207A757374C3A46E646967656E205374656C6C656E2C20646965206469652045696E68616C74756E672064657220566F7273636872696674656E207A756D20446174656E73636875747A206B6F6E74726F6C6C696572656E3A0D0A446572204C616E64657362656175667472616774652066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E736672656968656974206465722046726569656E2048616E73657374616474204272656D656E0D0A41726E647473747261C39F6520310D0A3237353730204272656D6572686176656E0D0A303432312F3336312D323031300D0A6F666669636540646174656E73636875747A2E6272656D656E2E64650D0A687474703A2F2F7777772E646174656E73636875747A2E6272656D656E2E64650D0AA7683166042029F04459C39E4B68C70AA3961FA7B1B40E8A49238446CFE606C56FF8DC0989F404203FFF612368211F69D460DFF157F541BEBC96217D7AF6C2D4F57BF6E4A126A86C04209D8EB0BDF36B19C4AF3147E57401FD792845F0413102A7BD784DF9418098BEBE",
|
||||
"testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml",
|
||||
"testCertDescr": "30820266060A04007F00070301030101A1160C14476F7665726E696B757320546573742044564341A21A1318687474703A2F2F7777772E676F7665726E696B75732E6465A31A0C18476F7665726E696B757320476D6248202620436F2E204B47A420131E68747470733A2F2F746573742E676F7665726E696B75732D6569642E6465A582014F0C82014B416E736368726966743A090D0A476F7665726E696B757320476D6248202620436F2E204B470D0A416D2046616C6C7475726D20390D0A3238333539204272656D656E090D0A0D0A452D4D61696C2D416472657373653A09686240626F732D6272656D656E2E6465090D0A0D0A5A7765636B20646573204175736C657365766F7267616E67733A0944656D6F6E7374726174696F6E20646573206549442D53657276696365090D0A0D0A5A757374C3A46E6469676520446174656E73636875747A61756673696368743A090D0A446965204C616E64657362656175667472616774652066C3BC7220446174656E73636875747A20756E6420496E666F726D6174696F6E736672656968656974206465722046726569656E2048616E73657374616474204272656D656E0D0A41726E647473747261C39F6520310D0A3237353730204272656D6572686176656EA64B134968747470733A2F2F746573742E676F7665726E696B75732D6569642E64653A3434332F417574656E742D44656D6F4170706C69636174696F6E2F5265636569766572536572766C6574A74631440420D2E54E1D26FC5DFC3408609831BBE4CFE3204365604849E7B094623566B54A760420E224D25B448DC054C023392CA11017751041D762F83D880895B3018D8EC2B290"
|
||||
"testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=xml"
|
||||
},
|
||||
|
||||
"updateServer": {
|
||||
|
|
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 1.0 KiB |
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 120 120" >
|
||||
<g fill="#8e8e93">
|
||||
<g fill="#ffffff">
|
||||
<circle cx="60" cy="30" r="10"/>
|
||||
<circle cx="60" cy="60" r="10"/>
|
||||
<circle cx="60" cy="90" r="10"/>
|
||||
|
|
Before Width: | Height: | Size: 302 B After Width: | Height: | Size: 302 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 3.7 KiB |
|
@ -1,7 +1,7 @@
|
|||
FROM scratch
|
||||
MAINTAINER Governikus KG <ausweisapp2@governikus.com>
|
||||
|
||||
ARG version="3.6.2"
|
||||
ARG version="3.7.0"
|
||||
ARG arch="x86_64"
|
||||
ADD alpine-minirootfs-$version-$arch.tar.gz /
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ RUN echo "[multilib]" >> /etc/pacman.conf && echo 'Include = /etc/pacman.d/mirro
|
|||
|
||||
RUN chown -R governikus: /var/cache/pacman/pkg/
|
||||
|
||||
ARG JENKINS_SWARM_VERSION=3.6
|
||||
ARG JENKINS_SWARM_VERSION=3.8
|
||||
ARG TINI_VERSION=0.16.1
|
||||
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
|
||||
|
@ -25,8 +25,5 @@ RUN pacaur -Sy --noconfirm cmake ccache python2-hglib apache-ant jdk8-openjdk jr
|
|||
android-platform-18 android-platform-21 android-platform-25 \
|
||||
&& rm -rf /var/cache/pacman/pkg/* && rm -rf /home/governikus/.cache/pacaur
|
||||
|
||||
RUN pacman -Qi android-sdk-build-tools | grep Version | sed -E 's|.*r([0-9]+\.[0-9]\.[0-9]).*|export ANDROID_BUILD_TOOLS_REVISION=\1|' > /home/governikus/build_tools.sh
|
||||
RUN echo '. /etc/profile ; . /home/governikus/build_tools.sh ;' >> /home/governikus/.profile
|
||||
|
||||
ENTRYPOINT ["/sbin/tini", "--"]
|
||||
CMD sh -l -c /swarm.sh
|
||||
|
|
|
@ -4,7 +4,7 @@ MAINTAINER Governikus KG <ausweisapp2@governikus.com>
|
|||
ENV NAME=Docs LABELS=Docs
|
||||
|
||||
# Clean up if texlive package is fixed in Alpine
|
||||
RUN sed -i -e 's/v3.6/edge/' /etc/apk/repositories && \
|
||||
RUN sed -i -e 's/v3.7/edge/' /etc/apk/repositories && \
|
||||
echo '@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && \
|
||||
apk --no-cache add cmake make py2-sphinx py2-setuptools py2-pip py2-hglib icu-libs poppler zziplib texlive-full@testing && \
|
||||
wget http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2016/texlive-20160523b-texmf.tar.xz && \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
FROM alpine:latest
|
||||
MAINTAINER Governikus KG <ausweisapp2@governikus.com>
|
||||
|
||||
ARG JENKINS_SWARM_VERSION=3.6
|
||||
ARG JENKINS_SWARM_VERSION=3.8
|
||||
ENV EXECUTOR=3 LABELS= NAME= PASSWORD=
|
||||
|
||||
RUN adduser governikus -s /bin/sh -D
|
||||
|
|
|
@ -11,7 +11,7 @@ fingerprints=${FINGERPRINTS:-68:21:59:5C:C0:B0:1F:78:FF:23:DE:D4:D8:05:0F:74:38:
|
|||
|
||||
/usr/bin/java \
|
||||
-jar /swarm-client.jar \
|
||||
-name $name \
|
||||
-name $name-$HOSTNAME \
|
||||
-mode $mode \
|
||||
-executors $executor \
|
||||
-labels "$labels" \
|
||||
|
@ -19,5 +19,6 @@ fingerprints=${FINGERPRINTS:-68:21:59:5C:C0:B0:1F:78:FF:23:DE:D4:D8:05:0F:74:38:
|
|||
-username $user \
|
||||
-passwordEnvVariable PASSWORD \
|
||||
-sslFingerprints $fingerprints \
|
||||
-fsroot $dest
|
||||
-fsroot $dest \
|
||||
-disableClientsUniqueId
|
||||
|
||||
|
|
|
@ -1,93 +0,0 @@
|
|||
import common.Build
|
||||
import static common.Constants.strip
|
||||
|
||||
def j = new Build
|
||||
(
|
||||
name: 'Analyze',
|
||||
libraries: 'Linux',
|
||||
label: 'Linux'
|
||||
).generate(this)
|
||||
|
||||
|
||||
j.with
|
||||
{
|
||||
wrappers
|
||||
{
|
||||
environmentVariables
|
||||
{
|
||||
env("QT_PLUGIN_PATH", '$WORKSPACE/libs/build/dist/plugins')
|
||||
}
|
||||
}
|
||||
|
||||
steps
|
||||
{
|
||||
shell('cd build; cmake ../source -DCMAKE_PREFIX_PATH=${WORKSPACE}/libs/build/dist -DCMAKE_CXX_COMPILER=c++-analyzer')
|
||||
|
||||
shell('cd build; make cloc.report')
|
||||
|
||||
shell('cd build; make cppcheck.report')
|
||||
|
||||
shell('''\
|
||||
export LD_LIBRARY_PATH=$WORKSPACE/libs/build/dist/lib:$LD_LIBRARY_PATH
|
||||
cd build; scan-build -o $WORKSPACE/build/result --keep-empty make ${MAKE_FLAGS}
|
||||
'''.stripIndent().trim())
|
||||
|
||||
shell('cd build/result; mv * report')
|
||||
}
|
||||
|
||||
publishers
|
||||
{
|
||||
tasks('source/**/*.cpp,source/**/*.h,source/**/*.m,source/**/*.mm,source/**/*.qml,source/**/*.js,source/**/*.cmake,source/**/CMakeLists.txt', '', 'FIXME', 'TODO', 'FINDME', true)
|
||||
{
|
||||
defaultEncoding('UTF-8')
|
||||
}
|
||||
|
||||
warnings(['GNU Make + GNU C Compiler (gcc)'])
|
||||
|
||||
publishHtml
|
||||
{
|
||||
report('build/result/report')
|
||||
{
|
||||
reportName('Clang-Analyzer')
|
||||
allowMissing(true)
|
||||
keepAll(true)
|
||||
alwaysLinkToLastBuild(false)
|
||||
}
|
||||
}
|
||||
|
||||
slocCount
|
||||
{
|
||||
pattern('build/cloc.xml')
|
||||
encoding('UTF-8')
|
||||
commentIsCode(false)
|
||||
buildsInGraph(0)
|
||||
ignoreBuildFailure(false)
|
||||
}
|
||||
}
|
||||
|
||||
configure
|
||||
{
|
||||
project -> project / 'publishers' << 'org.jenkinsci.plugins.cppcheck.CppcheckPublisher' {
|
||||
cppcheckConfig {
|
||||
pattern 'build/cppcheck*.xml'
|
||||
ignoreBlankFiles 'false'
|
||||
allowNoReport 'false'
|
||||
configSeverityEvaluation {
|
||||
threshold ''
|
||||
newThreshold ''
|
||||
failureThreshold ''
|
||||
newFailureThreshold ''
|
||||
healthy ''
|
||||
unHealthy
|
||||
severityError 'true'
|
||||
severityWarning 'true'
|
||||
severityStyle 'true'
|
||||
severityPerformance 'true'
|
||||
severityInformation 'true'
|
||||
severityNoCategory 'false'
|
||||
severityPortability 'false'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -45,10 +45,21 @@ j.with
|
|||
'''.stripIndent().trim())
|
||||
|
||||
shell('cd build; make gcovr')
|
||||
|
||||
shell('cd build; make cloc.report')
|
||||
}
|
||||
|
||||
publishers
|
||||
{
|
||||
cobertura('build/gcovr.xml')
|
||||
|
||||
slocCount
|
||||
{
|
||||
pattern('build/cloc.xml')
|
||||
encoding('UTF-8')
|
||||
commentIsCode(false)
|
||||
buildsInGraph(0)
|
||||
ignoreBuildFailure(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<description></description>
|
||||
<keepDependencies>false</keepDependencies>
|
||||
<scm class="hudson.plugins.mercurial.MercurialSCM" plugin="mercurial@1.54">
|
||||
<source>http://mercurial/AusweisApp2</source>
|
||||
<source>https://hg.governikus.de/AusweisApp2</source>
|
||||
<modules>resources/jenkins/dsl/</modules>
|
||||
<revisionType>BRANCH</revisionType>
|
||||
<revision>default</revision>
|
||||
|
|
|
@ -150,6 +150,8 @@
|
|||
<!-- Normal Permissions -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
||||
<uses-permission android:name="android.permission.NFC"/>
|
||||
|
|
|
@ -64,13 +64,35 @@
|
|||
<RegistryValue Type="string" Name="AusweisApp2-Firewall-Rule"
|
||||
Value="v2.20|Action=Allow|Active=TRUE|Dir=Out|App=[INSTALL_ROOT][ProductName].exe|Name=AusweisApp2|Desc=AusweisApp2 firewall rule|"
|
||||
KeyPath="no"/>
|
||||
<RegistryValue Type="string" Name="AusweisApp2-Firewall-Rule-In"
|
||||
Value="v2.20|Action=Allow|Active=TRUE|Dir=In|Protocol=17|LPort=24727|RA4=LocalSubnet|RA6=LocalSubnet|App=[INSTALL_ROOT][ProductName].exe|Name=AusweisApp2|Desc=Allow inbound udp connections for Smartphone as Cardreader.|Edge=TRUE|"
|
||||
KeyPath="no"/>
|
||||
</RegistryKey>
|
||||
</Component>
|
||||
</DirectoryRef>
|
||||
|
||||
<!-- ################################################################### -->
|
||||
<!-- Add/remove SaC listening port to/from Windows Firewall -->
|
||||
<!-- ################################################################### -->
|
||||
<CustomAction Id="AddListeningPortWindowsFirewallSaC"
|
||||
Directory="TARGETDIR"
|
||||
ExeCommand="[SystemFolder]netsh.exe advfirewall firewall add rule name=AusweisApp2-Firewall-Rule-SaC-In dir=in action=allow description="Allow inbound udp connections for Smartphone as card reader." localip=any remoteip=localsubnet localport=24727 remoteport=any protocol=udp"
|
||||
Execute="commit"
|
||||
Impersonate="no"
|
||||
Return="asyncWait" />
|
||||
|
||||
<InstallExecuteSequence>
|
||||
<Custom Action="AddListeningPortWindowsFirewallSaC" Before="InstallFinalize">SYSTEMSETTINGS and NOT Installed</Custom>
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<CustomAction Id="DeleteListeningPortWindowsFirewallSaC"
|
||||
Directory="TARGETDIR"
|
||||
ExeCommand="[SystemFolder]netsh.exe advfirewall firewall delete rule name=AusweisApp2-Firewall-Rule-SaC-In"
|
||||
Execute="commit"
|
||||
Impersonate="no"
|
||||
Return="asyncWait" />
|
||||
|
||||
<InstallExecuteSequence>
|
||||
<Custom Action="DeleteListeningPortWindowsFirewallSaC" Before="InstallFinalize">Installed and Not REINSTALL</Custom>
|
||||
</InstallExecuteSequence>
|
||||
|
||||
<!-- ############################# -->
|
||||
<!-- Create desktop shortcut -->
|
||||
<!-- ############################# -->
|
||||
|
|
|
@ -6,6 +6,7 @@ import Governikus.Global 1.0
|
|||
SectionPage
|
||||
{
|
||||
id: baseItem
|
||||
property string remoteDeviceId: ""
|
||||
signal pinEntered()
|
||||
|
||||
onVisibleChanged: {
|
||||
|
@ -29,8 +30,10 @@ SectionPage
|
|||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: Utils.dp(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
|
||||
Layout.maximumWidth: width
|
||||
source: "qrc:///images/NFCPhoneCard.png"
|
||||
source: baseItem.state === "REMOTE_PIN" ? "qrc:///images/icon_remote.svg" : "qrc:///images/NFCPhoneCard.png"
|
||||
fillMode: Image.PreserveAspectFit
|
||||
}
|
||||
|
||||
|
@ -56,6 +59,7 @@ SectionPage
|
|||
baseItem.state === "PIN_NEW" ? qsTr("Please enter a new 6-digit PIN of your choice.") :
|
||||
baseItem.state === "PIN_NEW_AGAIN" ? qsTr("Please enter your new 6-digit PIN again.") :
|
||||
baseItem.state === "PIN" ? qsTr("Please enter your personal PIN.") :
|
||||
baseItem.state === "REMOTE_PIN" ? qsTr("Enter the pairing code shown on your other device to use it as a card reader.") :
|
||||
/*"PIN_OR_TRANSPORT_PIN"*/ qsTr("Please enter your current PIN or your initial transport PIN first.")
|
||||
) + settingsModel.translationTrigger
|
||||
}
|
||||
|
@ -108,6 +112,10 @@ SectionPage
|
|||
numberModel.puk = pinField.text
|
||||
baseItem.pinEntered()
|
||||
break
|
||||
case "REMOTE_PIN":
|
||||
remoteServiceModel.connectToServer(remoteDeviceId, pinField.text)
|
||||
baseItem.pinEntered()
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ Item {
|
|||
|
||||
TextInput {
|
||||
id: echoField
|
||||
color: Constants.secondary_text
|
||||
verticalAlignment: TextInput.AlignVCenter
|
||||
echoMode: TextInput.Password
|
||||
font.pixelSize: Utils.sp(18)
|
||||
|
@ -33,13 +34,17 @@ Item {
|
|||
focus: false
|
||||
validator: RegExpValidator {
|
||||
regExp: baseItem.state === "PUK" ? /[0-9]{10}/ :
|
||||
baseItem.state === "PIN_OR_TRANSPORT_PIN" ? /[0-9]{5,6}/ : /[0-9]{6}/ }
|
||||
maximumLength: baseItem.state === "PUK" ? 10 : 6
|
||||
baseItem.state === "PIN_OR_TRANSPORT_PIN" ? /[0-9]{5,6}/ :
|
||||
baseItem.state === "REMOTE_PIN" ? /[0-9]{4}/ : /[0-9]{6}/
|
||||
}
|
||||
maximumLength: baseItem.state === "PUK" ? 10 :
|
||||
baseItem.state === "REMOTE_PIN" ? 4 : 6
|
||||
clip: true
|
||||
}
|
||||
|
||||
TextInput {
|
||||
id: sample
|
||||
color: Constants.secondary_text
|
||||
visible: false
|
||||
echoMode: echoField.echoMode
|
||||
font: echoField.font
|
||||
|
@ -53,7 +58,8 @@ Item {
|
|||
anchors.left: echoField.left
|
||||
|
||||
Repeater {
|
||||
model: baseItem.state === "PUK" ? 10 : 6
|
||||
model: baseItem.state === "PUK" ? 10 :
|
||||
baseItem.state === "REMOTE_PIN" ? 4 : 6
|
||||
delegate:
|
||||
Rectangle {
|
||||
width: sample.contentWidth - sample.font.letterSpacing
|
||||
|
|
|
@ -13,7 +13,7 @@ MouseArea {
|
|||
anchors.centerIn: parent
|
||||
font.pixelSize: Utils.sp(24)
|
||||
wrapMode: Text.WordWrap
|
||||
color: "black"
|
||||
color: Constants.secondary_text
|
||||
}
|
||||
|
||||
Image {
|
||||
|
|
|
@ -34,6 +34,7 @@ SectionPage {
|
|||
text: titleText
|
||||
}
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
wrapMode: Text.WordWrap
|
||||
|
@ -69,6 +70,7 @@ SectionPage {
|
|||
}
|
||||
Text {
|
||||
id: subtitle
|
||||
color: Constants.secondary_text
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
text: qsTr("We are happy about every feedback on our software.") + settingsModel.translationTrigger
|
||||
|
|
|
@ -38,6 +38,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: description
|
||||
color: Gov.Constants.secondary_text
|
||||
visible: text !== ""
|
||||
anchors.verticalCenter: box.verticalCenter
|
||||
font.pixelSize: Gov.Constants.normal_font_size
|
||||
|
|
|
@ -22,6 +22,7 @@ Item {
|
|||
anchors.rightMargin: margin
|
||||
font.pixelSize: Gov.Constants.normal_font_size
|
||||
font.capitalization: fontUppercase
|
||||
color: Gov.Constants.secondary_text
|
||||
wrapMode: Text.WordWrap
|
||||
onLinkActivated: parent.linkActivated(link)
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ Item {
|
|||
readonly property color blue_dark: "#324d66"
|
||||
readonly property color blue_light: "#659bcd"
|
||||
readonly property color primary_text: "#ffffff"
|
||||
readonly property color secondary_text: "#444444"
|
||||
readonly property color secondary_text: "#4a4a4a"
|
||||
readonly property color accent_color: "#7879b2"
|
||||
readonly property color second_accent_color: "#a3cb7f"
|
||||
readonly property int titlebar_font_size: Utils.sp(18)
|
||||
|
|
|
@ -5,10 +5,12 @@ import "."
|
|||
|
||||
/* 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 int maxWidth: 0
|
||||
property int preferedWidth: parent.width - 4 * Constants.component_spacing
|
||||
property alias iconSource: icon.source
|
||||
|
||||
signal clicked
|
||||
|
||||
|
@ -17,13 +19,25 @@ Rectangle {
|
|||
width: maxWidth > 0 ? Math.min(maxWidth, preferedWidth) : preferedWidth
|
||||
clip: true
|
||||
|
||||
Image {
|
||||
id: icon
|
||||
visible: source.toString().length > 0
|
||||
height: rect.height - Utils.dp(10)
|
||||
width: height
|
||||
anchors.left: rect.left
|
||||
anchors.leftMargin: Utils.dp(5)
|
||||
anchors.verticalCenter: rect.verticalCenter
|
||||
}
|
||||
|
||||
Text {
|
||||
id: textItem
|
||||
anchors.centerIn: parent
|
||||
color: enabled ? "white" : "#40000000"
|
||||
opacity: mouseArea.containsMouse ? 0.5 : 1
|
||||
anchors.leftMargin: icon.visible ? icon.width + icon.anchors.leftMargin : 0
|
||||
font.pixelSize: Utils.dp(16)
|
||||
}
|
||||
|
||||
MouseArea{
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
|
|
|
@ -24,6 +24,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: description
|
||||
color: Constants.secondary_text
|
||||
visible: text !== ""
|
||||
anchors.verticalCenter: image.verticalCenter
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
|
|
@ -27,6 +27,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: bodyText
|
||||
color: Constants.secondary_text
|
||||
anchors.top: labelText.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: margin
|
||||
|
|
|
@ -15,6 +15,9 @@ Item {
|
|||
readonly property color green: "#a3cb7f"
|
||||
readonly property color red: "#cc0000"
|
||||
readonly property color grey: "#8e8e93"
|
||||
readonly property color lightgrey: "#d5d5dc"
|
||||
readonly property color white: "#ffffff"
|
||||
readonly property color black: "#000000"
|
||||
|
||||
readonly property color primary_text: Gov.PlatformConstants.primary_text
|
||||
readonly property color secondary_text: Gov.PlatformConstants.secondary_text
|
||||
|
|
|
@ -29,6 +29,7 @@ MouseArea {
|
|||
|
||||
Text {
|
||||
text: name
|
||||
color: Gov.Constants.secondary_text
|
||||
|
||||
anchors.margins: Utils.dp(2)
|
||||
anchors.top: parent.top
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls 2.2
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtQuick.Layouts 1.2
|
||||
|
||||
|
@ -8,12 +8,20 @@ import Governikus.TitleBar 1.0
|
|||
import Governikus.Provider 1.0
|
||||
|
||||
SectionPage {
|
||||
id: rootPage
|
||||
property alias listViewModel: listView.model
|
||||
property var selectedIndices: []
|
||||
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("History") + settingsModel.translationTrigger; font.bold: true }
|
||||
rightTitleBarAction: HistoryContextMenu { historyReminderPopup: deleteHistoryConfirmationDialog }
|
||||
|
||||
HistoryViewConfirmationPopup {
|
||||
id: deleteHistoryConfirmationDialog
|
||||
baseItem: rootPage
|
||||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger
|
||||
wrapMode: Text.WordWrap
|
||||
|
|
|
@ -1,18 +1,27 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls 2.2
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtQuick.Layouts 1.2
|
||||
import QtQuick.Dialogs 1.2
|
||||
|
||||
import Governikus.Global 1.0
|
||||
import Governikus.TitleBar 1.0
|
||||
|
||||
SectionPage {
|
||||
id: rootPage
|
||||
property alias listViewModel: listView.model
|
||||
property var selectedIndices: []
|
||||
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("History") + settingsModel.translationTrigger; font.bold: true }
|
||||
rightTitleBarAction: HistoryContextMenu { historyReminderPopup: deleteHistoryConfirmationDialog }
|
||||
|
||||
HistoryViewConfirmationPopup {
|
||||
id: deleteHistoryConfirmationDialog
|
||||
baseItem: rootPage
|
||||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger
|
||||
wrapMode: Text.WordWrap
|
||||
|
|
|
@ -62,6 +62,7 @@ SectionPage {
|
|||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger
|
||||
wrapMode: Text.WordWrap
|
||||
|
|
|
@ -61,6 +61,7 @@ SectionPage {
|
|||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("Currently there are no history entries.") + settingsModel.translationTrigger
|
||||
wrapMode: Text.WordWrap
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
import QtQuick 2.5
|
||||
import QtGraphicalEffects 1.0
|
||||
|
||||
import Governikus.Global 1.0
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
property alias text: textItem.text
|
||||
property color buttonColor: Constants.white
|
||||
readonly property int touchPadding: Utils.dp(3);
|
||||
|
||||
height: textItem.height + 2 * touchPadding
|
||||
width: Math.max(textItem.implicitWidth + 2 * touchPadding, parent.width)
|
||||
|
||||
state: "normal"
|
||||
states: [
|
||||
State { name: "normal"; when: !mouseArea.pressed
|
||||
PropertyChanges { target: darkLayer; width: 0 }
|
||||
},
|
||||
State { name: "pressed"; when: mouseArea.pressed
|
||||
PropertyChanges { target: darkLayer; width: 2 * rect.width }
|
||||
}
|
||||
]
|
||||
transitions: [
|
||||
Transition {
|
||||
from: "normal"; to: "pressed"; reversible: false
|
||||
PropertyAnimation { target: darkLayer; property: "width"}
|
||||
}
|
||||
]
|
||||
|
||||
Rectangle {
|
||||
id: rect
|
||||
anchors.fill: parent
|
||||
color: buttonColor
|
||||
|
||||
Item {
|
||||
anchors.fill: parent
|
||||
clip: true
|
||||
Rectangle {
|
||||
id: darkLayer
|
||||
x: mouseArea.containsMouse ? mouseArea.mouseX - width * 0.5 : 0
|
||||
height: parent.height
|
||||
color: Constants.black
|
||||
opacity: 0.2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: textItem
|
||||
color: Constants.secondary_text
|
||||
anchors.left: rect.left
|
||||
anchors.leftMargin: touchPadding
|
||||
anchors.verticalCenter: rect.verticalCenter
|
||||
font.pixelSize: Constants.titlebar_font_size
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.2
|
||||
|
||||
import Governikus.Global 1.0
|
||||
|
||||
MouseArea {
|
||||
property var historyReminderPopup: HistoryViewConfirmationPopup { }
|
||||
readonly property alias contentWidth: contextMenuButton.width
|
||||
|
||||
id: contextMenuButton
|
||||
height: Constants.titlebar_height
|
||||
width: height
|
||||
anchors.right: parent ? parent.right : undefined
|
||||
anchors.top: parent ? parent.top : undefined
|
||||
anchors.verticalCenter: parent ? parent.verticalCenter : undefined
|
||||
|
||||
Image {
|
||||
id: contextMenuIcon
|
||||
height: Constants.titlebar_height - 2 * Constants.titlebar_padding
|
||||
width: height
|
||||
anchors.topMargin: Constants.titlebar_padding
|
||||
anchors.right: parent.right
|
||||
anchors.bottomMargin: Constants.titlebar_padding
|
||||
source: "qrc:///images/android/navigation/versionsinformation.svg"
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
onClicked: contextMenu.visible ? contextMenu.close() : contextMenu.open()
|
||||
|
||||
Popup {
|
||||
id: contextMenu
|
||||
x: -(width - contextMenuButton.width)
|
||||
y: Constants.titlebar_height + Constants.titlebar_padding
|
||||
closePolicy: Popup.CloseOnPressOutsideParent | Popup.CloseOnEscape
|
||||
height: contentColumn.height + Constants.titlebar_padding
|
||||
|
||||
Column {
|
||||
id: contentColumn
|
||||
width: childrenRect.width
|
||||
spacing: Constants.titlebar_padding
|
||||
|
||||
ContextMenuEntry {
|
||||
text: (settingsModel.historyEnabled ? qsTr("Disable history") : qsTr("Enable history")) + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
settingsModel.historyEnabled = !settingsModel.historyEnabled
|
||||
qmlExtension.showFeedback((settingsModel.historyEnabled ? qsTr("History enabled") : qsTr("History disabled")) + settingsModel.translationTrigger)
|
||||
contextMenu.close()
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
color: Constants.grey
|
||||
height: Utils.dp(1)
|
||||
}
|
||||
|
||||
ContextMenuEntry {
|
||||
text: qsTr("Delete all") + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
historyReminderPopup.setValues("ALL_HISTORY", qsTr("Please confirm that you want to delete your complete history."))
|
||||
historyReminderPopup.open()
|
||||
contextMenu.close()
|
||||
}
|
||||
}
|
||||
|
||||
ContextMenuEntry {
|
||||
text: qsTr("Delete last 4 weeks") + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
historyReminderPopup.setValues("LAST_FOUR_WEEKS", qsTr("Please confirm that you want to delete your history from the last four weeks."))
|
||||
historyReminderPopup.open()
|
||||
contextMenu.close()
|
||||
}
|
||||
}
|
||||
|
||||
ContextMenuEntry {
|
||||
text: qsTr("Delete last week") + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
historyReminderPopup.setValues("PAST_WEEK", qsTr("Please confirm that you want to delete your history from the last week."))
|
||||
historyReminderPopup.open()
|
||||
contextMenu.close()
|
||||
}
|
||||
}
|
||||
|
||||
ContextMenuEntry {
|
||||
text: qsTr("Delete last day") + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
historyReminderPopup.setValues("PAST_DAY", qsTr("Please confirm that you want to delete your history from the last day."))
|
||||
historyReminderPopup.open()
|
||||
contextMenu.close()
|
||||
}
|
||||
}
|
||||
|
||||
ContextMenuEntry {
|
||||
text: qsTr("Delete last hour") + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
historyReminderPopup.setValues("PAST_HOUR", qsTr("Please confirm that you want to delete your history from the last hour."))
|
||||
historyReminderPopup.open()
|
||||
contextMenu.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -28,12 +28,16 @@ Item {
|
|||
|
||||
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
|
||||
|
@ -56,6 +60,7 @@ Item {
|
|||
}
|
||||
Text {
|
||||
id: subjectText
|
||||
color: Constants.secondary_text
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
@ -73,11 +78,21 @@ Item {
|
|||
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/android/arrowRight.svg"
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Controls 2.2
|
||||
|
||||
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(deleteHistoryConfirmationDialog.timePeriod);
|
||||
qmlExtension.showFeedback(qsTr("Removed %1 entries from the history.").arg(removedItems))
|
||||
popupObject.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,88 +1,88 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick 2.7
|
||||
|
||||
import Governikus.Global 1.0
|
||||
import Governikus.Provider 1.0
|
||||
import Governikus.TitleBar 1.0
|
||||
|
||||
Item {
|
||||
SectionPage {
|
||||
id: root
|
||||
height: infoPane.height + 2 * Constants.component_spacing
|
||||
|
||||
Column {
|
||||
id: infoPane
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Constants.component_spacing
|
||||
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
leftTitleBarAction: TitleBarAction {
|
||||
state: "cancel"
|
||||
onClicked: authModel.cancelWorkflow()
|
||||
}
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true }
|
||||
|
||||
Pane {
|
||||
content: Column {
|
||||
width: baseItem.width
|
||||
padding: Constants.pane_padding
|
||||
|
||||
Row {
|
||||
height: providerEntries.height
|
||||
Column {
|
||||
width: parent.width - 2 * Constants.pane_padding
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
spacing: Constants.pane_spacing
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
}
|
||||
|
||||
Item {
|
||||
Pane {
|
||||
|
||||
Row {
|
||||
height: providerEntries.height
|
||||
width: (parent.width - Constants.pane_spacing) / 2
|
||||
width: parent.width
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
spacing: Constants.pane_spacing
|
||||
Item {
|
||||
height: providerEntries.height
|
||||
width: (parent.width - Constants.pane_spacing) / 2
|
||||
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
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
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Item {
|
||||
height: parent.height
|
||||
width: (parent.width - Constants.pane_spacing) / 2
|
||||
|
||||
GButton {
|
||||
id: button
|
||||
iconSource: "qrc:///images/npa.svg"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
buttonColor: applicationModel.currentWorkflow === "" && settingsModel.useSelfauthenticationTestUri ? Constants.red : Constants.blue
|
||||
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
if (applicationModel.currentWorkflow === "") {
|
||||
selfAuthenticationModel.startWorkflow();
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
title: qsTr("Service provider") + settingsModel.translationTrigger
|
||||
name: certificateDescriptionModel.subjectName
|
||||
}
|
||||
else if (applicationModel.currentWorkflow === "authentication") {
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/purpose.svg"
|
||||
title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Item {
|
||||
height: parent.height
|
||||
width: (parent.width - Constants.pane_spacing) / 2
|
||||
|
||||
GButton {
|
||||
id: button
|
||||
iconSource: "qrc:///images/npa.svg"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger
|
||||
onClicked: {
|
||||
chatModel.transferAccessRights()
|
||||
numberModel.continueWorkflow()
|
||||
}
|
||||
|
@ -90,65 +90,67 @@ Item {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
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
|
||||
}
|
||||
|
||||
Pane {
|
||||
Column {
|
||||
height: childrenRect.height
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
spacing: Utils.dp(30)
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger
|
||||
}
|
||||
|
||||
Pane {
|
||||
Column {
|
||||
id: transactionInfo
|
||||
|
||||
height: childrenRect.height
|
||||
width: parent.width
|
||||
visible: !!transactionInfoText.text
|
||||
spacing: Utils.dp(30)
|
||||
|
||||
Text {
|
||||
height: implicitHeight * 1.5
|
||||
verticalAlignment: Text.AlignTop
|
||||
text: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
color: Constants.blue
|
||||
font.pixelSize: Constants.header_font_size
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
Column {
|
||||
id: transactionInfo
|
||||
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
visible: !!transactionInfoText.text
|
||||
|
||||
Row {
|
||||
width: parent.width
|
||||
spacing: Constants.pane_spacing
|
||||
Text {
|
||||
height: implicitHeight * 1.5
|
||||
verticalAlignment: Text.AlignTop
|
||||
text: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
color: Constants.blue
|
||||
font.pixelSize: Constants.header_font_size
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
id: requiredData
|
||||
width: optionalData.visible ? parent.width * 0.63 : parent.width
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
color: Constants.secondary_text
|
||||
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
columns: optionalData.visible ? 2 : 3
|
||||
chat: chatModel.required
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
id: optionalData
|
||||
width: parent.width * 0.37 - Constants.pane_spacing
|
||||
Row {
|
||||
width: parent.width
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
DataGroup {
|
||||
id: requiredData
|
||||
width: optionalData.visible ? parent.width * 0.63 : parent.width
|
||||
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
columns: optionalData.visible ? 2 : 3
|
||||
chat: chatModel.required
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
id: optionalData
|
||||
width: parent.width * 0.37 - Constants.pane_spacing
|
||||
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ Rectangle {
|
|||
visible: repeater.count < 1
|
||||
Text {
|
||||
id: emptyText
|
||||
color: Constants.secondary_text
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
@ -70,6 +71,7 @@ Rectangle {
|
|||
|
||||
Text {
|
||||
id: text
|
||||
color: Constants.secondary_text
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
anchors.right: checkBox.left
|
||||
|
|
|
@ -1,134 +1,138 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick 2.7
|
||||
|
||||
import Governikus.Global 1.0
|
||||
import Governikus.Provider 1.0
|
||||
import Governikus.TitleBar 1.0
|
||||
|
||||
Item {
|
||||
height: identifycolumn.height + Utils.dp(30)
|
||||
SectionPage {
|
||||
id: baseItem
|
||||
|
||||
Column {
|
||||
id: identifycolumn
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Constants.component_spacing
|
||||
leftTitleBarAction: TitleBarAction {
|
||||
state: "cancel"
|
||||
onClicked: authModel.cancelWorkflow()
|
||||
}
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true }
|
||||
|
||||
spacing: Constants.component_spacing
|
||||
content: Column {
|
||||
width: baseItem.width
|
||||
padding: Constants.pane_padding
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
}
|
||||
Column {
|
||||
width: parent.width - 2 * Constants.pane_padding
|
||||
spacing: Constants.component_spacing
|
||||
|
||||
Pane {
|
||||
|
||||
Item {
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
height: providerEntries.height
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
}
|
||||
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: forwardAction.left
|
||||
spacing: Constants.pane_spacing
|
||||
Pane {
|
||||
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
title: qsTr("Service provider") + settingsModel.translationTrigger
|
||||
Item {
|
||||
width: parent.width
|
||||
height: providerEntries.height
|
||||
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: forwardAction.left
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
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
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: forwardAction
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: providerEntries.verticalCenter
|
||||
|
||||
text: ">"
|
||||
font.pixelSize: Utils.sp(22)
|
||||
color: Constants.grey
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/purpose.svg"
|
||||
title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: forwardAction
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: providerEntries.verticalCenter
|
||||
|
||||
text: ">"
|
||||
font.pixelSize: Utils.sp(22)
|
||||
color: Constants.grey
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GButton {
|
||||
iconSource: "qrc:///images/npa.svg"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
buttonColor: applicationModel.currentWorkflow === "" && settingsModel.useSelfauthenticationTestUri ? Constants.red : Constants.blue
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger;
|
||||
onClicked: {
|
||||
if (applicationModel.currentWorkflow === "") {
|
||||
selfAuthenticationModel.startWorkflow();
|
||||
}
|
||||
else if (applicationModel.currentWorkflow === "authentication") {
|
||||
GButton {
|
||||
iconSource: "qrc:///images/npa.svg"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger;
|
||||
onClicked: {
|
||||
chatModel.transferAccessRights()
|
||||
numberModel.continueWorkflow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
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
|
||||
}
|
||||
|
||||
Pane {
|
||||
width: parent.width
|
||||
|
||||
Column {
|
||||
id: transactionInfo
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
visible: !!transactionInfoText.text
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger
|
||||
}
|
||||
|
||||
Text {
|
||||
height: implicitHeight * 1.5
|
||||
verticalAlignment: Text.AlignTop
|
||||
text: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
color: Constants.blue
|
||||
font.pixelSize: Constants.header_font_size
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
Pane {
|
||||
width: parent.width
|
||||
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
Column {
|
||||
id: transactionInfo
|
||||
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
wrapMode: Text.WordWrap
|
||||
visible: !!transactionInfoText.text
|
||||
|
||||
Text {
|
||||
height: implicitHeight * 1.5
|
||||
verticalAlignment: Text.AlignTop
|
||||
text: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
color: Constants.blue
|
||||
font.pixelSize: Constants.header_font_size
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
color: Constants.secondary_text
|
||||
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.required
|
||||
}
|
||||
DataGroup {
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.required
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
DataGroup {
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ Rectangle {
|
|||
height: Utils.dp(40)
|
||||
visible: repeater.count < 1
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
id: emptyText
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: parent.width
|
||||
|
@ -70,6 +71,7 @@ Rectangle {
|
|||
|
||||
Text {
|
||||
id: text
|
||||
color: Constants.secondary_text
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.left: parent.left
|
||||
anchors.right: checkBox.left
|
||||
|
|
|
@ -1,147 +1,152 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick 2.7
|
||||
|
||||
import Governikus.Global 1.0
|
||||
import Governikus.Provider 1.0
|
||||
import Governikus.TitleBar 1.0
|
||||
|
||||
Item {
|
||||
height: identifycolumn.height + Utils.dp(30)
|
||||
SectionPage {
|
||||
id: baseItem
|
||||
|
||||
Column {
|
||||
id: identifycolumn
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Constants.component_spacing
|
||||
|
||||
spacing: Constants.component_spacing
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
leftTitleBarAction: TitleBarAction {
|
||||
state: "cancel"
|
||||
onClicked: authModel.cancelWorkflow()
|
||||
}
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true }
|
||||
|
||||
Pane {
|
||||
content: Column {
|
||||
width: baseItem.width
|
||||
padding: Constants.pane_padding
|
||||
|
||||
Item {
|
||||
Column {
|
||||
width: parent.width - 2 * Constants.pane_padding
|
||||
spacing: Constants.component_spacing
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
height: providerEntries.height
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
}
|
||||
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: forwardAction.left
|
||||
spacing: Constants.pane_spacing
|
||||
Pane {
|
||||
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
title: qsTr("Service provider") + settingsModel.translationTrigger
|
||||
Item {
|
||||
width: parent.width
|
||||
height: providerEntries.height
|
||||
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: forwardAction.left
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
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
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: forwardAction
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: providerEntries.verticalCenter
|
||||
|
||||
text: ">"
|
||||
font.pixelSize: Utils.sp(22)
|
||||
color: Constants.grey
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/purpose.svg"
|
||||
title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: forwardAction
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: providerEntries.verticalCenter
|
||||
|
||||
text: ">"
|
||||
font.pixelSize: Utils.sp(22)
|
||||
color: Constants.grey
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GButton {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
buttonColor: applicationModel.currentWorkflow === "" && settingsModel.useSelfauthenticationTestUri ? Constants.red : Constants.blue
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger;
|
||||
onClicked: {
|
||||
if (applicationModel.currentWorkflow === "") {
|
||||
selfAuthenticationModel.startWorkflow();
|
||||
}
|
||||
else if (applicationModel.currentWorkflow === "authentication") {
|
||||
GButton {
|
||||
iconSource: "qrc:///images/npa.svg"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger;
|
||||
onClicked: {
|
||||
chatModel.transferAccessRights()
|
||||
numberModel.continueWorkflow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
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
|
||||
}
|
||||
|
||||
Pane {
|
||||
Column {
|
||||
height: childrenRect.height
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
spacing: Utils.dp(30)
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("The following data will be transferred to the service provider when you enter the PIN:") + settingsModel.translationTrigger
|
||||
}
|
||||
|
||||
Pane {
|
||||
Column {
|
||||
id: transactionInfo
|
||||
|
||||
height: childrenRect.height
|
||||
width: parent.width
|
||||
visible: !!transactionInfoText.text
|
||||
spacing: Utils.dp(30)
|
||||
|
||||
Text {
|
||||
height: implicitHeight * 1.5
|
||||
verticalAlignment: Text.AlignTop
|
||||
text: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
color: Constants.blue
|
||||
font.pixelSize: Constants.header_font_size
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
Column {
|
||||
id: transactionInfo
|
||||
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
visible: !!transactionInfoText.text
|
||||
|
||||
Row {
|
||||
width: parent.width
|
||||
spacing: Constants.pane_spacing
|
||||
Text {
|
||||
height: implicitHeight * 1.5
|
||||
verticalAlignment: Text.AlignTop
|
||||
text: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
color: Constants.blue
|
||||
font.pixelSize: Constants.header_font_size
|
||||
elide: Text.ElideRight
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
id: requiredData
|
||||
width: optionalData.visible ? parent.width * 0.63 : parent.width
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
color: Constants.secondary_text
|
||||
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
columns: optionalData.visible ? 2 : 3
|
||||
chat: chatModel.required
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
id: optionalData
|
||||
width: parent.width * 0.37 - Constants.pane_spacing
|
||||
Row {
|
||||
width: parent.width
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
DataGroup {
|
||||
id: requiredData
|
||||
width: optionalData.visible ? parent.width * 0.63 : parent.width
|
||||
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
columns: optionalData.visible ? 2 : 3
|
||||
chat: chatModel.required
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
id: optionalData
|
||||
width: parent.width * 0.37 - Constants.pane_spacing
|
||||
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@ Pane {
|
|||
id: pane
|
||||
spacing: 0
|
||||
visible: repeater.count > 0
|
||||
anchors.topMargin: Constants.component_spacing
|
||||
anchors.top: header.bottom
|
||||
|
||||
Repeater {
|
||||
id: repeater
|
||||
|
@ -25,6 +23,7 @@ Pane {
|
|||
color: "white"
|
||||
Text {
|
||||
id: dataGroup
|
||||
color: Constants.secondary_text
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.right: checkBox.left
|
||||
|
|
|
@ -1,120 +1,126 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick 2.7
|
||||
|
||||
import Governikus.Global 1.0
|
||||
import Governikus.Provider 1.0
|
||||
import Governikus.TitleBar 1.0
|
||||
|
||||
Item {
|
||||
height: identifycolumn.height + Utils.dp(30)
|
||||
SectionPage {
|
||||
id: baseItem
|
||||
|
||||
Column {
|
||||
id: identifycolumn
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.margins: Constants.component_spacing
|
||||
leftTitleBarAction: TitleBarAction {
|
||||
state: "cancel"
|
||||
onClicked: authModel.cancelWorkflow()
|
||||
}
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true }
|
||||
|
||||
spacing: Constants.component_spacing
|
||||
content: Column {
|
||||
width: baseItem.width
|
||||
padding: Constants.pane_padding
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
}
|
||||
Column {
|
||||
width: parent.width - 2 * Constants.pane_padding
|
||||
|
||||
Pane {
|
||||
spacing: Constants.component_spacing
|
||||
|
||||
Item {
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
width: parent.width
|
||||
height: providerEntries.height
|
||||
wrapMode: Text.WordWrap
|
||||
text: qsTr("You are about to identify yourself towards the following service provider:") + settingsModel.translationTrigger
|
||||
}
|
||||
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: forwardAction.left
|
||||
spacing: Constants.pane_spacing
|
||||
Pane {
|
||||
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
title: qsTr("Service provider") + settingsModel.translationTrigger
|
||||
Item {
|
||||
width: parent.width
|
||||
height: providerEntries.height
|
||||
|
||||
Column {
|
||||
id: providerEntries
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.right: forwardAction.left
|
||||
spacing: Constants.pane_spacing
|
||||
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/information.svg"
|
||||
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
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: forwardAction
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: providerEntries.verticalCenter
|
||||
|
||||
text: ">"
|
||||
font.pixelSize: Utils.sp(22)
|
||||
color: Constants.grey
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
ProviderInfoSection {
|
||||
imageSource: "qrc:///images/provider/purpose.svg"
|
||||
title: qsTr("Purpose for reading out requested data") + settingsModel.translationTrigger
|
||||
name: certificateDescriptionModel.purpose
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: forwardAction
|
||||
anchors.right: parent.right
|
||||
anchors.verticalCenter: providerEntries.verticalCenter
|
||||
|
||||
text: ">"
|
||||
font.pixelSize: Utils.sp(22)
|
||||
color: Constants.grey
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: firePush(certificateDescriptionPage, {})
|
||||
}
|
||||
|
||||
CertificateDescriptionPage {
|
||||
id: certificateDescriptionPage
|
||||
name: certificateDescriptionModel.subjectName
|
||||
visible: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GButton {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
buttonColor: applicationModel.currentWorkflow === "" && settingsModel.useSelfauthenticationTestUri ? Constants.red : Constants.blue
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger;
|
||||
onClicked: {
|
||||
if (applicationModel.currentWorkflow === "") {
|
||||
selfAuthenticationModel.startWorkflow();
|
||||
}
|
||||
else if (applicationModel.currentWorkflow === "authentication") {
|
||||
GButton {
|
||||
iconSource: "qrc:///images/npa.svg"
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: qsTr("Identify now") + settingsModel.translationTrigger;
|
||||
onClicked: {
|
||||
chatModel.transferAccessRights()
|
||||
numberModel.continueWorkflow()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
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
|
||||
}
|
||||
|
||||
Pane {
|
||||
id: transactionInfo
|
||||
title: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
visible: !!transactionInfoText.text
|
||||
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
|
||||
width: parent.width
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.required
|
||||
}
|
||||
Pane {
|
||||
id: transactionInfo
|
||||
title: qsTr("Transactional information") + settingsModel.translationTrigger
|
||||
visible: !!transactionInfoText.text
|
||||
|
||||
DataGroup {
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
Text {
|
||||
id: transactionInfoText
|
||||
color: Constants.secondary_text
|
||||
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
text: authModel.transactionInfo
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
title: qsTr("Required Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.required
|
||||
}
|
||||
|
||||
DataGroup {
|
||||
title: qsTr("Optional Data") + settingsModel.translationTrigger
|
||||
chat: chatModel.optional
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,97 +0,0 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtGraphicalEffects 1.0
|
||||
import QtQuick.Layouts 1.2
|
||||
|
||||
import Governikus.Global 1.0
|
||||
|
||||
|
||||
Item {
|
||||
id: header
|
||||
/* this is interpreted by the SectionPage component */
|
||||
readonly property real titleBarOpacity: shadow.opacity === 1 ? 1 : 0
|
||||
|
||||
Image {
|
||||
id: dna
|
||||
width: parent.width
|
||||
source: "qrc:///images/iOS/Header-Ausweisapp@3x.png"
|
||||
anchors.top: parent.top
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: (parent.height - 2 * Constants.titlebar_height) * transition()
|
||||
|
||||
function transition() {
|
||||
return Math.min(1, contentY / Constants.titlebar_height)
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: shadow
|
||||
anchors.fill: parent
|
||||
color: Constants.blue
|
||||
opacity: Math.min(1, 0.5 + parent.transition() * 0.5)
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: information.top
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: information
|
||||
height: Math.max(npa.height, text.height)
|
||||
anchors.margins: Constants.component_spacing
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
Image {
|
||||
id: npa
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: information.verticalCenter
|
||||
|
||||
height: Utils.dp(60)
|
||||
width: height
|
||||
source: "qrc:///images/npa.svg"
|
||||
}
|
||||
Text {
|
||||
id: text
|
||||
anchors.verticalCenter: npa.verticalCenter
|
||||
anchors.left: npa.right
|
||||
anchors.leftMargin: Constants.component_spacing
|
||||
anchors.right: parent.right
|
||||
|
||||
text: ((applicationModel.currentWorkflow !== "authentication") ?
|
||||
qsTr("Hello, here you have the opportunity to view the stored data on your identity card.") :
|
||||
qsTr("Hello, \"%1\" wants to read your data.").arg(certificateDescriptionModel.subjectName)
|
||||
) + settingsModel.translationTrigger
|
||||
wrapMode: Text.WordWrap
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
}
|
||||
}
|
||||
}
|
|
@ -53,21 +53,9 @@ Item {
|
|||
navBar.currentIndex = 0
|
||||
break
|
||||
case "StateEditAccessRights":
|
||||
if (applicationModel.currentWorkflow === "selfauthentication") {
|
||||
chatModel.transferAccessRights()
|
||||
numberModel.continueWorkflow()
|
||||
}
|
||||
if (applicationModel.currentWorkflow === "authentication") {
|
||||
firePopAll()
|
||||
}
|
||||
firePush(identifyViewContent, {})
|
||||
|
||||
if (Qt.platform.os === "android") {
|
||||
authModel.readerPlugInType = "NFC";
|
||||
} else if (Qt.platform.os === "ios") {
|
||||
authModel.readerPlugInType = "BLUETOOTH";
|
||||
} else {
|
||||
authModel.readerPlugInType = "PCSC";
|
||||
}
|
||||
authModel.setInitialPluginType()
|
||||
break
|
||||
case "StateSelectReader":
|
||||
firePush(identifyWorkflow, {})
|
||||
|
@ -96,15 +84,33 @@ Item {
|
|||
setIdentifyWorkflowStateAndRequestInput("identify_enterpin", "PIN")
|
||||
break
|
||||
case "StateDidAuthenticateEac1":
|
||||
identifyProgressView.progressBarVisible = true
|
||||
setIdentifyProgressViewValue(1)
|
||||
setIdentifyWorkflowStateAndContinue("identify_processing")
|
||||
break
|
||||
case "StateEstablishPacePuk":
|
||||
authModel.cancelWorkflowOnPinBlocked()
|
||||
break
|
||||
case "StateDidAuthenticateEac2":
|
||||
setIdentifyProgressViewValue(2)
|
||||
numberModel.continueWorkflow()
|
||||
break
|
||||
case "StateTransmit":
|
||||
setIdentifyProgressViewValue(3)
|
||||
numberModel.continueWorkflow()
|
||||
break
|
||||
case "StateCleanUpReaderManager":
|
||||
controller.showRemoveCardFeedback = numberModel.cardConnected && !authModel.isError;
|
||||
numberModel.continueWorkflow()
|
||||
break;
|
||||
case "StateCheckRefreshAddress":
|
||||
setIdentifyProgressViewValue(4)
|
||||
numberModel.continueWorkflow()
|
||||
break
|
||||
case "StateWriteHistory":
|
||||
setIdentifyProgressViewValue(5)
|
||||
numberModel.continueWorkflow()
|
||||
break
|
||||
case "FinalState":
|
||||
navBar.lockedAndHidden = true
|
||||
if (controller.showRemoveCardFeedback) {
|
||||
|
@ -123,12 +129,18 @@ Item {
|
|||
navBar.lockedAndHidden = false
|
||||
}
|
||||
}
|
||||
identifyProgressView.progressBarVisible = false
|
||||
setIdentifyProgressViewValue(0)
|
||||
break
|
||||
default:
|
||||
numberModel.continueWorkflow()
|
||||
}
|
||||
}
|
||||
|
||||
function setIdentifyProgressViewValue(value){
|
||||
identifyProgressView.progressValue = value
|
||||
}
|
||||
|
||||
function setIdentifyWorkflowState(pState) {
|
||||
identifyWorkflow.state = pState
|
||||
}
|
||||
|
|
|
@ -18,14 +18,21 @@ SectionPage
|
|||
}
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true }
|
||||
|
||||
content: IdentifyViewContent {
|
||||
content: IdentifyViewInfo {
|
||||
id: identifyViewInfo
|
||||
width: identifyEditChatView.width
|
||||
height: identifyEditChatView.height
|
||||
}
|
||||
|
||||
IdentifyController {
|
||||
id: identifyController
|
||||
}
|
||||
|
||||
IdentifyViewContent {
|
||||
id: identifyViewContent
|
||||
visible: false
|
||||
}
|
||||
|
||||
SelfAuthenticationData {
|
||||
id: selfAuthenticationData
|
||||
visible: false
|
||||
|
@ -54,7 +61,7 @@ SectionPage
|
|||
leftTitleBarAction: TitleBarAction { state: authModel.isBasicReader ? "cancel" : "hidden"; onClicked: authModel.cancelWorkflow() }
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Identify") + settingsModel.translationTrigger; font.bold: true }
|
||||
visible: false
|
||||
text: qsTr("Authenticate") + settingsModel.translationTrigger
|
||||
text: qsTr("Authentication in progress") + settingsModel.translationTrigger
|
||||
subText: (!visible ? "" :
|
||||
authModel.isBasicReader ?
|
||||
qsTr("Please wait a moment...") :
|
||||
|
@ -70,7 +77,16 @@ SectionPage
|
|||
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
|
||||
subTextColor: !authModel.isBasicReader && (numberModel.inputError || numberModel.pinDeactivated || state === "identify_entercan" || state === "enterpuk") ? "red" : "black"
|
||||
subTextColor: !authModel.isBasicReader && (numberModel.inputError || numberModel.pinDeactivated || state === "identify_entercan" || state === "enterpuk") ? "red" : Constants.secondary_text
|
||||
progressValue: 0
|
||||
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
|
||||
progressBarVisible: false
|
||||
}
|
||||
|
||||
ProgressView {
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
import QtQuick 2.7
|
||||
|
||||
import Governikus.Global 1.0
|
||||
import Governikus.TitleBar 1.0
|
||||
|
||||
|
||||
Item {
|
||||
id: baseItem
|
||||
Column {
|
||||
readonly property int maxWidth: width - 2 * Constants.pane_padding
|
||||
width: baseItem.width
|
||||
|
||||
id: root
|
||||
spacing: Constants.component_spacing
|
||||
padding: Constants.pane_padding
|
||||
|
||||
Item {
|
||||
height: childrenRect.height
|
||||
width: root.maxWidth
|
||||
Image {
|
||||
id: useNpa
|
||||
anchors.left: parent.left
|
||||
width: parent.width * 0.4
|
||||
fillMode: Image.PreserveAspectFit
|
||||
source: "qrc:///images/siteWithLogo.png"
|
||||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Pane {
|
||||
anchors.leftMargin: Constants.pane_padding
|
||||
anchors.rightMargin: Constants.pane_padding
|
||||
Text {
|
||||
id: info
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
wrapMode: Text.WordWrap
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
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."
|
||||
+ " Your personal data is neither saved nor processed in any way.")
|
||||
+ settingsModel.translationTrigger
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GButton {
|
||||
iconSource: "qrc:///images/npa.svg"
|
||||
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
|
||||
|
||||
enabled: applicationModel.currentWorkflow !== "authentication"
|
||||
onClicked: {
|
||||
selfAuthenticationModel.startWorkflow()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -81,7 +81,7 @@ SectionPage {
|
|||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: Constants.component_spacing
|
||||
text: qsTr("Ok") + settingsModel.translationTrigger
|
||||
text: qsTr("OK") + settingsModel.translationTrigger
|
||||
onClicked: root.close()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ SectionPage {
|
|||
text: titleText
|
||||
}
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
wrapMode: Text.WordWrap
|
||||
|
@ -74,6 +75,7 @@ SectionPage {
|
|||
}
|
||||
Text {
|
||||
id: subtitle
|
||||
color: Constants.secondary_text
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
text: qsTr("Here you are in the right place.") + settingsModel.translationTrigger
|
||||
|
|
|
@ -16,6 +16,13 @@ SectionPage {
|
|||
color: "white"
|
||||
}
|
||||
|
||||
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
remoteServiceModel.detectRemoteDevices = false
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: menu
|
||||
width: parent.width
|
||||
|
@ -65,7 +72,10 @@ SectionPage {
|
|||
imageSource: "qrc:///images/android/navigation/remotesettings.svg"
|
||||
text: qsTr("Configure remote service") + settingsModel.translationTrigger
|
||||
showRightArrow: true
|
||||
onClicked: firePush(remoteServiceSettings, {})
|
||||
onClicked: {
|
||||
remoteServiceModel.detectRemoteDevices = true
|
||||
firePush(remoteServiceSettings, {})
|
||||
}
|
||||
}
|
||||
|
||||
MoreViewMenuItem {
|
||||
|
|
|
@ -25,6 +25,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: textItem
|
||||
color: Constants.secondary_text
|
||||
height: parent.height
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
anchors.left: imageItem.right
|
||||
|
|
|
@ -7,6 +7,7 @@ Item {
|
|||
id: navigation
|
||||
state: "identify"
|
||||
width: !PlatformConstants.is_tablet || lockedAndHidden ? 0 : Constants.menubar_width
|
||||
enabled: !lockedAndHidden
|
||||
|
||||
property bool lockedAndHidden: true
|
||||
property bool isOpen: drawer.position > 0
|
||||
|
|
|
@ -29,7 +29,7 @@ Item {
|
|||
anchors.verticalCenter: parent.verticalCenter
|
||||
font.pixelSize: Constants.small_font_size
|
||||
renderType: Text.NativeRendering
|
||||
color: "black"
|
||||
color: Constants.secondary_text
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
|
|
|
@ -6,6 +6,8 @@ import Governikus.Global 1.0
|
|||
Item {
|
||||
property bool lockedAndHidden: false
|
||||
property bool isOpen: true
|
||||
property int currentIndex: 0
|
||||
enabled: !lockedAndHidden
|
||||
|
||||
id: baseItem
|
||||
state: "identify"
|
||||
|
|
|
@ -19,6 +19,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: tabText
|
||||
color: Constants.secondary_text
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.bottomMargin: font.pixelSize / 10
|
||||
|
|
|
@ -36,6 +36,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: pinDesc
|
||||
color: Constants.secondary_text
|
||||
|
||||
anchors.margins: Utils.dp(10)
|
||||
anchors.top: pinHeader.bottom
|
||||
|
|
|
@ -21,6 +21,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: pinDesc
|
||||
color: Constants.secondary_text
|
||||
|
||||
width: parent.width * 0.9
|
||||
|
||||
|
|
|
@ -22,13 +22,7 @@ Item {
|
|||
baseItem.firePopAll()
|
||||
baseItem.firePush(pinWorkflow, {})
|
||||
|
||||
if (Qt.platform.os === "android") {
|
||||
changePinModel.readerPlugInType = "NFC"
|
||||
} else if (Qt.platform.os === "ios") {
|
||||
changePinModel.readerPlugInType = "BLUETOOTH"
|
||||
} else {
|
||||
changePinModel.readerPlugInType = "PCSC"
|
||||
}
|
||||
changePinModel.setInitialPluginType()
|
||||
}
|
||||
|
||||
navBar.lockedAndHidden = true
|
||||
|
|
|
@ -78,6 +78,6 @@ SectionPage {
|
|||
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
|
||||
subTextColor: !changePinModel.isBasicReader && (numberModel.inputError || numberModel.pinDeactivated || state === "changepin_entercan" || state === "enterpuk") ? "red" : "black"
|
||||
subTextColor: !changePinModel.isBasicReader && (numberModel.inputError || numberModel.pinDeactivated || state === "changepin_entercan" || state === "enterpuk") ? "red" : Constants.secondary_text
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ SectionPage
|
|||
|
||||
NfcWorkflow
|
||||
{
|
||||
allowRemote: false
|
||||
anchors.fill: parent
|
||||
state: parent.state
|
||||
visible: changePinModel.readerPlugInType === "NFC"
|
||||
|
@ -36,7 +35,6 @@ SectionPage
|
|||
|
||||
BluetoothWorkflow
|
||||
{
|
||||
allowRemote: false
|
||||
anchors.fill: parent
|
||||
state: parent.state
|
||||
visible: changePinModel.readerPlugInType === "BLUETOOTH"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import QtQuick 2.5
|
||||
import QtQuick.Controls 1.4
|
||||
import QtQuick.Controls.Styles 1.4
|
||||
import QtQuick.Layouts 1.2
|
||||
|
||||
import Governikus.Global 1.0
|
||||
|
@ -11,6 +12,9 @@ SectionPage
|
|||
property alias text: text.text
|
||||
property alias subText: subText.text
|
||||
property alias subTextColor: subText.color
|
||||
property alias progressText: progressText.text
|
||||
property int progressValue
|
||||
property alias progressBarVisible: progressBar.visible
|
||||
|
||||
BusyIndicator {
|
||||
id: busyIndicator
|
||||
|
@ -39,6 +43,7 @@ SectionPage
|
|||
}
|
||||
Text {
|
||||
id: subText
|
||||
color: Constants.secondary_text
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
@ -48,4 +53,39 @@ SectionPage
|
|||
width: baseItem.width * 0.8
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Text {
|
||||
id: progressText
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
anchors.top: subText.bottom
|
||||
anchors.topMargin: Utils.dp(20)
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
width: baseItem.width * 0.8
|
||||
wrapMode: Text.WordWrap
|
||||
color: Constants.grey
|
||||
}
|
||||
ProgressBar {
|
||||
id: progressBar
|
||||
anchors.top: progressText.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.topMargin: Utils.dp(10)
|
||||
width: baseItem.width * 0.6
|
||||
minimumValue: 0
|
||||
maximumValue: 5
|
||||
visible: false
|
||||
value: progressValue
|
||||
style: ProgressBarStyle {
|
||||
background: Rectangle {
|
||||
radius: Utils.dp(2)
|
||||
color: Constants.lightgrey
|
||||
implicitWidth: parent.width
|
||||
implicitHeight: parent.width/12.0
|
||||
}
|
||||
progress: Rectangle {
|
||||
radius: Utils.dp(2)
|
||||
color: Constants.green
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,6 +99,7 @@ SectionPage {
|
|||
|
||||
Text {
|
||||
id: providerText
|
||||
color: Constants.secondary_text
|
||||
text: (!!provider.longDescription ? provider.longDescription : qsTr("Description not available")) + settingsModel.translationTrigger
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
wrapMode: Text.WordWrap
|
||||
|
|
|
@ -102,6 +102,7 @@ SectionPage {
|
|||
|
||||
Text {
|
||||
id: providerText
|
||||
color: Constants.secondary_text
|
||||
text: (!!provider.longDescription ? provider.longDescription : qsTr("Description not available")) + settingsModel.translationTrigger
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
wrapMode: Text.WordWrap
|
||||
|
|
|
@ -34,6 +34,7 @@ Rectangle {
|
|||
|
||||
Text {
|
||||
id: subjectText
|
||||
color: Constants.secondary_text
|
||||
width: parent.width
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
|
|
@ -32,6 +32,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: textItem
|
||||
color: Constants.secondary_text
|
||||
text: !!model.text ? model.text : qsTr("Unknown") + settingsModel.translationTrigger
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
anchors.left: imageItem.right
|
||||
|
|
|
@ -16,6 +16,7 @@ Column {
|
|||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
text: baseItem.description
|
||||
|
|
|
@ -92,6 +92,7 @@ Item {
|
|||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
text: modelData.trim()
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
|
@ -129,6 +130,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: termsOfUsageTextItem
|
||||
color: Constants.secondary_text
|
||||
|
||||
text: baseItem.termsOfUsageText
|
||||
width: parent.width
|
||||
|
|
|
@ -151,6 +151,7 @@ Rectangle {
|
|||
|
||||
Text {
|
||||
id: providerText
|
||||
color: Constants.secondary_text
|
||||
width: parent.width
|
||||
text: selectedProvider ? selectedProvider.shortDescription : ""
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
|
|
@ -110,6 +110,7 @@ SectionPage {
|
|||
|
||||
Text {
|
||||
id: noResultsText
|
||||
color: Constants.secondary_text
|
||||
|
||||
anchors.centerIn: mainPane
|
||||
text: qsTr("No match found") + settingsModel.translationTrigger
|
||||
|
|
|
@ -62,6 +62,7 @@ SectionPage {
|
|||
visible: providerModel.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
|
||||
|
|
|
@ -12,8 +12,10 @@ Row {
|
|||
readonly property alias searchText: searchField.displayText
|
||||
|
||||
anchors.top: parent ? parent.top : undefined
|
||||
anchors.topMargin: Constants.titlebar_padding
|
||||
anchors.right: parent ? parent.right : undefined
|
||||
anchors.bottom: parent ? parent.bottom : undefined
|
||||
anchors.bottomMargin: Constants.titlebar_padding
|
||||
spacing: Constants.titlebar_padding
|
||||
|
||||
GTextField {
|
||||
|
|
|
@ -111,6 +111,7 @@ SectionPage {
|
|||
|
||||
Text {
|
||||
id: noResultsText
|
||||
color: Constants.secondary_text
|
||||
|
||||
anchors.centerIn: mainPane
|
||||
text: qsTr("No match found") + settingsModel.translationTrigger
|
||||
|
|
|
@ -56,6 +56,7 @@ SectionPage {
|
|||
visible: providerModel.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
|
||||
|
|
|
@ -29,6 +29,7 @@ Item {
|
|||
|
||||
Text {
|
||||
id: label
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
|
|
@ -10,16 +10,24 @@ MouseArea {
|
|||
signal requestPairing(string pDeviceId)
|
||||
|
||||
onClicked: {
|
||||
requestPairing(deviceId)
|
||||
if (isSupported) requestPairing(deviceId)
|
||||
}
|
||||
|
||||
Text {
|
||||
id: nameText
|
||||
color: Constants.secondary_text
|
||||
width: parent.width
|
||||
font.pixelSize: Utils.sp(16)
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
opacity: 0.87
|
||||
text: remoteDeviceName
|
||||
text: {
|
||||
settingsModel.translationTrigger
|
||||
|
||||
if (isSupported) {
|
||||
return remoteDeviceName;
|
||||
}
|
||||
return remoteDeviceName + " (" + qsTr("Unsupported") + ")"
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
|
|
|
@ -15,18 +15,30 @@ Item {
|
|||
|
||||
Text {
|
||||
id: nameText
|
||||
color: Constants.secondary_text
|
||||
font.pixelSize: Utils.sp(16)
|
||||
opacity: 0.87
|
||||
text: remoteDeviceName + (isNetworkVisible ? qsTr(" (Available)"): "")
|
||||
text: {
|
||||
settingsModel.translationTrigger
|
||||
|
||||
if (!isNetworkVisible) {
|
||||
return remoteDeviceName;
|
||||
}
|
||||
if (isSupported) {
|
||||
return remoteDeviceName + " (" + qsTr("Available") + ")"
|
||||
}
|
||||
return remoteDeviceName + " (" + qsTr("Available, but unsupported") + ")"
|
||||
}
|
||||
}
|
||||
|
||||
Text {
|
||||
id: dateText
|
||||
color: Constants.secondary_text
|
||||
anchors.top: nameText.bottom
|
||||
anchors.topMargin: Utils.dp(2)
|
||||
font.pixelSize: Utils.sp(14)
|
||||
opacity: 0.38
|
||||
text: qsTr("Last connection: ") + lastConnected
|
||||
text: qsTr("Last connection:") + " " + lastConnected + settingsModel.translationTrigger
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,11 @@ Item {
|
|||
break
|
||||
case "StateEstablishPaceChannel":
|
||||
enterPinView.state = "INITIAL"
|
||||
setWorkflowStateAndRequestInput("establishPaceChannel")
|
||||
setWorkflowStateAndRequestInput("establishPaceChannel", remoteServiceModel.getPacePasswordId())
|
||||
break
|
||||
case "StateChangePinRemote":
|
||||
enterPinView.state = "INITIAL"
|
||||
setWorkflowStateAndRequestInput("changePinRemote", "PIN_NEW")
|
||||
break
|
||||
case "FinalState":
|
||||
numberModel.continueWorkflow()
|
||||
|
@ -44,10 +48,10 @@ Item {
|
|||
numberModel.continueWorkflow()
|
||||
}
|
||||
|
||||
function setWorkflowStateAndRequestInput(pState) {
|
||||
function setWorkflowStateAndRequestInput(pState, pEnterPinState) {
|
||||
setWorkflowState(pState)
|
||||
if (remoteServiceModel.pinPadModeOn()) {
|
||||
firePush(enterPinView, {state: remoteServiceModel.getPacePasswordId()})
|
||||
firePush(enterPinView, {state: pEnterPinState})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ Popup {
|
|||
|
||||
Text {
|
||||
id: header
|
||||
color: Constants.secondary_text
|
||||
text: qsTr("Pairing code") + settingsModel.translationTrigger
|
||||
font.pixelSize: Constants.header_font_size
|
||||
font.bold: true
|
||||
|
@ -36,6 +37,7 @@ Popup {
|
|||
|
||||
Text {
|
||||
id: info
|
||||
color: Constants.secondary_text
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
@ -47,6 +49,7 @@ Popup {
|
|||
|
||||
TextField {
|
||||
id: name
|
||||
focus: true
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.letterSpacing: Utils.dp(5)
|
||||
|
|
|
@ -2,6 +2,7 @@ import QtQuick 2.7
|
|||
import QtQuick.Controls 2.2
|
||||
import QtQuick.Layouts 1.1
|
||||
|
||||
import Governikus.EnterPinView 1.0
|
||||
import Governikus.Global 1.0
|
||||
import Governikus.TitleBar 1.0
|
||||
|
||||
|
@ -10,8 +11,6 @@ SectionPage {
|
|||
leftTitleBarAction: TitleBarAction { state: "back"; onClicked: firePop() }
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Configure remote service") + settingsModel.translationTrigger; font.bold: true }
|
||||
|
||||
onVisibleChanged: remoteServiceModel.detectRemoteDevices = visible
|
||||
|
||||
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."))
|
||||
|
@ -48,10 +47,10 @@ SectionPage {
|
|||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
text: qsTr("Choose a device name here to identify it in the network:") + settingsModel.translationTrigger
|
||||
width: parent.width
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
|
@ -89,7 +88,7 @@ SectionPage {
|
|||
id: nameText
|
||||
anchors.bottomMargin: Utils.dp(2)
|
||||
font.pixelSize: Utils.sp(16)
|
||||
color: "#000000"
|
||||
color: Constants.secondary_text
|
||||
opacity: 0.87
|
||||
text: qsTr("PIN pad mode") + settingsModel.translationTrigger
|
||||
}
|
||||
|
@ -99,7 +98,7 @@ SectionPage {
|
|||
width: parent.width
|
||||
anchors.top: nameText.bottom
|
||||
font.pixelSize: Utils.sp(14)
|
||||
color: "#000000"
|
||||
color: Constants.secondary_text
|
||||
opacity: 0.38
|
||||
text: qsTr("Enter PIN on smartphone") + settingsModel.translationTrigger
|
||||
wrapMode: Text.WordWrap
|
||||
|
@ -126,11 +125,11 @@ SectionPage {
|
|||
}
|
||||
|
||||
Text {
|
||||
color: Constants.secondary_text
|
||||
text: qsTr("No device is paired.") + settingsModel.translationTrigger
|
||||
width: parent.width
|
||||
visible: !knownDeviceList.visible
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
|
@ -158,11 +157,11 @@ SectionPage {
|
|||
}
|
||||
|
||||
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
|
||||
width: parent.width
|
||||
visible: !searchDeviceList.visible
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
|
@ -174,8 +173,7 @@ SectionPage {
|
|||
delegate: AvailableDevicesListDelegate {
|
||||
width: searchDeviceList.width
|
||||
onRequestPairing: {
|
||||
popup.deviceId = pDeviceId
|
||||
popup.pin = ""
|
||||
enterPinView.remoteDeviceId = pDeviceId
|
||||
informationPairingPopup.open()
|
||||
}
|
||||
}
|
||||
|
@ -203,6 +201,7 @@ SectionPage {
|
|||
|
||||
Text {
|
||||
id: info
|
||||
color: Constants.secondary_text
|
||||
width: parent.width
|
||||
wrapMode: Text.WordWrap
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
@ -214,18 +213,22 @@ SectionPage {
|
|||
width: parent.width
|
||||
|
||||
onClicked: {
|
||||
popup.open()
|
||||
informationPairingPopup.close()
|
||||
firePush(enterPinView, {})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RemoteServicePairingPopup {
|
||||
id: popup
|
||||
requestInput: true
|
||||
EnterPinView {
|
||||
id: enterPinView
|
||||
state: "REMOTE_PIN"
|
||||
leftTitleBarAction: TitleBarAction { state: "cancel"; onClicked: firePop() }
|
||||
headerTitleBarAction: TitleBarAction { text: qsTr("Pairing code") + settingsModel.translationTrigger }
|
||||
visible: false
|
||||
|
||||
x: (rootPage.width - width) / 2
|
||||
y: Constants.pane_padding
|
||||
onPinEntered: {
|
||||
firePop()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,12 @@ SectionPage {
|
|||
font.bold: true
|
||||
}
|
||||
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
remoteServiceModel.detectRemoteDevices = false
|
||||
}
|
||||
}
|
||||
|
||||
readonly property int maxWidth: Math.min(width - 2 * Constants.component_spacing, Utils.dp(500))
|
||||
id: root
|
||||
|
||||
|
@ -57,6 +63,7 @@ SectionPage {
|
|||
|
||||
Text {
|
||||
id: text
|
||||
color: Constants.secondary_text
|
||||
|
||||
width: parent.maxWidth
|
||||
anchors.top: image.bottom
|
||||
|
@ -67,7 +74,6 @@ SectionPage {
|
|||
+ " Please note: Both your devices have to be connected to the same WiFi.")
|
||||
+ settingsModel.translationTrigger
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
||||
|
@ -86,7 +92,6 @@ SectionPage {
|
|||
} else {
|
||||
var newRunning = !running;
|
||||
remoteServiceModel.running = newRunning
|
||||
qmlExtension.keepScreenOn(newRunning)
|
||||
}
|
||||
}
|
||||
text: {
|
||||
|
@ -103,7 +108,6 @@ SectionPage {
|
|||
onRunningChanged: {
|
||||
navBar.lockedAndHidden = running
|
||||
}
|
||||
enabled: remoteServiceModel.runnable || canEnableNfc
|
||||
}
|
||||
|
||||
GButton {
|
||||
|
@ -160,6 +164,7 @@ SectionPage {
|
|||
}
|
||||
Text {
|
||||
id: subText
|
||||
color: Constants.secondary_text
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
font.pixelSize: Constants.normal_font_size
|
||||
|
@ -169,7 +174,7 @@ SectionPage {
|
|||
width: connectedText.width * 0.8
|
||||
wrapMode: Text.WordWrap
|
||||
|
||||
text: qsTr("Please pay attention to the display on your other device.") + settingsModel.translationTrigger;
|
||||
text: qsTr("Please pay attention to the display on your other device %1.").arg("\"" + remoteServiceModel.connectedClientDeviceName + "\"") + settingsModel.translationTrigger;
|
||||
}
|
||||
|
||||
states: [
|
||||
|
@ -212,7 +217,10 @@ SectionPage {
|
|||
id: switchTo
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
anchors.bottom: parent.bottom
|
||||
onClicked: firePush(remoteSettings, {})
|
||||
onClicked: {
|
||||
remoteServiceModel.detectRemoteDevices = true
|
||||
firePush(remoteSettings, {})
|
||||
}
|
||||
imageSource: "qrc:///images/android/navigation/remotesettings.svg"
|
||||
text: qsTr("Settings") + settingsModel.translationTrigger
|
||||
opacity: 1
|
||||
|
@ -223,10 +231,12 @@ SectionPage {
|
|||
State { name: "OFF"; when: !remoteServiceModel.running
|
||||
PropertyChanges { target: pairingButton; opacity: 0 }
|
||||
PropertyChanges { target: switchTo; opacity: 1 }
|
||||
AnchorChanges { target: statusText; anchors.top: startButton.bottom }
|
||||
},
|
||||
State { name: "ON"; when: remoteServiceModel.running
|
||||
PropertyChanges { target: pairingButton; opacity: 1 }
|
||||
PropertyChanges { target: switchTo; opacity: 0 }
|
||||
AnchorChanges { target: statusText; anchors.top: pairingButton.bottom }
|
||||
}
|
||||
]
|
||||
transitions: [
|
||||
|
@ -236,6 +246,9 @@ SectionPage {
|
|||
duration: 500
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
AnchorAnimation {
|
||||
duration: 500
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|