package com.panelic.cardio;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import io.card.payment.CardIOActivity;
import io.card.payment.CardType;
import io.card.payment.CreditCard;
public class MainActivity extends AppCompatActivity {
protected static final String TAG = MainActivity.class.getSimpleName();
private static final int REQUEST_SCAN = 100;
private static final int REQUEST_AUTOTEST = 200;
private CheckBox mEnableExpiryToggle;
private CheckBox mScanExpiryToggle;
private CheckBox mCvvToggle;
private CheckBox mPostalCodeToggle;
private CheckBox mCardholderNameToggle;
private TextView mResultLabel;
private ImageView mResultImage;
private ImageView mResultCardTypeImage;
private boolean autotestMode;
private int numAutotestsPassed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEnableExpiryToggle = (CheckBox) findViewById(R.id.gather_expiry);
mScanExpiryToggle = (CheckBox) findViewById(R.id.scan_expiry);
mCvvToggle = (CheckBox) findViewById(R.id.gather_cvv);
mPostalCodeToggle = (CheckBox) findViewById(R.id.gather_postal_code);
mCardholderNameToggle = (CheckBox) findViewById(R.id.gather_cardholder_name);
mResultLabel = (TextView) findViewById(R.id.result);
mResultImage = (ImageView) findViewById(R.id.result_image);
mResultCardTypeImage = (ImageView) findViewById(R.id.result_card_type_image);
TextView version = (TextView) findViewById(R.id.version);
version.setText("card.io library: " + CardIOActivity.sdkVersion() + "\n" +
"Build date: " + CardIOActivity.sdkBuildDate());
setScanExpiryEnabled();
}
private void setScanExpiryEnabled() {
mScanExpiryToggle.setEnabled(mEnableExpiryToggle.isChecked());
}
public void onExpiryToggle(View v) {
setScanExpiryEnabled();
}
public void onScan(View pressed) {
Intent intent = new Intent(this, CardIOActivity.class)
.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, mEnableExpiryToggle.isChecked())
.putExtra(CardIOActivity.EXTRA_SCAN_EXPIRY, mScanExpiryToggle.isChecked())
.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, mCvvToggle.isChecked())
.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, mPostalCodeToggle.isChecked())
.putExtra(CardIOActivity.EXTRA_REQUIRE_CARDHOLDER_NAME, mCardholderNameToggle.isChecked())
.putExtra(CardIOActivity.EXTRA_GUIDE_COLOR, Color.GREEN)
.putExtra(CardIOActivity.EXTRA_RETURN_CARD_IMAGE, true);
startActivityForResult(intent, REQUEST_SCAN);
}
public void onAutotest(View v) {
Log.i(TAG, "\n\n\n ============================== \n" + "successfully completed "
+ numAutotestsPassed + " tests\n" + "beginning new test run\n");
Intent intent = new Intent(this, CardIOActivity.class)
.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, false)
.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false)
.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, false)
.putExtra(CardIOActivity.EXTRA_REQUIRE_CARDHOLDER_NAME, false)
.putExtra("debug_autoAcceptResult", true);
startActivityForResult(intent, REQUEST_AUTOTEST);
autotestMode = true;
}
@Override
public void onStop() {
super.onStop();
mResultLabel.setText("");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v(TAG, "onActivityResult(" + requestCode + ", " + resultCode + ", " + data + ")");
String outStr = new String();
Bitmap cardTypeImage = null;
if ((requestCode == REQUEST_SCAN || requestCode == REQUEST_AUTOTEST) && data != null
&& data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {
CreditCard result = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT);
if (result != null) {
outStr += "Card number: " + result.getRedactedCardNumber() + "\n";
CardType cardType = result.getCardType();
cardTypeImage = cardType.imageBitmap(this);
outStr += "Card type: " + cardType.name() + " cardType.getDisplayName(null)="
+ cardType.getDisplayName(null) + "\n";
if (mEnableExpiryToggle.isChecked()) {
outStr += "Expiry: " + result.expiryMonth + "/" + result.expiryYear + "\n";
}
if (mCvvToggle.isChecked()) {
outStr += "CVV: " + result.cvv + "\n";
}
if (mPostalCodeToggle.isChecked()) {
outStr += "Postal Code: " + result.postalCode + "\n";
}
if (mCardholderNameToggle.isChecked()) {
outStr += "Cardholder Name: " + result.cardholderName + "\n";
}
}
if (autotestMode) {
numAutotestsPassed++;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
onAutotest(null);
}
}, 500);
}
} else if (resultCode == AppCompatActivity.RESULT_CANCELED) {
autotestMode = false;
}
Bitmap card = CardIOActivity.getCapturedCardImage(data);
mResultImage.setImageBitmap(card);
mResultCardTypeImage.setImageBitmap(cardTypeImage);
Log.i(TAG, "Set result: " + outStr);
mResultLabel.setText(outStr);
}
}