Android Open Source - bankomatinfos Main Activity






From Project

Back to project page bankomatinfos.

License

The source code is released under:

GNU General Public License

If you think the Android project bankomatinfos listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package at.zweng.bankomatinfos.ui;
// ww  w.jav a2s  .co m
import static at.zweng.bankomatinfos.util.Utils.*;

import java.io.IOException;

import android.app.Activity;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.TagLostException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import at.zweng.bankomatinfos.AppController;
import at.zweng.bankomatinfos.exceptions.NoSmartCardException;
import at.zweng.bankomatinfos.iso7816emv.NfcBankomatCardReader;
import at.zweng.bankomatinfos.model.CardInfo;
import at.zweng.bankomatinfos.util.ChangeLog;
import at.zweng.bankomatinfos.util.CustomAlertDialog;
import at.zweng.bankomatinfos2.R;

/**
 * Startup activity
 * 
 * @author Johannes Zweng <johannes@zweng.at>
 * 
 */
public class MainActivity extends Activity {

  // for NFC stuff
  private PendingIntent _pendingIntent;
  private IntentFilter[] _filters;
  private String[][] _techLists;
  private NfcAdapter _nfcAdapter;

  // View elements
  private View _viewNfcLogo;
  private View _viewTextViewShowCard;
  private View _viewProgressStatus;

  private CardInfo _cardReadingResults;
  private ReadNfcCardTask _readCardTask;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // find view elements
    _viewProgressStatus = findViewById(R.id.read_card_status);
    _viewNfcLogo = findViewById(R.id.imageViewNfcLogo);
    _viewTextViewShowCard = findViewById(R.id.textViewYourCardPlease);

    // NFC stuff
    _pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
        getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
    _filters = new IntentFilter[] { new IntentFilter(
        NfcAdapter.ACTION_TECH_DISCOVERED) };
    _techLists = new String[][] { { "android.nfc.tech.NfcA" } };
    _nfcAdapter = NfcAdapter.getDefaultAdapter(this);

