悦享送 v3.5.1版本的 MD5 值为:111dc8a16f422da8b2f1cf208abae9ea
以下内容为反编译后的 CardIOActivity.java 源代码,内容仅作参考
package io.card.payment;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.util.Log;
import android.view.OrientationEventListener;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import androidx.core.view.ViewCompat;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
public final class CardIOActivity extends Activity implements InterfaceC0180c {
public static final String EXTRA_APP_TOKEN = "io.card.payment.appToken";
public static final String EXTRA_LANGUAGE_OR_LOCALE = "io.card.payment.languageOrLocale";
public static final String EXTRA_NO_CAMERA = "io.card.payment.noCamera";
public static final String EXTRA_REQUIRE_CVV = "io.card.payment.requireCVV";
public static final String EXTRA_REQUIRE_EXPIRY = "io.card.payment.requireExpiry";
public static final String EXTRA_REQUIRE_ZIP = "io.card.payment.requireZip";
public static final String EXTRA_SCAN_RESULT = "io.card.payment.scanResult";
public static final String EXTRA_SUPPRESS_MANUAL_ENTRY = "io.card.payment.suppressManual";
public static final String EXTRA_USE_CARDIO_LOGO = "io.card.payment.useCardIOLogo";
public static final int RESULT_CARD_INFO = 13274384;
public static final int RESULT_CONFIRMATION_SUPPRESSED;
public static final int RESULT_ENTRY_CANCELED = 13274385;
public static final int RESULT_SCAN_NOT_AVAILABLE;
public static final int RESULT_SCAN_SUPPRESSED;
static Bitmap a = null;
private static int b = 13274385;
private static final long[] c;
private static final int d;
private static String e = null;
private static int q = 0;
private static boolean u = false;
private static boolean v = true;
private Z f;
private OrientationEventListener g;
private aa h;
private CreditCard i;
private Rect j;
private int k;
private int l;
private RelativeLayout o;
private FrameLayout p;
private CardScanner r;
private O s;
private boolean m = false;
private boolean n = false;
private boolean t = false;
static {
int i = RESULT_ENTRY_CANCELED + 1;
b = i;
int i2 = i + 1;
b = i2;
RESULT_SCAN_NOT_AVAILABLE = i;
int i3 = i2 + 1;
b = i3;
RESULT_SCAN_SUPPRESSED = i2;
b = i3 + 1;
RESULT_CONFIRMATION_SUPPRESSED = i3;
c = new long[]{0, 70, 10, 40};
d = 10;
q = 0;
u = true;
a = null;
}
public void a(int i) {
int i2;
int i3;
if (i < 0 || this.r == null) {
return;
}
int rotation = ((WindowManager) getSystemService("window")).getDefaultDisplay().getRotation();
int i4 = 270;
if (rotation != 0) {
if (rotation == 1) {
i2 = 90;
} else if (rotation == 2) {
i2 = 180;
} else if (rotation == 3) {
i2 = 270;
}
i3 = i + i2;
if (i3 > 360) {
i3 -= 360;
}
if (i3 >= 15 || i3 > 345) {
this.l = 1;
i4 = 0;
} else if (i3 > 75 && i3 < 105) {
this.l = 4;
i4 = 90;
} else if (i3 > 165 && i3 < 195) {
this.l = 2;
i4 = 180;
} else if (i3 <= 255 || i3 >= 285) {
i4 = -1;
} else {
this.l = 3;
}
if (i4 >= 0 || i4 == this.k) {
}
this.r.a(this.l);
b(i4);
return;
}
i2 = 0;
i3 = i + i2;
if (i3 > 360) {
}
if (i3 >= 15) {
}
this.l = 1;
i4 = 0;
if (i4 >= 0) {
}
}
public void a(int i, Intent intent) {
setResult(i, intent);
a = null;
finish();
}
private void a(Exception exc) {
am amVar = am.ERROR_CAMERA_UNEXPECTED_FAIL;
Toast makeText = Toast.makeText(this, al.a(amVar), 1);
makeText.setGravity(17, 0, -75);
makeText.show();
this.t = true;
this.s.a(amVar, exc, (Map) null);
}
private void a(boolean z) {
if ((this.h == null || this.f == null || !this.r.b(z)) ? false : true) {
this.f.a(z);
}
}
private void b(int i) {
SurfaceView a2 = this.h.a();
if (a2 == null) {
Log.wtf("card.io", "surface view is null.. recovering... rotation might be weird.");
return;
}
Rect a3 = this.r.a(a2.getWidth(), a2.getHeight());
this.j = a3;
a3.top += a2.getTop();
this.j.bottom += a2.getTop();
this.f.a(this.j, i);
this.k = i;
}
public static CreditCard c(CardIOActivity cardIOActivity) {
cardIOActivity.i = null;
return null;
}
public static boolean canReadCardWithCamera() {
try {
if (u) {
return ad.a();
}
return false;
} catch (CameraUnavailableException unused) {
return false;
}
}
public static boolean canReadCardWithCamera(Context context) {
return canReadCardWithCamera();
}
public static int d() {
return 10;
}
public void e() {
if (u) {
getIntent();
new Handler().post(new RunnableC0182e(this));
}
}
public static Date sdkBuildDate() {
return new Date("08/13/2013 11:23:14 -0500");
}
public static String sdkVersion() {
return "sdk-3.1.0";
}
public final void a() {
SurfaceView a2 = this.h.a();
Z z = this.f;
if (z != null) {
z.a(new Rect(a2.getLeft(), a2.getTop(), a2.getRight(), a2.getBottom()));
}
this.l = 1;
b(0);
if (1 != this.l) {
Log.wtf("card.io", "the orientation of the scanner doesn't match the orientation of the activity");
}
a(new DetectionInfo());
}
public final void a(Bitmap bitmap, DetectionInfo detectionInfo) {
float f;
float f2;
try {
((Vibrator) getSystemService("vibrator")).vibrate(c, -1);
} catch (SecurityException | Exception unused) {
}
this.r.c();
this.o.setVisibility(4);
if (detectionInfo.a()) {
CreditCard b2 = detectionInfo.b();
this.i = b2;
this.f.a(b2);
this.s.c(this.r.e());
}
int i = this.l;
if (i == 1 || i == 2) {
f = this.j.right / 428.0f;
f2 = 0.95f;
} else {
f = this.j.right / 428.0f;
f2 = 1.15f;
}
float f3 = f * f2;
Matrix matrix = new Matrix();
matrix.postScale(f3, f3);
this.f.a(Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false));
e();
}
public final void a(DetectionInfo detectionInfo) {
this.f.a(detectionInfo);
}
@Override
public final void authorizeScanFailed(Throwable th) {
th.getMessage();
}
@Override
public final void authorizeScanSuccessful() {
}
@Override
public final void authorizeScanUnsuccessful() {
if (u) {
u = false;
new AlertDialog.Builder(this).setTitle(al.a(am.WHOOPS)).setMessage(al.a(am.APP_NOT_AUTHORIZED_MESSAGE)).setNegativeButton(al.a(am.CANCEL), new DialogInterfaceOnClickListenerC0186i(this)).setCancelable(false).create().show();
}
}
public final void b() {
a(!this.r.f());
}
public final void c() {
this.r.a(true);
}
@Override
protected final void onActivityResult(int i, int i2, Intent intent) {
super.onActivityResult(i, i2, intent);
String.format("onActivityResult(requestCode:%d, resultCode:%d, ...", Integer.valueOf(i), Integer.valueOf(i2));
if (i2 == RESULT_CARD_INFO || i2 == RESULT_ENTRY_CANCELED || this.t) {
if (intent != null && intent.hasExtra(EXTRA_SCAN_RESULT)) {
Objects.toString(intent.getParcelableExtra(EXTRA_SCAN_RESULT));
}
a(i2, intent);
return;
}
RelativeLayout relativeLayout = this.o;
if (relativeLayout != null) {
relativeLayout.setVisibility(0);
}
}
@Override
public final void onBackPressed() {
CardScanner cardScanner;
if (!this.t) {
Z.c();
}
O o = this.s;
if (o == null || (cardScanner = this.r) == null) {
return;
}
o.a(cardScanner.e());
super.onBackPressed();
}
@Override
protected final void onCreate(Bundle bundle) {
CardScanner cardScanner;
int i = q + 1;
q = i;
if (i != 1) {
String.format("INTERNAL WARNING: There are %d (not 1) CardIOActivity allocations!", Integer.valueOf(i));
}
super.onCreate(bundle);
Intent intent = getIntent();
al.a(intent);
String stringExtra = intent.getStringExtra(EXTRA_APP_TOKEN);
e = stringExtra;
if (stringExtra == null || stringExtra.length() == 0 || e.contains(" ")) {
throw new IllegalArgumentException("A valid card.io app token must be supplied as a stringExtra with the key CardIOActivity.EXTRA_APP_TOKEN. Get one at https://card.io");
}
this.n = false;
this.s = new O(this, e, false);
String str = e;
C0178a a2 = W.a();
a2.a(str, null);
a2.a(this, "https://api.card.io/0/sdk/auth.json", new ab(this));
String a3 = ad.a(getPackageManager().resolveActivity(intent, 65536), CardIOActivity.class);
if (a3 != null) {
throw new RuntimeException(a3);
}
this.m = intent.getBooleanExtra(EXTRA_SUPPRESS_MANUAL_ENTRY, false);
if (intent.getBooleanExtra(EXTRA_NO_CAMERA, false)) {
this.t = true;
} else {
try {
if (!ad.a()) {
am amVar = am.ERROR_NO_DEVICE_SUPPORT;
al.a(amVar);
Objects.toString(amVar);
this.t = true;
this.s.a(amVar, (Map) null);
}
} catch (CameraUnavailableException e2) {
am amVar2 = am.ERROR_CAMERA_CONNECT_FAIL;
String a4 = al.a(amVar2);
Objects.toString(amVar2);
Toast makeText = Toast.makeText(this, a4, 1);
makeText.setGravity(17, 0, -75);
makeText.show();
this.t = true;
this.s.a(amVar2, e2, (Map) null);
} catch (Exception e3) {
a(e3);
}
}
if (u && !this.t) {
try {
requestWindowFeature(1);
this.j = new Rect();
this.l = 1;
if (!intent.getBooleanExtra("io.card.payment.cameraBypassTestMode", false)) {
cardScanner = new CardScanner(this, this.l);
} else {
if (!getPackageName().contentEquals("io.card.development")) {
getPackageName();
throw new IllegalStateException("illegal access of private extra");
}
cardScanner = (CardScanner) Class.forName("io.card.payment.CardScannerTester").getConstructor(getClass(), Integer.TYPE).newInstance(this, Integer.valueOf(this.l));
}
this.r = cardScanner;
this.r.b();
FrameLayout frameLayout = new FrameLayout(this);
this.p = frameLayout;
frameLayout.setBackgroundColor(ViewCompat.MEASURED_STATE_MASK);
this.p.setLayoutParams(new ViewGroup.LayoutParams(-1, -1));
FrameLayout frameLayout2 = new FrameLayout(this);
frameLayout2.setId(1);
this.r.getClass();
this.r.getClass();
aa aaVar = new aa(this);
this.h = aaVar;
aaVar.setLayoutParams(new FrameLayout.LayoutParams(-1, -1, 48));
frameLayout2.addView(this.h);
Z z = new Z(this, ad.a(this));
this.f = z;
z.setLayoutParams(new ViewGroup.LayoutParams(-1, -1));
this.f.b(getIntent().getBooleanExtra(EXTRA_USE_CARDIO_LOGO, false));
frameLayout2.addView(this.f);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(-1, -1);
layoutParams.addRule(10);
layoutParams.addRule(2, 2);
this.p.addView(frameLayout2, layoutParams);
RelativeLayout relativeLayout = new RelativeLayout(this);
this.o = relativeLayout;
relativeLayout.setGravity(80);
RelativeLayout.LayoutParams layoutParams2 = new RelativeLayout.LayoutParams(-1, -2);
layoutParams.addRule(12);
this.o.setLayoutParams(layoutParams2);
this.o.setId(2);
this.o.setGravity(85);
if (!this.m) {
Button button = new Button(this);
button.setId(3);
button.setText(al.a(am.KEYBOARD));
button.setTextSize(12.0f);
button.setOnClickListener(new ViewOnClickListenerC0184g(this));
this.o.addView(button);
C0190m.a((View) button, false, (Context) this);
button.setTextSize(14.0f);
button.setMinimumHeight(C0190m.a("42dip", this));
RelativeLayout.LayoutParams layoutParams3 = (RelativeLayout.LayoutParams) button.getLayoutParams();
layoutParams3.width = -2;
layoutParams3.height = -2;
layoutParams3.addRule(12);
C0190m.a(button, "16dip", null, "16dip", null);
C0190m.b(button, "4dip", "4dip", "4dip", "4dip");
}
RelativeLayout.LayoutParams layoutParams4 = new RelativeLayout.LayoutParams(-1, -2);
layoutParams4.addRule(12);
int i2 = (int) ((getResources().getDisplayMetrics().density * 15.0f) + 0.5f);
layoutParams4.setMargins(0, i2, 0, i2);
this.p.addView(this.o, layoutParams4);
setContentView(this.p);
this.g = new C0181d(this, this);
} catch (Exception e4) {
a(e4);
}
}
if ((this.t || !u) && this.m) {
a(RESULT_SCAN_NOT_AVAILABLE, (Intent) null);
}
}
@Override
protected final void onDestroy() {
this.f = null;
q--;
CardScanner cardScanner = this.r;
if (cardScanner != null) {
cardScanner.d();
this.r = null;
}
super.onDestroy();
}
@Override
protected final void onPause() {
super.onPause();
OrientationEventListener orientationEventListener = this.g;
if (orientationEventListener != null) {
orientationEventListener.disable();
}
a(false);
CardScanner cardScanner = this.r;
if (cardScanner != null) {
cardScanner.c();
} else {
if (this.t) {
return;
}
Log.wtf("card.io", "cardScanner is null in onPause()");
}
}
@Override
protected final void onResume() {
super.onResume();
if (this.t) {
this.s.b((Map) null);
e();
return;
}
if (!u) {
a(0, (Intent) null);
return;
}
ad.b();
getWindow().addFlags(1024);
getWindow().addFlags(128);
setRequestedOrientation(1);
this.g.enable();
this.i = null;
if (!v && this.h == null) {
throw new AssertionError();
}
boolean a2 = this.r.a(this.h.b());
if (a2) {
this.o.setVisibility(0);
}
if (a2) {
a(false);
this.s.a();
} else {
am amVar = am.ERROR_CAMERA_UNEXPECTED_FAIL;
Toast.makeText(this, al.a(amVar), 1).show();
e();
this.s.a(amVar, this.r.e());
}
a(this.k);
}
}