diff --git a/HelloWorld-debug.apk b/HelloWorld-debug.apk
new file mode 100644
index 00000000..ded22344
Binary files /dev/null and b/HelloWorld-debug.apk differ
diff --git a/src/com/phonegap/plugins/video/VideoPlayer.java b/src/com/phonegap/plugins/video/VideoPlayer.java
new file mode 100644
index 00000000..6c83f158
--- /dev/null
+++ b/src/com/phonegap/plugins/video/VideoPlayer.java
@@ -0,0 +1,132 @@
+/*
+ * PhoneGap is available under *either* the terms of the modified BSD license *or* the
+ * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
+ *
+ * Copyright (c) 2005-2010, Nitobi Software Inc.
+ * Copyright (c) 2011, IBM Corporation
+ */
+
+package com.phonegap.plugins.video;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+
+import org.apache.cordova.api.CallbackContext;
+import org.apache.cordova.api.CordovaPlugin;
+import org.apache.cordova.api.PluginResult;
+
+public class VideoPlayer extends CordovaPlugin {
+ private static final String YOU_TUBE = "youtube.com";
+ private static final String ASSETS = "file:///android_asset/";
+
+ @Override
+ public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
+ PluginResult.Status status = PluginResult.Status.OK;
+ String result = "";
+
+ try {
+ if (action.equals("playVideo")) {
+ playVideo(args.getString(0));
+ }
+ else {
+ status = PluginResult.Status.INVALID_ACTION;
+ }
+ callbackContext.sendPluginResult(new PluginResult(status, result));
+ } catch (JSONException e) {
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
+ } catch (IOException e) {
+ callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.IO_EXCEPTION));
+ }
+ return true;
+ }
+
+ private void playVideo(String url) throws IOException {
+ if (url.contains("bit.ly/") || url.contains("goo.gl/") || url.contains("tinyurl.com/") || url.contains("youtu.be/")) {
+ //support for google / bitly / tinyurl / youtube shortens
+ URLConnection con = new URL(url).openConnection();
+ con.connect();
+ InputStream is = con.getInputStream();
+ //new redirected url
+ url = con.getURL().toString();
+ is.close();
+ }
+
+ // Create URI
+ Uri uri = Uri.parse(url);
+
+ Intent intent = null;
+ // Check to see if someone is trying to play a YouTube page.
+ if (url.contains(YOU_TUBE)) {
+ // If we don't do it this way you don't have the option for youtube
+ uri = Uri.parse("vnd.youtube:" + uri.getQueryParameter("v"));
+ if (isYouTubeInstalled()) {
+ intent = new Intent(Intent.ACTION_VIEW, uri);
+ } else {
+ intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse("market://details?id=com.google.android.youtube"));
+ }
+ } else if(url.contains(ASSETS)) {
+ // get file path in assets folder
+ String filepath = url.replace(ASSETS, "");
+ // get actual filename from path as command to write to internal storage doesn't like folders
+ String filename = filepath.substring(filepath.lastIndexOf("/")+1, filepath.length());
+
+ // Don't copy the file if it already exists
+ File fp = new File(this.cordova.getActivity().getFilesDir() + "/" + filename);
+ if (!fp.exists()) {
+ this.copy(filepath, filename);
+ }
+
+ // change uri to be to the new file in internal storage
+ uri = Uri.parse("file://" + this.cordova.getActivity().getFilesDir() + "/" + filename);
+
+ // Display video player
+ intent = new Intent(Intent.ACTION_VIEW);
+ intent.setDataAndType(uri, "video/*");
+ } else {
+ // Display video player
+ intent = new Intent(Intent.ACTION_VIEW);
+ intent.setDataAndType(uri, "video/*");
+ }
+
+ this.cordova.getActivity().startActivity(intent);
+ }
+
+ private void copy(String fileFrom, String fileTo) throws IOException {
+ // get file to be copied from assets
+ InputStream in = this.cordova.getActivity().getAssets().open(fileFrom);
+ // get file where copied too, in internal storage.
+ // must be MODE_WORLD_READABLE or Android can't play it
+ FileOutputStream out = this.cordova.getActivity().openFileOutput(fileTo, Context.MODE_WORLD_READABLE);
+
+ // Transfer bytes from in to out
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) > 0)
+ out.write(buf, 0, len);
+ in.close();
+ out.close();
+ }
+
+ private boolean isYouTubeInstalled() {
+ PackageManager pm = this.cordova.getActivity().getPackageManager();
+ try {
+ pm.getPackageInfo("com.google.android.youtube", PackageManager.GET_ACTIVITIES);
+ return true;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+}
diff --git a/www/config.xml b/www/config.xml
index ba82dae8..e4592eb7 100644
--- a/www/config.xml
+++ b/www/config.xml
@@ -64,7 +64,7 @@
-
+
Connecting to Device
-