X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=javame%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2Fclient%2Fj2me%2FZXingMIDlet.java;h=9c9f5a3d00e4c2c08e80efe4671581afb64291ac;hb=4dcf4bb58ba7739c697e2d37b4f49d74f1a2fcb0;hp=4428c02e341e4715323a787ad3eaeee50d978737;hpb=a328d64900cdbba36cb022c5af2a7424ea392438;p=zxing.git diff --git a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java index 4428c02e..9c9f5a3d 100644 --- a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java +++ b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java @@ -16,6 +16,14 @@ package com.google.zxing.client.j2me; +import com.google.zxing.client.result.BookmarkDoCoMoResult; +import com.google.zxing.client.result.EmailAddressResult; +import com.google.zxing.client.result.EmailDoCoMoResult; +import com.google.zxing.client.result.ParsedReaderResult; +import com.google.zxing.client.result.ParsedReaderResultType; +import com.google.zxing.client.result.UPCParsedResult; +import com.google.zxing.client.result.URIParsedResult; + import javax.microedition.io.ConnectionNotFoundException; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; @@ -39,6 +47,7 @@ import java.io.IOException; */ public final class ZXingMIDlet extends MIDlet { + private Canvas canvas; private Player player; private VideoControl videoControl; @@ -52,31 +61,18 @@ public final class ZXingMIDlet extends MIDlet { protected void startApp() throws MIDletStateChangeException { try { - player = Manager.createPlayer("capture://video"); + player = createPlayer(); player.realize(); + AdvancedMultimediaManager.setZoom(player); videoControl = (VideoControl) player.getControl("VideoControl"); - Canvas canvas = new VideoCanvas(this); + canvas = new VideoCanvas(this); canvas.setFullScreenMode(true); videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, canvas); videoControl.setDisplayLocation(0, 0); videoControl.setDisplaySize(canvas.getWidth(), canvas.getHeight()); videoControl.setVisible(true); - /* - FocusControl focusControl = (FocusControl) - player.getControl("javax.microedition.amms.control.FocusControl"); - if (focusControl != null) { - if (focusControl.isAutoFocusSupported()) { - focusControl.setFocus(FocusControl.AUTO); - } - if (focusControl.isMacroSupported()) { - focusControl.setMacro(true); - } - } else { - System.out.println("FocusControl not supported"); - } - */ - Display.getDisplay(this).setCurrent(canvas); player.start(); + Display.getDisplay(this).setCurrent(canvas); } catch (IOException ioe) { throw new MIDletStateChangeException(ioe.toString()); } catch (MediaException me) { @@ -84,6 +80,23 @@ public final class ZXingMIDlet extends MIDlet { } } + private static Player createPlayer() throws IOException, MediaException { + // Try a workaround for Nokias, which want to use capture://image in some cases + Player player = null; + String platform = System.getProperty("microedition.platform"); + if (platform != null && platform.indexOf("Nokia") >= 0) { + try { + player = Manager.createPlayer("capture://image"); + } catch (MediaException me) { + // if this fails, just continue with capture://video + } + } + if (player == null) { + player = Manager.createPlayer("capture://video"); + } + return player; + } + protected void pauseApp() { if (player != null) { try { @@ -116,24 +129,26 @@ public final class ZXingMIDlet extends MIDlet { // Convenience methods to show dialogs - void showYesNo(String title, final String text) { - Alert alert = new Alert(title, text, null, AlertType.INFO); + private void showOpenURL(String title, final String display, final String uri) { + Alert alert = new Alert(title, display, null, AlertType.CONFIRMATION); alert.setTimeout(Alert.FOREVER); - final Command yes = new Command("Yes", Command.OK, 0); - final Command no = new Command("No", Command.CANCEL, 0); + Command yes = new Command("Yes", Command.OK, 1); alert.addCommand(yes); + Command no = new Command("No", Command.CANCEL, 1); alert.addCommand(no); CommandListener listener = new CommandListener() { public void commandAction(Command command, Displayable displayable) { - if (command.equals(yes)) { + if (command.getCommandType() == Command.OK) { try { - if (platformRequest(text)) { - // Successfully opened URL; exit - stop(); - } + platformRequest(uri); } catch (ConnectionNotFoundException cnfe) { showError(cnfe); + } finally { + stop(); } + } else { + // cancel + Display.getDisplay(ZXingMIDlet.this).setCurrent(canvas); } } }; @@ -141,35 +156,52 @@ public final class ZXingMIDlet extends MIDlet { showAlert(alert); } - void showAlert(String title, String text) { + private void showAlert(String title, String text) { Alert alert = new Alert(title, text, null, AlertType.INFO); alert.setTimeout(Alert.FOREVER); showAlert(alert); } void showError(Throwable t) { - showAlert(new Alert("Error", t.getMessage(), null, AlertType.ERROR)); + String message = t.getMessage(); + if (message != null && message.length() > 0) { + showError(message); + } else { + showError(t.toString()); + } } + void showError(String message) { + showAlert(new Alert("Error", message, null, AlertType.ERROR)); + } + private void showAlert(Alert alert) { Display display = Display.getDisplay(this); - display.setCurrent(alert, display.getCurrent()); + display.setCurrent(alert, canvas); } void handleDecodedText(String text) { - // This is a crude imitation of the code found in module core-ext, which handles the contents - // in a more sophisticated way. It can't be accessed from JavaME just yet because it relies - // on URL parsing routines in java.net. This should be somehow worked around: TODO - // For now, detect URLs in a simple way, and treat everything else as text - if (text.startsWith("http://") || text.startsWith("https://") || maybeURLWithoutScheme(text)) { - showYesNo("Open URL?", text); + ParsedReaderResult result = ParsedReaderResult.parseReaderResult(text); + ParsedReaderResultType type = result.getType(); + if (type.equals(ParsedReaderResultType.URI)) { + String uri = ((URIParsedResult) result).getURI(); + showOpenURL("Open web page?", uri, uri); + } else if (type.equals(ParsedReaderResultType.BOOKMARK)) { + String uri = ((BookmarkDoCoMoResult) result).getURI(); + showOpenURL("Open web page?", uri, uri); + } else if (type.equals(ParsedReaderResultType.EMAIL)) { + String email = ((EmailDoCoMoResult) result).getTo(); + showOpenURL("Compose e-mail?", email, "mailto:" + email); + } else if (type.equals(ParsedReaderResultType.EMAIL_ADDRESS)) { + String email = ((EmailAddressResult) result).getEmailAddress(); + showOpenURL("Compose e-mail?", email, "mailto:" + email); + } else if (type.equals(ParsedReaderResultType.UPC)) { + String upc = ((UPCParsedResult) result).getUPC(); + String uri = "http://www.upcdatabase.com/item.asp?upc=" + upc; + showOpenURL("Look up UPC?", upc, uri); } else { - showAlert("Barcode detected", text); + showAlert("Barcode detected", result.getDisplayResult()); } } - private static boolean maybeURLWithoutScheme(String text) { - return text.indexOf((int) '.') >= 0 && text.indexOf((int) ' ') < 0; - } - }