diff --git a/framework/assets/www/phonegap.js b/framework/assets/www/phonegap.js index cfc98fab..8b0c1d24 100644 --- a/framework/assets/www/phonegap.js +++ b/framework/assets/www/phonegap.js @@ -1276,66 +1276,156 @@ 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 + * List of media objects. */ -function Media(src, successCallback, errorCallback) { - this.src = src; - this.successCallback = successCallback; - this.errorCallback = errorCallback; -} +PhoneGap.mediaObjects = {}; -Media.prototype.record = function() { -} +PhoneGap.Media = function() {}; -Media.prototype.play = function() { -} +/** + * Get the media object. + * PRIVATE + * + * @param id The media object id (string) + */ +PhoneGap.Media.getMediaObject = function(id) { + return PhoneGap.mediaObjects[id]; +}; -Media.prototype.pause = function() { -} +/** + * Audio has status update. + * PRIVATE + * + * @param id The media object id (string) + * @param status The status code (int) + * @param msg The status message (string) + */ +PhoneGap.Media.onStatus = function(id, msg, value) { + var media = PhoneGap.mediaObjects[id]; -Media.prototype.stop = function() { -} + // If state update + if (msg == Media.MEDIA_STATE) { + if (value == Media.MEDIA_STOPPED) { + if (media.successCallback) { + media.successCallback(); + } + } + if (media.statusCallback) { + media.statusCallback(value); + } + } + else if (msg == Media.MEDIA_DURATION) { + media._duration = value; + } + else if (msg == Media.MEDIA_ERROR) { + if (media.errorCallback) { + media.errorCallback(value); + } + } +}; +/** + * This class provides access to the device media, interfaces to both sound and video + * + * @param src The file name or url to play + * @param successCallback The callback to be called when the file is done playing or recording. + * successCallback() + * @param errorCallback The callback to be called if there is an error. + * errorCallback(int errorCode) + * @param statusCallback The callback to be called when media status has changed. + * statusCallback(int statusCode) + */ +Media = function(src, successCallback, errorCallback, statusCallback) { + this.id = PhoneGap.createUUID(); + PhoneGap.mediaObjects[this.id] = this; + this.src = src; + this.successCallback = successCallback; + this.errorCallback = errorCallback; + this.statusCallback = statusCallback; + this._duration = -1; +}; +// Media messages +Media.MEDIA_STATE = 1; +Media.MEDIA_DURATION = 2; +Media.MEDIA_ERROR = 3; + +// Media states +Media.MEDIA_NONE = 0; +Media.MEDIA_STARTING = 1; +Media.MEDIA_RUNNING = 2; +Media.MEDIA_PAUSED = 3; +Media.MEDIA_STOPPED = 4; +Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped"]; + +// TODO: Will MediaError be used? /** * This class contains information about any Media errors. * @constructor */ function MediaError() { - this.code = null, - this.message = ""; -} + this.code = null, + this.message = ""; +}; -MediaError.MEDIA_ERR_ABORTED = 1; -MediaError.MEDIA_ERR_NETWORK = 2; -MediaError.MEDIA_ERR_DECODE = 3; +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); +/** + * Start or resume playing audio file. + */ +Media.prototype.play = function() { + GapAudio.startPlayingAudio(this.id, this.src); +}; /** - * This class provides access to the device media, interfaces to both sound and video - * @constructor + * Stop playing audio file. */ - -Media.prototype.play = function() { - GapAudio.startPlayingAudio(this.src); -} - Media.prototype.stop = function() { - GapAudio.stopPlayingAudio(); -} + GapAudio.stopPlayingAudio(this.id); +}; +/** + * Pause playing audio file. + */ +Media.prototype.pause = function() { + GapAudio.pausePlayingAudio(this.id); +}; + +/** + * Get duration of an audio file. + * The duration is only set for audio that is playing, paused or stopped. + * + * @return duration or -1 if not known. + */ +Media.prototype.getDuration = function() { + return this._duration; +}; + +/** + * Get position of audio. + * + * @return + */ +Media.prototype.getCurrentPosition = function() { + return GapAudio.getCurrentPositionAudio(this.id); +}; + +/** + * Start recording audio file. + */ Media.prototype.startRecord = function() { - GapAudio.startRecordingAudio(this.src); -} - -Media.prototype.stopRecordingAudio = function() { - GapAudio.stopRecordingAudio(); -} + GapAudio.startRecordingAudio(this.id, this.src); +}; +/** + * Stop recording audio file. + */ +Media.prototype.stopRecord = function() { + GapAudio.stopRecordingAudio(this.id); +}; /** * This class contains information about any NetworkStatus. diff --git a/lib/create.rb b/lib/create.rb index d500afbb..3a879ee1 100644 --- a/lib/create.rb +++ b/lib/create.rb @@ -34,7 +34,7 @@ class Create @path = File.join(path, '..', "#{ name }-android") @www = path @name = path.split('/').last - @pkg = "com.phonegap.#{ name }" + @pkg = "com.phonegap.#{ name.gsub('-','') }" # android sdk discovery ... could be better @android_sdk_path = Dir.getwd[0,1] != "/" ? `android-sdk-path.bat android.bat`.gsub('\\tools','').gsub('\\', '\\\\\\\\') : `which android`.gsub('/tools/android','')