导航菜单

页面标题

页面副标题

Crafto v9.3.3 - CardScanActivity.java 源代码

正在查看: Crafto v9.3.3 应用的 CardScanActivity.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.stripe.android.stripecardscan.cardscan;

import Hk.k;
import Hk.l;
import J9.f3;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Size;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.lifecycle.I;
import com.stripe.android.camera.CameraPreviewImage;
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.SimpleScanStateful;
import com.stripe.android.camera.scanui.ViewFinderBackground;
import com.stripe.android.stripecardscan.R;
import com.stripe.android.stripecardscan.cardscan.CardScanActivity$scanFlow$2;
import com.stripe.android.stripecardscan.cardscan.CardScanSheetResult;
import com.stripe.android.stripecardscan.cardscan.CardScanState;
import com.stripe.android.stripecardscan.cardscan.exception.InvalidStripePublishableKeyException;
import com.stripe.android.stripecardscan.cardscan.exception.UnknownScanException;
import com.stripe.android.stripecardscan.cardscan.result.MainLoopAggregator;
import com.stripe.android.stripecardscan.databinding.ActivityCardscanBinding;
import com.stripe.android.stripecardscan.framework.api.StripeApi;
import com.stripe.android.stripecardscan.framework.api.dto.ScanStatistics;
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.ScannedCard;
import com.stripe.android.stripecardscan.scanui.CancellationReason;
import com.stripe.android.stripecardscan.scanui.ScanActivity;
import com.stripe.android.stripecardscan.scanui.util.ViewExtensionsKt;
import dl.H;
import dl.J;
import dl.Z;
import dl.g;
import il.p;
import java.util.HashMap;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.collections.t;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.internal.Intrinsics;
import oa.Q;
import org.jetbrains.annotations.NotNull;

@Metadata
public final class CardScanActivity extends ScanActivity implements SimpleScanStateful<CardScanState> {

    @NotNull
    private final AtomicBoolean hasPreviousValidResult;

    @NotNull
    private final Size minimumAnalysisResolution;

    @NotNull
    private final k params$delegate;

    @NotNull
    private final k previewFrame$delegate;

    @NotNull
    private final CardScanResultListener resultListener;

    @NotNull
    private final ScanErrorListener scanErrorListener;

    @NotNull
    private final k scanFlow$delegate;
    private CardScanState scanState;
    private CardScanState scanStatePrevious;

    @NotNull
    private final k viewBinding$delegate;