    // create last changes dialog if needed
    displayWhatsNew();

  }

  @Override
  protected void onResume() {
    super.onResume();
    if (!isNfcAvailable()) {
      Intent intent = new Intent(this, NfcDisabledActivity.class);
      startActivity(intent);
      this.finish();
      return;
    }

    if (_nfcAdapter != null) {
      Log.d(TAG, "enabling foreground NFC dispatch");
      // TESTING new ReaderMode:
      // Log.i(TAG, "enableReaderMode without P2P only NFC A");
      // _nfcAdapter
      // .enableReaderMode(
      // this,
      // this,
      // (NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK |
      // NfcAdapter.FLAG_READER_NFC_A),
      // null);
      _nfcAdapter.enableForegroundDispatch(this, _pendingIntent,
          _filters, _techLists);
    }
  }

  @Override
  protected void onPause() {
    super.onPause();
    if (_nfcAdapter != null) {
      Log.d(TAG, "disabling foreground NFC dispatch");
      _nfcAdapter.disableForegroundDispatch(this);
    }
  }

  @Override
  protected void onRestart() {
    super.onRestart();
    showProgressAnimation(false);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.action_about:
      showAboutDialog(getFragmentManager());
      return true;
    case R.id.action_changelog:
      showChangelogDialog(getFragmentManager(), true);
      return true;
    case R.id.action_settings:
      Intent i = new Intent();
      i.setComponent(new ComponentName(getApplicationContext(),
          SettingsActivity.class));
      startActivity(i);
      return true;
    }
    return false;
  }

  @Override
  public void onNewIntent(Intent intent) {
    Log.d(TAG, "onNewIntent()");
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    if (tag != null) {
      handleTag(tag);
    }
  }

  /**
   * @return <code>true</code> if NFC is available on this device and enabled
   *         in Adnroid system settings
   */
  private boolean isNfcAvailable() {
    return (_nfcAdapter != null && _nfcAdapter.isEnabled());
  }

  /**
   * display changelog dialog (if not seen yet)
   */
  private void displayWhatsNew() {
    ChangeLog cl = new ChangeLog(this);
    if (cl.firstRun()) {
      showChangelogDialog(getFragmentManager(), false);
    }
  }

  /**
   * Show or hide the progress animation..
   * 
   * @param show
   */
  private void showProgressAnimation(final boolean show) {
    _viewProgressStatus.setVisibility(show ? View.VISIBLE : View.GONE);

    _viewNfcLogo.setVisibility(show ? View.GONE : View.VISIBLE);
    _viewTextViewShowCard.setVisibility(show ? View.GONE : View.VISIBLE);
  }

  /**
   * Called whenever we detect a NFC Tag
   * 
   * @param intent
   */
  private void handleTag(Tag tag) {
    showProgressAnimation(true);
    if (_readCardTask != null) {
      return;
    }
    showProgressAnimation(true);
    _readCardTask = new ReadNfcCardTask(tag);
    _readCardTask.execute((Void) null);
  }

  /**
   * Represents an asynchronous task (reading the card)
   */
  public class ReadNfcCardTask extends AsyncTask<Void, Void, Boolean> {
    private final static int ERROR_TAG_LOST = -1;
    private final static int ERROR_IO_EX = -2;
    private final static int ERROR_NO_SMARTCARD = -3;
    private Tag nfcTag;
    private int error;

    /**
     * Constructor
     * 
     * @param pNfcTag
     */
    public ReadNfcCardTask(Tag pNfcTag) {
      super();
      this.nfcTag = pNfcTag;
    }

    @Override
    protected Boolean doInBackground(Void... params) {
      AppController ctl = AppController.getInstance();
      ctl.clearLog();
      try {
        ctl.log(getResources().getString(R.string.app_name)
            + " version " + getAppVersion(MainActivity.this));
        NfcBankomatCardReader reader = new NfcBankomatCardReader(
            nfcTag, MainActivity.this);
        reader.connectIsoDep();
        // read setting value
        SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(MainActivity.this);
        _cardReadingResults = reader.readAllCardData(prefs.getBoolean(
            "perform_full_file_scan", false));
        ctl.setCardInfo(_cardReadingResults);
        reader.disconnectIsoDep();
      } catch (NoSmartCardException nsce) {
        Log.w(TAG,
            "Catched NoSmartCardException during reading the card",
            nsce);
        error = ERROR_NO_SMARTCARD;
        return false;
      } catch (TagLostException tle) {
        Log.w(TAG, "Catched TagLostException during reading the card",
            tle);
        error = ERROR_TAG_LOST;
        return false;
      } catch (IOException e) {
        Log.e(TAG, "Catched IOException during reading the card", e);
        error = ERROR_IO_EX;
        ctl.log("-----------------------------------------------");
        ctl.log("ERROR ERROR ERROR:");
        ctl.log("Catched IOException during reading the card:");
        ctl.log(getStacktrace(e));
        ctl.log("-----------------------------------------------");
        return false;
      }
      return true;
    }

    @Override
    protected void onPostExecute(final Boolean success) {
      _readCardTask = null;

      if (success) {
        Log.d(TAG, "reading card finished successfully");
        if (!_cardReadingResults.isSupportedCard()) {
          showProgressAnimation(false);
          displaySimpleAlertDialog(
              MainActivity.this,
              getResources()
                  .getString(
                      R.string.dialog_title_error_unsupported_card),
              getResources()
                  .getString(
                      R.string.dialog_text_error_unsupported_card));
        } else {
          // show results page
          Intent intent = new Intent(MainActivity.this,
              ResultActivity.class);
          startActivity(intent);
        }
      } else {
        showProgressAnimation(false);
        if (error == ERROR_TAG_LOST) {
          displaySimpleAlertDialog(
              MainActivity.this,
              getResources().getString(
                  R.string.dialog_title_error_card_lost),
              getResources().getString(
                  R.string.dialog_text_error_card_lost));
        } else if (error == ERROR_NO_SMARTCARD) {
          displaySimpleAlertDialog(
              MainActivity.this,
              getResources().getString(
                  R.string.dialog_title_error_no_smartcard),
              getResources().getString(
                  R.string.dialog_text_error_no_smartcard));
        }
        // In this case we still open the result Activity for allowing
        // the user to inspect the stacktrace in the Log tab
        else if (error == ERROR_IO_EX) {
          new CustomAlertDialog(MainActivity.this,
              getResources().getString(
                  R.string.dialog_title_error_ioexception),
              getResources().getString(
                  R.string.dialog_text_error_ioexception)) {

            /**
             * First show the alert dialog, and when user clicks ok,
             * show the result
             */
            @Override
            public void onOkClick() {
              // show results page
              Intent intent = new Intent(MainActivity.this,
                  ResultActivity.class);
              startActivity(intent);
            }
          }.show();
        }

        else {
          displaySimpleAlertDialog(
              MainActivity.this,
              getResources().getString(
                  R.string.dialog_title_error_unknown),
              getResources().getString(
                  R.string.dialog_text_error_unknown));
        }
      }
      // and hide the progress animation
      // showProgressAnimation(false);
    }

    @Override
    protected void onCancelled() {
      _readCardTask = null;
      showProgressAnimation(false);
    }
  }
}




