/**********************************************
* CONFIDENTIAL AND PROPRIETARY
*
* The information contained herein is the confidential and the exclusive property of
* ZIH Corp. This document, and the information contained herein, shall not be copied, reproduced, published,
* displayed or distributed, in whole or in part, in any medium, by any means, for any purpose without the express
* written consent of ZIH Corp.
*
* Copyright ZIH Corp. 2009
*
* ALL RIGHTS RESERVED
***********************************************/
package com.zebra.blackberry.demo.magcard;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.FlowFieldManager;
import net.rim.device.api.ui.container.VerticalFieldManager;
import com.zebra.blackberry.comm.ZebraPrinterConnectionException;
import com.zebra.blackberry.demo.ConnectionScreen;
import com.zebra.blackberry.printer.MagCardReader;
import com.zebra.blackberry.printer.ZebraPrinter;
/*
* Magnetic Card Reader Demo
* This demo shows how to read magnetic card data from a printer's magnetic card reader.
*
*/
public class MagCardDemo {
private ConnectionScreen screen;
private ZebraPrinter printer;
private LabelField trackField1;
private LabelField trackField2;
private LabelField trackField3;
public void displayMagCardDemo() {
screen = new ConnectionScreen();
screen.setTitle("MagCard Demo");
FlowFieldManager buttonManager = new FlowFieldManager();
ButtonField connectButton = new ButtonField("Connect", ButtonField.CONSUME_CLICK);
buttonManager.add(connectButton);
ButtonField testMagCardButton = new ButtonField("Read MagCard", ButtonField.CONSUME_CLICK);
buttonManager.add(testMagCardButton);
ButtonField disconnectButton = new ButtonField("Disconnect", ButtonField.CONSUME_CLICK);
buttonManager.add(disconnectButton);
screen.add(buttonManager);
connectButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
Thread t = new Thread(new Runnable() {
public void run() {
printer = screen.connect();
}
});
t.start();
}
});
testMagCardButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
Thread t = new Thread(new Runnable() {
public void run() {
doReadMagCard();
}
});
t.start();
}
});
disconnectButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
Thread t = new Thread(new Runnable() {
public void run() {
screen.disconnect();
}
});
t.start();
}
});
VerticalFieldManager dataManager = new VerticalFieldManager();
trackField1 = new LabelField("T1: ");
trackField2 = new LabelField("T2: ");
trackField3 = new LabelField("T3: ");
dataManager.add(trackField1);
dataManager.add(trackField2);
dataManager.add(trackField3);
screen.add(dataManager);
UiApplication.getUiApplication().pushScreen(screen);
}
private void doReadMagCard() {
UiApplication.getUiApplication().invokeAndWait(new Runnable() {
public void run() {
trackField1.setText("T1: ");
trackField2.setText("T2: ");
trackField3.setText("T3: ");
}
});
try {
MagCardReader mcr = printer.getMagCardReader();
if (mcr != null) {
screen.setStatus("Waiting for swipe...", Color.GOLD);
final String[] trackData = mcr.read(10 * 1000);
UiApplication.getUiApplication().invokeAndWait(new Runnable() {
public void run() {
trackField1.setText("T1: " + trackData[0]);
trackField2.setText("T2: " + trackData[1]);
trackField3.setText("T3: " + trackData[2]);
}
});
screen.setStatus("Done", Color.BLUE);
} else {
screen.setStatus("Error", Color.RED);
}
} catch (ZebraPrinterConnectionException e1) {
screen.setStatus("Communication Error! Disconnected", Color.RED);
}
}
}