summaryrefslogtreecommitdiff
path: root/plugins/org.apache.cordova.media/src/blackberry10/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.apache.cordova.media/src/blackberry10/index.js')
-rw-r--r--plugins/org.apache.cordova.media/src/blackberry10/index.js237
1 files changed, 237 insertions, 0 deletions
diff --git a/plugins/org.apache.cordova.media/src/blackberry10/index.js b/plugins/org.apache.cordova.media/src/blackberry10/index.js
new file mode 100644
index 00000000..1b9b7860
--- /dev/null
+++ b/plugins/org.apache.cordova.media/src/blackberry10/index.js
@@ -0,0 +1,237 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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();
+ }
+};