    public CardScanActivity() {
        Size size;
        size = CardScanActivityKt.MINIMUM_RESOLUTION;
        this.minimumAnalysisResolution = size;
        this.viewBinding$delegate = l.b(new Function0<ActivityCardscanBinding>() {
            {
                super(0);
            }

            @NotNull
            public final ActivityCardscanBinding m854invoke() {
                return ActivityCardscanBinding.inflate(CardScanActivity.this.getLayoutInflater());
            }
        });
        this.previewFrame$delegate = l.b(new Function0<FrameLayout>() {
            {
                super(0);
            }

            @NotNull
            public final FrameLayout m852invoke() {
                ActivityCardscanBinding viewBinding;
                viewBinding = CardScanActivity.this.getViewBinding();
                return viewBinding.previewFrame;
            }
        });
        this.params$delegate = l.b(new Function0<CardScanSheetParams>() {
            {
                super(0);
            }

            @NotNull
            public final CardScanSheetParams m851invoke() {
                CardScanSheetParams cardScanSheetParams = (CardScanSheetParams) CardScanActivity.this.getIntent().getParcelableExtra("request");
                return cardScanSheetParams == null ? new CardScanSheetParams(CameraView.FILL_ASPECT_RATIO) : cardScanSheetParams;
            }
        });
        this.hasPreviousValidResult = new AtomicBoolean(false);
        this.scanState = CardScanState.NotFound.INSTANCE;
        this.scanErrorListener = new ScanErrorListener();
        this.resultListener = new CardScanResultListener() {
            @Override
            public void cardScanComplete(@NotNull ScannedCard scannedCard) {
                Intrinsics.checkNotNullParameter(scannedCard, "card");
                Intent putExtra = new Intent().putExtra("result", new CardScanSheetResult.Completed(new ScannedCard(scannedCard.getPan())));
                Intrinsics.checkNotNullExpressionValue(putExtra, "Intent()\n               …  )\n                    )");
                CardScanActivity.this.setResult(-1, putExtra);
                CardScanActivity.this.closeScanner();
            }

            @Override
            public void failed(Throwable th) {
                Intent intent = new Intent();
                if (th == null) {
                    th = new UnknownScanException(null, 1, null);
                }
                Intent putExtra = intent.putExtra("result", new CardScanSheetResult.Failed(th));
                Intrinsics.checkNotNullExpressionValue(putExtra, "Intent()\n               …())\n                    )");
                CardScanActivity.this.setResult(0, putExtra);
            }

            @Override
            public void userCanceled(@NotNull CancellationReason cancellationReason) {
                Intrinsics.checkNotNullParameter(cancellationReason, "reason");
                Intent putExtra = new Intent().putExtra("result", new CardScanSheetResult.Canceled(cancellationReason));
                Intrinsics.checkNotNullExpressionValue(putExtra, "Intent()\n               …on)\n                    )");
                CardScanActivity.this.setResult(0, putExtra);
            }
        };
        this.scanFlow$delegate = l.b(new Function0<CardScanActivity$scanFlow$2.AnonymousClass1>() {
            {
                super(0);
            }

            @NotNull
            public final AnonymousClass1 m853invoke() {
                ScanErrorListener scanErrorListener = CardScanActivity.this.getScanErrorListener();
                final CardScanActivity cardScanActivity = CardScanActivity.this;
                return new CardScanFlow(scanErrorListener) {
                    @Override
                    public Object onInterimResult(MainLoopAggregator.InterimResult interimResult, Kk.c cVar) {
                        return onInterimResult2(interimResult, (Kk.c<? super Unit>) cVar);
                    }

                    @Override
                    public Object onReset(@NotNull Kk.c<? super Unit> cVar) {
                        CardScanActivity cardScanActivity2 = CardScanActivity.this;
                        kl.c cVar2 = Z.a;
                        g.b(cardScanActivity2, p.a, (J) null, new CardScanActivity$scanFlow$2$1$onReset$2(cardScanActivity2, null), 2);
                        return Unit.a;
                    }

                    @Override
                    public Object onResult(Object obj, Kk.c cVar) {
                        return onResult((MainLoopAggregator.FinalResult) obj, (Kk.c<? super Unit>) cVar);
                    }

                    public Object onInterimResult2(@NotNull MainLoopAggregator.InterimResult interimResult, @NotNull Kk.c<? super Unit> cVar) {
                        CardScanActivity cardScanActivity2 = CardScanActivity.this;
                        kl.c cVar2 = Z.a;
                        g.b(cardScanActivity2, p.a, (J) null, new CardScanActivity$scanFlow$2$1$onInterimResult$2(interimResult, cardScanActivity2, null), 2);
                        return Unit.a;
                    }

                    public Object onResult(@NotNull MainLoopAggregator.FinalResult finalResult, @NotNull Kk.c<? super Unit> cVar) {
                        CardScanActivity cardScanActivity2 = CardScanActivity.this;
                        kl.c cVar2 = Z.a;
                        g.b(cardScanActivity2, p.a, (J) null, new CardScanActivity$scanFlow$2$1$onResult$2(cardScanActivity2, finalResult, null), 2);
                        return Unit.a;
                    }
                };
            }
        });
    }

    private final boolean ensureValidParams() {
        if (getParams().getStripePublishableKey().length() != 0) {
            return true;
        }
        scanFailure(new InvalidStripePublishableKeyException("Missing publishable key"));
        return false;
    }

    private final CardScanSheetParams getParams() {
        return (CardScanSheetParams) this.params$delegate.getValue();
    }

    private final CardScanFlow getScanFlow() {
        return (CardScanFlow) this.scanFlow$delegate.getValue();
    }

    public final ActivityCardscanBinding getViewBinding() {
        return (ActivityCardscanBinding) this.viewBinding$delegate.getValue();
    }

    public static final void m847onCreate$lambda0(CardScanActivity cardScanActivity, View view) {
        Intrinsics.checkNotNullParameter(cardScanActivity, "this$0");
        cardScanActivity.userClosedScanner();
    }

    public static final void m848onCreate$lambda1(CardScanActivity cardScanActivity, View view) {
        Intrinsics.checkNotNullParameter(cardScanActivity, "this$0");
        cardScanActivity.toggleFlashlight();
    }

    public static final void m849onCreate$lambda2(CardScanActivity cardScanActivity, View view) {
        Intrinsics.checkNotNullParameter(cardScanActivity, "this$0");
        cardScanActivity.toggleCamera();
    }

    public static final boolean m850onCreate$lambda3(CardScanActivity cardScanActivity, View view, MotionEvent motionEvent) {
        Intrinsics.checkNotNullParameter(cardScanActivity, "this$0");
        cardScanActivity.setFocus(new PointF(motionEvent.getX() + cardScanActivity.getViewBinding().viewFinderWindow.getLeft(), motionEvent.getY() + cardScanActivity.getViewBinding().viewFinderWindow.getTop()));
        return true;
    }

