X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=javame%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2Fclient%2Fj2me%2FZXingMIDlet.java;h=bba72711ac19e85114f044df23b63efd43c9a4b2;hb=75a8de321f6480a0a83074e0ab035ce7067f7386;hp=02ec6779380c78f88e8157882163e9a3d0d1e1b7;hpb=1a11f77abad38f073b9ab0f4c1e1a03b38fd3a06;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 02ec6779..bba72711 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; @@ -53,7 +61,7 @@ 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"); @@ -72,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 { @@ -104,16 +129,18 @@ public final class ZXingMIDlet extends MIDlet { // Convenience methods to show dialogs - private void showOpenURL(final String text) { - Alert alert = new Alert("Open web page?", text, null, AlertType.CONFIRMATION); + 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 cancel = new Command("Cancel", Command.CANCEL, 1); - alert.addCommand(cancel); + 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.getCommandType() == Command.OK) { try { - platformRequest(text); + platformRequest(uri); } catch (ConnectionNotFoundException cnfe) { showError(cnfe); } finally { @@ -136,60 +163,40 @@ public final class ZXingMIDlet extends MIDlet { } void showError(Throwable t) { - showAlert(new Alert("Error", t.getMessage(), null, AlertType.ERROR)); + showError(t.getMessage()); } + 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, canvas); } - /// TODO this whole bit needs to be merged with the code in core-ext -- this is messy and duplicative - 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://")) { - showOpenURL(text); - } else if (text.startsWith("HTTP://") || text.startsWith("HTTPS://")) { - showOpenURL(decapitalizeProtocol(text)); - } else if (text.startsWith("URL:")) { - showOpenURL(decapitalizeProtocol(text.substring(4))); - } else if (text.startsWith("MEBKM:")) { - int urlIndex = text.indexOf("URL:", 6); - if (urlIndex >= 6) { - String url = text.substring( urlIndex + 4); - int semicolon = url.indexOf((int) ';'); - if (semicolon >= 0) { - url = url.substring(0, semicolon); - } - showOpenURL(decapitalizeProtocol(url)); - } else { - showAlert("Barcode detected", text); - } - } else if (maybeURLWithoutScheme(text)) { - showOpenURL("http://" + 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 String decapitalizeProtocol(String url) { - int protocolEnd = url.indexOf("://"); - if (protocolEnd >= 0) { - return url.substring(0, protocolEnd).toLowerCase() + url.substring(protocolEnd); - } else { - return url; - } - } - - /** - * Crudely guesses that a string may represent a URL if it has a '.' and no spaces. - */ - private static boolean maybeURLWithoutScheme(String text) { - return text.indexOf((int) '.') >= 0 && text.indexOf((int) ' ') < 0; - } - }