Getting ready for release of Camera

This commit is contained in:
Joe Bowser 2009-07-31 14:16:02 -07:00
parent df6eaf4f9d
commit 98fff2d5f2
2 changed files with 927 additions and 561 deletions

View File

@ -1,3 +1,77 @@
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.
*/
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')
PhoneGap._constructors.push(func);
else
func();
};
(function() {
var timer = setInterval(function() {
var state = document.readyState;
if (state != 'loaded' && state != 'complete')
return;
clearInterval(timer);
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);
}
}
}, 1);
})();
/**
* 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. This needs to be implemented per-platform to
* ensure that methods are called on the phone in a way appropriate for that device.
* @private
*/
PhoneGap.run_command = function() {
};
/** /**
* This class contains acceleration information * This class contains acceleration information
@ -36,8 +110,6 @@
*/ */
this.timeout = 10000; this.timeout = 10000;
} }
/** /**
* This class provides access to device accelerometer data. * This class provides access to device accelerometer data.
* @constructor * @constructor
@ -81,7 +153,7 @@
*/ */
Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) { Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) {
navigator.accelerometer.getCurrentAcceleration(successCallback, errorCallback, options); this.getCurrentAcceleration(successCallback, errorCallback, options);
// TODO: add the interval id to a list so we can clear all watches // TODO: add the interval id to a list so we can clear all watches
var frequency = (options != undefined)? options.frequency : 10000; var frequency = (options != undefined)? options.frequency : 10000;
return setInterval(function() { return setInterval(function() {
@ -97,46 +169,9 @@
clearInterval(watchId); clearInterval(watchId);
} }
PhoneGap.addConstructor(function() {
if (typeof navigator.accelerometer == "undefined") navigator.accelerometer = new Accelerometer(); if (typeof navigator.accelerometer == "undefined") navigator.accelerometer = new Accelerometer();
});
/**
* This class provides access to the device media, interfaces to both sound and video
* @constructor
*/
function Media(src) {
this.src = src;
}
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 camera. * This class provides access to the device camera.
* @constructor * @constructor
@ -155,43 +190,144 @@
} }
PhoneGap.addConstructor(function() {
if (typeof navigator.camera == "undefined") navigator.camera = new Camera(); if (typeof navigator.camera == "undefined") navigator.camera = new Camera();
});
/** /**
* This class provides access to the device contacts. * This class provides access to the device contacts.
* @constructor * @constructor
*/ */
function Contact() {
this.name = ""; function Contact(jsonObject) {
this.phone = ""; this.firstName = "";
this.lastName = "";
this.phoneNumber = "";
this.address = ""; this.address = "";
} }
/** Contact.prototype.displayName = function()
* {
* @param {Object} successCallback // TODO: can be tuned according to prefs
* @param {Object} errorCallback return this.firstName + " " + this.lastName;
* @param {Object} options
*/
Contact.prototype.get = function(successCallback, errorCallback, options) {
} }
function ContactManager() { function ContactManager() {
// Dummy object to hold array of contacts // Dummy object to hold array of contacts
this.contacts = []; this.contacts = [];
this.timestap = new Date().getTime(); this.timestamp = new Date().getTime();
} }
ContactManager.prototype.get = function(successCallback, errorCallback, options) { ContactManager.prototype.getAllContacts = function(successCallback, errorCallback, options) {
// Interface // Interface
} }
PhoneGap.addConstructor(function() {
if (typeof navigator.ContactManager == "undefined") navigator.ContactManager = new ContactManager(); if (typeof navigator.ContactManager == "undefined") navigator.ContactManager = new ContactManager();
});
/**
* This class provides access to the debugging console.
* @constructor
*/
function DebugConsole() {
}
/**
* Utility function for rendering and indenting strings, or serializing
* objects to a string capable of being printed to the console.
* @param {Object|String} message The string or object to convert to an indented string
* @private
*/
DebugConsole.prototype.processMessage = function(message) {
if (typeof(message) != 'object') {
return message;
} else {
/**
* @function
* @ignore
*/
function indent(str) {
return str.replace(/^/mg, " ");
}
/**
* @function
* @ignore
*/
function makeStructured(obj) {
var str = "";
for (var i in obj) {
try {
if (typeof(obj[i]) == 'object') {
str += i + ":\n" + indent(makeStructured(obj[i])) + "\n";
} else {
str += i + " = " + indent(String(obj[i])).replace(/^ /, "") + "\n";
}
} catch(e) {
str += i + " = EXCEPTION: " + e.message + "\n";
}
}
return str;
}
return "Object:\n" + makeStructured(message);
}
};
/**
* Print a normal log message to the console
* @param {Object|String} message Message or object to print to the console
*/
DebugConsole.prototype.log = function(message) {
};
/**
* Print a warning message to the console
* @param {Object|String} message Message or object to print to the console
*/
DebugConsole.prototype.warn = function(message) {
};
/**
* Print an error message to the console
* @param {Object|String} message Message or object to print to the console
*/
DebugConsole.prototype.error = function(message) {
};
PhoneGap.addConstructor(function() {
window.debug = new DebugConsole();
});
/**
* 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'] != undefined && window.DroidGap.exists()) {
this.available = true;
this.isAndroid = true;
this.uuid = window.DroidGap.getUuid();
this.gapVersion = window.DroidGap.getVersion();
} else {
this.platform = DeviceInfo.platform;
this.version = DeviceInfo.version;
this.name = DeviceInfo.name;
this.gap = DeviceInfo.gap;
this.uuid = DeviceInfo.uuid;
}
} catch(e) {
this.available = false;
}
}
PhoneGap.addConstructor(function() {
navigator.device = window.device = new Device();
});
/** /**
* This class provides generic read and write access to the mobile device file system. * This class provides generic read and write access to the mobile device file system.
*/ */
@ -225,9 +361,9 @@
} }
PhoneGap.addConstructor(function() {
if (typeof navigator.file == "undefined") navigator.file = new File(); if (typeof navigator.file == "undefined") navigator.file = new File();
});
/** /**
* This class provides access to device GPS data. * This class provides access to device GPS data.
* @constructor * @constructor
@ -237,7 +373,12 @@
* The last known GPS position. * The last known GPS position.
*/ */
this.lastPosition = null; this.lastPosition = null;
} this.lastError = null;
this.callbacks = {
onLocationChanged: [],
onError: []
};
};
/** /**
* Asynchronously aquires the current position. * Asynchronously aquires the current position.
@ -249,9 +390,36 @@
* such as timeout. * such as timeout.
*/ */
Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options) { Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options) {
// If the position is available then call success var referenceTime = 0;
// If the position is not available then call error if (this.lastPosition)
referenceTime = this.lastPosition.timeout;
else
this.start(options);
var timeout = 20000;
var interval = 500;
if (typeof(options) == 'object' && options.interval)
interval = options.interval;
if (typeof(successCallback) != 'function')
successCallback = function() {};
if (typeof(errorCallback) != 'function')
errorCallback = function() {};
var dis = this;
var delay = 0;
var timer = setInterval(function() {
delay += interval;
if (typeof(dis.lastPosition) == 'object' && dis.lastPosition.timestamp > referenceTime) {
successCallback(dis.lastPosition);
clearInterval(timer);
} else if (delay >= timeout) {
errorCallback();
clearInterval(timer);
} }
}, interval);
};
/** /**
* Asynchronously aquires the position repeatedly at a given interval. * Asynchronously aquires the position repeatedly at a given interval.
@ -267,14 +435,15 @@
// determines that the position of the hosting device has changed. // determines that the position of the hosting device has changed.
this.getCurrentPosition(successCallback, errorCallback, options); this.getCurrentPosition(successCallback, errorCallback, options);
var frequency = (options != undefined)? options.frequency : 10000; var frequency = 10000;
if (typeof(options) == 'object' && options.frequency)
frequency = options.frequency;
var that = this; var that = this;
return setInterval(function() { return setInterval(function() {
that.getCurrentPosition(successCallback, errorCallback, options); that.getCurrentPosition(successCallback, errorCallback, options);
//navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options);
}, frequency); }, frequency);
} };
/** /**
@ -283,11 +452,35 @@
*/ */
Geolocation.prototype.clearWatch = function(watchId) { Geolocation.prototype.clearWatch = function(watchId) {
clearInterval(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);
}
};
PhoneGap.addConstructor(function() {
if (typeof navigator.geolocation == "undefined") navigator.geolocation = new Geolocation(); if (typeof navigator.geolocation == "undefined") navigator.geolocation = new Geolocation();
});
/** /**
* This class provides access to native mapping applications on the device. * This class provides access to native mapping applications on the device.
*/ */
@ -303,9 +496,47 @@
} }
PhoneGap.addConstructor(function() {
if (typeof navigator.map == "undefined") navigator.map = new Map(); if (typeof navigator.map == "undefined") navigator.map = new Map();
});
/**
* This class provides access to the device media, interfaces to both sound and video
* @constructor
*/
function Media(src) {
this.src = src;
}
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 notifications on the device. * This class provides access to notifications on the device.
*/ */
@ -313,6 +544,29 @@
} }
/**
* 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. * Causes the device to blink a status LED.
* @param {Integer} count The number of blinks. * @param {Integer} count The number of blinks.
@ -320,7 +574,7 @@
*/ */
Notification.prototype.blink = function(count, colour) { Notification.prototype.blink = function(count, colour) {
} };
/** /**
* Causes the device to vibrate. * Causes the device to vibrate.
@ -328,7 +582,7 @@
*/ */
Notification.prototype.vibrate = function(mills) { Notification.prototype.vibrate = function(mills) {
} };
/** /**
* Causes the device to beep. * Causes the device to beep.
@ -337,12 +591,13 @@
*/ */
Notification.prototype.beep = function(count, volume) { Notification.prototype.beep = function(count, volume) {
} };
// TODO: of course on Blackberry and Android there notifications in the UI as well // 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(); if (typeof navigator.notification == "undefined") navigator.notification = new Notification();
});
/** /**
* This class provides access to the device orientation. * This class provides access to the device orientation.
@ -350,11 +605,28 @@
*/ */
function Orientation() { function Orientation() {
/** /**
* The last known orientation. * The current orientation, or null if the orientation hasn't changed yet.
*/ */
this.lastOrientation = null; this.currentOrientation = null;
} }
/**
* Set the current orientation of the phone. This is called from the device automatically.
*
* When the orientation is changed, the DOMEvent \c orientationChanged is dispatched against
* the document element. The event has the property \c orientation which can be used to retrieve
* the device's current orientation, in addition to the \c Orientation.currentOrientation class property.
*
* @param {Number} orientation The orientation to be set
*/
Orientation.prototype.setOrientation = function(orientation) {
Orientation.currentOrientation = orientation;
var e = document.createEvent('Events');
e.initEvent('orientationChanged', 'false', 'false');
e.orientation = orientation;
document.dispatchEvent(e);
};
/** /**
* Asynchronously aquires the current orientation. * Asynchronously aquires the current orientation.
* @param {Function} successCallback The function to call when the orientation * @param {Function} successCallback The function to call when the orientation
@ -365,7 +637,7 @@
Orientation.prototype.getCurrentOrientation = function(successCallback, errorCallback) { Orientation.prototype.getCurrentOrientation = function(successCallback, errorCallback) {
// If the position is available then call success // If the position is available then call success
// If the position is not available then call error // If the position is not available then call error
} };
/** /**
* Asynchronously aquires the orientation repeatedly at a given interval. * Asynchronously aquires the orientation repeatedly at a given interval.
@ -381,7 +653,7 @@
return setInterval(function() { return setInterval(function() {
navigator.orientation.getCurrentOrientation(successCallback, errorCallback); navigator.orientation.getCurrentOrientation(successCallback, errorCallback);
}, 10000); }, 10000);
} };
/** /**
* Clears the specified orientation watch. * Clears the specified orientation watch.
@ -389,11 +661,11 @@
*/ */
Orientation.prototype.clearWatch = function(watchId) { Orientation.prototype.clearWatch = function(watchId) {
clearInterval(watchId); clearInterval(watchId);
} };
PhoneGap.addConstructor(function() {
if (typeof navigator.orientation == "undefined") navigator.orientation = new Orientation(); if (typeof navigator.orientation == "undefined") navigator.orientation = new Orientation();
});
/** /**
* This class contains position information. * This class contains position information.
* @param {Object} lat * @param {Object} lat
@ -469,9 +741,6 @@
PositionError.PERMISSION_DENIED = 1; PositionError.PERMISSION_DENIED = 1;
PositionError.POSITION_UNAVAILABLE = 2; PositionError.POSITION_UNAVAILABLE = 2;
PositionError.TIMEOUT = 3; PositionError.TIMEOUT = 3;
/** /**
* This class provides access to the device SMS functionality. * This class provides access to the device SMS functionality.
* @constructor * @constructor
@ -492,9 +761,9 @@
} }
PhoneGap.addConstructor(function() {
if (typeof navigator.sms == "undefined") navigator.sms = new Sms(); if (typeof navigator.sms == "undefined") navigator.sms = new Sms();
});
/** /**
* This class provides access to the telephony features of the device. * This class provides access to the telephony features of the device.
* @constructor * @constructor
@ -511,25 +780,136 @@
} }
PhoneGap.addConstructor(function() {
if (typeof navigator.telephony == "undefined") navigator.telephony = new Telephony(); if (typeof navigator.telephony == "undefined") navigator.telephony = new Telephony();
});
/**
// Android specific overrides here * This class exposes mobile phone interface controls to JavaScript, such as
* native tab and tool bars, etc.
Notification.prototype.vibrate = function(mills) * @constructor
{ */
Device.vibrate(mills); function UIControls() {
this.tabBarTag = 0;
this.tabBarCallbacks = {};
} }
/* /**
* On the Android, we don't beep, we notify you with your * Create a native tab bar that can have tab buttons added to it which can respond to events.
* notification! We shouldn't keep hammering on this, and should
* review what we want beep to do.
*/ */
UIControls.prototype.createTabBar = function() {};
Notification.prototype.beep = function(count, volume) /**
* Show a tab bar. The tab bar has to be created first.
* @param {Object} [options] Options indicating how the tab bar should be shown:
* - \c height integer indicating the height of the tab bar (default: \c 49)
* - \c position specifies whether the tab bar will be placed at the \c top or \c bottom of the screen (default: \c bottom)
*/
UIControls.prototype.showTabBar = function(options) {};
/**
* Hide a tab bar. The tab bar has to be created first.
*/
UIControls.prototype.hideTabBar = function(animate) {};
/**
* Create a new tab bar item for use on a previously created tab bar. Use ::showTabBarItems to show the new item on the tab bar.
*
* If the supplied image name is one of the labels listed below, then this method will construct a tab button
* using the standard system buttons. Note that if you use one of the system images, that the \c title you supply will be ignored.
*
* <b>Tab Buttons</b>
* - tabButton:More
* - tabButton:Favorites
* - tabButton:Featured
* - tabButton:TopRated
* - tabButton:Recents
* - tabButton:Contacts
* - tabButton:History
* - tabButton:Bookmarks
* - tabButton:Search
* - tabButton:Downloads
* - tabButton:MostRecent
* - tabButton:MostViewed
* @param {String} name internal name to refer to this tab by
* @param {String} [title] title text to show on the tab, or null if no text should be shown
* @param {String} [image] image filename or internal identifier to show, or null if now image should be shown
* @param {Object} [options] Options for customizing the individual tab item
* - \c badge value to display in the optional circular badge on the item; if null or unspecified, the badge will be hidden
*/
UIControls.prototype.createTabBarItem = function(name, label, image, options) {};
/**
* Update an existing tab bar item to change its badge value.
* @param {String} name internal name used to represent this item when it was created
* @param {Object} options Options for customizing the individual tab item
* - \c badge value to display in the optional circular badge on the item; if null or unspecified, the badge will be hidden
*/
UIControls.prototype.updateTabBarItem = function(name, options) {};
/**
* Show previously created items on the tab bar
* @param {String} arguments... the item names to be shown
* @param {Object} [options] dictionary of options, notable options including:
* - \c animate indicates that the items should animate onto the tab bar
* @see createTabBarItem
* @see createTabBar
*/
UIControls.prototype.showTabBarItems = function(tabs, options) {};
/**
* Manually select an individual tab bar item, or nil for deselecting a currently selected tab bar item.
* @param {String} tabName the name of the tab to select, or null if all tabs should be deselected
* @see createTabBarItem
* @see showTabBarItems
*/
UIControls.prototype.selectTabBarItem = function(tab) {};
/**
* Function called when a tab bar item has been selected.
* @param {Number} tag the tag number for the item that has been selected
*/
UIControls.prototype.tabBarItemSelected = function(tag) {
if (typeof(this.tabBarCallbacks[tag]) == 'function')
this.tabBarCallbacks[tag]();
};
/**
* Create a toolbar.
*/
UIControls.prototype.createToolBar = function() {};
/**
* Function called when a tab bar item has been selected.
* @param {String} title the title to set within the toolbar
*/
UIControls.prototype.setToolBarTitle = function(title) {};
PhoneGap.addConstructor(function() {
window.uicontrols = new UIControls();
});
/*
* This is because strings are not exposed
*
*/
var Device = {
platform: "",
version: "",
uuid: "",
init: function() {
Device.platform = DroidGap.getPlatform();
Device.version = Droidap.getVersion();
Device.uuid = DroidGap.getUuid();
},
vibrate: function(mills)
{ {
Device.beep(count); DroidGap.vibrate(mills);
},
beep: function()
{
DroidGap.beep();
}
} }
/* /*
@ -540,23 +920,22 @@ Notification.prototype.beep = function(count, volume)
Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options) Geolocation.prototype.getCurrentPosition = function(successCallback, errorCallback, options)
{ {
Geolocation.global_success = successCallback; var position = Geo.getCurrentPosition();
Geolocation.fail = errorCallback; this.global_success = successCallback;
Geo.getCurrentLocation(); this.fail = errorCallback;
} }
// Run the global callback // Run the global callback
Geolocation.gotCurrentPosition = function(lat, lng) Geolocation.prototype.gotCurrentPosition = function(lat, lng)
{ {
if (lat == "undefined" || lng == "undefined") if (lat == 0 || lng == 0)
{ {
this.fail(); this.fail();
} }
else else
{ {
p = {}; var p = { "lat" : lat, "lng": lng };
p.latitude = lat;
p.longitude = lng;
this.global_success(p); this.global_success(p);
} }
} }
@ -574,7 +953,7 @@ Geolocation.prototype.watchPosition = function(successCallback, errorCallback, o
if (!this.listeners) if (!this.listeners)
{ {
this.listeners = [] this.listeners = [];
} }
var key = this.listeners.push( {"success" : successCallback, "fail" : failCallback }) - 1; var key = this.listeners.push( {"success" : successCallback, "fail" : failCallback }) - 1;
@ -587,12 +966,12 @@ Geolocation.prototype.watchPosition = function(successCallback, errorCallback, o
* Retrieve and stop this listener from listening to the GPS * Retrieve and stop this listener from listening to the GPS
* *
*/ */
Geolocation.success = function(key, lat, lng) Geolocation.prototype.success(key, lat, lng)
{ {
this.listeners[key].success(lat,lng); this.listeners[key].success(lat,lng);
} }
Geolocation.prototype.fail = function(key) Geolocation.prototype.fail(key)
{ {
this.listeners[key].fail(); this.listeners[key].fail();
} }
@ -602,29 +981,19 @@ Geolocation.prototype.clearWatch = function(watchId)
Geo.stop(watchId); Geo.stop(watchId);
} }
/* Identical to the iPhone, except we have to create this in the JS */
_accel = {} Notification.prototype.vibrate = function(mills)
_accel.x = 0;
_accel.y = 0;
_accel.z = 0;
function gotAccel(x,y,z)
{ {
_accel.x = x; Device.vibrate(mills);
_accel.y = y;
_accel.z = z;
} }
Accelerometer.base_method = Accelerometer.prototype.watchAcceleration /*
Accelerometer.prototype.watchAcceleration = function(successCallback, errorCallback, options) * 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)
{ {
Accel.start(); Device.notify();
Accelerometer.base_method(successCallback, errorCallback, options);
} }
Accelerometer.prototype.clearWatch = function(watchId){
clearInterval(watchId);
Accel.stop();
}

View File

@ -64,9 +64,6 @@ public class DroidGap extends Activity {
appView.getSettings().setJavaScriptEnabled(true); appView.getSettings().setJavaScriptEnabled(true);
appView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); appView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
launcher = new CameraLauncher(appView, this);
/* Bind the appView object to the gap class methods */ /* Bind the appView object to the gap class methods */
bindBrowser(appView); bindBrowser(appView);
@ -96,10 +93,10 @@ public class DroidGap extends Activity {
private void bindBrowser(WebView appView) private void bindBrowser(WebView appView)
{ {
// The PhoneGap class handles the Notification and Android Specific crap
gap = new PhoneGap(this, appView); gap = new PhoneGap(this, appView);
geo = new GeoBroker(appView, this); geo = new GeoBroker(appView, this);
accel = new AccelListener(this, appView); accel = new AccelListener(this, appView);
launcher = new CameraLauncher(appView, this);
// This creates the new javascript interfaces for PhoneGap // This creates the new javascript interfaces for PhoneGap
appView.addJavascriptInterface(gap, "Device"); appView.addJavascriptInterface(gap, "Device");
appView.addJavascriptInterface(geo, "Geo"); appView.addJavascriptInterface(geo, "Geo");