Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Show NFC not supported message before signing #527

Merged
merged 1 commit into from
May 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ Observable<? extends SignatureAddResponse> sign(File containerFile,
.onErrorResumeNext(Observable::error);
} else if (request instanceof NFCRequest nfcRequest) {
settingsDataStore.setCan(nfcRequest.can());
Single<SignedContainer> s = signatureContainerDataSource.get(containerFile);
Single<SignedContainer> s = signatureContainerDataSource.get(containerFile, isSivaConfirmed);
Observable<NFCResponse> obs = s.flatMapObservable(container -> {
String can = nfcRequest.can();
String pin2 = nfcRequest.pin2();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
import static ee.ria.DigiDoc.common.PinConstants.PIN_MAX_LENGTH;

import android.content.Context;
import android.nfc.NfcAdapter;
import android.nfc.NfcManager;
import android.text.Editable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
Expand All @@ -26,18 +29,25 @@
import com.google.android.material.textview.MaterialTextView;

import ee.ria.DigiDoc.R;
import ee.ria.DigiDoc.android.ApplicationApp;
import ee.ria.DigiDoc.android.Constants;
import ee.ria.DigiDoc.android.accessibility.AccessibilityUtils;
import ee.ria.DigiDoc.android.signature.update.SignatureAddView;
import ee.ria.DigiDoc.android.signature.update.SignatureUpdateViewModel;
import ee.ria.DigiDoc.android.utils.ErrorMessageUtil;
import ee.ria.DigiDoc.android.utils.navigator.Navigator;
import ee.ria.DigiDoc.common.PinConstants;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.PublishSubject;
import io.reactivex.rxjava3.subjects.Subject;
import timber.log.Timber;

public class NFCView extends LinearLayout implements SignatureAddView<NFCRequest, NFCResponse> {
private final Navigator navigator;

public class NFCView extends LinearLayout implements SignatureAddView<NFCRequest, NFCResponse> {
private final Subject<Object> positiveButtonStateSubject = PublishSubject.create();
private final LinearLayout nfcFoundLayout;
private final LinearLayout nfcNotFoundLayout;
private final TextView message;
private final EditText canView;
private final TextInputLayout canLayout;
Expand All @@ -54,13 +64,19 @@ public NFCView(Context context, @Nullable AttributeSet attrs, int defStyleAttr,
setOrientation(VERTICAL);
inflate(context, R.layout.signature_update_nfc, this);

navigator = ApplicationApp.component(context).navigator();
nfcFoundLayout = findViewById(R.id.signatureUpdateNFCFoundLayout);
nfcNotFoundLayout = findViewById(R.id.signatureUpdateNFCNotFoundLayout);
message = findViewById(R.id.signatureUpdateNFCMessage);
canView = findViewById(R.id.signatureUpdateNFCCAN);
canLayout = findViewById(R.id.signatureUpdateNFCCANLayout);
canLabel = findViewById(R.id.signatureUpdateNFCCANLabel);
pinView = findViewById(R.id.signatureUpdateNFCPIN2);
pinLayout = findViewById(R.id.signatureUpdateNFCPIN2Layout);
pinLabel = findViewById(R.id.signatureUpdateNFCPIN2Label);

handleNFCSupportLayout();

AccessibilityUtils.setSingleCharactersContentDescription(canView, "Card number");
AccessibilityUtils.setSingleCharactersContentDescription(pinView, "PIN code");
AccessibilityUtils.setEditTextCursorToEnd(canView);
Expand Down Expand Up @@ -188,6 +204,27 @@ protected void onDetachedFromWindow() {
removeAccessibilityStateChanged(accessibilityTouchExplorationStateChangeListener);
}

private boolean isNFCSupported() {
NfcManager manager = (NfcManager) navigator.activity().getSystemService(Context.NFC_SERVICE);
NfcAdapter adapter = manager.getDefaultAdapter();
if (adapter == null || !adapter.isEnabled()) {
Timber.log(Log.ERROR, "NFC is not supported on this device");
return false;
}

return true;
}

private void handleNFCSupportLayout() {
if (isNFCSupported()) {
nfcNotFoundLayout.setVisibility(GONE);
nfcFoundLayout.setVisibility(VISIBLE);
} else {
nfcFoundLayout.setVisibility(GONE);
nfcNotFoundLayout.setVisibility(VISIBLE);
}
}

private void setupContentDescriptions(RadioButton radioButton, CharSequence contentDescription) {
radioButton.setAccessibilityDelegate(new View.AccessibilityDelegate() {
@Override
Expand Down
199 changes: 111 additions & 88 deletions app/src/main/res/layout/signature_update_nfc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,107 +9,130 @@
android:layout_height="wrap_content"
android:orientation="vertical">


<TextView
android:id="@id/signatureUpdateNFCMessage"
<LinearLayout
android:id="@id/signatureUpdateNFCNotFoundLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="@color/signingNavigation"
android:text="@string/signature_update_nfc_message" />
android:orientation="vertical">

<com.google.android.material.textview.MaterialTextView
android:id="@id/signatureUpdateNFCCANLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_marginTop="20dp"
android:minHeight="@dimen/material_baseline_grid_6x"
android:importantForAccessibility="no"
android:text="@string/signature_update_nfc_can" />

<com.google.android.material.textfield.TextInputLayout
android:id="@id/signatureUpdateNFCCANLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:hint="@string/signature_update_nfc_can"
app:hintEnabled="false"
app:errorEnabled="true"
app:expandedHintEnabled="false">

<com.google.android.material.textfield.TextInputEditText
android:id="@id/signatureUpdateNFCCAN"
<TextView
android:id="@id/signatureUpdateNFCNotFoundMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:accessibilityTraversalAfter="@id/signatureUpdateNFCCANText"
android:background="@drawable/bottom_border_background"
android:digits="0123456789"
android:imeOptions="actionDone"
android:inputType="number"
android:maxLines="1"
android:minHeight="@dimen/material_baseline_grid_6x" />

</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textview.MaterialTextView
android:id="@+id/signatureUpdateNFCPIN2Label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_marginTop="20dp"
android:minHeight="@dimen/material_baseline_grid_6x"
android:importantForAccessibility="no"
android:text="@string/signature_update_nfc_pin2" />

<com.google.android.material.textfield.TextInputLayout
android:id="@id/signatureUpdateNFCPIN2Layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:hint="@string/signature_update_nfc_pin2"
app:hintEnabled="false"
app:errorEnabled="true"
app:expandedHintEnabled="false">

<com.google.android.material.textfield.TextInputEditText
android:id="@id/signatureUpdateNFCPIN2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:accessibilityTraversalAfter="@id/signatureUpdateNFCPIN2Text"
android:background="@drawable/bottom_border_background"
android:imeOptions="actionDone"
android:inputType="numberPassword"
android:maxLines="1"
android:minHeight="@dimen/material_baseline_grid_6x"/>

</com.google.android.material.textfield.TextInputLayout>
android:gravity="center_horizontal"
android:textColor="@color/signingNavigation"
android:textStyle="bold"
android:text="@string/signature_update_nfc_adapter_missing" />
</LinearLayout>

<LinearLayout
android:id="@id/signatureUpdateNFCFoundLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:orientation="vertical">

<Button
android:id="@+id/signatureUpdateNFCCancelSigningButton"
android:layout_width="0dp"
<TextView
android:id="@id/signatureUpdateNFCMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:text="@string/cancel_button" />

<Space
android:layout_width="8dp"
android:layout_height="match_parent" />
android:gravity="center_horizontal"
android:textColor="@color/signingNavigation"
android:text="@string/signature_update_nfc_message" />

<Button
android:id="@+id/signatureUpdateNFCSignButton"
android:layout_width="0dp"
<com.google.android.material.textview.MaterialTextView
android:id="@id/signatureUpdateNFCCANLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_marginTop="20dp"
android:minHeight="@dimen/material_baseline_grid_6x"
android:importantForAccessibility="no"
android:text="@string/signature_update_nfc_can" />

<com.google.android.material.textfield.TextInputLayout
android:id="@id/signatureUpdateNFCCANLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:hint="@string/signature_update_nfc_can"
app:hintEnabled="false"
app:errorEnabled="true"
app:expandedHintEnabled="false">

<com.google.android.material.textfield.TextInputEditText
android:id="@id/signatureUpdateNFCCAN"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:accessibilityTraversalAfter="@id/signatureUpdateNFCCANText"
android:background="@drawable/bottom_border_background"
android:digits="0123456789"
android:imeOptions="actionDone"
android:inputType="number"
android:maxLines="1"
android:minHeight="@dimen/material_baseline_grid_6x" />

</com.google.android.material.textfield.TextInputLayout>

<com.google.android.material.textview.MaterialTextView
android:id="@+id/signatureUpdateNFCPIN2Label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="start"
android:layout_marginTop="20dp"
android:minHeight="@dimen/material_baseline_grid_6x"
android:importantForAccessibility="no"
android:text="@string/signature_update_nfc_pin2" />

<com.google.android.material.textfield.TextInputLayout
android:id="@id/signatureUpdateNFCPIN2Layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:hint="@string/signature_update_nfc_pin2"
app:hintEnabled="false"
app:errorEnabled="true"
app:expandedHintEnabled="false">

<com.google.android.material.textfield.TextInputEditText
android:id="@id/signatureUpdateNFCPIN2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:accessibilityTraversalAfter="@id/signatureUpdateNFCPIN2Text"
android:background="@drawable/bottom_border_background"
android:imeOptions="actionDone"
android:inputType="numberPassword"
android:maxLines="1"
android:minHeight="@dimen/material_baseline_grid_6x"/>

</com.google.android.material.textfield.TextInputLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:paddingBottom="@dimen/material_list_normal_padding_vertical"
android:text="@string/signature_update_signature_add_positive_button" />
android:orientation="horizontal">

<Button
android:id="@+id/signatureUpdateNFCCancelSigningButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:text="@string/cancel_button" />

<Space
android:layout_width="8dp"
android:layout_height="match_parent" />

<Button
android:id="@+id/signatureUpdateNFCSignButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:paddingBottom="@dimen/material_list_normal_padding_vertical"
android:text="@string/signature_update_signature_add_positive_button" />

</LinearLayout>

</LinearLayout>

Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-et/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,7 @@
<string name="signature_update_nfc_message">Enter your CAN number and PIN 2 code to sign with ID-Card using NFC</string>
<string name="signature_update_nfc_can">CAN code on card</string>
<string name="signature_update_nfc_pin2">PIN 2 code</string>
<string name="signature_update_nfc_adapter_missing">See seade ei toeta NFC-d.</string>

<!-- Signature Details -->
<string name="signature_error_details_title">Hoiatused</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@
<string name="signature_update_nfc_message">Enter your CAN number and PIN 2 code to sign with ID-Card using NFC</string>
<string name="signature_update_nfc_can">CAN code on card</string>
<string name="signature_update_nfc_pin2">PIN 2 code</string>
<string name="signature_update_nfc_adapter_missing">Это устройство не поддерживает NFC.</string>

<!-- Signature Details -->
<string name="signature_error_details_title">Предупреждения</string>
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/res/values/ids.xml
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,9 @@

<item type="id" name="signatureUpdateNFC" />
<item type="id" name="signatureUpdateNFCMessage" />
<item type="id" name="signatureUpdateNFCNotFoundLayout" />
<item type="id" name="signatureUpdateNFCNotFoundMessage" />
<item type="id" name="signatureUpdateNFCFoundLayout" />
<item type="id" name="signatureUpdateNFCCAN" />
<item type="id" name="signatureUpdateNFCCANLayout" />
<item type="id" name="signatureUpdateNFCCANLabel" />
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@
<string name="signature_update_nfc_message">Enter your CAN and PIN 2 code to sign with ID-Card using NFC</string>
<string name="signature_update_nfc_can">CAN code on card</string>
<string name="signature_update_nfc_pin2">PIN 2 code</string>
<string name="signature_update_nfc_adapter_missing">NFC adapter not found</string>
<string name="signature_update_nfc_adapter_missing">This device does not support NFC.</string>
<string name="signature_update_nfc_tag_lost">NFC connection lost</string>
<string name="signature_update_nfc_technical_error">Technical error</string>
<string name="signature_update_nfc_hold">Please hold your ID Card against the phone until the signing process is completed</string>
Expand Down
Loading