/* * Copyright 2015 Ryan Jones * * This file is part of smartcard-reader, package org.docrj.smartcard.reader. * * smartcard-reader is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * smartcard-reader is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with smartcard-reader. If not, see <http://www.gnu.org/licenses/>. */ package org.docrj.smartcard.reader; import android.content.Context; import android.nfc.tech.IsoDep; import java.util.List; public class BatchReaderXcvr implements Runnable, ReaderXcvr.UiCallbacks { private final List<SmartcardApp> mApps; private final IsoDep mIsoDep; private ReaderXcvr.UiCallbacks mUiCallbacks; private Context mContext; private int mSize; private int mIndex; public BatchReaderXcvr(IsoDep isoDep, List<SmartcardApp> apps, ReaderXcvr.UiCallbacks uiCallbacks) { mIsoDep = isoDep; mApps = apps; mUiCallbacks = uiCallbacks; mContext = (Context) uiCallbacks; mSize = apps.size(); mIndex = 0; } private void selectNextApp() { // using onOkay() generically as app name, header for each app select onOkay(mApps.get(mIndex).getName()); new Thread(new OtherReaderXcvr(mIsoDep, mApps.get(mIndex++).getAid(), this, mContext)).start(); } @Override public void run() { selectNextApp(); } // callback for each select completion @Override public void onFinish(boolean err) { if (err) { onError(mContext.getString(R.string.batch_interrupted)); } else if (mIndex < mSize) { mUiCallbacks.onSeparator(); selectNextApp(); } else { onOkay(mContext.getString(R.string.batch_complete)); } } // display console messages @Override public void onMessageSend(String raw, String name) { mUiCallbacks.onMessageSend(raw, name); } @Override public void onMessageRcv(String raw, String name, String parsed) { mUiCallbacks.onMessageRcv(raw, name, parsed); } @Override public void onOkay(String message) { mUiCallbacks.onOkay(message); } @Override public void onError(String message) { mUiCallbacks.onError(message); } @Override public void onSeparator() { mUiCallbacks.onSeparator(); } // clear console messages @Override public void clearMessages(){ mUiCallbacks.clearMessages(); } // ui listeners @Override public void setUserSelectListener(ReaderXcvr.UiListener callback) { mUiCallbacks.setUserSelectListener(callback); } }