From 103e0384dd4dce538c6d5816b38ba4032dabddaf Mon Sep 17 00:00:00 2001 From: srowen Date: Mon, 26 Nov 2007 20:04:32 +0000 Subject: [PATCH] Now, can build "ZXingReaderBasic" which does not require JSR-234 git-svn-id: http://zxing.googlecode.com/svn/trunk@76 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- core/build.xml | 6 +- javame/ZXingReader.jad.template | 6 +- javame/build.xml | 74 +++++++++++++++--- .../j2me/AdvancedMultimediaManager.java | 45 +++++++++++ .../j2me/AdvancedMultimediaManager.java | 78 +++++++++++++++++++ .../{MANIFEST.MF => MANIFEST.MF.template} | 4 +- .../zxing/client/j2me/SnapshotThread.java | 18 +---- .../google/zxing/client/j2me/ZXingMIDlet.java | 24 +----- 8 files changed, 196 insertions(+), 59 deletions(-) create mode 100644 javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java create mode 100644 javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java rename javame/src/com/google/zxing/client/j2me/{MANIFEST.MF => MANIFEST.MF.template} (77%) diff --git a/core/build.xml b/core/build.xml index 61a1643d..c48cdfb5 100644 --- a/core/build.xml +++ b/core/build.xml @@ -5,9 +5,6 @@ - - - @@ -15,6 +12,9 @@ + + + - - - - @@ -34,8 +30,38 @@ + + + + + + + + + + + + + - + + + + @@ -62,24 +91,47 @@ - + + + + + + + - - - + + + + + + Builds the main reader .jar file + + + + + + + + Builds the basic reader .jar file + + + + + + - - + + diff --git a/javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java b/javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java new file mode 100644 index 00000000..2665caed --- /dev/null +++ b/javame/src-basic/com/google/zxing/client/j2me/AdvancedMultimediaManager.java @@ -0,0 +1,45 @@ +/* + * Copyright 2007 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.zxing.client.j2me; + +import javax.microedition.media.Controllable; +import javax.microedition.media.MediaException; + +/** + *

See this exact same class under the "src" source root for a full explanation. + * This is a "no-op" version of the class that gets built into the .jar file + * which is suitable for non-JSR-234 devices.

