diff --git a/framework/default.properties b/framework/default.properties
index d4b59de7..694331ea 100644
--- a/framework/default.properties
+++ b/framework/default.properties
@@ -7,8 +7,8 @@
# "build.properties", and override values to adapt the script to your
# project structure.
-apk-configurations=
-# Project target.
-target=android-5
# Indicates whether an apk should be generated for each density.
split.density=false
+# Project target.
+target=android-7
+apk-configurations=
diff --git a/framework/src/com/phonegap/PhoneGap.java b/framework/src/com/phonegap/PhoneGap.java
index f03a9dc2..262380b4 100644
--- a/framework/src/com/phonegap/PhoneGap.java
+++ b/framework/src/com/phonegap/PhoneGap.java
@@ -42,7 +42,7 @@ public class PhoneGap{
* UUID, version and availability
*/
public boolean droid = true;
- public static String version = "0.8.0";
+ public static String version = "0.9.99999";
public static String platform = "Android";
public static String uuid;
private Context mCtx;
diff --git a/framework/src/com/phonegap/WebViewReflect.java b/framework/src/com/phonegap/WebViewReflect.java
index 2d747234..ed611a2b 100644
--- a/framework/src/com/phonegap/WebViewReflect.java
+++ b/framework/src/com/phonegap/WebViewReflect.java
@@ -70,11 +70,9 @@ public class WebViewReflect {
// TODO Auto-generated catch block
e.printStackTrace();
}
- //setting.setDatabaseEnabled(enable);
- //setting.setDatabasePath(path);
} else {
/* feature not supported, do something else */
- System.out.println("dump not supported");
+ System.out.println("Database not supported");
}
}
@@ -95,11 +93,9 @@ public class WebViewReflect {
// TODO Auto-generated catch block
e.printStackTrace();
}
- //setting.setDatabaseEnabled(enable);
- //setting.setDatabasePath(path);
} else {
/* feature not supported, do something else */
- System.out.println("dump not supported");
+ System.out.println("DOM Storage not supported");
}
}
diff --git a/tutorial/accelerometer.html b/tutorial/accelerometer.html
deleted file mode 100755
index 84441968..00000000
--- a/tutorial/accelerometer.html
+++ /dev/null
@@ -1,232 +0,0 @@
-
-
-
-
-
- PhoneGap
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Start
-
-
-
-
-
-
-
-
-
diff --git a/tutorial/beep.wav b/tutorial/beep.wav
deleted file mode 100755
index 05f5997f..00000000
Binary files a/tutorial/beep.wav and /dev/null differ
diff --git a/tutorial/contacts.html b/tutorial/contacts.html
deleted file mode 100644
index 09cc137c..00000000
--- a/tutorial/contacts.html
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
-
-
- PhoneGap
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Pick a Contact
-
-
-
-
-
-
-
-
Get first 10 contacts
-
-
-
-
-
-
-
-
diff --git a/tutorial/geolocation.html b/tutorial/geolocation.html
deleted file mode 100755
index 4e6c5d15..00000000
--- a/tutorial/geolocation.html
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
-
-
- PhoneGap
-
-
-
-
-
-
-
-
-
-
-
Getting your current location ...
-
-
Find who are tweeting within 1 mile radius of where you are!
-
-
-
-
-
-
-
-
diff --git a/tutorial/images/FoggyRocks.png b/tutorial/images/FoggyRocks.png
deleted file mode 100644
index 25975562..00000000
Binary files a/tutorial/images/FoggyRocks.png and /dev/null differ
diff --git a/tutorial/images/TutBG.png b/tutorial/images/TutBG.png
deleted file mode 100644
index db3a2069..00000000
Binary files a/tutorial/images/TutBG.png and /dev/null differ
diff --git a/tutorial/images/back_button.png b/tutorial/images/back_button.png
deleted file mode 100644
index ca0a70a6..00000000
Binary files a/tutorial/images/back_button.png and /dev/null differ
diff --git a/tutorial/images/back_button_clicked.png b/tutorial/images/back_button_clicked.png
deleted file mode 100644
index ca68ce2e..00000000
Binary files a/tutorial/images/back_button_clicked.png and /dev/null differ
diff --git a/tutorial/images/backgroundStripes.png b/tutorial/images/backgroundStripes.png
deleted file mode 100755
index cab0e983..00000000
Binary files a/tutorial/images/backgroundStripes.png and /dev/null differ
diff --git a/tutorial/images/bar_large.png b/tutorial/images/bar_large.png
deleted file mode 100644
index 354c722f..00000000
Binary files a/tutorial/images/bar_large.png and /dev/null differ
diff --git a/tutorial/images/bar_media.png b/tutorial/images/bar_media.png
deleted file mode 100644
index 5d7f9c34..00000000
Binary files a/tutorial/images/bar_media.png and /dev/null differ
diff --git a/tutorial/images/header.png b/tutorial/images/header.png
deleted file mode 100644
index f78a44be..00000000
Binary files a/tutorial/images/header.png and /dev/null differ
diff --git a/tutorial/images/header2.png b/tutorial/images/header2.png
deleted file mode 100644
index 8ad80e5f..00000000
Binary files a/tutorial/images/header2.png and /dev/null differ
diff --git a/tutorial/images/header3.png b/tutorial/images/header3.png
deleted file mode 100644
index 07d45c8f..00000000
Binary files a/tutorial/images/header3.png and /dev/null differ
diff --git a/tutorial/images/list_arrow.png b/tutorial/images/list_arrow.png
deleted file mode 100644
index 9f68c719..00000000
Binary files a/tutorial/images/list_arrow.png and /dev/null differ
diff --git a/tutorial/images/list_item_selected_bg.png b/tutorial/images/list_item_selected_bg.png
deleted file mode 100644
index 6bb0ad05..00000000
Binary files a/tutorial/images/list_item_selected_bg.png and /dev/null differ
diff --git a/tutorial/images/on_off_bg.png b/tutorial/images/on_off_bg.png
deleted file mode 100644
index 36b2eac9..00000000
Binary files a/tutorial/images/on_off_bg.png and /dev/null differ
diff --git a/tutorial/images/selection.png b/tutorial/images/selection.png
deleted file mode 100644
index 537e3f0b..00000000
Binary files a/tutorial/images/selection.png and /dev/null differ
diff --git a/tutorial/index.html b/tutorial/index.html
deleted file mode 100755
index 7db14d67..00000000
--- a/tutorial/index.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
- PhoneGap
-
-
-
-
-
-
-
- PhoneGap Tutorial
-
-
-
-
-
-
-
Accelerometer
-
-
-
-
-
Notification
-
-
-
-
-
-
Contacts
-
-
-
-
-
-
GeoLocation
-
-
-
-
- Form Inputs
-
-
-
-
-
-
-
Media
-
-
-
-
-
-
diff --git a/tutorial/inputs.html b/tutorial/inputs.html
deleted file mode 100755
index 67a80eef..00000000
--- a/tutorial/inputs.html
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
- PhoneGap
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tutorial/master.css b/tutorial/master.css
deleted file mode 100755
index dddb7cdb..00000000
--- a/tutorial/master.css
+++ /dev/null
@@ -1,304 +0,0 @@
-
-body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6
-{
- margin: 0pt;
- padding: 0pt;
-}
-
-
-
-body
-{
- background:#000 url(images/TutBG.png) repeat-y fixed 0 0;
- color:#666;
- font-family:Helvetica,'Lucida Grande',sans-serif;
- line-height:1.5em;
- margin:0px;
- margin-bottom:20px;
-
-}
-
-#header{
- position: relative;
- left: 0px;
- top: 0px;
- height: 44px;
- font-size: 16pt;
- border-top-width: 0px;
- border-right-width: 1px;
- border-bottom-width: 0px;
- border-left-width: 1px;
- width: auto;
- margin-right: 0px;
- margin-left: 0px;
- background: url( header.png );
-}
-
-.header_title{
- text-align: center;
- position: relative;
- font-weight: bold;
- color: rgb(255, 255, 255);
- text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0px;
-}
-
-.view{
- background: url( images/backgroundStripes.png );
- background-repeat: repeat;
- min-height: 406px;
-}
-
-.topBar
-{
- color:#eee;
- font-size:1.2em;
- text-align:center;
- margin:0;
- margin-top:0px;
- padding:0;
- background-image: url( 'images/header.png' );
- background-repeat: repeat-x;
- height:44px;
- text-height:44px;
-}
-
-
-.pageTitle
-{
- text-align: center;
- color:#FFF;
- line-height:44px;
-}
-
-.back_button
-{
- font-weight: bold;
- font-size: 12px;
- color: rgb(255, 255, 255);
- text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0px;
- text-align: center;
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- height: 22px;
- padding-top: 4px;
- padding-bottom: 4px;
- width: 60px;
- line-height:22px;
- right: auto;
- bottom: auto;
- margin-top: 0px;
- position:absolute;
- left:4px;
- top:11px;
- -webkit-border-image: url(images/back_button.png) 0 5 0 16 / 1px 5px 1px 16px stretch stretch;
-}
-
-.list
-{
- margin-top: 5px;
-}
-
-.list li{
- width: 290px;
- height: 20px;
- background-color: #FFF;
- border-left: 1px solid #AAA;
- border-right: 1px solid #AAA;
- border-bottom: 1px solid #AAA;
-
- list-style-type: none;
- padding: 12px 5px 10px 5px;
- margin-left: -36px;
-}
-
-.list li.active{
- background-image: url( 'selection.png' );
- background-repeat: repeat-x;
- background-color: #194fdb !important;
-}
-
-.list li:first-of-type{
- border-top: 1px solid #AAA;
- -webkit-border-top-right-radius: 8px 8px;
- -webkit-border-top-left-radius: 8px 8px;
-}
-
-.list li:last-of-type{
- border-top: none;
- border-bottom: 1px solid #AAA;
-
- -webkit-border-bottom-left-radius: 8px 8px;
- -webkit-border-bottom-right-radius: 8px 8px;
-}
-
-.list li:only-of-type{
- border-top: 1px solid #AAA;
- border-bottom: 1px solid #AAA;
-
- -webkit-border-top-right-radius: 8px 8px;
- -webkit-border-top-left-radius: 8px 8px;
- -webkit-border-bottom-left-radius: 8px 8px;
- -webkit-border-bottom-right-radius: 8px 8px;
-
-}
-
-.list .list_label{
- font-weight: bold;
- color: #000;
- text-align: left;
- width: 145px;
- float: left;
-}
-
-.list .list_value{
- color: #6e82a8;
- text-align: right;
- width: 140px;
- float: right;
-}
-
-.list .selected_item{
- color: #4c566c;
-}
-
-.list_section_label{
- font-size: 16px;
- font-weight: bold;
- margin-left: 15px;
- text-shadow: rgba(255, 255, 255, 1) 0px 1px 0px;
- color: #4c566c;
-}
-
-.list_section_note{
- font-size: 14px;
- margin-left: 15px;
- text-shadow: rgba(255, 255, 255, 1) 0px 1px 0px;
- color: #4c566c;
- text-align: center;
- margin-bottom: 15px;
- margin-top: -5px;
-}
-
-
-
-.item
-{
- background:rgba(64,64,64,0.5);
- border: 1px solid rgba(128,128,128,0.5);
- -webkit-border-radius: 5px;
- border-radius: 5px;
- clear:both;
- margin:15px 6px 0;
- width:295px;
- padding:4px 0px 2px 10px;
-}
-
-a
-{
- color:#FFF;
- text-decoration:none;
-}
-
-
-#info{
- background:#ffa;
- border: 1px solid #ffd324;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- clear:both;
- margin:15px 6px 0;
- width:295px;
- padding:4px 0px 2px 10px;
-}
-
-#info h4{
- font-size:.95em;
- margin:0;
- padding:0;
-}
-
-#stage.theme{
- padding-top:3px;
-}
-
-/* Definition List */
-#Page1 > dl{
- padding-top:10px;
- clear:both;
- margin:0;
- list-style-type:none;
- padding-left:10px;
- overflow:auto;
-}
-
-#Page1 > dl > dt{
- font-weight:bold;
- float:left;
- margin-left:5px;
-}
-
-#Page1 > dl > dd{
- width:45px;
- float:left;
- color:#a87;
- font-weight:bold;
-}
-
-/* Content Styling */
-h1, h2, p{
- margin:1em 0 .5em 13px;
-}
-
-h1{
- color:#eee;
- font-size:1.6em;
- text-align:center;
- margin:0;
- margin-top:15px;
- padding:0;
-}
-
-h2{
- clear:both;
- margin:0;
- padding:3px;
- font-size:1em;
- text-align:center;
-}
-
-
-
-/* Stage Buttons */
-#stage.theme a.btn
-{
- border: 1px solid #555;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- text-align:center;
- display:block;
- float:left;
- background:#444;
- width:150px;
- color:#9ab;
- font-size:1.1em;
- text-decoration:none;
- padding:1.2em 0;
- margin:3px 0px 3px 5px;
-}
-
-a.btn.large
-{
- width:64px;
- height:32px;
- padding:1.2em 0;
-}
-
-
-
-
-
-
-
-
-
diff --git a/tutorial/media.html b/tutorial/media.html
deleted file mode 100755
index b00cdd6e..00000000
--- a/tutorial/media.html
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
-
-
- PhoneGap
-
-
-
-
-
-
-
-
-
-
- percBass.wav
-
-
-
Play
-
-
-
-
-
-
-
-
diff --git a/tutorial/notification.html b/tutorial/notification.html
deleted file mode 100755
index 42afaef8..00000000
--- a/tutorial/notification.html
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
- PhoneGap
-
-
-
-
-
-
-
-
-
-
-
Show Custom Alert
-
-
-
-
-
Show Activity Indicator
-
-
-
-
-
-
Vibrate
-
-
-
-
-
-
Show Loading ( 2 Seconds )
-
-
-
-
-
-
Beep
-
-
-
-
-
diff --git a/tutorial/percBass.wav b/tutorial/percBass.wav
deleted file mode 100755
index e63dcc4a..00000000
Binary files a/tutorial/percBass.wav and /dev/null differ
diff --git a/tutorial/phonegap.js b/tutorial/phonegap.js
deleted file mode 100644
index d569266a..00000000
--- a/tutorial/phonegap.js
+++ /dev/null
@@ -1,1272 +0,0 @@
-if (typeof(DeviceInfo) != 'object')
- DeviceInfo = {};
-
-/**
- * This represents the PhoneGap API itself, and provides a global namespace for accessing
- * information about the state of PhoneGap.
- * @class
- */
-PhoneGap = {
- queue: {
- ready: true,
- commands: [],
- timer: null
- },
- _constructors: []
-};
-
-/**
- * Boolean flag indicating if the PhoneGap API is available and initialized.
- */ // TODO: Remove this, it is unused here ... -jm
-PhoneGap.available = DeviceInfo.uuid != undefined;
-
-/**
- * Add an initialization function to a queue that ensures it will run and initialize
- * application constructors only once PhoneGap has been initialized.
- * @param {Function} func The function callback you want run once PhoneGap is initialized
- */
-PhoneGap.addConstructor = function(func) {
- var state = document.readyState;
- if ( state == 'loaded' || state == 'complete' )
- {
- func();
- }
- else
- {
- PhoneGap._constructors.push(func);
- }
-};
-
-(function()
- {
- var timer = setInterval(function()
- {
-
- var state = document.readyState;
-
- if ( state == 'loaded' || state == 'complete' )
- {
- clearInterval(timer); // stop looking
- // run our constructors list
- while (PhoneGap._constructors.length > 0)
- {
- var constructor = PhoneGap._constructors.shift();
- try
- {
- constructor();
- }
- catch(e)
- {
- if (typeof(debug['log']) == 'function')
- {
- debug.log("Failed to run constructor: " + debug.processMessage(e));
- }
- else
- {
- alert("Failed to run constructor: " + e.message);
- }
- }
- }
- // all constructors run, now fire the deviceready event
- var e = document.createEvent('Events');
- e.initEvent('deviceready');
- document.dispatchEvent(e);
- }
- }, 5);
-})();
-
-
-/**
- * Execute a PhoneGap command in a queued fashion, to ensure commands do not
- * execute with any race conditions, and only run when PhoneGap is ready to
- * recieve them.
- * @param {String} command Command to be run in PhoneGap, e.g. "ClassName.method"
- * @param {String[]} [args] Zero or more arguments to pass to the method
- */
-PhoneGap.exec = function() {
- PhoneGap.queue.commands.push(arguments);
- if (PhoneGap.queue.timer == null)
- PhoneGap.queue.timer = setInterval(PhoneGap.run_command, 10);
-};
-
-/**
- * Internal function used to dispatch the request to PhoneGap. It processes the
- * command queue and executes the next command on the list. If one of the
- * arguments is a JavaScript object, it will be passed on the QueryString of the
- * url, which will be turned into a dictionary on the other end.
- * @private
- */
-PhoneGap.run_command = function() {
- if (!PhoneGap.available || !PhoneGap.queue.ready)
- return;
-
- PhoneGap.queue.ready = false;
-
- var args = PhoneGap.queue.commands.shift();
- if (PhoneGap.queue.commands.length == 0) {
- clearInterval(PhoneGap.queue.timer);
- PhoneGap.queue.timer = null;
- }
-
- var uri = [];
- var dict = null;
- for (var i = 1; i < args.length; i++) {
- var arg = args[i];
- if (arg == undefined || arg == null)
- arg = '';
- if (typeof(arg) == 'object')
- dict = arg;
- else
- uri.push(encodeURIComponent(arg));
- }
- var url = "gap://" + args[0] + "/" + uri.join("/");
- if (dict != null) {
- var query_args = [];
- for (var name in dict) {
- if (typeof(name) != 'string')
- continue;
- query_args.push(encodeURIComponent(name) + "=" + encodeURIComponent(dict[name]));
- }
- if (query_args.length > 0)
- url += "?" + query_args.join("&");
- }
- document.location = url;
-
-};
-function Acceleration(x, y, z)
-{
- this.x = x;
- this.y = y;
- this.z = z;
- this.timestamp = new Date().getTime();
-}
-
-// Need to define these for android
-_accel = {};
-_accel.x = 0;
-_accel.y = 0;
-_accel.z = 0;
-
-function gotAccel(x, y, z)
-{
- _accel.x = x;
- _accel.y = y;
- _accel.z = z;
-}
-
-/**
- * This class provides access to device accelerometer data.
- * @constructor
- */
-function Accelerometer() {
- /**
- * The last known acceleration.
- */
- this.lastAcceleration = null;
-}
-
-/**
- * Asynchronously aquires the current acceleration.
- * @param {Function} successCallback The function to call when the acceleration
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the acceleration data.
- * @param {AccelerationOptions} options The options for getting the accelerometer data
- * such as timeout.
- */
-Accelerometer.prototype.getCurrentAcceleration = function(successCallback, errorCallback, options) {
- // If the acceleration is available then call success
- // If the acceleration is not available then call error
-
- // Created for iPhone, Iphone passes back _accel obj litteral
- if (typeof successCallback == "function") {
- var accel = new Acceleration(_accel.x,_accel.y,_accel.z);
- Accelerometer.lastAcceleration = accel;
- successCallback(accel);
- }
-}
-
-/**
- * Asynchronously aquires the acceleration repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the acceleration
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the acceleration data.
- * @param {AccelerationOptions} options The options for getting the accelerometer data
- * such as timeout.
- */
-
-Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) {
- // TODO: add the interval id to a list so we can clear all watches
- var frequency = (options != undefined)? options.frequency : 10000;
-
- Accel.start(frequency);
- return setInterval(function() {
- navigator.accelerometer.getCurrentAcceleration(successCallback, errorCallback, options);
- }, frequency);
-}
-
-/**
- * Clears the specified accelerometer watch.
- * @param {String} watchId The ID of the watch returned from #watchAcceleration.
- */
-Accelerometer.prototype.clearWatch = function(watchId) {
- Accel.stop();
- clearInterval(watchId);
-}
-
-PhoneGap.addConstructor(function() {
- if (typeof navigator.accelerometer == "undefined") navigator.accelerometer = new Accelerometer();
-});
-/**
- * This class provides access to the device camera.
- * @constructor
- */
-function Camera() {
-
-}
-
-/**
- *
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options
- */
-Camera.prototype.getPicture = function(successCallback, errorCallback, options) {
-
- this.winCallback = successCallback;
- this.failCallback = errorCallback;
- if (options.quality)
- {
- GapCam.takePicture(options.quality);
- }
- else
- {
- GapCam.takePicture(80);
- }
-}
-
-Camera.prototype.win = function(picture)
-{
- this.winCallback(picture);
-}
-
-Camera.prototype.fail = function(err)
-{
- this.failCallback(err);
-}
-
-PhoneGap.addConstructor(function() {
- if (typeof navigator.camera == "undefined") navigator.camera = new Camera();
-});
-/**
- * This class provides access to device Compass data.
- * @constructor
- */
-function Compass() {
- /**
- * The last known Compass position.
- */
- this.lastHeading = null;
- this.lastError = null;
- this.callbacks = {
- onHeadingChanged: [],
- onError: []
- };
-};
-
-/**
- * Asynchronously aquires the current heading.
- * @param {Function} successCallback The function to call when the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {PositionOptions} options The options for getting the heading data
- * such as timeout.
- */
-Compass.prototype.getCurrentHeading = function(successCallback, errorCallback, options) {
- if (this.lastHeading == null) {
- this.start(options);
- }
- else
- if (typeof successCallback == "function") {
- successCallback(this.lastHeading);
- }
-};
-
-/**
- * Asynchronously aquires the heading repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the heading
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the heading data.
- * @param {HeadingOptions} options The options for getting the heading data
- * such as timeout and the frequency of the watch.
- */
-Compass.prototype.watchHeading= function(successCallback, errorCallback, options) {
- // Invoke the appropriate callback with a new Position object every time the implementation
- // determines that the position of the hosting device has changed.
-
- this.getCurrentHeading(successCallback, errorCallback, options);
- var frequency = 100;
- if (typeof(options) == 'object' && options.frequency)
- frequency = options.frequency;
-
- var self = this;
- return setInterval(function() {
- self.getCurrentHeading(successCallback, errorCallback, options);
- }, frequency);
-};
-
-
-/**
- * Clears the specified heading watch.
- * @param {String} watchId The ID of the watch returned from #watchHeading.
- */
-Compass.prototype.clearWatch = function(watchId) {
- clearInterval(watchId);
-};
-
-
-/**
- * Called by the geolocation framework when the current heading is found.
- * @param {HeadingOptions} position The current heading.
- */
-Compass.prototype.setHeading = function(heading) {
- this.lastHeading = heading;
- for (var i = 0; i < this.callbacks.onHeadingChanged.length; i++) {
- var f = this.callbacks.onHeadingChanged.shift();
- f(heading);
- }
-};
-
-/**
- * Called by the geolocation framework when an error occurs while looking up the current position.
- * @param {String} message The text of the error message.
- */
-Compass.prototype.setError = function(message) {
- this.lastError = message;
- for (var i = 0; i < this.callbacks.onError.length; i++) {
- var f = this.callbacks.onError.shift();
- f(message);
- }
-};
-
-PhoneGap.addConstructor(function() {
- if (typeof navigator.compass == "undefined") navigator.compass = new Compass();
-});
-var Contact = function(){
- this.name = new ContactName();
- this.emails = [];
- this.phones = [];
-}
-
-var ContactName = function()
-{
- this.formatted = "";
- this.familyName = "";
- this.givenName = "";
- this.additionalNames = [];
- this.prefixes = [];
- this.suffixes = [];
-}
-
-
-var ContactEmail = function()
-{
- this.types = [];
- this.address = "";
-}
-
-var ContactPhoneNumber = function()
-{
- this.types = [];
- this.number = "";
-}
-
-
-var Contacts = function()
-{
- this.records = [];
-}
-
-Contacts.prototype.find = function(obj, win, fail)
-{
- if(obj.name != null)
- {
- // Build up the search term that we'll use in SQL, based on the structure/contents of the contact object passed into find.
- var searchTerm = '';
- if (obj.name.givenName && obj.name.givenName.length > 0) {
- searchTerm = obj.name.givenName.split(' ').join('%');
- }
- if (obj.name.familyName && obj.name.familyName.length > 0) {
- searchTerm += obj.name.familyName.split(' ').join('%');
- }
- if (!obj.name.familyName && !obj.name.givenName && obj.name.formatted) {
- searchTerm = obj.name.formatted;
- }
- ContactHook.search(searchTerm, "", "");
- }
- this.win = win;
- this.fail = fail;
-}
-
-Contacts.prototype.droidFoundContact = function(name, npa, email)
-{
- var contact = new Contact();
- contact.name = new ContactName();
- contact.name.formatted = name;
- contact.name.givenName = name;
- var mail = new ContactEmail();
- mail.types.push("home");
- mail.address = email;
- contact.emails.push(mail);
- phone = new ContactPhoneNumber();
- phone.types.push("home");
- phone.number = npa;
- contact.phones.push(phone);
- this.records.push(contact);
-}
-
-Contacts.prototype.droidDone = function()
-{
- this.win(this.records);
-}
-
-PhoneGap.addConstructor(function() {
- if(typeof navigator.contacts == "undefined") navigator.contacts = new Contacts();
-});
-var Crypto = function()
-{
-}
-
-Crypto.prototype.encrypt = function(seed, string, callback)
-{
- GapCrypto.encrypt(seed, string);
- this.encryptWin = callback;
-}
-
-Crypto.prototype.decrypt = function(seed, string, callback)
-{
- GapCrypto.decrypt(seed, string);
- this.decryptWin = callback;
-}
-
-Crypto.prototype.gotCryptedString = function(string)
-{
- this.encryptWin(string);
-}
-
-Crypto.prototype.getPlainString = function(string)
-{
- this.decryptWin(string);
-}
-
-PhoneGap.addConstructor(function() {
- if (typeof navigator.Crypto == "undefined")
- {
- navigator.Crypto = new Crypto();
- }
-});
-
-/**
- * this represents the mobile device, and provides properties for inspecting the model, version, UUID of the
- * phone, etc.
- * @constructor
- */
-function Device() {
- this.available = PhoneGap.available;
- this.platform = null;
- this.version = null;
- this.name = null;
- this.gap = null;
- this.uuid = null;
- try {
- if (window.DroidGap) {
- this.available = true;
- this.uuid = window.DroidGap.getUuid();
- this.version = window.DroidGap.getOSVersion();
- this.gapVersion = window.DroidGap.getVersion();
- this.platform = window.DroidGap.getPlatform();
- this.name = window.DroidGap.getProductName();
- }
- } catch(e) {
- this.available = false;
- }
-}
-
-PhoneGap.addConstructor(function() {
- navigator.device = window.device = new Device();
-});
-
-
-
-PhoneGap.addConstructor(function() { if (typeof navigator.fileMgr == "undefined") navigator.fileMgr = new FileMgr();});
-
-
-/**
- * This class provides iPhone read and write access to the mobile device file system.
- * Based loosely on http://www.w3.org/TR/2009/WD-FileAPI-20091117/#dfn-empty
- */
-function FileMgr()
-{
- this.fileWriters = {}; // empty maps
- this.fileReaders = {};
-
- this.docsFolderPath = "../../Documents";
- this.tempFolderPath = "../../tmp";
- this.freeDiskSpace = -1;
- this.getFileBasePaths();
- this.getFreeDiskSpace();
-}
-
-// private, called from Native Code
-FileMgr.prototype._setPaths = function(docs,temp)
-{
- this.docsFolderPath = docs;
- this.tempFolderPath = temp;
-}
-
-// private, called from Native Code
-FileMgr.prototype._setFreeDiskSpace = function(val)
-{
- this.freeDiskSpace = val;
-}
-
-
-// FileWriters add/remove
-// called internally by writers
-FileMgr.prototype.addFileWriter = function(filePath,fileWriter)
-{
- this.fileWriters[filePath] = fileWriter;
-}
-
-FileMgr.prototype.removeFileWriter = function(filePath)
-{
- this.fileWriters[filePath] = null;
-}
-
-// File readers add/remove
-// called internally by readers
-FileMgr.prototype.addFileReader = function(filePath,fileReader)
-{
- this.fileReaders[filePath] = fileReader;
-}
-
-FileMgr.prototype.removeFileReader = function(filePath)
-{
- this.fileReaders[filePath] = null;
-}
-
-/*******************************************
- *
- * private reader callback delegation
- * called from native code
- */
-FileMgr.prototype.reader_onloadstart = function(filePath,result)
-{
- this.fileReaders[filePath].onloadstart(result);
-}
-
-FileMgr.prototype.reader_onprogress = function(filePath,result)
-{
- this.fileReaders[filePath].onprogress(result);
-}
-
-FileMgr.prototype.reader_onload = function(filePath,result)
-{
- this.fileReaders[filePath].result = unescape(result);
- this.fileReaders[filePath].onload(this.fileReaders[filePath].result);
-}
-
-FileMgr.prototype.reader_onerror = function(filePath,err)
-{
- this.fileReaders[filePath].result = err;
- this.fileReaders[filePath].onerror(err);
-}
-
-FileMgr.prototype.reader_onloadend = function(filePath,result)
-{
- this.fileReaders[filePath].onloadend(result);
-}
-
-/*******************************************
- *
- * private writer callback delegation
- * called from native code
-*/
-FileMgr.prototype.writer_onerror = function(filePath,err)
-{
- this.fileWriters[filePath].onerror(err);
-}
-
-FileMgr.prototype.writer_oncomplete = function(filePath,result)
-{
- this.fileWriters[filePath].oncomplete(result); // result contains bytes written
-}
-
-
-FileMgr.prototype.getFileBasePaths = function()
-{
- //PhoneGap.exec("File.getFileBasePaths");
-}
-
-FileMgr.prototype.testFileExists = function(fileName, successCallback, errorCallback)
-{
- var test = FileUtil.testFileExists(fileName);
- test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.testDirectoryExists = function(dirName, successCallback, errorCallback)
-{
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
- var test = FileUtil.testDirectoryExists(dirName);
- test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.createDirectory = function(dirName, successCallback, errorCallback)
-{
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
- var test = FileUtils.createDirectory(dirName);
- test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.deleteDirectory = function(dirName, successCallback, errorCallback)
-{
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
- var test = FileUtils.deleteDirectory(dirName);
- test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.deleteFile = function(fileName, successCallback, errorCallback)
-{
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
- FileUtils.deleteFile(fileName);
- test ? successCallback() : errorCallback();
-}
-
-FileMgr.prototype.getFreeDiskSpace = function(successCallback, errorCallback)
-{
- if(this.freeDiskSpace > 0)
- {
- return this.freeDiskSpace;
- }
- else
- {
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
- this.freeDiskSpace = FileUtils.getFreeDiskSpace();
- (this.freeDiskSpace > 0) ? successCallback() : errorCallback();
- }
-}
-
-
-// File Reader
-
-
-function FileReader()
-{
- this.fileName = "";
- this.result = null;
- this.onloadstart = null;
- this.onprogress = null;
- this.onload = null;
- this.onerror = null;
- this.onloadend = null;
-}
-
-
-FileReader.prototype.abort = function()
-{
- // Not Implemented
-}
-
-FileReader.prototype.readAsText = function(file)
-{
- if(this.fileName && this.fileName.length > 0)
- {
- navigator.fileMgr.removeFileReader(this.fileName,this);
- }
- this.fileName = file;
- navigator.fileMgr.addFileReader(this.fileName,this);
- //alert("Calling File.read : " + this.fileName);
- //window.location = "gap://File.readFile/"+ file;
- this.onerror = errorCallback;
- this.oncomplete = successCallback;
-
- return FileUtil.read(fileName);
-}
-
-FileReader.prototype.hasRead(data)
-{
-
-}
-
-// File Writer
-
-function FileWriter()
-{
- this.fileName = "";
- this.result = null;
- this.readyState = 0; // EMPTY
- this.result = null;
- this.onerror = null;
- this.oncomplete = null;
-}
-
-FileWriter.prototype.writeAsText = function(file,text,bAppend)
-{
- if(this.fileName && this.fileName.length > 0)
- {
- navigator.fileMgr.removeFileWriter(this.fileName,this);
- }
- this.fileName = file;
- if(bAppend != true)
- {
- bAppend = false; // for null values
- }
- navigator.fileMgr.addFileWriter(file,this);
- this.readyState = 0; // EMPTY
- var call = FileUtil.write(file, text, bAppend);
- this.result = null;
-}
-
-
-
-
-
-/**
- * This class provides access to device GPS data.
- * @constructor
- */
-function Geolocation() {
- /**
- * The last known GPS position.
- */
- this.lastPosition = null;
- this.lastError = null;
- this.callbacks = {
- onLocationChanged: [],
- onError: []
- };
-};
-
-Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options)
-{
- var position = Geo.getCurrentLocation();
- this.global_success = successCallback;
- this.fail = errorCallback;
-}
-
-/**
- * Asynchronously aquires the position repeatedly at a given interval.
- * @param {Function} successCallback The function to call each time the position
- * data is available
- * @param {Function} errorCallback The function to call when there is an error
- * getting the position data.
- * @param {PositionOptions} options The options for getting the position data
- * such as timeout and the frequency of the watch.
- */
-Geolocation.prototype.watchPosition = function(successCallback, errorCallback, options) {
- // Invoke the appropriate callback with a new Position object every time the implementation
- // determines that the position of the hosting device has changed.
-
- this.getCurrentPosition(successCallback, errorCallback, options);
- var frequency = 10000;
- if (typeof(options) == 'object' && options.frequency)
- frequency = options.frequency;
-
- var that = this;
- return setInterval(function() {
- that.getCurrentPosition(successCallback, errorCallback, options);
- }, frequency);
-};
-
-
-/**
- * Clears the specified position watch.
- * @param {String} watchId The ID of the watch returned from #watchPosition.
- */
-Geolocation.prototype.clearWatch = function(watchId) {
- clearInterval(watchId);
-};
-
-/**
- * Called by the geolocation framework when the current location is found.
- * @param {PositionOptions} position The current position.
- */
-Geolocation.prototype.setLocation = function(position) {
- this.lastPosition = position;
- for (var i = 0; i < this.callbacks.onLocationChanged.length; i++) {
- var f = this.callbacks.onLocationChanged.shift();
- f(position);
- }
-};
-
-/**
- * Called by the geolocation framework when an error occurs while looking up the current position.
- * @param {String} message The text of the error message.
- */
-Geolocation.prototype.setError = function(message) {
- this.lastError = message;
- for (var i = 0; i < this.callbacks.onError.length; i++) {
- var f = this.callbacks.onError.shift();
- f(message);
- }
-};
-
-// Run the global callback
-Geolocation.prototype.gotCurrentPosition = function(lat, lng, alt, altacc, head, vel, stamp)
-{
- if (lat == "undefined" || lng == "undefined")
- {
- this.fail();
- }
- else
- {
- coords = new Coordinates(lat, lng, alt, altacc, head, vel);
- loc = new Position(coords, stamp);
- this.lastPosition = loc;
- this.global_success(loc);
- }
-}
-
-/*
-* This turns on the GeoLocator class, which has two listeners.
-* The listeners have their own timeouts, and run independently of this process
-* In this case, we return the key to the watch hash
-*/
-
-Geolocation.prototype.watchPosition = function(successCallback, errorCallback, options)
-{
- var frequency = (options != undefined)? options.frequency : 10000;
-
- if (!this.listeners)
- {
- this.listeners = [];
- }
-
- var key = this.listeners.push( {"success" : successCallback, "fail" : failCallback }) - 1;
-
- // TO-DO: Get the names of the method and pass them as strings to the Java.
- return Geolocation.start(frequency, key);
-}
-
-/*
- * Retrieve and stop this listener from listening to the GPS
- *
- */
-Geolocation.prototype.success = function(key, lat, lng, alt, altacc, head, vel, stamp)
-{
- var coords = new Coordinates(lat, lng, alt, altacc, head, vel);
- var loc = new Position(coords, stamp);
- this.listeners[key].success(loc);
-}
-
-Geolocation.prototype.fail = function(key)
-{
- this.listeners[key].fail();
-}
-
-Geolocation.prototype.clearWatch = function(watchId)
-{
- Geo.stop(watchId);
-}
-// Taken from Jesse's geo fix (similar problem) in PhoneGap iPhone. Go figure, same browser!
-function __proxyObj(origObj, proxyObj, funkList) {
- for (var v in funkList) {
- origObj[funkList[v]] = proxyObj[funkList[v]];
- }
-}
-PhoneGap.addConstructor(function() {
- navigator._geo = new Geolocation();
- __proxyObj(navigator.geolocation, navigator._geo,
- ["setLocation", "getCurrentPosition", "watchPosition",
- "clearWatch", "setError", "start", "stop", "gotCurrentPosition"]
- );
-});function KeyEvent()
-{
-}
-
-KeyEvent.prototype.menuTrigger = function()
-{
- var e = document.createEvent('Events');
- e.initEvent('menuKeyDown');
- document.dispatchEvent(e);
-}
-
-KeyEvent.prototype.searchTrigger= function()
-{
- var e = document.createEvent('Events');
- e.initEvent('searchKeyDown');
- document.dispatchEvent(e);
-}
-
-if (document.keyEvent == null || typeof document.keyEvent == 'undefined')
-{
- window.keyEvent = document.keyEvent = new KeyEvent();
-}
-/**
- * This class provides access to the device media, interfaces to both sound and video
- * @constructor
- */
-function Media(src, successCallback, errorCallback) {
- this.src = src;
- this.successCallback = successCallback;
- this.errorCallback = errorCallback;
-}
-
-Media.prototype.record = function() {
-}
-
-Media.prototype.play = function() {
-}
-
-Media.prototype.pause = function() {
-}
-
-Media.prototype.stop = function() {
-}
-
-
-/**
- * This class contains information about any Media errors.
- * @constructor
- */
-function MediaError() {
- this.code = null,
- this.message = "";
-}
-
-MediaError.MEDIA_ERR_ABORTED = 1;
-MediaError.MEDIA_ERR_NETWORK = 2;
-MediaError.MEDIA_ERR_DECODE = 3;
-MediaError.MEDIA_ERR_NONE_SUPPORTED = 4;
-
-
-//if (typeof navigator.audio == "undefined") navigator.audio = new Media(src);
-
-/**
- * This class provides access to the device media, interfaces to both sound and video
- * @constructor
- */
-
-Media.prototype.play = function() {
- DroidGap.startPlayingAudio(this.src);
-}
-
-Media.prototype.stop = function() {
- DroidGap.stopPlayingAudio();
-}
-
-Media.prototype.startRecord = function() {
- DroidGap.startRecordingAudio(this.src);
-}
-
-Media.prototype.stopRecordingAudio = function() {
- DroidGap.stopRecordingAudio();
-}
-
-
-/**
- * This class contains information about any NetworkStatus.
- * @constructor
- */
-function NetworkStatus() {
- this.code = null;
- this.message = "";
-}
-
-NetworkStatus.NOT_REACHABLE = 0;
-NetworkStatus.REACHABLE_VIA_CARRIER_DATA_NETWORK = 1;
-NetworkStatus.REACHABLE_VIA_WIFI_NETWORK = 2;
-
-/**
- * This class provides access to device Network data (reachability).
- * @constructor
- */
-function Network() {
- /**
- * The last known Network status.
- * { hostName: string, ipAddress: string,
- remoteHostStatus: int(0/1/2), internetConnectionStatus: int(0/1/2), localWiFiConnectionStatus: int (0/2) }
- */
- this.lastReachability = null;
-};
-
-/**
- *
- * @param {Function} successCallback
- * @param {Function} errorCallback
- * @param {Object} options (isIpAddress:boolean)
- */
-Network.prototype.isReachable = function(hostName, successCallback, options) {
-}
-
-/**
- * Called by the geolocation framework when the reachability status has changed.
- * @param {Reachibility} reachability The current reachability status.
- */
-Network.prototype.updateReachability = function(reachability) {
- this.lastReachability = reachability;
-};
-
-PhoneGap.addConstructor(function() {
- if (typeof navigator.network == "undefined") navigator.network = new Network();
-});
-Network.prototype.isReachable = function(uri, win, options)
-{
- var status = new NetworkStatus();
- if(NetworkManager.isReachable(uri))
- {
- if (NetworkManager.isWifiActive)
- status.code = 2;
- else
- status.code = 1;
- }
- else
- status.code = 0;
- win(status);
-}
-/**
- * This class provides access to notifications on the device.
- */
-function Notification() {
-
-}
-
-/**
- * Open a native alert dialog, with a customizable title and button text.
- * @param {String} message Message to print in the body of the alert
- * @param {String} [title="Alert"] Title of the alert dialog (default: Alert)
- * @param {String} [buttonLabel="OK"] Label of the close button (default: OK)
- */
-Notification.prototype.alert = function(message, title, buttonLabel) {
- // Default is to use a browser alert; this will use "index.html" as the title though
- alert(message);
-};
-
-/**
- * Start spinning the activity indicator on the statusbar
- */
-Notification.prototype.activityStart = function() {
-};
-
-/**
- * Stop spinning the activity indicator on the statusbar, if it's currently spinning
- */
-Notification.prototype.activityStop = function() {
-};
-
-/**
- * Causes the device to blink a status LED.
- * @param {Integer} count The number of blinks.
- * @param {String} colour The colour of the light.
- */
-Notification.prototype.blink = function(count, colour) {
-
-};
-
-/**
- * Causes the device to vibrate.
- * @param {Integer} mills The number of milliseconds to vibrate for.
- */
-Notification.prototype.vibrate = function(mills) {
-
-};
-
-/**
- * Causes the device to beep.
- * @param {Integer} count The number of beeps.
- * @param {Integer} volume The volume of the beep.
- */
-Notification.prototype.beep = function(count, volume) {
-
-};
-
-// TODO: of course on Blackberry and Android there notifications in the UI as well
-
-PhoneGap.addConstructor(function() {
- if (typeof navigator.notification == "undefined") navigator.notification = new Notification();
-});
-
-Notification.prototype.vibrate = function(mills)
-{
- DroidGap.vibrate(mills);
-}
-
-/*
- * On the Android, we don't beep, we notify you with your
- * notification! We shouldn't keep hammering on this, and should
- * review what we want beep to do.
- */
-
-Notification.prototype.beep = function(count, volume)
-{
- DroidGap.beep(count);
-}
-/**
- * This class contains position information.
- * @param {Object} lat
- * @param {Object} lng
- * @param {Object} acc
- * @param {Object} alt
- * @param {Object} altacc
- * @param {Object} head
- * @param {Object} vel
- * @constructor
- */
-function Position(coords, timestamp) {
- this.coords = coords;
- this.timestamp = new Date().getTime();
-}
-
-function Coordinates(lat, lng, alt, acc, head, vel) {
- /**
- * The latitude of the position.
- */
- this.latitude = lat;
- /**
- * The longitude of the position,
- */
- this.longitude = lng;
- /**
- * The accuracy of the position.
- */
- this.accuracy = acc;
- /**
- * The altitude of the position.
- */
- this.altitude = alt;
- /**
- * The direction the device is moving at the position.
- */
- this.heading = head;
- /**
- * The velocity with which the device is moving at the position.
- */
- this.speed = vel;
-}
-
-/**
- * This class specifies the options for requesting position data.
- * @constructor
- */
-function PositionOptions() {
- /**
- * Specifies the desired position accuracy.
- */
- this.enableHighAccuracy = true;
- /**
- * The timeout after which if position data cannot be obtained the errorCallback
- * is called.
- */
- this.timeout = 10000;
-}
-
-/**
- * This class contains information about any GSP errors.
- * @constructor
- */
-function PositionError() {
- this.code = null;
- this.message = "";
-}
-
-PositionError.UNKNOWN_ERROR = 0;
-PositionError.PERMISSION_DENIED = 1;
-PositionError.POSITION_UNAVAILABLE = 2;
-PositionError.TIMEOUT = 3;
-/*
- * This is purely for the Android 1.5/1.6 HTML 5 Storage
- * I was hoping that Android 2.0 would deprecate this, but given the fact that
- * most manufacturers ship with Android 1.5 and do not do OTA Updates, this is required
- */
-
-var DroidDB = function()
-{
- this.txQueue = [];
-}
-
-DroidDB.prototype.addResult = function(rawdata, tx_id)
-{
- eval("var data = " + rawdata);
- var tx = this.txQueue[tx_id];
- tx.resultSet.push(data);
-}
-
-DroidDB.prototype.completeQuery = function(tx_id)
-{
- var tx = this.txQueue[tx_id];
- var r = new result();
- r.rows.resultSet = tx.resultSet;
- r.rows.length = tx.resultSet.length;
- tx.win(r);
-}
-
-DroidDB.prototype.fail = function(reason, tx_id)
-{
- var tx = this.txQueue[tx_id];
- tx.fail(reason);
-}
-
-var DatabaseShell = function()
-{
-
-}
-
-DatabaseShell.prototype.transaction = function(process)
-{
- tx = new Tx();
- process(tx);
-}
-
-var Tx = function()
-{
- droiddb.txQueue.push(this);
- this.id = droiddb.txQueue.length - 1;
- this.resultSet = [];
-}
-
-Tx.prototype.executeSql = function(query, params, win, fail)
-{
- droidStorage.executeSql(query, params, this.id);
- tx.win = win;
- tx.fail = fail;
-}
-
-var result = function()
-{
- this.rows = new Rows();
-}
-
-var Rows = function()
-{
- this.resultSet = [];
- this.length = 0;
-}
-
-Rows.prototype.item = function(row_id)
-{
- return this.resultSet[id];
-}
-
-var dbSetup = function(name, version, display_name, size)
-{
- droidStorage.openDatabase(name, version, display_name, size)
- db_object = new DatabaseShell();
- return db_object;
-}
-
-PhoneGap.addConstructor(function() {
- if (typeof navigator.openDatabase == "undefined")
- {
- navigator.openDatabase = window.openDatabase = dbSetup;
- window.droiddb = new DroidDB();
- }
-});
-