Permalink
Browse files

Merge branch 'master' of github.com:phonegap/phonegap-plugins

  • Loading branch information...
Jesse
Jesse committed Feb 23, 2011
2 parents 500866c + d3b4a0a commit 6068c7af3414059e25fac63f0624a210cf3ea350
View
@@ -11,34 +11,31 @@
import org.json.JSONArray;
import org.json.JSONException;
-import com.phonegap.DroidGap;
-import com.phonegap.api.PhonegapActivity;
-import com.phonegap.api.Plugin;
-import com.phonegap.api.PluginResult;
-
import android.app.Activity;
import android.app.AlertDialog;
+import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
-
-import android.content.ActivityNotFoundException;
-
import android.net.Uri;
+import com.phonegap.api.PhonegapActivity;
+import com.phonegap.api.Plugin;
+import com.phonegap.api.PluginResult;
+
/**
* This calls out to the ZXing barcode reader and returns the result.
*/
public class BarcodeScanner extends Plugin {
public static final int REQUEST_CODE = 0x0ba7c0de;
-
+
public static final String defaultInstallTitle = "Install Barcode Scanner?";
public static final String defaultInstallMessage = "This requires the free Barcode Scanner app. Would you like to install it now?";
public static final String defaultYesString = "Yes";
public static final String defaultNoString = "No";
-
+
public String callback;
-
+
/**
* Constructor.
*/
@@ -47,22 +44,59 @@ public BarcodeScanner() {
/**
* Executes the request and returns PluginResult.
- *
+ *
* @param action The action to execute.
* @param args JSONArray of arguments for the plugin.
* @param callbackId The callback id used when calling back into JavaScript.
* @return A PluginResult object with a status and message.
*/
public PluginResult execute(String action, JSONArray args, String callbackId) {
this.callback = callbackId;
-
+
try {
- if (action.equals("scan")) {
+ if (action.equals("encode")) {
+ String type = null;
+ if(args.length() > 0) {
+ type = args.getString(0);
+ }
+
+ String data = null;
+ if(args.length() > 1) {
+ data = args.getString(1);
+ }
+
+ String installTitle = defaultInstallTitle;
+ if(args.length() > 2) {
+ installTitle = args.getString(2);
+ }
+
+ String installMessage = defaultInstallMessage;
+ if(args.length() > 3) {
+ installMessage = args.getString(3);
+ }
+
+ String yesString = defaultYesString;
+ if(args.length() > 4) {
+ yesString = args.getString(4);
+ }
+
+ String noString = defaultNoString;
+ if(args.length() > 5) {
+ noString = args.getString(5);
+ }
+
+ // if data.TypeOf() == Bundle, then call
+ // encode(type, Bundle)
+ // else
+ // encode(type, String)
+ this.encode(type, data, installTitle, installMessage, yesString, noString);
+ }
+ else if (action.equals("scan")) {
String barcodeTypes = null;
if(args.length() > 0) {
barcodeTypes = args.getString(0);
}
-
+
String installTitle = defaultInstallTitle;
if(args.length() > 1) {
installTitle = args.getString(1);
@@ -94,11 +128,11 @@ public PluginResult execute(String action, JSONArray args, String callbackId) {
e.printStackTrace();
return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
}
- }
-
-
+ }
+
+
/**
- * Initiates a barcode scan. If the ZXing scanner isn't installed, the user
+ * Initiates a barcode scan. If the ZXing scanner isn't installed, the user
* will be prompted to install it.
* @param types The barcode types to accept
* @param installTitle The title for the dialog box that prompts the user to install the scanner
@@ -112,21 +146,21 @@ public void scan(String barcodeFormats, String installTitle, String installMessa
// A null format means we scan for any type
if (barcodeFormats != null) {
- // Tell the scanner what types we're after
- intentScan.putExtra("SCAN_FORMATS", barcodeFormats);
+ // Tell the scanner what types we're after
+ intentScan.putExtra("SCAN_FORMATS", barcodeFormats);
}
- try {
- this.ctx.startActivityForResult((Plugin) this, intentScan, REQUEST_CODE);
- } catch (ActivityNotFoundException e) {
+ try {
+ this.ctx.startActivityForResult((Plugin) this, intentScan, REQUEST_CODE);
+ } catch (ActivityNotFoundException e) {
showDownloadDialog(installTitle, installMessage, yesString, noString);
}
}
/**
- * Called when the barcode scanner exits
- *
- * @param requestCode The request code originally supplied to startActivityForResult(),
+ * Called when the barcode scanner exits
+ *
+ * @param requestCode The request code originally supplied to startActivityForResult(),
* allowing you to identify who this result came from.
* @param resultCode The integer result code returned by the child activity through its setResult().
* @param intent An Intent, which can return result data to the caller (various data can be attached to Intent "extras").
@@ -139,44 +173,66 @@ public void onActivityResult(int requestCode, int resultCode, Intent intent) {
} else {
this.error(new PluginResult(PluginResult.Status.ERROR), this.callback);
}
- }
+ }
}
-
- private void showDownloadDialog(final String title, final String message, final String yesString, final String noString) {
+
+ private void showDownloadDialog(final String title, final String message, final String yesString, final String noString) {
final PhonegapActivity context = this.ctx;
Runnable runnable = new Runnable() {
- public void run() {
-
- AlertDialog.Builder dialog = new AlertDialog.Builder(context);
- dialog.setTitle(title);
- dialog.setMessage(message);
- dialog.setPositiveButton(yesString, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dlg, int i) {
- dlg.dismiss();
- Intent intent = new Intent(Intent.ACTION_VIEW,
- Uri.parse("market://search?q=pname:com.google.zxing.client.android")
- );
- try {
- context.startActivity(intent);
- } catch (ActivityNotFoundException e) {
-// We don't have the market app installed, so download it directly.
- Intent in = new Intent(Intent.ACTION_VIEW);
- in.setData(Uri.parse("http://zxing.googlecode.com/files/BarcodeScanner3.5.apk"));
- context.startActivity(in);
-
- }
+ public void run() {
+
+ AlertDialog.Builder dialog = new AlertDialog.Builder(context);
+ dialog.setTitle(title);
+ dialog.setMessage(message);
+ dialog.setPositiveButton(yesString, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dlg, int i) {
+ dlg.dismiss();
+ Intent intent = new Intent(Intent.ACTION_VIEW,
+ Uri.parse("market://search?q=pname:com.google.zxing.client.android")
+ );
+ try {
+ context.startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ // We don't have the market app installed, so download it directly.
+ Intent in = new Intent(Intent.ACTION_VIEW);
+ in.setData(Uri.parse("http://zxing.googlecode.com/files/BarcodeScanner3.53.apk"));
+ context.startActivity(in);
}
- });
- dialog.setNegativeButton(noString, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dlg, int i) {
- dlg.dismiss();
- }
- });
- dialog.create();
- dialog.show();
- }
- };
- context.runOnUiThread(runnable);
+
+ }
+ });
+ dialog.setNegativeButton(noString, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dlg, int i) {
+ dlg.dismiss();
+ }
+ });
+ dialog.create();
+ dialog.show();
+ }
+ };
+ context.runOnUiThread(runnable);
+ }
+
+ /**
+ * Initiates a barcode encode. If the ZXing scanner isn't installed, the user
+ * will be prompted to install it.
+ * @param type The barcode type to encode
+ * @param data The data to encode in the bar code
+ * @param installTitle The title for the dialog box that prompts the user to install the scanner
+ * @param installMessage The message prompting the user to install the barcode scanner
+ * @param yesString The string "Yes" or localised equivalent
+ * @param noString The string "No" or localised version
+ */
+ public void encode(String type, String data, String installTitle, String installMessage, String yesString, String noString) {
+ Intent intentEncode = new Intent("com.google.zxing.client.android.ENCODE");
+ intentEncode.putExtra("ENCODE_TYPE", type);
+ intentEncode.putExtra("ENCODE_DATA", data);
+
+ try {
+ this.ctx.startActivity(intentEncode);
+ } catch (ActivityNotFoundException e) {
+ showDownloadDialog(installTitle, installMessage, yesString, noString);
}
+ }
}
@@ -7,7 +7,12 @@ If the user doesn't have the app install they will be promped to install it the
1. To install the plugin, move barcodescanner.js to your project's www folder and include a reference to it
in your html files.
-2. Create a folder called "beetight" within your project's src/com/ folder and move the java file into it.
+2. Create a folder called 'src/com/beetight/barcodescanner' within your project's src/com/ folder.
+3. And copy the java file into that new folder.
+
+`mkdir <your_project>/src/com/beetight/barcodescanner`
+
+`cp ./BarcodeScanner.java <your_project>/src/com/beetight/barcodescanner`
## Using the plugin ##
The plugin creates the object `window.plugins.barcodeScanner` with one method `scan(types, success, fail, options)`
@@ -50,6 +55,25 @@ A full example could be:
alert("Scanning failed: " + error);
}, {yesString: "Install"}
);
+
+## Encoding a Barcode ##
+Supported encoding types:
+
+* TEXT_TYPE
+* EMAIL_TYPE
+* PHONE_TYPE
+* SMS_TYPE
+
+
+A full example could be:
+
+ window.plugins.barcodeScanner.encode(BarcodeScanner.Encode.TEXT_TYPE, "http://www.nytimes.com", function(success) {
+ alert("encode success: " + success);
+ }, function(fail) {
+ alert("encoding failed: " + fail);
+ }, {yesString: "Install"}
+ );
+
## BUGS AND CONTRIBUTIONS ##
The latest bleeding-edge version is available [on GitHub](http://github.com/ascorbic/phonegap-plugins/tree/master/Android/)
View
@@ -28,6 +28,15 @@ BarcodeScanner.Type = {
ALL_CODE_TYPES: null
}
+BarcodeScanner.Encode = {
+ TEXT_TYPE: "TEXT_TYPE",
+ EMAIL_TYPE: "EMAIL_TYPE",
+ PHONE_TYPE: "PHONE_TYPE",
+ SMS_TYPE: "SMS_TYPE",
+ // CONTACT_TYPE: "CONTACT_TYPE", // TODO: not implemented, requires passing a Bundle class from Javascriopt to Java
+ // LOCATION_TYPE: "LOCATION_TYPE" // TODO: not implemented, requires passing a Bundle class from Javascriopt to Java
+ }
+
BarcodeScanner.prototype.scan = function(types, success, fail, options) {
/* These are the strings used in the dialog that appears if ZXing isn't installed */
@@ -61,6 +70,38 @@ BarcodeScanner.prototype.scan = function(types, success, fail, options) {
}, 'BarcodeScanner', 'scan', [types, installTitle, installMessage, yesString, noString]);
};
+BarcodeScanner.prototype.encode = function(type, data, success, fail, options) {
+
+ /* These are the strings used in the dialog that appears if ZXing isn't installed */
+ var installTitle = "Install Barcode Scanner?";
+ var installMessage = "This requires the free Barcode Scanner app. Would you like to install it now?";
+ var yesString = "Yes";
+ var noString = "No";
+ if (typeof options != 'undefined') {
+ if(typeof options.installTitle != 'undefined') {
+ installTitle = options.installTitle;
+ }
+
+ if(typeof options.installMessage != 'undefined') {
+ installMessage = options.installMessage;
+ }
+
+ if(typeof options.yesString != 'undefined') {
+ yesString = options.yesString;
+ }
+
+ if(typeof options.noString != 'undefined') {
+ noString = options.noString;
+ }
+ }
+
+ return PhoneGap.exec(function(args) {
+ success(args);
+ }, function(args) {
+ fail(args);
+ }, 'BarcodeScanner', 'encode', [type, data, installTitle, installMessage, yesString, noString]);
+};
+
PhoneGap.addConstructor(function() {
PhoneGap.addPlugin('barcodeScanner', new BarcodeScanner());
PluginManager.addService("BarcodeScanner","com.beetight.barcodescanner.BarcodeScanner");
Oops, something went wrong.

0 comments on commit 6068c7a

Please sign in to comment.