+ * + * @author Sean Owen (srowen@google.com) + */ +final class AdvancedMultimediaManager { + + private AdvancedMultimediaManager() { + // do nothing + } + + // These signatures must match those in the other class exactly + + static void setFocus(Controllable player) throws MediaException, InterruptedException { + // do nothing + } + + static void setZoom(Controllable player) { + // do nothing + } + +} \ No newline at end of file diff --git a/javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java b/javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java new file mode 100644 index 00000000..6bdb99c2 --- /dev/null +++ b/javame/src/com/google/zxing/client/j2me/AdvancedMultimediaManager.java @@ -0,0 +1,78 @@ +/* + * Copyright 2007 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.zxing.client.j2me; + +import javax.microedition.amms.control.camera.FocusControl; +import javax.microedition.amms.control.camera.ZoomControl; +import javax.microedition.media.Controllable; +import javax.microedition.media.MediaException; + +/** + *

This odd class encapsulates all access to functionality exposed by JSR-234, + * which provides access to things like focus and zoom. Not all phones support this though. + * Normally we might handle loading of code like this via reflection but this is + * not available to us in Java ME. So, we create two implementations of the same class -- + * this one, and another found under source root "src-basic". This one actually calls + * JSR-234 methods. The other does nothing. The build script creates two build products then + * one compiled with this class and one with other, to create both the JSR-234 version + * and the "basic" non-JSR-234 version.

+ * + * @author Sean Owen (srowen@google.com) + */ +final class AdvancedMultimediaManager { + + private static final int NO_ZOOM = 100; + private static final int MAX_ZOOM = 250; + + private AdvancedMultimediaManager() { + // do nothing + } + + static void setFocus(Controllable player) throws MediaException, InterruptedException { + FocusControl focusControl = (FocusControl) + player.getControl("javax.microedition.amms.control.camera.FocusControl"); + if (focusControl != null) { + if (focusControl.isMacroSupported() && !focusControl.getMacro()) { + focusControl.setMacro(true); + } + if (focusControl.isAutoFocusSupported()) { + focusControl.setFocus(FocusControl.AUTO); + Thread.sleep(1000L); // let it focus... + focusControl.setFocus(FocusControl.AUTO_LOCK); + } + } + } + + static void setZoom(Controllable player) { + ZoomControl zoomControl = (ZoomControl) player.getControl("javax.microedition.amms.control.camera.ZoomControl"); + if (zoomControl != null) { + // We zoom in if possible to encourage the viewer to take a snapshot from a greater distance. + // This is a crude way of dealing with the fact that many phone cameras will not focus at a + // very close range. + int maxZoom = zoomControl.getMaxOpticalZoom(); + if (maxZoom > NO_ZOOM) { + zoomControl.setOpticalZoom(maxZoom > MAX_ZOOM ? MAX_ZOOM : maxZoom); + } else { + int maxDigitalZoom = zoomControl.getMaxDigitalZoom(); + if (maxDigitalZoom > NO_ZOOM) { + zoomControl.setDigitalZoom(maxDigitalZoom > MAX_ZOOM ? MAX_ZOOM : maxDigitalZoom); + } + } + } + } + +} \ No newline at end of file diff --git a/javame/src/com/google/zxing/client/j2me/MANIFEST.MF b/javame/src/com/google/zxing/client/j2me/MANIFEST.MF.template similarity index 77% rename from javame/src/com/google/zxing/client/j2me/MANIFEST.MF rename to javame/src/com/google/zxing/client/j2me/MANIFEST.MF.template index e720617c..411a8630 100644 --- a/javame/src/com/google/zxing/client/j2me/MANIFEST.MF +++ b/javame/src/com/google/zxing/client/j2me/MANIFEST.MF.template @@ -1,9 +1,9 @@ Manifest-Version: 1.0 -MIDlet-1: ZXingReader, , com.google.zxing.client.j2me.ZXingMidlet +MIDlet-1: @APP_NAME@, , com.google.zxing.client.j2me.ZXingMidlet MIDlet-Description: Bar Code Reader MIDlet-Icon: /res/qr2.png MIDlet-Info-URL: code.google.com/p/zxing -MIDlet-Name: ZXingReader +MIDlet-Name: @APP_NAME@ MIDlet-Permissions: javax.microedition.media.control.VideoControl.getSnapshot MIDlet-Vendor: ZXing Project MIDlet-Version: 0.1.1 diff --git a/javame/src/com/google/zxing/client/j2me/SnapshotThread.java b/javame/src/com/google/zxing/client/j2me/SnapshotThread.java index 310c0f9f..57668b6c 100644 --- a/javame/src/com/google/zxing/client/j2me/SnapshotThread.java +++ b/javame/src/com/google/zxing/client/j2me/SnapshotThread.java @@ -21,7 +21,6 @@ import com.google.zxing.MultiFormatReader; import com.google.zxing.Reader; import com.google.zxing.Result; -import javax.microedition.amms.control.camera.FocusControl; import javax.microedition.lcdui.Image; import javax.microedition.media.MediaException; import javax.microedition.media.Player; @@ -49,7 +48,7 @@ final class SnapshotThread extends Thread { public void run() { Player player = zXingMIDlet.getPlayer(); try { - setFocus(player); + AdvancedMultimediaManager.setFocus(player); player.stop(); byte[] snapshot = zXingMIDlet.getVideoControl().getSnapshot(null); Image capturedImage = Image.createImage(snapshot, 0, snapshot.length); @@ -71,19 +70,4 @@ final class SnapshotThread extends Thread { } - private static void setFocus(Player player) throws MediaException, InterruptedException { - FocusControl focusControl = (FocusControl) - player.getControl("javax.microedition.amms.control.camera.FocusControl"); - if (focusControl != null) { - if (focusControl.isMacroSupported() && !focusControl.getMacro()) { - focusControl.setMacro(true); - } - if (focusControl.isAutoFocusSupported()) { - focusControl.setFocus(FocusControl.AUTO); - Thread.sleep(1500L); // let it focus... - focusControl.setFocus(FocusControl.AUTO_LOCK); - } - } - } - } diff --git a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java index fa10cb5d..ba110105 100644 --- a/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java +++ b/javame/src/com/google/zxing/client/j2me/ZXingMIDlet.java @@ -30,7 +30,6 @@ import javax.microedition.media.Player; import javax.microedition.media.control.VideoControl; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; -import javax.microedition.amms.control.camera.ZoomControl; import java.io.IOException; /** @@ -40,9 +39,6 @@ import java.io.IOException; */ public final class ZXingMIDlet extends MIDlet { - private static final int NO_ZOOM = 100; - private static final int MAX_ZOOM = 250; - private Canvas canvas; private Player player; private VideoControl videoControl; @@ -59,7 +55,7 @@ public final class ZXingMIDlet extends MIDlet { try { player = Manager.createPlayer("capture://video"); player.realize(); - setZoom(player); + AdvancedMultimediaManager.setZoom(player); videoControl = (VideoControl) player.getControl("VideoControl"); canvas = new VideoCanvas(this); canvas.setFullScreenMode(true); @@ -76,24 +72,6 @@ public final class ZXingMIDlet extends MIDlet { } } - private static void setZoom(Player player) { - ZoomControl zoomControl = (ZoomControl) player.getControl("javax.microedition.amms.control.camera.ZoomControl"); - if (zoomControl != null) { - // We zoom in if possible to encourage the viewer to take a snapshot from a greater distance. - // This is a crude way of dealing with the fact that many phone cameras will not focus at a - // very close range. - int maxZoom = zoomControl.getMaxOpticalZoom(); - if (maxZoom > NO_ZOOM) { - zoomControl.setOpticalZoom(maxZoom > MAX_ZOOM ? MAX_ZOOM : maxZoom); - } else { - int maxDigitalZoom = zoomControl.getMaxDigitalZoom(); - if (maxDigitalZoom > NO_ZOOM) { - zoomControl.setDigitalZoom(maxDigitalZoom > MAX_ZOOM ? MAX_ZOOM : maxDigitalZoom); - } - } - } - } - protected void pauseApp() { if (player != null) { try { -- 2.20.1