正在查看: Crafto v9.3.3 应用的 CardImageVerificationActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Crafto v9.3.3 应用的 CardImageVerificationActivity.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.stripe.android.stripecardscan.cardimageverification;
import Hk.k;
import Hk.l;
import Kk.c;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Size;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.Keep;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.stripe.android.camera.CameraPreviewImage;
import com.stripe.android.camera.framework.StatTracker;
import com.stripe.android.camera.framework.Stats;
import com.stripe.android.camera.scanui.CameraView;
import com.stripe.android.camera.scanui.ScanErrorListener;
import com.stripe.android.camera.scanui.ScanFlow;
import com.stripe.android.camera.scanui.SimpleScanStateful;
import com.stripe.android.stripecardscan.R;
import com.stripe.android.stripecardscan.cardimageverification.CardImageVerificationActivity$scanFlow$2;
import com.stripe.android.stripecardscan.cardimageverification.CardImageVerificationSheet;
import com.stripe.android.stripecardscan.cardimageverification.CardVerificationScanState;
import com.stripe.android.stripecardscan.cardimageverification.exception.InvalidCivException;
import com.stripe.android.stripecardscan.cardimageverification.exception.InvalidStripePublishableKeyException;
import com.stripe.android.stripecardscan.cardimageverification.result.MainLoopAggregator;
import com.stripe.android.stripecardscan.framework.api.StripeApi;
import com.stripe.android.stripecardscan.framework.api.dto.PayloadInfo;
import com.stripe.android.stripecardscan.framework.api.dto.ScanStatistics;
import com.stripe.android.stripecardscan.framework.util.AcceptedImageConfigs;
import com.stripe.android.stripecardscan.framework.util.AppDetails;
import com.stripe.android.stripecardscan.framework.util.Device;
import com.stripe.android.stripecardscan.framework.util.ScanConfig;
import com.stripe.android.stripecardscan.payment.card.CardIssuer;
import com.stripe.android.stripecardscan.scanui.SimpleScanActivity;
import com.stripe.android.stripecardscan.scanui.util.ViewExtensionsKt;
import dl.F;
import dl.J;
import dl.Z;
import dl.g;
import il.p;
import java.util.concurrent.atomic.AtomicBoolean;
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.coroutines.CoroutineContext;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;
@Keep
@Metadata
public class CardImageVerificationActivity extends SimpleScanActivity<CardVerificationFlowParameters> implements SimpleScanStateful<CardVerificationScanState> {
private PayloadInfo currentScanPayloadInfo;
private StatTracker mainLoopStatsTracker;
@NotNull
private final Size minimumAnalysisResolution;
private CardIssuer requiredCardIssuer;
private String requiredCardLastFour;
private CardVerificationScanState scanStatePrevious;
private CardVerificationScanState scanState = CardVerificationScanState.NotFound.INSTANCE;
@NotNull
private final ScanErrorListener scanErrorListener = new ScanErrorListener();
@NotNull
private final k cannotScanTextView$delegate = l.b(new Function0<TextView>() {
{
super(0);
}
@NotNull
public final TextView m839invoke() {
return new TextView(CardImageVerificationActivity.this);
}
});
@NotNull
private final k cardDescriptionTextView$delegate = l.b(new Function0<TextView>() {
{
super(0);
}
@NotNull
public final TextView m840invoke() {
return new TextView(CardImageVerificationActivity.this);
}
});
@NotNull
private final k processingOverlayView$delegate = l.b(new Function0<View>() {
{
super(0);
}
@NotNull
public final View m842invoke() {
return new View(CardImageVerificationActivity.this);
}
});
@NotNull
private final k processingSpinnerView$delegate = l.b(new Function0<ProgressBar>() {
{
super(0);
}
@NotNull
public final ProgressBar m843invoke() {
return new ProgressBar(CardImageVerificationActivity.this);
}
});
@NotNull
private final k processingTextView$delegate = l.b(new Function0<TextView>() {
{
super(0);
}
@NotNull
public final TextView m844invoke() {
return new TextView(CardImageVerificationActivity.this);
}
});
@NotNull
private final k params$delegate = l.b(new Function0<CardImageVerificationSheetParams>() {
{
super(0);
}
@NotNull
public final CardImageVerificationSheetParams m841invoke() {
CardImageVerificationSheetParams cardImageVerificationSheetParams = (CardImageVerificationSheetParams) CardImageVerificationActivity.this.getIntent().getParcelableExtra("request");
return cardImageVerificationSheetParams == null ? new CardImageVerificationSheetParams(CameraView.FILL_ASPECT_RATIO, new CardImageVerificationSheet.Configuration(null, false, 3, null), CameraView.FILL_ASPECT_RATIO, CameraView.FILL_ASPECT_RATIO) : cardImageVerificationSheetParams;
}
});
@NotNull
private AcceptedImageConfigs imageConfigs = new AcceptedImageConfigs(null, null, null, 7, null);
@NotNull
private final CardImageVerificationResultListener resultListener = new CardImageVerificationActivity$resultListener$1(this);
@NotNull
private final k scanFlow$delegate = l.b(new Function0<CardImageVerificationActivity$scanFlow$2.AnonymousClass1>() {
@Metadata
public static final class AnonymousClass1 extends CardImageVerificationFlow {
final CardImageVerificationActivity this$0;
public AnonymousClass1(CardImageVerificationActivity cardImageVerificationActivity, ScanErrorListener scanErrorListener) {
super(scanErrorListener);
this.this$0 = cardImageVerificationActivity;
}
@Override
public Object onInterimResult(MainLoopAggregator.InterimResult interimResult, c cVar) {
return onInterimResult2(interimResult, (c<? super Unit>) cVar);
}
@Override
public Object onReset(@NotNull c<? super Unit> cVar) {
CardImageVerificationActivity cardImageVerificationActivity = this.this$0;
kl.c cVar2 = Z.a;
g.b(cardImageVerificationActivity, p.a, (J) null, new CardImageVerificationActivity$scanFlow$2$1$onReset$2(cardImageVerificationActivity, null), 2);
return Unit.a;
}
@Override
public java.lang.Object onResult(@org.jetbrains.annotations.NotNull com.stripe.android.stripecardscan.cardimageverification.result.MainLoopAggregator.FinalResult r5, @org.jetbrains.annotations.NotNull Kk.c<? super kotlin.Unit> r6) {
throw new UnsupportedOperationException("Method not decompiled: com.stripe.android.stripecardscan.cardimageverification.CardImageVerificationActivity$scanFlow$2.AnonymousClass1.onResult(com.stripe.android.stripecardscan.cardimageverification.result.MainLoopAggregator$FinalResult, Kk.c):java.lang.Object");
}
public Object onInterimResult2(@NotNull MainLoopAggregator.InterimResult interimResult, @NotNull c<? super Unit> cVar) {
CardImageVerificationActivity cardImageVerificationActivity = this.this$0;
kl.c cVar2 = Z.a;
g.b(cardImageVerificationActivity, p.a, (J) null, new CardImageVerificationActivity$scanFlow$2$1$onInterimResult$2(interimResult, cardImageVerificationActivity, null), 2);
return Unit.a;
}
@Override
public Object onResult(Object obj, c cVar) {
return onResult((MainLoopAggregator.FinalResult) obj, (c<? super Unit>) cVar);
}
}
{
super(0);
}
@NotNull
public final AnonymousClass1 m845invoke() {
return new AnonymousClass1(CardImageVerificationActivity.this, CardImageVerificationActivity.this.getScanErrorListener());
}
});
@NotNull
private final AtomicBoolean hasPreviousValidResult = new AtomicBoolean(false);
public CardImageVerificationActivity() {
Size size;
size = CardImageVerificationActivityKt.MINIMUM_RESOLUTION;
this.minimumAnalysisResolution = size;
}
private final boolean ensureValidParams() {
if (getParams().getStripePublishableKey().length() == 0) {
scanFailure(new InvalidStripePublishableKeyException("Missing publishable key"));
return false;
}
if (getParams().getCardImageVerificationIntentId().length() == 0) {
scanFailure(new InvalidCivException("Missing card image verification ID"));
return false;
}
if (getParams().getCardImageVerificationIntentSecret().length() != 0) {
return true;
}
scanFailure(new InvalidCivException("Missing card image verification client secret"));
return false;
}
public final java.lang.Object getCivDetails(Kk.c<? super com.stripe.android.stripecardscan.cardimageverification.CardVerificationFlowParameters> r6) {
throw new UnsupportedOperationException("Method not decompiled: com.stripe.android.stripecardscan.cardimageverification.CardImageVerificationActivity.getCivDetails(Kk.c):java.lang.Object");
}
public final CardImageVerificationSheetParams getParams() {
return (CardImageVerificationSheetParams) this.params$delegate.getValue();
}
public static final void m838onCreate$lambda0(CardImageVerificationActivity cardImageVerificationActivity, View view) {
Intrinsics.checkNotNullParameter(cardImageVerificationActivity, "this$0");
cardImageVerificationActivity.userCannotScan();
}
public final void onScanDetailsAvailable(CardVerificationFlowParameters cardVerificationFlowParameters) {
String lastFour;
String str;
if (cardVerificationFlowParameters == null || (lastFour = cardVerificationFlowParameters.getLastFour()) == null || lastFour.length() == 0) {
return;
}
this.requiredCardIssuer = cardVerificationFlowParameters.getCardIssuer();
this.requiredCardLastFour = cardVerificationFlowParameters.getLastFour();
TextView cardDescriptionTextView = getCardDescriptionTextView();
int i = R.string.stripe_card_description;
CardIssuer cardIssuer = this.requiredCardIssuer;
if (cardIssuer == null || (str = cardIssuer.getDisplayName()) == null) {
str = CameraView.FILL_ASPECT_RATIO;
}
cardDescriptionTextView.setText(getString(i, str, this.requiredCardLastFour));
}
@Override
public void addUiComponents() {
super.addUiComponents();
appendUiComponents(getCannotScanTextView(), getCardDescriptionTextView(), getProcessingOverlayView(), getProcessingSpinnerView(), getProcessingTextView());
}
@Override
public void closeScanner() {
String stripePublishableKey = getParams().getStripePublishableKey();
String cardImageVerificationIntentId = getParams().getCardImageVerificationIntentId();
String cardImageVerificationIntentSecret = getParams().getCardImageVerificationIntentSecret();
Stats stats = Stats.INSTANCE;
StripeApi.uploadScanStatsCIV(stripePublishableKey, cardImageVerificationIntentId, cardImageVerificationIntentSecret, stats.getInstanceId(), stats.getScanId(), Device.Companion.fromContext(this), AppDetails.Companion.fromContext(this), ScanStatistics.Companion.fromStats(), new ScanConfig(getParams().getConfiguration().getStrictModeFrames().getCount()), this.currentScanPayloadInfo);
this.currentScanPayloadInfo = null;
super.closeScanner();
}
@NotNull
public TextView getCannotScanTextView() {
return (TextView) this.cannotScanTextView$delegate.getValue();
}
@NotNull
public TextView getCardDescriptionTextView() {
return (TextView) this.cardDescriptionTextView$delegate.getValue();
}
@Override
@NotNull
public Size getMinimumAnalysisResolution() {
return this.minimumAnalysisResolution;
}
@NotNull
public View getProcessingOverlayView() {
return (View) this.processingOverlayView$delegate.getValue();
}
@NotNull
public ProgressBar getProcessingSpinnerView() {
return (ProgressBar) this.processingSpinnerView$delegate.getValue();
}
@NotNull
public TextView getProcessingTextView() {
return (TextView) this.processingTextView$delegate.getValue();
}
@Override
@NotNull
public ScanErrorListener getScanErrorListener() {
return this.scanErrorListener;
}
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
if (ensureValidParams()) {
setDeferredScanFlowParameters(g.a(this, (F) null, new CardImageVerificationActivity$onCreate$1(this, null), 3));
g.b(this, p.a, (J) null, new CardImageVerificationActivity$onCreate$2(this, null), 2);
getCannotScanTextView().setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view) {
CardImageVerificationActivity.m838onCreate$lambda0(CardImageVerificationActivity.this, view);
}
});
CardVerificationScanState scanState = getScanState();
if (scanState == null) {
throw new IllegalArgumentException("Required value was null.".toString());
}
displayState(scanState, getScanStatePrevious());
}
}
@Override
public void onPause() {
super.onPause();
g.b(this, (CoroutineContext) null, (J) null, new CardImageVerificationActivity$onPause$1(this, null), 3);
this.mainLoopStatsTracker = null;
}
@Override
public void onResume() {
super.onResume();
setScanState((CardVerificationScanState) CardVerificationScanState.NotFound.INSTANCE);
this.mainLoopStatsTracker = Stats.INSTANCE.trackTask("main_loop_duration");
}
public void setupCannotScanTextViewConstraints() {
TextView cannotScanTextView = getCannotScanTextView();
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(0, -2);
Resources resources = getResources();
int i = R.dimen.stripeButtonMargin;
layoutParams.setMarginStart(resources.getDimensionPixelSize(i));
layoutParams.setMarginEnd(getResources().getDimensionPixelSize(i));
((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin = getResources().getDimensionPixelSize(i);
((ViewGroup.MarginLayoutParams) layoutParams).topMargin = getResources().getDimensionPixelSize(i);
cannotScanTextView.setLayoutParams(layoutParams);
TextView cannotScanTextView2 = getCannotScanTextView();
androidx.constraintlayout.widget.c cVar = new androidx.constraintlayout.widget.c();
cVar.f(getLayout());
cVar.h(cannotScanTextView2.getId(), 4, 0, 4);
cVar.h(cannotScanTextView2.getId(), 6, 0, 6);
cVar.h(cannotScanTextView2.getId(), 7, 0, 7);
cVar.b(getLayout());
}
public void setupCannotScanUi() {
getCannotScanTextView().setText(getString(R.string.stripe_cannot_scan_card));
ViewExtensionsKt.setTextSizeByRes(getCannotScanTextView(), R.dimen.stripeCannotScanCardTextSize);
getCannotScanTextView().setTypeface(Typeface.create("sans-serif-thin", 1));
getCannotScanTextView().setGravity(17);
TextView cannotScanTextView = getCannotScanTextView();
Resources resources = getResources();
int i = R.dimen.stripeButtonPadding;
cannotScanTextView.setPadding(resources.getDimensionPixelSize(i), getResources().getDimensionPixelSize(i), getResources().getDimensionPixelSize(i), getResources().getDimensionPixelSize(i));
ViewExtensionsKt.setVisible(getCannotScanTextView(), getParams().getConfiguration().getEnableCannotScanButton());
if (isBackgroundDark()) {
getCannotScanTextView().setTextColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeButtonDarkText));
getCannotScanTextView().setBackground(ViewExtensionsKt.getDrawableByRes(this, R.drawable.stripe_rounded_button_dark));
} else {
getCannotScanTextView().setTextColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeButtonLightText));
getCannotScanTextView().setBackground(ViewExtensionsKt.getDrawableByRes(this, R.drawable.stripe_rounded_button_light));
}
}
public void setupCardDescriptionTextViewConstraints() {
TextView cardDescriptionTextView = getCardDescriptionTextView();
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(0, -2);
Resources resources = getResources();
int i = R.dimen.stripeCardDescriptionMargin;
layoutParams.setMarginStart(resources.getDimensionPixelSize(i));
layoutParams.setMarginEnd(getResources().getDimensionPixelSize(i));
((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin = getResources().getDimensionPixelSize(i);
((ViewGroup.MarginLayoutParams) layoutParams).topMargin = getResources().getDimensionPixelSize(i);
cardDescriptionTextView.setLayoutParams(layoutParams);
TextView cardDescriptionTextView2 = getCardDescriptionTextView();
androidx.constraintlayout.widget.c cVar = new androidx.constraintlayout.widget.c();
cVar.f(getLayout());
cVar.h(cardDescriptionTextView2.getId(), 4, getViewFinderWindowView().getId(), 3);
cVar.h(cardDescriptionTextView2.getId(), 6, 0, 6);
cVar.h(cardDescriptionTextView2.getId(), 7, 0, 7);
cVar.b(getLayout());
}
public void setupCardDescriptionUi() {
ViewExtensionsKt.setTextSizeByRes(getCardDescriptionTextView(), R.dimen.stripeCardDescriptionTextSize);
getCardDescriptionTextView().setTypeface(Typeface.DEFAULT_BOLD);
getCardDescriptionTextView().setGravity(17);
if (isBackgroundDark()) {
getCardDescriptionTextView().setTextColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeCardDescriptionColorDark));
} else {
getCardDescriptionTextView().setTextColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeCardDescriptionColorLight));
}
}
@Override
public void setupInstructionsViewConstraints() {
super.setupInstructionsViewConstraints();
TextView instructionsTextView = getInstructionsTextView();
androidx.constraintlayout.widget.c cVar = new androidx.constraintlayout.widget.c();
cVar.f(getLayout());
cVar.h(instructionsTextView.getId(), 4, getCardDescriptionTextView().getId(), 3);
cVar.b(getLayout());
}
public void setupProcessingOverlayViewConstraints() {
getProcessingOverlayView().setLayoutParams(new ConstraintLayout.LayoutParams(-1, -1));
constrainToParent(getProcessingOverlayView());
}
public void setupProcessingOverlayViewUi() {
getProcessingOverlayView().setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeProcessingBackground));
}
public void setupProcessingSpinnerViewConstraints() {
getProcessingSpinnerView().setLayoutParams(new ConstraintLayout.LayoutParams(-2, -2));
constrainToParent(getProcessingSpinnerView());
}
public void setupProcessingTextViewConstraints() {
getProcessingTextView().setLayoutParams(new ConstraintLayout.LayoutParams(0, -2));
TextView processingTextView = getProcessingTextView();
androidx.constraintlayout.widget.c cVar = new androidx.constraintlayout.widget.c();
cVar.f(getLayout());
cVar.h(processingTextView.getId(), 3, getProcessingSpinnerView().getId(), 4);
cVar.h(processingTextView.getId(), 6, 0, 6);
cVar.h(processingTextView.getId(), 7, 0, 7);
cVar.b(getLayout());
}
public void setupProcessingTextViewUi() {
getProcessingTextView().setText(getString(R.string.stripe_processing_card));
ViewExtensionsKt.setTextSizeByRes(getProcessingTextView(), R.dimen.stripeProcessingTextSize);
getProcessingTextView().setTextColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeProcessingText));
getProcessingTextView().setGravity(17);
}
@Override
public void setupUiComponents() {
super.setupUiComponents();
setupCannotScanUi();
setupCardDescriptionUi();
setupProcessingOverlayViewUi();
setupProcessingTextViewUi();
}
@Override
public void setupUiConstraints() {
super.setupUiConstraints();
setupCannotScanTextViewConstraints();
setupCardDescriptionTextViewConstraints();
setupProcessingOverlayViewConstraints();
setupProcessingSpinnerViewConstraints();
setupProcessingTextViewConstraints();
}
@Override
public boolean changeScanState(@NotNull CardVerificationScanState cardVerificationScanState) {
return SimpleScanStateful.DefaultImpls.changeScanState(this, cardVerificationScanState);
}
@Override
public void displayState(@NotNull CardVerificationScanState cardVerificationScanState, CardVerificationScanState cardVerificationScanState2) {
Intrinsics.checkNotNullParameter(cardVerificationScanState, "newState");
boolean z = cardVerificationScanState instanceof CardVerificationScanState.NotFound;
if (z) {
getViewFinderBackgroundView().setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeNotFoundBackground));
getViewFinderWindowView().setBackgroundResource(R.drawable.stripe_card_background_not_found);
com.stripe.android.camera.scanui.util.ViewExtensionsKt.startAnimation(getViewFinderBorderView(), R.drawable.stripe_card_border_not_found);
getInstructionsTextView().setText(R.string.stripe_card_scan_instructions);
ViewExtensionsKt.hide(getCardNumberTextView());
ViewExtensionsKt.hide(getCardNameTextView());
} else if (cardVerificationScanState instanceof CardVerificationScanState.Found) {
getViewFinderBackgroundView().setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeFoundBackground));
getViewFinderWindowView().setBackgroundResource(R.drawable.stripe_card_background_found);
com.stripe.android.camera.scanui.util.ViewExtensionsKt.startAnimation(getViewFinderBorderView(), R.drawable.stripe_card_border_found);
getInstructionsTextView().setText(R.string.stripe_card_scan_instructions);
ViewExtensionsKt.show(getInstructionsTextView());
} else if (cardVerificationScanState instanceof CardVerificationScanState.Correct) {
getViewFinderBackgroundView().setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeCorrectBackground));
getViewFinderWindowView().setBackgroundResource(R.drawable.stripe_card_background_correct);
com.stripe.android.camera.scanui.util.ViewExtensionsKt.startAnimation(getViewFinderBorderView(), R.drawable.stripe_card_border_correct);
ViewExtensionsKt.hide(getInstructionsTextView());
} else if (cardVerificationScanState instanceof CardVerificationScanState.Wrong) {
getViewFinderBackgroundView().setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeWrongBackground));
getViewFinderWindowView().setBackgroundResource(R.drawable.stripe_card_background_wrong);
com.stripe.android.camera.scanui.util.ViewExtensionsKt.startAnimation(getViewFinderBorderView(), R.drawable.stripe_card_border_wrong);
getInstructionsTextView().setText(R.string.stripe_scanned_wrong_card);
}
if (z || Intrinsics.areEqual(cardVerificationScanState, CardVerificationScanState.Found.INSTANCE) || Intrinsics.areEqual(cardVerificationScanState, CardVerificationScanState.Wrong.INSTANCE)) {
ViewExtensionsKt.hide(getProcessingOverlayView());
ViewExtensionsKt.hide(getProcessingSpinnerView());
ViewExtensionsKt.hide(getProcessingTextView());
} else if (cardVerificationScanState instanceof CardVerificationScanState.Correct) {
ViewExtensionsKt.show(getProcessingOverlayView());
ViewExtensionsKt.show(getProcessingSpinnerView());
ViewExtensionsKt.show(getProcessingTextView());
}
}
@Override
@NotNull
public CardImageVerificationResultListener getResultListener$stripecardscan_release() {
return this.resultListener;
}
@Override
@NotNull
public ScanFlow<CardVerificationFlowParameters, CameraPreviewImage<Bitmap>> getScanFlow$stripecardscan_release() {
return (CardImageVerificationFlow) this.scanFlow$delegate.getValue();
}
@Override
public CardVerificationScanState getScanState() {
return this.scanState;
}
@Override
public CardVerificationScanState getScanStatePrevious() {
return this.scanStatePrevious;
}
@Override
public void setScanState(CardVerificationScanState cardVerificationScanState) {
this.scanState = cardVerificationScanState;
}
@Override
public void setScanStatePrevious(CardVerificationScanState cardVerificationScanState) {
this.scanStatePrevious = cardVerificationScanState;
}
}