    private final void setupViewFinderConstraints() {
        DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
        Size size = new Size(displayMetrics.widthPixels, displayMetrics.heightPixels);
        int b = Vk.c.b(ViewExtensionsKt.getFloatResource(this, R.dimen.stripeViewFinderMargin) * Math.min(size.getWidth(), size.getHeight()));
        Iterator it = t.i(new View[]{getViewBinding().viewFinderWindow, getViewBinding().viewFinderBorder}).iterator();
        while (it.hasNext()) {
            ViewGroup.LayoutParams layoutParams = ((View) it.next()).getLayoutParams();
            if (layoutParams == null) {
                throw new NullPointerException("null cannot be cast to non-null type android.view.ViewGroup.MarginLayoutParams");
            }
            ((ViewGroup.MarginLayoutParams) layoutParams).setMargins(b, b, b, b);
        }
        ViewFinderBackground viewFinderBackground = getViewBinding().viewFinderBackground;
        View view = getViewBinding().viewFinderWindow;
        Intrinsics.checkNotNullExpressionValue(view, "viewBinding.viewFinderWindow");
        viewFinderBackground.setViewFinderRect(com.stripe.android.camera.scanui.util.ViewExtensionsKt.asRect(view));
    }

    @Override
    public void closeScanner() {
        String stripePublishableKey = getParams().getStripePublishableKey();
        Stats stats = Stats.INSTANCE;
        StripeApi.uploadScanStatsOCR(stripePublishableKey, stats.getInstanceId(), stats.getScanId(), Device.Companion.fromContext(this), AppDetails.Companion.fromContext(this), ScanStatistics.Companion.fromStats(), new ScanConfig(0));
        super.closeScanner();
    }

    @Override
    @NotNull
    public Size getMinimumAnalysisResolution() {
        return this.minimumAnalysisResolution;
    }

    @Override
    @NotNull
    public ViewGroup getPreviewFrame() {
        Object value = this.previewFrame$delegate.getValue();
        Intrinsics.checkNotNullExpressionValue(value, "<get-previewFrame>(...)");
        return (ViewGroup) value;
    }

    @Override
    @NotNull
    public ScanErrorListener getScanErrorListener() {
        return this.scanErrorListener;
    }

    @Override
    public void onBackPressed() {
        g.d(new CardScanActivity$onBackPressed$1(this, null));
        getResultListener$stripecardscan_release().userCanceled(CancellationReason.Back.INSTANCE);
        closeScanner();
    }

    @Override
    public void onCameraReady() {
        ViewFinderBackground viewFinderBackground = getViewBinding().viewFinderBackground;
        View view = getViewBinding().viewFinderWindow;
        Intrinsics.checkNotNullExpressionValue(view, "viewBinding.viewFinderWindow");
        viewFinderBackground.setViewFinderRect(com.stripe.android.camera.scanui.util.ViewExtensionsKt.asRect(view));
        startCameraAdapter();
    }