Java Source Code List

at.zweng.bankomatinfos.AppController.java
at.zweng.bankomatinfos.exceptions.NoSmartCardException.java
at.zweng.bankomatinfos.exceptions.TlvParsingException.java
at.zweng.bankomatinfos.iso7816emv.BERTLV.java
at.zweng.bankomatinfos.iso7816emv.ByteArrayWrapper.java
at.zweng.bankomatinfos.iso7816emv.CPLC.java
at.zweng.bankomatinfos.iso7816emv.EMVTags.java
at.zweng.bankomatinfos.iso7816emv.EmvTag.java
at.zweng.bankomatinfos.iso7816emv.EmvUtils.java
at.zweng.bankomatinfos.iso7816emv.GPTags.java
at.zweng.bankomatinfos.iso7816emv.Iso3166CountryCodes.java
at.zweng.bankomatinfos.iso7816emv.Iso4217CurrencyCodes.java
at.zweng.bankomatinfos.iso7816emv.NfcBankomatCardReader.java
at.zweng.bankomatinfos.iso7816emv.TagAndValue.java
at.zweng.bankomatinfos.iso7816emv.TagImpl.java
at.zweng.bankomatinfos.iso7816emv.TagType.java
at.zweng.bankomatinfos.iso7816emv.TagValueType.java
at.zweng.bankomatinfos.model.AbstractTransactionLogEntry.java
at.zweng.bankomatinfos.model.CardInfo.java
at.zweng.bankomatinfos.model.EmvTransactionLogEntry.java
at.zweng.bankomatinfos.model.InfoKeyValuePair.java
at.zweng.bankomatinfos.model.QuickTransactionLogEntry.java
at.zweng.bankomatinfos.ui.AboutDialogFragment.java
at.zweng.bankomatinfos.ui.ChangelogDialogFragment.java
at.zweng.bankomatinfos.ui.ListAdapterEmvTransactions.java
at.zweng.bankomatinfos.ui.ListAdapterInfos.java
at.zweng.bankomatinfos.ui.ListAdapterQuickTransactions.java
at.zweng.bankomatinfos.ui.MainActivity.java
at.zweng.bankomatinfos.ui.NfcDisabledActivity.java
at.zweng.bankomatinfos.ui.ResultActivity.java
at.zweng.bankomatinfos.ui.ResultEmvTxListFragment.java
at.zweng.bankomatinfos.ui.ResultInfosListFragment.java
at.zweng.bankomatinfos.ui.ResultLogFragment.java
at.zweng.bankomatinfos.ui.ResultQuickTxListFragment.java
at.zweng.bankomatinfos.ui.SettingsActivity.java
at.zweng.bankomatinfos.util.ChangeLog.java
at.zweng.bankomatinfos.util.CustomAlertDialog.java
at.zweng.bankomatinfos.util.Utils.java