You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bh...@apache.org on 2013/06/17 15:50:57 UTC
webworks commit: [CB-3438] Add media plugin to BB10
Updated Branches:
refs/heads/master 6fd732391 -> 06acc708b
[CB-3438] Add media plugin to BB10
- media operations handled in controller web view
- added code to prevent error dialog from freezing app
Tested by Tracy Li <tl...@blackberry.com>
Project: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/commit/06acc708
Tree: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/tree/06acc708
Diff: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/diff/06acc708
Branch: refs/heads/master
Commit: 06acc708bd4cbc560589d5a9f298ee4fdc225a2c
Parents: 6fd7323
Author: Bryan Higgins <bh...@blackberry.com>
Authored: Mon Jun 10 17:00:47 2013 -0400
Committer: Bryan Higgins <bh...@blackberry.com>
Committed: Mon Jun 17 09:54:28 2013 -0400
----------------------------------------------------------------------
blackberry10/javascript/cordova.blackberry10.js | 3 +-
blackberry10/plugins/Media/plugin.xml | 30 +++
.../plugins/Media/src/blackberry10/index.js | 232 +++++++++++++++++++
3 files changed, 263 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/06acc708/blackberry10/javascript/cordova.blackberry10.js
----------------------------------------------------------------------
diff --git a/blackberry10/javascript/cordova.blackberry10.js b/blackberry10/javascript/cordova.blackberry10.js
index e97f404..d3020aa 100644
--- a/blackberry10/javascript/cordova.blackberry10.js
+++ b/blackberry10/javascript/cordova.blackberry10.js
@@ -795,7 +795,6 @@ var cordova = require('cordova'),
plugins = {
'Compass' : require('cordova/plugin/blackberry10/magnetometer'),
'Capture' : require('cordova/plugin/blackberry10/capture'),
- 'Media': require('cordova/plugin/blackberry10/media'),
'FileTransfer': require('cordova/plugin/blackberry10/fileTransfer')
};
@@ -6891,4 +6890,4 @@ document.addEventListener("DOMContentLoaded", function () {
}(window));
-})();
\ No newline at end of file
+})();
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/06acc708/blackberry10/plugins/Media/plugin.xml
----------------------------------------------------------------------
diff --git a/blackberry10/plugins/Media/plugin.xml b/blackberry10/plugins/Media/plugin.xml
new file mode 100644
index 0000000..1162c9c
--- /dev/null
+++ b/blackberry10/plugins/Media/plugin.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+
+<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0"
+ id="org.apache.cordova.core.Media"
+ version="0.0.1">
+
+ <name>Media</name>
+
+ <platform name="blackberry10">
+ <source-file src="src/blackberry10/index.js" target-dir="Media" />
+ <config-file target="www/config.xml" parent="/widget">
+ <feature name="Media" value="Media"/>
+ </config-file>
+ </platform>
+</plugin>
http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/06acc708/blackberry10/plugins/Media/src/blackberry10/index.js
----------------------------------------------------------------------
diff --git a/blackberry10/plugins/Media/src/blackberry10/index.js b/blackberry10/plugins/Media/src/blackberry10/index.js
new file mode 100644
index 0000000..32192c8
--- /dev/null
+++ b/blackberry10/plugins/Media/src/blackberry10/index.js
@@ -0,0 +1,232 @@
+/*
+ * Copyright 2010-2011 Research In Motion Limited.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var audioObjects = {},
+ mediaErrorsHandled = false;
+
+// There is a bug in the webplatform handling of media error
+// dialogs prior to 10.2. This function needs to be run once
+// on the webview which plays audio to prevent freezing.
+function handleMediaErrors() {
+ var webview = qnx.webplatform.getWebViews()[0],
+ handler = webview.onDialogRequested;
+ if (!mediaErrorsHandled) {
+ webview.allowWebEvent("DialogRequested");
+ webview.onDialogRequested = undefined;
+ webview.onDialogRequested = function (eventArgs) {
+ var parsedArgs = JSON.parse(eventArgs);
+ if (parsedArgs.dialogType === 'MediaError') {
+ return '{"setPreventDefault": true}';
+ }
+ handler(eventArgs);
+ };
+ mediaErrorsHandled = true;
+ }
+}
+
+module.exports = {
+
+ create: function (success, fail, args, env) {
+ var result = new PluginResult(args, env),
+ id;
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ id = JSON.parse(decodeURIComponent(args[0]));
+
+ if (!args[1]){
+ audioObjects[id] = new Audio();
+ } else {
+ audioObjects[id] = new Audio(JSON.parse(decodeURIComponent(args[1])));
+ }
+
+ handleMediaErrors();
+
+ result.ok();
+ },
+
+ startPlayingAudio: function (success, fail, args, env) {
+
+ var audio,
+ id,
+ result = new PluginResult(args, env);
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ id = JSON.parse(decodeURIComponent(args[0]));
+
+ audio = audioObjects[id];
+
+ if (!audio) {
+ result.error("Audio object has not been initialized");
+ } else {
+ audio.play();
+ result.ok();
+ }
+ },
+
+ stopPlayingAudio: function (success, fail, args, env) {
+
+ var audio,
+ id,
+ result = new PluginResult(args, env);
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ id = JSON.parse(decodeURIComponent(args[0]));
+
+ audio = audioObjects[id];
+
+ if (!audio) {
+ result.error("Audio Object has not been initialized");
+ return;
+ }
+
+ audio.pause();
+ audio.currentTime = 0;
+
+ result.ok();
+ },
+
+ seekToAudio: function (success, fail, args, env) {
+
+ var audio,
+ result = new PluginResult(args, env);
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))];
+
+ if (!audio) {
+ result.error("Audio Object has not been initialized");
+ } else if (!args[1]) {
+ result.error("Media seek time argument not found");
+ } else {
+ try {
+ audio.currentTime = JSON.parse(decodeURIComponent(args[1])) / 1000;
+ result.ok();
+ } catch (e) {
+ result.error("Error seeking audio: " + e);
+ }
+ }
+ },
+
+ pausePlayingAudio: function (success, fail, args, env) {
+
+ var audio,
+ result = new PluginResult(args, env);
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))];
+
+ if (!audio) {
+ result.error("Audio Object has not been initialized");
+ return;
+ }
+
+ audio.pause();
+ },
+
+ getCurrentPositionAudio: function (success, fail, args, env) {
+
+ var audio,
+ result = new PluginResult(args, env);
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))];
+
+ if (!audio) {
+ result.error("Audio Object has not been initialized");
+ return;
+ }
+
+ result.ok(audio.currentTime);
+ },
+
+ getDuration: function (success, fail, args, env) {
+
+ var audio,
+ result = new PluginResult(args, env);
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ audio = audioObjects[JSON.parse(decodeURIComponent(args[0]))];
+
+ if (!audio) {
+ result.error("Audio Object has not been initialized");
+ return;
+ }
+
+ result.ok(audio.duration);
+ },
+
+ startRecordingAudio: function (success, fail, args, env) {
+ var result = new PluginResult(args, env);
+ result.error("Not supported");
+ },
+
+ stopRecordingAudio: function (success, fail, args, env) {
+ var result = new PluginResult(args, env);
+ result.error("Not supported");
+ },
+
+ release: function (success, fail, args, env) {
+ var audio,
+ id,
+ result = new PluginResult(args, env);
+
+ if (!args[0]) {
+ result.error("Media Object id was not sent in arguments");
+ return;
+ }
+
+ id = JSON.parse(decodeURIComponent(args[0]));
+
+ audio = audioObjects[id];
+
+ if (audio) {
+ if(audio.src !== ""){
+ audio.src = undefined;
+ }
+ audioObjects[id] = undefined;
+ }
+
+ result.ok();
+ }
+};