    @Override
    public Object onCameraStreamAvailable(@NotNull gl.f<CameraPreviewImage<Bitmap>> fVar, @NotNull Kk.c<? super Unit> cVar) {
        CardScanFlow scanFlow = getScanFlow();
        View view = getViewBinding().viewFinderWindow;
        Intrinsics.checkNotNullExpressionValue(view, "viewBinding.viewFinderWindow");
        scanFlow.startFlow2((Context) this, fVar, com.stripe.android.camera.scanui.util.ViewExtensionsKt.asRect(view), (I) this, (H) this, (Unit) null);
        return Unit.a;
    }

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(getViewBinding().getRoot());
        if (ensureValidParams()) {
            setupViewFinderConstraints();
            final int i = 0;
            getViewBinding().closeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public final void onClick(View view) {
                    switch (i) {
                        case 0:
                            CardScanActivity.m847onCreate$lambda0((CardScanActivity) this, view);
                            break;
                        default:
                            Q q = (Q) this;
                            Intrinsics.checkNotNullParameter(q, "this$0");
                            q.S0();
                            com.crafto.android.usa.ui.base.a.j0(q, "Click Action", "Membership Status", (String) null, (String) null, "Downlaod Receipt", 0, (HashMap) null, 1004);
                            break;
                    }
                }
            });
            getViewBinding().torchButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public final void onClick(View view) {
                    CardScanActivity.m848onCreate$lambda1(CardScanActivity.this, view);
                }
            });
            getViewBinding().swapCameraButton.setOnClickListener(new f3(this, 2));
            getViewBinding().viewFinderBorder.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public final boolean onTouch(View view, MotionEvent motionEvent) {
                    boolean m850onCreate$lambda3;
                    m850onCreate$lambda3 = CardScanActivity.m850onCreate$lambda3(CardScanActivity.this, view, motionEvent);
                    return m850onCreate$lambda3;
                }
            });
            CardScanState scanState = getScanState();
            if (scanState == null) {
                throw new IllegalArgumentException("Required value was null.".toString());
            }
            displayState(scanState, getScanStatePrevious());
        }
    }

    public void onDestroy() {
        getScanFlow().cancelFlow();
        super.onDestroy();
    }

    @Override
    public void onFlashSupported(boolean z) {
        ImageView imageView = getViewBinding().torchButton;
        Intrinsics.checkNotNullExpressionValue(imageView, "viewBinding.torchButton");
        ViewExtensionsKt.setVisible(imageView, z);
    }

    @Override
    public void onFlashlightStateChanged(boolean z) {
        if (z) {
            ImageView imageView = getViewBinding().torchButton;
            Intrinsics.checkNotNullExpressionValue(imageView, "viewBinding.torchButton");
            com.stripe.android.camera.scanui.util.ViewExtensionsKt.setDrawable(imageView, R.drawable.stripe_flash_on_dark);
        } else {
            ImageView imageView2 = getViewBinding().torchButton;
            Intrinsics.checkNotNullExpressionValue(imageView2, "viewBinding.torchButton");
            com.stripe.android.camera.scanui.util.ViewExtensionsKt.setDrawable(imageView2, R.drawable.stripe_flash_off_dark);
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        setScanState((CardScanState) CardScanState.NotFound.INSTANCE);
    }

    @Override
    public void onSupportsMultipleCameras(boolean z) {
        ImageView imageView = getViewBinding().swapCameraButton;
        Intrinsics.checkNotNullExpressionValue(imageView, "viewBinding.swapCameraButton");
        ViewExtensionsKt.setVisible(imageView, z);
    }

    @Override
    public boolean changeScanState(@NotNull CardScanState cardScanState) {
        return SimpleScanStateful.DefaultImpls.changeScanState(this, cardScanState);
    }

    @Override
    public void displayState(@NotNull CardScanState cardScanState, CardScanState cardScanState2) {
        Intrinsics.checkNotNullParameter(cardScanState, "newState");
        if (cardScanState instanceof CardScanState.NotFound) {
            getViewBinding().viewFinderBackground.setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeNotFoundBackground));
            getViewBinding().viewFinderWindow.setBackgroundResource(R.drawable.stripe_card_background_not_found);
            ImageView imageView = getViewBinding().viewFinderBorder;
            Intrinsics.checkNotNullExpressionValue(imageView, "viewBinding.viewFinderBorder");
            com.stripe.android.camera.scanui.util.ViewExtensionsKt.startAnimation(imageView, R.drawable.stripe_card_border_not_found);
            getViewBinding().instructions.setText(R.string.stripe_card_scan_instructions);
            return;
        }
        if (cardScanState instanceof CardScanState.Found) {
            getViewBinding().viewFinderBackground.setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeFoundBackground));
            getViewBinding().viewFinderWindow.setBackgroundResource(R.drawable.stripe_card_background_found);
            ImageView imageView2 = getViewBinding().viewFinderBorder;
            Intrinsics.checkNotNullExpressionValue(imageView2, "viewBinding.viewFinderBorder");
            com.stripe.android.camera.scanui.util.ViewExtensionsKt.startAnimation(imageView2, R.drawable.stripe_card_border_found);
            getViewBinding().instructions.setText(R.string.stripe_card_scan_instructions);
            TextView textView = getViewBinding().instructions;
            Intrinsics.checkNotNullExpressionValue(textView, "viewBinding.instructions");
            ViewExtensionsKt.show(textView);
            return;
        }
        if (cardScanState instanceof CardScanState.Correct) {
            getViewBinding().viewFinderBackground.setBackgroundColor(ViewExtensionsKt.getColorByRes(this, R.color.stripeCorrectBackground));
            getViewBinding().viewFinderWindow.setBackgroundResource(R.drawable.stripe_card_background_correct);
            ImageView imageView3 = getViewBinding().viewFinderBorder;
            Intrinsics.checkNotNullExpressionValue(imageView3, "viewBinding.viewFinderBorder");
            com.stripe.android.camera.scanui.util.ViewExtensionsKt.startAnimation(imageView3, R.drawable.stripe_card_border_correct);
            TextView textView2 = getViewBinding().instructions;
            Intrinsics.checkNotNullExpressionValue(textView2, "viewBinding.instructions");
            ViewExtensionsKt.hide(textView2);
        }
    }

    @Override
    @NotNull
    public CardScanResultListener getResultListener$stripecardscan_release() {
        return this.resultListener;
    }

    @Override
    public CardScanState getScanState() {
        return this.scanState;
    }

    @Override
    public CardScanState getScanStatePrevious() {
        return this.scanStatePrevious;
    }

    @Override
    public void setScanState(CardScanState cardScanState) {
        this.scanState = cardScanState;
    }

    @Override
    public void setScanStatePrevious(CardScanState cardScanState) {
        this.scanStatePrevious = cardScanState;
    }
}