You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by GitBox <gi...@apache.org> on 2017/12/14 07:21:54 UTC

[GitHub] maverickmishra closed pull request #87: CB-13669 : Remove deprecated plugins

maverickmishra closed pull request #87: CB-13669 : Remove deprecated plugins
URL: https://github.com/apache/cordova-plugin-media-capture/pull/87
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/README.md b/README.md
index 78ba926..830eb38 100644
--- a/README.md
+++ b/README.md
@@ -61,13 +61,9 @@ Report issues with this plugin on the [Apache Cordova issue tracker](https://iss
 
 ## Supported Platforms
 
-- Amazon Fire OS
 - Android
-- BlackBerry 10
 - Browser
 - iOS
-- Windows Phone 7 and 8
-- Windows 8
 - Windows
 
 ## Objects
@@ -126,12 +122,8 @@ code.
 
 ### Supported Platforms
 
-- Amazon Fire OS
 - Android
-- BlackBerry 10
 - iOS
-- Windows Phone 7 and 8
-- Windows 8
 - Windows
 
 ### Example
@@ -189,13 +181,9 @@ object featuring a `CaptureError.CAPTURE_NO_MEDIA_FILES` error code.
 
 ### Supported Platforms
 
-- Amazon Fire OS
 - Android
-- BlackBerry 10
 - Browser
 - iOS
-- Windows Phone 7 and 8
-- Windows 8
 - Windows
 
 ### iOS Quirks
@@ -229,11 +217,6 @@ To add these entries into the `info.plist`, you can use the `edit-config` tag in
 </edit-config>
 ```
 
-### Windows Phone 7 Quirks
-
-Invoking the native camera application while your device is connected
-via Zune does not work, and the error callback executes.
-
 ### Browser Quirks
 
 Works in Chrome, Firefox and Opera only (since IE and Safari doesn't supports
@@ -291,12 +274,8 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a
 
 ### Supported Platforms
 
-- Amazon Fire OS
 - Android
-- BlackBerry 10
 - iOS
-- Windows Phone 7 and 8
-- Windows 8
 - Windows
 
 ### Example
@@ -319,10 +298,6 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a
     navigator.device.capture.captureVideo(captureSuccess, captureError, {limit:2});
 
 
-### BlackBerry 10 Quirks
-
-- Cordova for BlackBerry 10 attempts to launch the __Video Recorder__ application, provided by RIM, to capture video recordings. The app receives a `CaptureError.CAPTURE_NOT_SUPPORTED` error code if the application is not installed on the device.
-
 
 ## CaptureAudioOptions
 
@@ -341,18 +316,10 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a
 
     navigator.device.capture.captureAudio(captureSuccess, captureError, options);
 
-### Amazon Fire OS Quirks
-
-- The `duration` parameter is not supported.  Recording lengths cannot be limited programmatically.
-
 ### Android Quirks
 
 - The `duration` parameter is not supported.  Recording lengths can't be limited programmatically.
 
-### BlackBerry 10 Quirks
-
-- The `duration` parameter is not supported.  Recording lengths can't be limited programmatically.
-- The `limit` parameter is not supported, so only one recording can be created for each invocation.
 
 ### iOS Quirks
 
@@ -396,10 +363,6 @@ capturing a video clip, the `CaptureErrorCB` callback executes with a
 
     navigator.device.capture.captureVideo(captureSuccess, captureError, options);
 
-### BlackBerry 10 Quirks
-
-- The __duration__ property is ignored, so the length of recordings can't be limited programmatically.
-
 ### iOS Quirks
 
 - The __limit__ property is ignored.  Only one video is recorded per invocation.
@@ -549,23 +512,10 @@ callback.
 
 ### Supported Platforms
 
-- Amazon Fire OS
 - Android
-- BlackBerry 10
 - iOS
-- Windows Phone 7 and 8
-- Windows 8
 - Windows
 
-### Amazon Fire OS Quirks
-
-The API to access media file format information is limited, so not all
-`MediaFileData` properties are supported.
-
-### BlackBerry 10 Quirks
-
-Does not provide an API for information about media files, so all
-`MediaFileData` objects return with default values.
 
 ### Android Quirks
 
@@ -613,36 +563,6 @@ The API to access media file format information is limited, so not all
 
 - __duration__: The length of the video or sound clip in seconds. The value is zero for images. (Number)
 
-### BlackBerry 10 Quirks
-
-No API provides format information for media files, so the
-`MediaFileData` object returned by `MediaFile.getFormatData` features
-the following default values:
-
-- __codecs__: Not supported, and returns `null`.
-
-- __bitrate__: Not supported, and returns zero.
-
-- __height__: Not supported, and returns zero.
-
-- __width__: Not supported, and returns zero.
-
-- __duration__: Not supported, and returns zero.
-
-### Amazon Fire OS Quirks
-
-Supports the following `MediaFileData` properties:
-
-- __codecs__: Not supported, and returns `null`.
-
-- __bitrate__: Not supported, and returns zero.
-
-- __height__: Supported: image and video files only.
-
-- __width__: Supported: image and video files only.
-
-- __duration__: Supported: audio and video files only
-
 ### Android Quirks
 
 Supports the following `MediaFileData` properties:
diff --git a/package.json b/package.json
index 20914ce..36534e0 100644
--- a/package.json
+++ b/package.json
@@ -1,20 +1,15 @@
 {
   "name": "cordova-plugin-media-capture",
-  "version": "2.0.1-dev",
+  "version": "3.0.0-dev",
   "description": "Cordova Media Capture Plugin",
   "types": "./types/index.d.ts",
   "cordova": {
     "id": "cordova-plugin-media-capture",
     "platforms": [
       "android",
-      "amazon-fireos",
-      "ubuntu",
       "ios",
-      "blackberry10",
-      "wp7",
-      "wp8",
-      "windows8",
-      "windows"
+      "windows",
+      "browser"
     ]
   },
   "repository": {
@@ -30,13 +25,7 @@
     "capture",
     "ecosystem:cordova",
     "cordova-android",
-    "cordova-amazon-fireos",
-    "cordova-ubuntu",
     "cordova-ios",
-    "cordova-blackberry10",
-    "cordova-wp7",
-    "cordova-wp8",
-    "cordova-windows8",
     "cordova-windows"
   ],
   "scripts": {
diff --git a/plugin.xml b/plugin.xml
index 6d400fc..28adf94 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -22,7 +22,7 @@
 xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:rim="http://www.blackberry.com/ns/widgets"
            id="cordova-plugin-media-capture"
-      version="2.0.1-dev">
+      version="3.0.0-dev">
     <name>Capture</name>
 
     <description>Cordova Media Capture Plugin</description>
@@ -93,48 +93,6 @@ xmlns:rim="http://www.blackberry.com/ns/widgets"
         </js-module>
     </platform>
 
-    <!-- amazon-fireos -->
-    <platform name="amazon-fireos">
-        <config-file target="res/xml/config.xml" parent="/*">
-            <feature name="Capture" >
-                <param name="android-package" value="org.apache.cordova.mediacapture.Capture"/>
-            </feature>
-        </config-file>
-
-        <config-file target="AndroidManifest.xml" parent="/*">
-            <uses-permission android:name="android.permission.RECORD_AUDIO" />
-            <uses-permission android:name="android.permission.RECORD_VIDEO"/>
-            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-        </config-file>
-
-        <source-file src="src/android/Capture.java" target-dir="src/org/apache/cordova/mediacapture" />
-        <source-file src="src/android/FileHelper.java" target-dir="src/org/apache/cordova/mediacapture" />
-    </platform>
-
-
-    <!-- ubuntu -->
-    <platform name="ubuntu">
-        <header-file src="src/ubuntu/capture.h" />
-        <source-file src="src/ubuntu/capture.cpp" />
-
-        <resource-file src="src/ubuntu/back.png" />
-        <resource-file src="src/ubuntu/MediaCaptureWidget.qml" />
-        <resource-file src="src/ubuntu/shoot.png" />
-        <resource-file src="src/ubuntu/microphone.png" />
-        <resource-file src="src/ubuntu/record_on.png" />
-        <resource-file src="src/ubuntu/record_off.png" />
-        <resource-file src="src/ubuntu/toolbar-left.png" />
-        <resource-file src="src/ubuntu/toolbar-middle.png" />
-        <resource-file src="src/ubuntu/toolbar-right.png" />
-        <config-file target="config.xml" parent="/*">
-            <feature name="Capture">
-                <param policy_group="audio" policy_version="1" />
-                <param policy_group="camera" policy_version="1" />
-                <param policy_group="microphone" policy_version="1" />
-            </feature>
-        </config-file>
-    </platform>
-
     <!-- ios -->
     <platform name="ios">
         <config-file target="config.xml" parent="/*">
@@ -151,82 +109,6 @@ xmlns:rim="http://www.blackberry.com/ns/widgets"
 
     </platform>
 
-    <!-- blackberry10 -->
-    <platform name="blackberry10">
-        <source-file src="src/blackberry10/index.js" target-dir="Capture" />
-        <config-file target="www/config.xml" parent="/widget">
-            <feature name="media-capture" value="Capture"/>
-        </config-file>
-        <config-file target="www/config.xml" parent="/widget/rim:permissions">
-          <rim:permit>access_shared</rim:permit>
-        </config-file>
-      </platform>
-
-    <!-- wp7 -->
-    <platform name="wp7">
-        <config-file target="config.xml" parent="/*">
-            <feature name="Capture">
-                <param name="wp-package" value="Capture"/>
-            </feature>
-        </config-file>
-
-        <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
-            <Capability Name="ID_CAP_MEDIALIB"/>
-            <Capability Name="ID_CAP_MICROPHONE"/>
-            <Capability Name="ID_CAP_ISV_CAMERA" />
-        </config-file>
-
-        <source-file src="src/wp/Capture.cs" />
-        <source-file src="src/wp/UI/AudioCaptureTask.cs" />
-        <source-file src="src/wp/UI/AudioRecorder.xaml" />
-        <source-file src="src/wp/UI/AudioRecorder.xaml.cs" />
-        <source-file src="src/wp/UI/VideoCaptureTask.cs" />
-        <source-file src="src/wp/UI/VideoRecorder.xaml" />
-        <source-file src="src/wp/UI/VideoRecorder.xaml.cs" />
-    </platform>
-
-    <!-- wp8 -->
-    <platform name="wp8">
-        <config-file target="config.xml" parent="/*">
-            <feature name="Capture">
-                <param name="wp-package" value="Capture"/>
-            </feature>
-        </config-file>
-
-        <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities">
-            <Capability Name="ID_CAP_MEDIALIB_AUDIO"/>
-            <Capability Name="ID_CAP_MEDIALIB_PHOTO"/>
-            <Capability Name="ID_CAP_MEDIALIB_PLAYBACK"/>
-            <Capability Name="ID_CAP_MICROPHONE"/>
-            <Capability Name="ID_CAP_ISV_CAMERA" />
-        </config-file>
-
-        <source-file src="src/wp/Capture.cs" />
-        <source-file src="src/wp/UI/AudioCaptureTask.cs" />
-        <source-file src="src/wp/UI/AudioRecorder.xaml" />
-        <source-file src="src/wp/UI/AudioRecorder.xaml.cs" />
-        <source-file src="src/wp/UI/VideoCaptureTask.cs" />
-        <source-file src="src/wp/UI/VideoRecorder.xaml" />
-        <source-file src="src/wp/UI/VideoRecorder.xaml.cs" />
-    </platform>
-
-    <!-- windows8 -->
-    <platform name="windows8">
-
-        <config-file target="package.appxmanifest" parent="/Package/Capabilities">
-            <DeviceCapability Name="microphone" />
-            <DeviceCapability Name="webcam" />
-        </config-file>
-
-        <js-module src="src/windows/MediaFile.js" name="MediaFile2">
-            <merges target="MediaFile" />
-        </js-module>
-
-        <js-module src="src/windows/CaptureProxy.js" name="CaptureProxy">
-            <runs />
-        </js-module>
-    </platform>
-
     <!-- windows -->
     <platform name="windows">
 
diff --git a/src/blackberry10/index.js b/src/blackberry10/index.js
deleted file mode 100644
index af67836..0000000
--- a/src/blackberry10/index.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- *
- * 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.
- *
-*/
-
-/* global PluginResult */
-
-// cordova-js/lib/common/plugin/CaptureError.js
-var INTERNAL_ERROR_CODE = 0;
-var APPLICATION_BUSY_ERROR_CODE = 1;
-var INVALID_ARGUMENT_ERROR_CODE = 2;
-var NO_MEDIA_FILES_ERROR_CODE = 3;
-
-function capture (action, options, result, webview) {
-    var limit = options.limit || 1;
-    var fail = function (error) { // eslint-disable-line handle-callback-err
-        result.callbackError({code: INTERNAL_ERROR_CODE});
-    };
-    var onCaptured = function (path) {
-        var sb = webview.setFileSystemSandbox;
-        webview.setFileSystemSandbox = false;
-        window.webkitRequestFileSystem(window.PERSISTENT, 1024, function (fs) {
-            fs.root.getFile(path, {}, function (fe) {
-                fe.file(function (file) {
-                    file.fullPath = fe.fullPath;
-                    webview.setFileSystemSandbox = sb;
-                    result.callbackOk([file]);
-                }, fail);
-            }, fail);
-        }, fail);
-    };
-    var onAudioCaptured = function (response) {
-        window.qnx.webplatform.getApplication().invocation.removeEventListener('childCardClosed', onAudioCaptured);
-        if (response.data && response.data !== '') {
-            onCaptured(response.data);
-        } else {
-            result.callbackError({ code: NO_MEDIA_FILES_ERROR_CODE });
-        }
-    };
-    var onCancelled = function () {
-        result.callbackError({ code: NO_MEDIA_FILES_ERROR_CODE });
-    };
-    var onInvoked = function (error) {
-        if (error) {
-            result.callbackError({ code: APPLICATION_BUSY_ERROR_CODE });
-        }
-    };
-
-    if (limit < 0) {
-        result.error({code: INVALID_ARGUMENT_ERROR_CODE});
-    } else if (action === 'audio') {
-        window.qnx.webplatform.getApplication().invocation.invoke(
-            {
-                target: 'sys.apps.audiorecorder',
-                action: 'bb.action.CAPTURE'
-            },
-            function (error) {
-                if (error) {
-                    console.log(error);
-                } else {
-                    window.qnx.webplatform.getApplication().invocation.addEventListener('childCardClosed', onAudioCaptured);
-                }
-            });
-        result.noResult(true);
-    } else {
-        window.qnx.webplatform.getApplication().cards.camera.open(action, onCaptured, onCancelled, onInvoked);
-        result.noResult(true);
-    }
-}
-
-module.exports = {
-    getSupportedAudioModes: function (success, fail, args, env) {
-        var result = new PluginResult(args, env);
-        result.ok([]);
-    },
-    getSupportedImageModes: function (win, fail, args, env) {
-        var result = new PluginResult(args, env);
-        result.ok([]);
-    },
-    getSupportedVideoModes: function (win, fail, args, env) {
-        var result = new PluginResult(args, env);
-        result.ok([]);
-    },
-    captureImage: function (win, fail, args, env) {
-        var result = new PluginResult(args, env);
-        var options = args[0] === 'undefined' ? {} : JSON.parse(decodeURIComponent(args[0]));
-
-        capture('photo', options, result, env.webview);
-    },
-    captureVideo: function (win, fail, args, env) {
-        var result = new PluginResult(args, env);
-        var options = args[0] === 'undefined' ? {} : JSON.parse(decodeURIComponent(args[0]));
-
-        capture('video', options, result, env.webview);
-    },
-    captureAudio: function (win, fail, args, env) {
-        var result = new PluginResult(args, env);
-        capture('audio', {}, result, env.webview);
-    }
-};
diff --git a/src/ubuntu/MediaCaptureWidget.qml b/src/ubuntu/MediaCaptureWidget.qml
deleted file mode 100644
index 98350fa..0000000
--- a/src/ubuntu/MediaCaptureWidget.qml
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * 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.
- *
-*/
-import QtQuick 2.0
-import QtMultimedia 5.0
-
-Rectangle {
-    property string recordOffImagePath: "record_off.png"
-    property string recordOnImagePath: "record_on.png"
-    property string shootImagePath: "shoot.png"
-    function isSuffix(str, suffix) {
-        return String(str).substr(String(str).length - suffix.length) == suffix
-    }
-
-    id: ui
-    color: "#252423"
-    anchors.fill: parent
-    state: "off"
-
-    Camera {
-        objectName: "camera"
-        id: camera
-        onError: {
-            console.log(errorString);
-            shootButton.source = recordOffImagePath
-        }
-        imageCapture {
-            onImageSaved: {
-                root.exec("Capture", "onImageSaved", [path]);
-                ui.destroy();
-            }
-        }
-        videoRecorder {
-            audioBitRate: 128000
-            mediaContainer: "mp4"
-            outputLocation: ui.parent.plugin('Capture').generateLocation("mp4")
-            onRecorderStateChanged: {
-               if (videoRecorder.recorderState === CameraRecorder.StoppedState) {
-                   ui.parent.exec("Capture", "onVideoRecordEnd", [camera.videoRecorder.outputLocation]);
-                   shootButton.source = recordOffImagePath
-               }
-            }
-        }
-    }
-    Image {
-        id: microphoneImage
-        source: "microphone.png"
-        smooth: true
-        visible: false
-        width: parent.width
-        height: parent.height
-    }
-    VideoOutput {
-        id: output
-        focus : visible
-        source: camera
-        width: parent.width
-        height: parent.height
-    }
-
-    Item {
-        anchors.bottom: parent.bottom
-        width: parent.width
-        height: shootButton.height
-        BorderImage {
-            id: leftBackground
-            anchors.left: parent.left
-            anchors.top: parent.top
-            anchors.bottom: parent.bottom
-            anchors.right: middle.left
-            anchors.topMargin: units.dp(2)
-            anchors.bottomMargin: units.dp(2)
-            source: "toolbar-left.png"
-            Image {
-                anchors.verticalCenter: parent.verticalCenter
-                anchors.left: parent.left
-                anchors.leftMargin: parent.iconSpacing
-                source: "back.png"
-                width: units.gu(6)
-                height: units.gu(5)
-                MouseArea {
-                    anchors.fill: parent
-                    onClicked: {
-                        root.exec("Capture", "cancel");
-                    }
-                }
-            }
-        }
-        BorderImage {
-            id: middle
-            anchors.top: parent.top
-            anchors.bottom: parent.bottom
-            anchors.horizontalCenter: parent.horizontalCenter
-            height: shootButton.height + units.gu(1)
-            width: shootButton.width
-            source: "toolbar-middle.png"
-            Image {
-                id: shootButton
-                width: units.gu(8)
-                height: width
-                anchors.horizontalCenter: parent.horizontalCenter
-                source: shootImagePath
-                MouseArea {
-                    anchors.fill: parent
-                    onClicked: {
-                        if (ui.state === "camera") {
-                            camera.imageCapture.captureToLocation(ui.parent.plugin('Capture').generateLocation("jpg"));
-                        } else if (ui.state === "audio") {
-                            ui.parent.exec("Capture", "recordAudio");
-                            if (isSuffix(shootButton.source, recordOffImagePath)) {
-                                shootButton.source = recordOnImagePath
-                            } else {
-                                shootButton.source = recordOffImagePath
-                            }
-                        } else if (ui.state === "videoRecording") {
-                            if (!camera.videoRecorder.recorderState) {
-                                shootButton.source = recordOnImagePath
-                                camera.videoRecorder.record();
-                            } else {
-                                camera.videoRecorder.stop();
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        BorderImage {
-            id: rightBackground
-            anchors.right: parent.right
-            anchors.top: parent.top
-            anchors.bottom: parent.bottom
-            anchors.left: middle.right
-            anchors.topMargin: units.dp(2)
-            anchors.bottomMargin: units.dp(2)
-            source: "toolbar-right.png"
-        }
-    }
-    states: [
-        State {
-            name: "off"
-            StateChangeScript {
-                script:{
-		    ui.visible = false;
-                    camera.stop();
-                    camera.unlock();
-                }
-            }
-        },
-        State {
-            name: "camera"
-            StateChangeScript {
-                script: {
-                    camera.start();
-		    microphoneImage.visible = false
-                    output.visible = true
-                    shootButton.source = shootImagePath
-                    ui.visible = true
-                }
-            }
-        },
-        State {
-            name: "videoRecording"
-            StateChangeScript {
-                script: {
-                    shootButton.source = recordOffImagePath
-                    camera.start();
-		    microphoneImage.visible = false
-                    output.visible = true
-                    ui.visible = true
-                }
-            }
-        },
-        State {
-            name: "audio"
-            StateChangeScript {
-                script:{
-                    shootButton.source = recordOffImagePath
-                    camera.stop();
-		    microphoneImage.visible = true
-                    camera.unlock();
-                    output.visible = false
-                    ui.visible = true
-                }
-            }
-        }
-    ]
-}
diff --git a/src/ubuntu/back.png b/src/ubuntu/back.png
deleted file mode 100644
index af78faa..0000000
Binary files a/src/ubuntu/back.png and /dev/null differ
diff --git a/src/ubuntu/capture.cpp b/src/ubuntu/capture.cpp
deleted file mode 100644
index aaf0910..0000000
--- a/src/ubuntu/capture.cpp
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * 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.
- *
-*/
-#include "capture.h"
-
-const char code[] = "\
-var component, object;                                                  \
-function createObject() {                                               \
-    component = Qt.createComponent(%1);                                 \
-    if (component.status == Component.Ready)                            \
-        finishCreation();                                               \
-    else                                                                \
-        component.statusChanged.connect(finishCreation);                \
-}                                                                       \
-function finishCreation() {                                             \
-    CordovaWrapper.global.captureObject = component.createObject(root,         \
-        {root: root, cordova: cordova, state: \"%2\"});                 \
-}                                                                       \
-createObject()";
-
-static QString formatFile(const QMimeDatabase &db, const QString &path) {
-    QFileInfo info(path);
-    QMimeType mime = db.mimeTypeForFile(info.fileName());
-
-    QVariantMap file;
-    file.insert("name", info.fileName());
-    file.insert("fullPath", info.absoluteFilePath());
-    file.insert("lastModifiedDate", info.lastModified().toMSecsSinceEpoch());
-    file.insert("size", info.size());
-    file.insert("type", mime.name());
-
-    return CordovaInternal::format(file);
-}
-
-MediaCapture::MediaCapture(Cordova *cordova): CPlugin(cordova), _scId(0), _ecId(0) {
-}
-
-void MediaCapture::captureAudio(int scId, int ecId, const QVariantMap &) {
-    if (_scId || _ecId) {
-        this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_APPLICATION_BUSY));
-        return;
-    }
-
-    QString path = m_cordova->get_app_dir() + "/../qml/MediaCaptureWidget.qml";
-
-    QString qml = QString(code).arg(CordovaInternal::format(path)).arg("audio");
-    m_cordova->execQML(qml);
-
-    _scId = scId;
-    _ecId = ecId;
-}
-
-void MediaCapture::onAudioRecordError(QMediaRecorder::Error) {
-    if (!_ecId)
-        return;
-    this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_INTERNAL_ERR));
-    _ecId = _scId = 0;
-
-    _recorder.clear();
-    _files.clear();
-
-    m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()");
-}
-
-void MediaCapture::recordAudio() {
-    if (_recorder.data()) {
-        QUrl url = _recorder->outputLocation();
-
-        QString path = url.toString();
-        _recorder->stop();
-
-        _recorder.clear();
-
-        this->callback(_scId, QString("[%1]").arg(formatFile(_db, path)));
-        _ecId = _scId = 0;
-
-        m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()");
-    } else {
-        _recorder = QSharedPointer<QAudioRecorder>(new QAudioRecorder);
-        QObject::connect(_recorder.data(), SIGNAL(error(QMediaRecorder::Error)), this, SLOT(onAudioRecordError(QMediaRecorder::Error)));
-
-        if (_options.find("mode")->toString() == "audio/amr") {
-            _recorder->setContainerFormat("amr");
-            _recorder->setOutputLocation(generateLocation("amr"));
-        } else {
-            _recorder->setContainerFormat("wav");
-            _recorder->setOutputLocation(generateLocation("wav"));
-        }
-        _recorder->record();
-    }
-}
-
-void MediaCapture::cancel() {
-    if (!_ecId)
-        return;
-
-    m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()");
-
-    _recorder.clear();
-    this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_NO_MEDIA_FILES));
-    _ecId = _scId = 0;
-
-    _recorder.clear();
-}
-
-void MediaCapture::captureVideo(int scId, int ecId, const QVariantMap &) {
-    if (_scId || _ecId) {
-        this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_APPLICATION_BUSY));
-        return;
-    }
-
-    QString path = m_cordova->get_app_dir() + "/../qml/MediaCaptureWidget.qml";
-    QString qml = QString(code).arg(CordovaInternal::format(path)).arg("videoRecording");
-    m_cordova->execQML(qml);
-
-    _scId = scId;
-    _ecId = ecId;
-}
-
-void MediaCapture::onVideoRecordEnd(const QString &uri) {
-    QString path = QUrl::fromUserInput(uri).path();
-
-    this->callback(_scId, QString("[%1]").arg(formatFile(_db, path)));
-    _ecId = _scId = 0;
-
-    m_cordova->execQML("CordovaWrapper.global.captureObject.destroy()");
-}
-
-void MediaCapture::captureImage(int scId, int ecId, const QVariantMap &) {
-    if (_scId || _ecId) {
-        this->callback(_ecId, QString("{code: %1}").arg(CAPTURE_APPLICATION_BUSY));
-        return;
-    }
-
-    QString path = m_cordova->get_app_dir() + "/../qml/MediaCaptureWidget.qml";
-    QString qml = QString(code).arg(CordovaInternal::format(path)).arg("camera");
-    m_cordova->execQML(qml);
-
-    _scId = scId;
-    _ecId = ecId;
-}
-
-void MediaCapture::onImageSaved(const QString &path) {
-    this->callback(_scId, QString("[%1]").arg(formatFile(_db, path)));
-    _ecId = _scId = 0;
-}
diff --git a/src/ubuntu/capture.h b/src/ubuntu/capture.h
deleted file mode 100644
index 4806771..0000000
--- a/src/ubuntu/capture.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * 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.
- *
-*/
-#ifndef CAPTURE_H_ASCXZFG975
-#define CAPTURE_H_ASCXZFG975
-
-#include <cordova.h>
-#include <cplugin.h>
-#include <QtMultimedia>
-#include <QtCore>
-#include <QtQuick>
-
-class MediaCapture: public CPlugin {
-    Q_OBJECT
-public:
-    explicit MediaCapture(Cordova *cordova);
-
-    virtual const QString fullName() override {
-        return MediaCapture::fullID();
-    }
-
-    virtual const QString shortName() override {
-        return "Capture";
-    }
-
-    static const QString fullID() {
-        return "Capture";
-    }
-
-public slots:
-    void captureAudio(int scId, int ecId, const QVariantMap &);
-    void captureImage(int scId, int ecId, const QVariantMap &);
-    void captureVideo(int scId, int ecId, const QVariantMap &);
-
-    void recordAudio();
-    void cancel();
-    void onVideoRecordEnd(const QString &uri);
-    void onImageSaved(const QString &path);
-
-    QString generateLocation(const QString &extension) {
-        int i = 1;
-        for (;;++i) {
-            QString path = QString("%1/.local/share/%2/persistent/%3.%4").arg(QDir::homePath())
-                .arg(QCoreApplication::applicationName()).arg(i).arg(extension);
-
-            if (!QFileInfo(path).exists())
-                return path;
-        }
-    }
-private slots:
-    void onAudioRecordError(QMediaRecorder::Error);
-private:
-    QSharedPointer<QAudioRecorder> _recorder;
-
-    int _scId, _ecId;
-    QList<QString> _files;
-    QVariantMap _options;
-    QMimeDatabase _db;
-
-    enum CaptureError {
-        CAPTURE_INTERNAL_ERR = 0,
-        CAPTURE_APPLICATION_BUSY = 1,
-        CAPTURE_INVALID_ARGUMENT = 2,
-        CAPTURE_NO_MEDIA_FILES = 3,
-        CAPTURE_NOT_SUPPORTED = 20
-    };
-};
-
-#endif
diff --git a/src/ubuntu/microphone.png b/src/ubuntu/microphone.png
deleted file mode 100644
index 4f2a5cf..0000000
Binary files a/src/ubuntu/microphone.png and /dev/null differ
diff --git a/src/ubuntu/record_off.png b/src/ubuntu/record_off.png
deleted file mode 100644
index adc822c..0000000
Binary files a/src/ubuntu/record_off.png and /dev/null differ
diff --git a/src/ubuntu/record_on.png b/src/ubuntu/record_on.png
deleted file mode 100644
index 985658a..0000000
Binary files a/src/ubuntu/record_on.png and /dev/null differ
diff --git a/src/ubuntu/shoot.png b/src/ubuntu/shoot.png
deleted file mode 100644
index c093b63..0000000
Binary files a/src/ubuntu/shoot.png and /dev/null differ
diff --git a/src/ubuntu/toolbar-left.png b/src/ubuntu/toolbar-left.png
deleted file mode 100644
index 720d7f6..0000000
Binary files a/src/ubuntu/toolbar-left.png and /dev/null differ
diff --git a/src/ubuntu/toolbar-middle.png b/src/ubuntu/toolbar-middle.png
deleted file mode 100644
index 77595bb..0000000
Binary files a/src/ubuntu/toolbar-middle.png and /dev/null differ
diff --git a/src/ubuntu/toolbar-right.png b/src/ubuntu/toolbar-right.png
deleted file mode 100644
index e4e6aa6..0000000
Binary files a/src/ubuntu/toolbar-right.png and /dev/null differ
diff --git a/src/wp/Capture.cs b/src/wp/Capture.cs
deleted file mode 100644
index 1f5a327..0000000
--- a/src/wp/Capture.cs
+++ /dev/null
@@ -1,736 +0,0 @@
-?/*  
-	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.
-*/
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Runtime.Serialization;
-using System.Windows.Media.Imaging;
-using Microsoft.Phone;
-using Microsoft.Phone.Tasks;
-using Microsoft.Xna.Framework.Media;
-using WPCordovaClassLib.Cordova.UI;
-using AudioResult = WPCordovaClassLib.Cordova.UI.AudioCaptureTask.AudioResult;
-using VideoResult = WPCordovaClassLib.Cordova.UI.VideoCaptureTask.VideoResult;
-using System.Windows;
-using System.Diagnostics;
-using Microsoft.Phone.Controls;
-
-namespace WPCordovaClassLib.Cordova.Commands
-{
-    /// <summary>
-    /// Provides access to the audio, image, and video capture capabilities of the device
-    /// </summary>
-    public class Capture : BaseCommand
-    {
-        #region Internal classes (options and resultant objects)
-
-        /// <summary>
-        /// Represents captureImage action options.
-        /// </summary>
-        [DataContract]
-        public class CaptureImageOptions
-        {
-            /// <summary>
-            /// The maximum number of images the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1).
-            /// </summary>
-            [DataMember(IsRequired = false, Name = "limit")]
-            public int Limit { get; set; }
-
-            public static CaptureImageOptions Default
-            {
-                get { return new CaptureImageOptions() { Limit = 1 }; }
-            }
-        }
-
-        /// <summary>
-        /// Represents captureAudio action options.
-        /// </summary>
-        [DataContract]
-        public class CaptureAudioOptions
-        {
-            /// <summary>
-            /// The maximum number of audio files the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1).
-            /// </summary>
-            [DataMember(IsRequired = false, Name = "limit")]
-            public int Limit { get; set; }
-
-            public static CaptureAudioOptions Default
-            {
-                get { return new CaptureAudioOptions() { Limit = 1 }; }
-            }
-        }
-
-        /// <summary>
-        /// Represents captureVideo action options.
-        /// </summary>
-        [DataContract]
-        public class CaptureVideoOptions
-        {
-            /// <summary>
-            /// The maximum number of video files the device user can capture in a single capture operation. The value must be greater than or equal to 1 (defaults to 1).
-            /// </summary>
-            [DataMember(IsRequired = false, Name = "limit")]
-            public int Limit { get; set; }
-
-            public static CaptureVideoOptions Default
-            {
-                get { return new CaptureVideoOptions() { Limit = 1 }; }
-            }
-        }
-
-        /// <summary>
-        /// Represents getFormatData action options.
-        /// </summary>
-        [DataContract]
-        public class MediaFormatOptions
-        {
-            /// <summary>
-            /// File path
-            /// </summary>
-            [DataMember(IsRequired = true, Name = "fullPath")]
-            public string FullPath { get; set; }
-
-            /// <summary>
-            /// File mime type
-            /// </summary>
-            [DataMember(Name = "type")]
-            public string Type { get; set; }
-
-        }
-
-        /// <summary>
-        /// Stores image info
-        /// </summary>
-        [DataContract]
-        public class MediaFile
-        {
-
-            [DataMember(Name = "name")]
-            public string FileName { get; set; }
-
-            [DataMember(Name = "fullPath")]
-            public string FilePath { get; set; }
-
-            [DataMember(Name = "type")]
-            public string Type { get; set; }
-
-            [DataMember(Name = "lastModifiedDate")]
-            public string LastModifiedDate { get; set; }
-
-            [DataMember(Name = "size")]
-            public long Size { get; set; }
-
-            public MediaFile(string filePath, Picture image)
-            {
-                this.FilePath = filePath;
-                this.FileName = System.IO.Path.GetFileName(this.FilePath);
-                this.Type = MimeTypeMapper.GetMimeType(FileName);
-                this.Size = image.GetImage().Length;
-
-                using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
-                {
-                    this.LastModifiedDate = storage.GetLastWriteTime(filePath).DateTime.ToString();
-                }
-
-            }
-
-            public MediaFile(string filePath, Stream stream)
-            {
-                this.FilePath = filePath;
-                this.FileName = System.IO.Path.GetFileName(this.FilePath);
-                this.Type = MimeTypeMapper.GetMimeType(FileName);
-                this.Size = stream.Length;
-
-                using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
-                {
-                    this.LastModifiedDate = storage.GetLastWriteTime(filePath).DateTime.ToString();
-                }
-            }
-        }
-
-        /// <summary>
-        /// Stores additional media file data
-        /// </summary>
-        [DataContract]
-        public class MediaFileData
-        {
-            [DataMember(Name = "height")]
-            public int Height { get; set; }
-
-            [DataMember(Name = "width")]
-            public int Width { get; set; }
-
-            [DataMember(Name = "bitrate")]
-            public int Bitrate { get; set; }
-
-            [DataMember(Name = "duration")]
-            public int Duration { get; set; }
-
-            [DataMember(Name = "codecs")]
-            public string Codecs { get; set; }
-
-            public MediaFileData(WriteableBitmap image)
-            {
-                this.Height = image.PixelHeight;
-                this.Width = image.PixelWidth;
-                this.Bitrate = 0;
-                this.Duration = 0;
-                this.Codecs = "";
-            }
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Folder to store captured images
-        /// </summary>
-        private string isoFolder = "CapturedImagesCache";
-
-        /// <summary>
-        /// Capture Image options
-        /// </summary>
-        protected CaptureImageOptions captureImageOptions;
-
-        /// <summary>
-        /// Capture Audio options
-        /// </summary>
-        protected CaptureAudioOptions captureAudioOptions;
-
-        /// <summary>
-        /// Capture Video options
-        /// </summary>
-        protected CaptureVideoOptions captureVideoOptions;
-
-        /// <summary>
-        /// Used to open camera application
-        /// </summary>
-        private CameraCaptureTask cameraTask;
-
-        /// <summary>
-        /// Used for audio recording
-        /// </summary>
-        private AudioCaptureTask audioCaptureTask;
-
-        /// <summary>
-        /// Used for video recording
-        /// </summary>
-        private VideoCaptureTask videoCaptureTask;
-
-        /// <summary>
-        /// Stores information about captured files
-        /// </summary>
-        List<MediaFile> files = new List<MediaFile>();
-
-        /// <summary>
-        /// Launches default camera application to capture image
-        /// </summary>
-        /// <param name="options">may contains limit or mode parameters</param>
-        public void captureImage(string options)
-        {
-            try
-            {
-                try
-                {
-
-                    string args = JSON.JsonHelper.Deserialize<string[]>(options)[0];
-                    this.captureImageOptions = String.IsNullOrEmpty(args) ? CaptureImageOptions.Default : JSON.JsonHelper.Deserialize<CaptureImageOptions>(args);
-
-                }
-                catch (Exception ex)
-                {
-                    this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
-                    return;
-                }
-
-
-                cameraTask = new CameraCaptureTask();
-                cameraTask.Completed += this.cameraTask_Completed;
-                cameraTask.Show();
-            }
-            catch (Exception e)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
-            }
-        }
-
-        /// <summary>
-        /// Launches our own audio recording control to capture audio
-        /// </summary>
-        /// <param name="options">may contains additional parameters</param>
-        public void captureAudio(string options)
-        {
-            try
-            {
-                try
-                {
-                    string args = JSON.JsonHelper.Deserialize<string[]>(options)[0];
-                    this.captureAudioOptions = String.IsNullOrEmpty(args) ? CaptureAudioOptions.Default : JSON.JsonHelper.Deserialize<CaptureAudioOptions>(args);
-
-                }
-                catch (Exception ex)
-                {
-                    this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
-                    return;
-                }
-
-                audioCaptureTask = new AudioCaptureTask();
-                audioCaptureTask.Completed += audioRecordingTask_Completed;
-                audioCaptureTask.Show();
-
-            }
-            catch (Exception e)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
-            }
-        }
-
-        /// <summary>
-        /// Launches our own video recording control to capture video
-        /// </summary>
-        /// <param name="options">may contains additional parameters</param>
-        public void captureVideo(string options)
-        {
-            try
-            {
-                try
-                {
-                    string args = JSON.JsonHelper.Deserialize<string[]>(options)[0];
-                    this.captureVideoOptions = String.IsNullOrEmpty(args) ? CaptureVideoOptions.Default : JSON.JsonHelper.Deserialize<CaptureVideoOptions>(args);
-
-                }
-                catch (Exception ex)
-                {
-                    this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
-                    return;
-                }
-
-                videoCaptureTask = new VideoCaptureTask();
-                videoCaptureTask.Completed += videoRecordingTask_Completed;
-                videoCaptureTask.Show();
-
-            }
-            catch (Exception e)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
-            }
-        }
-
-        /// <summary>
-        /// Retrieves the format information of the media file.
-        /// </summary>
-        /// <param name="options"></param>
-        public void getFormatData(string options)
-        {
-            try
-            {
-                MediaFormatOptions mediaFormatOptions;
-                try
-                {
-                    mediaFormatOptions = new MediaFormatOptions();
-                    string[] optionStrings = JSON.JsonHelper.Deserialize<string[]>(options);
-                    mediaFormatOptions.FullPath = optionStrings[0];
-                    mediaFormatOptions.Type = optionStrings[1];
-                }
-                catch (Exception ex)
-                {
-                    this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
-                    return;
-                }
-
-                if (string.IsNullOrEmpty(mediaFormatOptions.FullPath))
-                {
-                    DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
-                }
-
-                string mimeType = mediaFormatOptions.Type;
-
-                if (string.IsNullOrEmpty(mimeType))
-                {
-                    mimeType = MimeTypeMapper.GetMimeType(mediaFormatOptions.FullPath);
-                }
-
-                if (mimeType.Equals("image/jpeg"))
-                {
-                    Deployment.Current.Dispatcher.BeginInvoke(() =>
-                    {
-                        WriteableBitmap image = ExtractImageFromLocalStorage(mediaFormatOptions.FullPath);
-
-                        if (image == null)
-                        {
-                            DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "File not found"));
-                            return;
-                        }
-
-                        MediaFileData mediaData = new MediaFileData(image);
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.OK, mediaData));
-                    });
-                }
-                else
-                {
-                    DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
-                }
-            }
-            catch (Exception)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
-            }
-        }
-
-        /// <summary>
-        /// Opens specified file in media player
-        /// </summary>
-        /// <param name="options">MediaFile to play</param>
-        public void play(string options)
-        {
-            try
-            {
-                MediaFile file;
-
-                try
-                {
-                    file = String.IsNullOrEmpty(options) ? null : JSON.JsonHelper.Deserialize<MediaFile[]>(options)[0];
-
-                }
-                catch (Exception ex)
-                {
-                    this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message));
-                    return;
-                }
-
-                if (file == null || String.IsNullOrEmpty(file.FilePath))
-                {
-                    DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "File path is missing"));
-                    return;
-                }
-
-                // if url starts with '/' media player throws FileNotFound exception
-                Uri fileUri = new Uri(file.FilePath.TrimStart(new char[] { '/', '\\' }), UriKind.Relative);
-
-                MediaPlayerLauncher player = new MediaPlayerLauncher();
-                player.Media = fileUri;
-                player.Location = MediaLocationType.Data;
-                player.Show();
-
-                this.DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
-
-            }
-            catch (Exception e)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, e.Message));
-            }
-        }
-
-
-        /// <summary>
-        /// Handles result of capture to save image information 
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e">stores information about current captured image</param>
-        private void cameraTask_Completed(object sender, PhotoResult e)
-        {
-
-            if (e.Error != null)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
-                return;
-            }
-
-            switch (e.TaskResult)
-            {
-                case TaskResult.OK:
-                    try
-                    {
-                        string fileName = System.IO.Path.GetFileName(e.OriginalFileName);
-
-                        // Save image in media library
-                        MediaLibrary library = new MediaLibrary();
-                        Picture image = library.SavePicture(fileName, e.ChosenPhoto);
-
-                        int orient = ImageExifHelper.getImageOrientationFromStream(e.ChosenPhoto);
-                        int newAngle = 0;
-                        switch (orient)
-                        {
-                            case ImageExifOrientation.LandscapeLeft:
-                                newAngle = 90;
-                                break;
-                            case ImageExifOrientation.PortraitUpsideDown:
-                                newAngle = 180;
-                                break;
-                            case ImageExifOrientation.LandscapeRight:
-                                newAngle = 270;
-                                break;
-                            case ImageExifOrientation.Portrait:
-                            default: break; // 0 default already set
-                        }
-
-                        Stream rotImageStream = ImageExifHelper.RotateStream(e.ChosenPhoto, newAngle);
-
-                        // Save image in isolated storage    
-
-                        // we should return stream position back after saving stream to media library
-                        rotImageStream.Seek(0, SeekOrigin.Begin);
-
-                        byte[] imageBytes = new byte[rotImageStream.Length];
-                        rotImageStream.Read(imageBytes, 0, imageBytes.Length);
-                        rotImageStream.Dispose();
-                        string pathLocalStorage = this.SaveImageToLocalStorage(fileName, isoFolder, imageBytes);
-                        imageBytes = null;
-                        // Get image data
-                        MediaFile data = new MediaFile(pathLocalStorage, image);
-
-                        this.files.Add(data);
-
-                        if (files.Count < this.captureImageOptions.Limit)
-                        {
-                            cameraTask.Show();
-                        }
-                        else
-                        {
-                            DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                            files.Clear();
-                        }
-                    }
-                    catch (Exception)
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing image."));
-                    }
-                    break;
-
-                case TaskResult.Cancel:
-                    if (files.Count > 0)
-                    {
-                        // User canceled operation, but some images were made
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                        files.Clear();
-                    }
-                    else
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled."));
-                    }
-                    break;
-
-                default:
-                    if (files.Count > 0)
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                        files.Clear();
-                    }
-                    else
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!"));
-                    }
-                    break;
-            }
-        }
-
-        /// <summary>
-        /// Handles result of audio recording tasks 
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e">stores information about current captured audio</param>
-        private void audioRecordingTask_Completed(object sender, AudioResult e)
-        {
-
-            if (e.Error != null)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
-                return;
-            }
-
-            switch (e.TaskResult)
-            {
-                case TaskResult.OK:
-                    try
-                    {
-                        // Get image data
-                        MediaFile data = new MediaFile(e.AudioFileName, e.AudioFile);
-
-                        this.files.Add(data);
-
-                        if (files.Count < this.captureAudioOptions.Limit)
-                        {
-                            audioCaptureTask.Show();
-                        }
-                        else
-                        {
-                            DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                            files.Clear();
-                        }
-                    }
-                    catch (Exception)
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing audio."));
-                    }
-                    break;
-
-                case TaskResult.Cancel:
-                    if (files.Count > 0)
-                    {
-                        // User canceled operation, but some audio clips were made
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                        files.Clear();
-                    }
-                    else
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled."));
-                    }
-                    break;
-
-                default:
-                    if (files.Count > 0)
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                        files.Clear();
-                    }
-                    else
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!"));
-                    }
-                    break;
-            }
-        }
-
-        /// <summary>
-        /// Handles result of video recording tasks 
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e">stores information about current captured video</param>
-        private void videoRecordingTask_Completed(object sender, VideoResult e)
-        {
-
-            if (e.Error != null)
-            {
-                DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR));
-                return;
-            }
-
-            switch (e.TaskResult)
-            {
-                case TaskResult.OK:
-                    try
-                    {
-                        // Get image data
-                        MediaFile data = new MediaFile(e.VideoFileName, e.VideoFile);
-
-                        this.files.Add(data);
-
-                        if (files.Count < this.captureVideoOptions.Limit)
-                        {
-                            videoCaptureTask.Show();
-                        }
-                        else
-                        {
-                            DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                            files.Clear();
-                        }
-                    }
-                    catch (Exception)
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Error capturing video."));
-                    }
-                    break;
-
-                case TaskResult.Cancel:
-                    if (files.Count > 0)
-                    {
-                        // User canceled operation, but some video clips were made
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                        files.Clear();
-                    }
-                    else
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Canceled."));
-                    }
-                    break;
-
-                default:
-                    if (files.Count > 0)
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.OK, files));
-                        files.Clear();
-                    }
-                    else
-                    {
-                        DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Did not complete!"));
-                    }
-                    break;
-            }
-        }
-
-        /// <summary>
-        /// Extract file from Isolated Storage as WriteableBitmap object
-        /// </summary>
-        /// <param name="filePath"></param>
-        /// <returns></returns>
-        private WriteableBitmap ExtractImageFromLocalStorage(string filePath)
-        {
-            try
-            {
-
-                var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
-
-                using (var imageStream = isoFile.OpenFile(filePath, FileMode.Open, FileAccess.Read))
-                {
-                    var imageSource = PictureDecoder.DecodeJpeg(imageStream);
-                    return imageSource;
-                }
-            }
-            catch (Exception)
-            {
-                return null;
-            }
-        }
-
-
-        /// <summary>
-        /// Saves captured image in isolated storage
-        /// </summary>
-        /// <param name="imageFileName">image file name</param>
-        /// <param name="imageFolder">folder to store images</param>
-        /// <returns>Image path</returns>
-        private string SaveImageToLocalStorage(string imageFileName, string imageFolder, byte[] imageBytes)
-        {
-            if (imageBytes == null)
-            {
-                throw new ArgumentNullException("imageBytes");
-            }
-            try
-            {
-                var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
-
-                if (!isoFile.DirectoryExists(imageFolder))
-                {
-                    isoFile.CreateDirectory(imageFolder);
-                }
-                string filePath = System.IO.Path.Combine("/" + imageFolder + "/", imageFileName);
-
-                using (IsolatedStorageFileStream stream = isoFile.CreateFile(filePath))
-                {
-                    stream.Write(imageBytes, 0, imageBytes.Length);
-                }
-
-                return filePath;
-            }
-            catch (Exception)
-            {
-                //TODO: log or do something else
-                throw;
-            }
-        }
-
-
-    }
-}
diff --git a/src/wp/UI/AudioCaptureTask.cs b/src/wp/UI/AudioCaptureTask.cs
deleted file mode 100644
index 9049e2e..0000000
--- a/src/wp/UI/AudioCaptureTask.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-?/*  
-	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.
-*/
-
-using System;
-using System.IO;
-using System.Windows;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Tasks;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
-    /// <summary>
-    /// Allows an application to launch the Audio Recording application. 
-    /// Use this to allow users to record audio from your application.
-    /// </summary>
-    public class AudioCaptureTask
-    {
-        /// <summary>
-        /// Represents recorded audio returned from a call to the Show method of
-        /// a WPCordovaClassLib.Cordova.Controls.AudioCaptureTask object
-        /// </summary>
-        public class AudioResult : TaskEventArgs
-        {
-            /// <summary>
-            /// Initializes a new instance of the AudioResult class.
-            /// </summary>
-            public AudioResult()
-            { }
-
-            /// <summary>
-            /// Initializes a new instance of the AudioResult class
-            /// with the specified Microsoft.Phone.Tasks.TaskResult.
-            /// </summary>
-            /// <param name="taskResult">Associated Microsoft.Phone.Tasks.TaskResult</param>
-            public AudioResult(TaskResult taskResult)
-                : base(taskResult)
-            { }
-
-            /// <summary>
-            ///  Gets the file name of the recorded audio.
-            /// </summary>
-            public Stream AudioFile { get; internal set; }
-
-            /// <summary>
-            /// Gets the stream containing the data for the recorded audio.
-            /// </summary>
-            public string AudioFileName { get; internal set; }
-        }
-
-        /// <summary>
-        /// Occurs when a audio recording task is completed.
-        /// </summary>
-        public event EventHandler<AudioResult> Completed;
-
-        /// <summary>
-        /// Shows Audio Recording application
-        /// </summary>
-        public void Show()
-        {
-            Deployment.Current.Dispatcher.BeginInvoke(() =>
-            {
-                var root = Application.Current.RootVisual as PhoneApplicationFrame;
-
-                root.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated);
-
-                string baseUrl = "/";
-                // dummy parameter is used to always open a fresh version
-                root.Navigate(new System.Uri(baseUrl + "Plugins/cordova-plugin-media-capture/AudioRecorder.xaml?dummy=" + Guid.NewGuid().ToString(), UriKind.Relative));
-
-            });
-        }
-
-        /// <summary>
-        /// Performs additional configuration of the recording application.
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void NavigationService_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
-        {
-            if (!(e.Content is AudioRecorder)) return;
-
-            (Application.Current.RootVisual as PhoneApplicationFrame).Navigated -= NavigationService_Navigated;
-
-            AudioRecorder audioRecorder = (AudioRecorder)e.Content;
-
-            if (audioRecorder != null)
-            {
-                audioRecorder.Completed += this.Completed;
-            }
-            else if (this.Completed != null)
-            {
-                this.Completed(this, new AudioResult(TaskResult.Cancel));
-            }
-        }
-    }
-}
diff --git a/src/wp/UI/AudioRecorder.xaml b/src/wp/UI/AudioRecorder.xaml
deleted file mode 100644
index 0fd26ab..0000000
--- a/src/wp/UI/AudioRecorder.xaml
+++ /dev/null
@@ -1,66 +0,0 @@
-?<!--
- 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. 
--->
-<phone:PhoneApplicationPage 
-    x:Class="WPCordovaClassLib.Cordova.UI.AudioRecorder"
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
-    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
-    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    FontFamily="{StaticResource PhoneFontFamilyNormal}"
-    FontSize="{StaticResource PhoneFontSizeNormal}"
-    Foreground="{StaticResource PhoneForegroundBrush}"
-    SupportedOrientations="Portrait" Orientation="Portrait"
-    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
-    shell:SystemTray.IsVisible="True">
-
-    <!--LayoutRoot is the root grid where all page content is placed-->
-    <Grid x:Name="LayoutRoot" Background="Transparent">
-        <Grid.RowDefinitions>
-            <RowDefinition Height="Auto"/>
-            <RowDefinition Height="*"/>
-        </Grid.RowDefinitions>
-
-        <!--TitlePanel contains the name of the application and page title-->
-        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="0,17,0,28">
-            <TextBlock x:Name="PageTitle" Text="Audio recorder" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
-        </StackPanel>
-
-        <!--ContentPanel - place additional content here-->
-        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
-            <Button Name="btnStartStop" Content="Start" Height="72" HorizontalAlignment="Left" Margin="156,96,0,0"  VerticalAlignment="Top" Width="160" Click="btnStartStop_Click" />
-            <Button Name="btnTake" Content="Take" IsEnabled="False" Height="72" HorizontalAlignment="Left" Margin="155,182,0,0" VerticalAlignment="Top" Width="160" Click="btnTake_Click" />
-            <TextBlock Height="30" HorizontalAlignment="Left" Margin="168,60,0,0" Name="txtDuration" Text="Duration: 00:00" VerticalAlignment="Top" />
-        </Grid>
-    </Grid>
- 
-    <!--Sample code showing usage of ApplicationBar-->
-    <!--<phone:PhoneApplicationPage.ApplicationBar>
-        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
-            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/>
-            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/>
-            <shell:ApplicationBar.MenuItems>
-                <shell:ApplicationBarMenuItem Text="MenuItem 1"/>
-                <shell:ApplicationBarMenuItem Text="MenuItem 2"/>
-            </shell:ApplicationBar.MenuItems>
-        </shell:ApplicationBar>
-    </phone:PhoneApplicationPage.ApplicationBar>-->
-
-</phone:PhoneApplicationPage>
diff --git a/src/wp/UI/AudioRecorder.xaml.cs b/src/wp/UI/AudioRecorder.xaml.cs
deleted file mode 100644
index bb4b8bc..0000000
--- a/src/wp/UI/AudioRecorder.xaml.cs
+++ /dev/null
@@ -1,330 +0,0 @@
-?/*  
-	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.
-*/
-
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Tasks;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Audio;
-using System;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Windows;
-using System.Windows.Threading;
-using WPCordovaClassLib.Cordova.Commands;
-using AudioResult = WPCordovaClassLib.Cordova.UI.AudioCaptureTask.AudioResult;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
-    /// <summary>
-    /// Implements Audio Recording application
-    /// </summary>
-    public partial class AudioRecorder : PhoneApplicationPage
-    {
-
-        #region Constants
-
-        private const string RecordingStartCaption = "Start";
-        private const string RecordingStopCaption = "Stop";
-
-        private const string LocalFolderName = "AudioCache";
-        private const string FileNameFormat = "Audio-{0}.wav";
-
-        #endregion
-
-        #region Callbacks
-
-        /// <summary>
-        /// Occurs when a audio recording task is completed.
-        /// </summary>
-        public event EventHandler<AudioResult> Completed;
-
-        #endregion
-
-        #region Fields
-
-        /// <summary>
-        /// Audio source
-        /// </summary>
-        private Microphone microphone;
-
-        /// <summary>
-        /// Temporary buffer to store audio chunk
-        /// </summary>
-        private byte[] buffer;
-
-        /// <summary>
-        /// Recording duration
-        /// </summary>
-        private TimeSpan duration;
-
-        /// <summary>
-        /// Output buffer
-        /// </summary>
-        private MemoryStream memoryStream;
-
-        /// <summary>
-        /// Xna game loop dispatcher
-        /// </summary>
-        DispatcherTimer dtXna;
-
-        /// <summary>
-        /// Recording result, dispatched back when recording page is closed
-        /// </summary>
-        private AudioResult result = new AudioResult(TaskResult.Cancel);
-
-        /// <summary>
-        /// Whether we are recording audio now
-        /// </summary>
-        private bool IsRecording
-        {
-            get
-            {
-                return (this.microphone != null && this.microphone.State == MicrophoneState.Started);
-            }
-        }
-
-        #endregion
-
-        /// <summary>
-        /// Creates new instance of the AudioRecorder class.
-        /// </summary>
-        public AudioRecorder()
-        {
-
-            this.InitializeXnaGameLoop();
-
-            // microphone requires special XNA initialization to work
-            InitializeComponent();
-        }
-
-        /// <summary>
-        /// Starts recording, data is stored in memory
-        /// </summary>
-        private void StartRecording()
-        {
-            this.microphone = Microphone.Default;
-            this.microphone.BufferDuration = TimeSpan.FromMilliseconds(500);
-
-            this.btnTake.IsEnabled = false;
-            this.btnStartStop.Content = RecordingStopCaption;
-
-            this.buffer = new byte[microphone.GetSampleSizeInBytes(this.microphone.BufferDuration)];
-            this.microphone.BufferReady += new EventHandler<EventArgs>(MicrophoneBufferReady);
-
-            MemoryStream stream = new MemoryStream();
-            this.memoryStream = stream;
-            int numBits = 16;
-            int numBytes = numBits / 8;
-
-            // inline version from AudioFormatsHelper
-            stream.Write(System.Text.Encoding.UTF8.GetBytes("RIFF"), 0, 4);
-            stream.Write(BitConverter.GetBytes(0), 0, 4);
-            stream.Write(System.Text.Encoding.UTF8.GetBytes("WAVE"), 0, 4);
-            stream.Write(System.Text.Encoding.UTF8.GetBytes("fmt "), 0, 4);
-            stream.Write(BitConverter.GetBytes(16), 0, 4);
-            stream.Write(BitConverter.GetBytes((short)1), 0, 2);
-            stream.Write(BitConverter.GetBytes((short)1), 0, 2);
-            stream.Write(BitConverter.GetBytes(this.microphone.SampleRate), 0, 4);
-            stream.Write(BitConverter.GetBytes(this.microphone.SampleRate * numBytes), 0, 4);
-            stream.Write(BitConverter.GetBytes((short)(numBytes)), 0, 2);
-            stream.Write(BitConverter.GetBytes((short)(numBits)), 0, 2);
-            stream.Write(System.Text.Encoding.UTF8.GetBytes("data"), 0, 4);
-            stream.Write(BitConverter.GetBytes(0), 0, 4);
-
-            this.duration = new TimeSpan(0);
-
-            this.microphone.Start();
-        }
-
-        /// <summary>
-        /// Stops recording
-        /// </summary>
-        private void StopRecording()
-        {
-            this.microphone.Stop();
-
-            this.microphone.BufferReady -= MicrophoneBufferReady;
-
-            this.microphone = null;
-
-            btnStartStop.Content = RecordingStartCaption;
-
-            // check there is some data
-            this.btnTake.IsEnabled = true;
-        }
-
-        /// <summary>
-        /// Handles Start/Stop events
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void btnStartStop_Click(object sender, RoutedEventArgs e)
-        {
-
-            if (this.IsRecording)
-            {
-                this.StopRecording();
-            }
-            else
-            {
-                this.StartRecording();
-            }
-        }
-
-        /// <summary>
-        /// Handles Take button click
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void btnTake_Click(object sender, RoutedEventArgs e)
-        {
-            this.result = this.SaveAudioClipToLocalStorage();
-
-            if (Completed != null)
-            {
-                Completed(this, result);
-            }
-
-            if (this.NavigationService.CanGoBack)
-            {
-                this.NavigationService.GoBack();
-            }
-        }
-
-        /// <summary>
-        /// Handles page closing event, stops recording if needed and dispatches results.
-        /// </summary>
-        /// <param name="e"></param>
-        protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
-        {
-            if (IsRecording)
-            {
-                StopRecording();
-            }
-
-            this.FinalizeXnaGameLoop();
-
-            base.OnNavigatedFrom(e);
-        }
-
-        /// <summary>
-        /// Copies data from microphone to memory storages and updates recording state
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void MicrophoneBufferReady(object sender, EventArgs e)
-        {
-            this.microphone.GetData(this.buffer);
-            this.memoryStream.Write(this.buffer, 0, this.buffer.Length);
-            TimeSpan bufferDuration = this.microphone.BufferDuration;
-
-            this.Dispatcher.BeginInvoke(() =>
-            {
-                this.duration += bufferDuration;
-
-                this.txtDuration.Text = "Duration: " +
-                    this.duration.Minutes.ToString().PadLeft(2, '0') + ":" +
-                    this.duration.Seconds.ToString().PadLeft(2, '0');
-            });
-
-        }
-
-        /// <summary>
-        /// Writes audio data from memory to isolated storage
-        /// </summary>
-        /// <returns></returns>
-        private AudioResult SaveAudioClipToLocalStorage()
-        {
-            if (this.memoryStream == null || this.memoryStream.Length <= 0)
-            {
-                return new AudioResult(TaskResult.Cancel);
-            }
-
-            //this.memoryStream.UpdateWavStream();
-            long position = memoryStream.Position;
-            memoryStream.Seek(4, SeekOrigin.Begin);
-            memoryStream.Write(BitConverter.GetBytes((int)memoryStream.Length - 8), 0, 4);
-            memoryStream.Seek(40, SeekOrigin.Begin);
-            memoryStream.Write(BitConverter.GetBytes((int)memoryStream.Length - 44), 0, 4);
-            memoryStream.Seek(position, SeekOrigin.Begin);
-
-            // save audio data to local isolated storage
-
-            string filename = String.Format(FileNameFormat, Guid.NewGuid().ToString());
-
-            try
-            {
-                using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
-                {
-
-                    if (!isoFile.DirectoryExists(LocalFolderName))
-                    {
-                        isoFile.CreateDirectory(LocalFolderName);
-                    }
-
-                    string filePath = System.IO.Path.Combine("/" + LocalFolderName + "/", filename);
-
-                    this.memoryStream.Seek(0, SeekOrigin.Begin);
-
-                    using (IsolatedStorageFileStream fileStream = isoFile.CreateFile(filePath))
-                    {
-
-                        this.memoryStream.CopyTo(fileStream);
-                    }
-
-                    AudioResult result = new AudioResult(TaskResult.OK);
-                    result.AudioFileName = filePath;
-
-                    result.AudioFile = this.memoryStream;
-                    result.AudioFile.Seek(0, SeekOrigin.Begin);
-
-                    return result;
-                }
-
-
-
-            }
-            catch (Exception)
-            {
-                //TODO: log or do something else
-                throw;
-            }
-        }
-
-        /// <summary>
-        /// Special initialization required for the microphone: XNA game loop
-        /// </summary>
-        private void InitializeXnaGameLoop()
-        {
-            // Timer to simulate the XNA game loop (Microphone is from XNA)
-            this.dtXna = new DispatcherTimer();
-            this.dtXna.Interval = TimeSpan.FromMilliseconds(33);
-            this.dtXna.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
-            this.dtXna.Start();
-        }
-        /// <summary>
-        /// Finalizes XNA game loop for microphone
-        /// </summary>
-        private void FinalizeXnaGameLoop()
-        {
-            // Timer to simulate the XNA game loop (Microphone is from XNA)
-            if (dtXna != null)
-            {
-                dtXna.Stop();
-                dtXna = null;
-            }
-        }
-
-    }
-}
diff --git a/src/wp/UI/VideoCaptureTask.cs b/src/wp/UI/VideoCaptureTask.cs
deleted file mode 100644
index c76952a..0000000
--- a/src/wp/UI/VideoCaptureTask.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-?/*  
-	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.
-*/
-
-using System;
-using System.IO;
-using System.Windows;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Tasks;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
-    /// <summary>
-    /// Allows an application to launch the Video Recording application. 
-    /// Use this to allow users to record video from your application.
-    /// </summary>
-    public class VideoCaptureTask
-    {
-        /// <summary>
-        /// Represents recorded video returned from a call to the Show method of
-        /// a WPCordovaClassLib.Cordova.Controls.VideoCaptureTask object
-        /// </summary>
-        public class VideoResult : TaskEventArgs
-        {
-            /// <summary>
-            /// Initializes a new instance of the VideoResult class.
-            /// </summary>
-            public VideoResult()
-            { }
-
-            /// <summary>
-            /// Initializes a new instance of the VideoResult class
-            /// with the specified Microsoft.Phone.Tasks.TaskResult.
-            /// </summary>
-            /// <param name="taskResult">Associated Microsoft.Phone.Tasks.TaskResult</param>
-            public VideoResult(TaskResult taskResult)
-                : base(taskResult)
-            { }
-
-            /// <summary>
-            ///  Gets the file name of the recorded Video.
-            /// </summary>
-            public Stream VideoFile { get; internal set; }
-
-            /// <summary>
-            /// Gets the stream containing the data for the recorded Video.
-            /// </summary>
-            public string VideoFileName { get; internal set; }
-        }
-
-        /// <summary>
-        /// Occurs when a Video recording task is completed.
-        /// </summary>
-        public event EventHandler<VideoResult> Completed;
-
-        /// <summary>
-        /// Shows Video Recording application
-        /// </summary>
-        public void Show()
-        {
-            Deployment.Current.Dispatcher.BeginInvoke(() =>
-            {
-                var root = Application.Current.RootVisual as PhoneApplicationFrame;
-
-                root.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated);
-
-                string baseUrl = "/";
-                // dummy parameter is used to always open a fresh version
-                root.Navigate(new System.Uri(baseUrl + "Plugins/cordova-plugin-media-capture/VideoRecorder.xaml?dummy=" + Guid.NewGuid().ToString(), UriKind.Relative));
-            });
-        }
-
-        /// <summary>
-        /// Performs additional configuration of the recording application.
-        /// </summary>
-        private void NavigationService_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
-        {
-            if (!(e.Content is VideoRecorder)) return;
-
-            (Application.Current.RootVisual as PhoneApplicationFrame).Navigated -= NavigationService_Navigated;
-
-            VideoRecorder VideoRecorder = (VideoRecorder)e.Content;
-
-            if (VideoRecorder != null)
-            {
-                VideoRecorder.Completed += this.Completed;
-            }
-            else if (this.Completed != null)
-            {
-                this.Completed(this, new VideoResult(TaskResult.Cancel));
-            }
-        }
-
-    }
-}
diff --git a/src/wp/UI/VideoRecorder.xaml b/src/wp/UI/VideoRecorder.xaml
deleted file mode 100644
index c78fdb0..0000000
--- a/src/wp/UI/VideoRecorder.xaml
+++ /dev/null
@@ -1,52 +0,0 @@
-?<!--
- 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. 
--->
-<phone:PhoneApplicationPage 
-    x:Class="WPCordovaClassLib.Cordova.UI.VideoRecorder"
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
-    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
-    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-    mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="480"
-    FontFamily="{StaticResource PhoneFontFamilyNormal}"
-    FontSize="{StaticResource PhoneFontSizeNormal}"
-    Foreground="{StaticResource PhoneForegroundBrush}"
-    SupportedOrientations="Landscape" Orientation="LandscapeLeft"
-    shell:SystemTray.IsVisible="False">
-   
-    <Canvas x:Name="LayoutRoot" Background="Transparent" Grid.ColumnSpan="1" Grid.Column="0">
-
-        <Rectangle 
-            x:Name="viewfinderRectangle"
-            Width="640" 
-            Height="480" 
-            HorizontalAlignment="Left" 
-            Canvas.Left="80"/>
-        
-    </Canvas>
-
-    <phone:PhoneApplicationPage.ApplicationBar>
-        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True" x:Name="PhoneAppBar" Opacity="0.0">
-            <shell:ApplicationBarIconButton IconUri="/Images/appbar.feature.video.rest.png" Text="Record"  x:Name="btnStartRecording" Click="StartRecording_Click" />
-            <shell:ApplicationBarIconButton IconUri="/Images/appbar.save.rest.png" Text="Take" x:Name="btnTakeVideo" Click="TakeVideo_Click"/>            
-        </shell:ApplicationBar>
-    </phone:PhoneApplicationPage.ApplicationBar>
-
-</phone:PhoneApplicationPage>
diff --git a/src/wp/UI/VideoRecorder.xaml.cs b/src/wp/UI/VideoRecorder.xaml.cs
deleted file mode 100644
index 75bcfd9..0000000
--- a/src/wp/UI/VideoRecorder.xaml.cs
+++ /dev/null
@@ -1,405 +0,0 @@
-?/*  
-	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.
-*/
-
-using System;
-using System.IO;
-using System.IO.IsolatedStorage;
-using System.Windows.Media;
-using System.Windows.Navigation;
-using Microsoft.Phone.Controls;
-using Microsoft.Phone.Shell;
-using Microsoft.Phone.Tasks;
-using VideoResult = WPCordovaClassLib.Cordova.UI.VideoCaptureTask.VideoResult;
-
-namespace WPCordovaClassLib.Cordova.UI
-{
-    public partial class VideoRecorder : PhoneApplicationPage
-    {
-
-        #region Constants
-
-        /// <summary>
-        /// Caption for record button in ready state
-        /// </summary>
-        private const string RecordingStartCaption = "Record";
-
-        /// <summary>
-        /// Caption for record button in recording state
-        /// </summary>
-        private const string RecordingStopCaption = "Stop";
-
-        /// <summary>
-        /// Start record icon URI
-        /// </summary>
-        private const string StartIconUri = "/Images/appbar.feature.video.rest.png";
-
-        /// <summary>
-        /// Stop record icon URI
-        /// </summary>
-        private const string StopIconUri = "/Images/appbar.stop.rest.png";
-
-        /// <summary>
-        /// Folder to save video clips
-        /// </summary>
-        private const string LocalFolderName = "VideoCache";
-
-        /// <summary>
-        /// File name format
-        /// </summary>
-        private const string FileNameFormat = "Video-{0}.mp4";
-
-        /// <summary>
-        /// Temporary file name
-        /// </summary>
-        private const string defaultFileName = "NewVideoFile.mp4";
-
-        #endregion
-
-        #region Callbacks
-        /// <summary>
-        /// Occurs when a video recording task is completed.
-        /// </summary>
-        public event EventHandler<VideoResult> Completed;
-
-        #endregion
-
-        #region Fields
-
-        /// <summary>
-        /// Viewfinder for capturing video
-        /// </summary>
-        private VideoBrush videoRecorderBrush;
-
-        /// <summary>
-        /// Path to save video clip
-        /// </summary>
-        private string filePath;
-
-        /// <summary>
-        /// Source for capturing video. 
-        /// </summary>
-        private CaptureSource captureSource;
-
-        /// <summary>
-        /// Video device
-        /// </summary>
-        private VideoCaptureDevice videoCaptureDevice;
-
-        /// <summary>
-        /// File sink so save recording video in Isolated Storage
-        /// </summary>
-        private FileSink fileSink;
-
-        /// <summary>
-        /// For managing button and application state 
-        /// </summary>
-        private enum VideoState { Initialized, Ready, Recording, CameraNotSupported };
-
-        /// <summary>
-        /// Current video state
-        /// </summary>
-        private VideoState currentVideoState;
-
-        /// <summary>
-        /// Stream to return result
-        /// </summary>
-        private MemoryStream memoryStream;
-
-        /// <summary>
-        /// Recording result, dispatched back when recording page is closed
-        /// </summary>
-        private VideoResult result = new VideoResult(TaskResult.Cancel);
-
-        #endregion
-
-        /// <summary>
-        /// Initializes components
-        /// </summary>
-        public VideoRecorder()
-        {
-            InitializeComponent();
-
-            PhoneAppBar = (ApplicationBar)ApplicationBar;
-            PhoneAppBar.IsVisible = true;
-            btnStartRecording = ((ApplicationBarIconButton)ApplicationBar.Buttons[0]);
-            btnTakeVideo = ((ApplicationBarIconButton)ApplicationBar.Buttons[1]);
-        }
-
-        /// <summary>
-        /// Initializes the video recorder then page is loading
-        /// </summary>
-        protected override void OnNavigatedTo(NavigationEventArgs e)
-        {
-            base.OnNavigatedTo(e);
-            this.InitializeVideoRecorder();
-        }
-
-        /// <summary>
-        /// Disposes camera and media objects then leave the page
-        /// </summary>
-        protected override void OnNavigatedFrom(NavigationEventArgs e)
-        {
-            this.DisposeVideoRecorder();
-
-            if (this.Completed != null)
-            {
-                this.Completed(this, result);
-            }
-            base.OnNavigatedFrom(e);
-        }
-
-        /// <summary>
-        /// Handles TakeVideo button click
-        /// </summary>
-        private void TakeVideo_Click(object sender, EventArgs e)
-        {
-            this.result = this.SaveVideoClip();
-            this.NavigateBack();
-        }
-
-        private void NavigateBack()
-        {
-            if (this.NavigationService.CanGoBack)
-            {
-                this.NavigationService.GoBack();
-            }
-        }
-
-        /// <summary>
-        /// Resaves video clip from temporary directory to persistent 
-        /// </summary>
-        private VideoResult SaveVideoClip()
-        {
-            try
-            {
-                using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
-                {
-                    if (string.IsNullOrEmpty(filePath) || (!isoFile.FileExists(filePath)))
-                    {
-                        return new VideoResult(TaskResult.Cancel);
-                    }
-
-                    string fileName = String.Format(FileNameFormat, Guid.NewGuid().ToString());
-                    string newPath = Path.Combine("/" + LocalFolderName + "/", fileName);
-                    isoFile.CopyFile(filePath, newPath);
-                    isoFile.DeleteFile(filePath);
-
-                    memoryStream = new MemoryStream();
-                    using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(newPath, FileMode.Open, isoFile))
-                    {
-                        fileStream.CopyTo(memoryStream);
-                    }
-
-                    VideoResult result = new VideoResult(TaskResult.OK);
-                    result.VideoFileName = newPath;
-                    result.VideoFile = this.memoryStream;
-                    result.VideoFile.Seek(0, SeekOrigin.Begin);
-                    return result;
-                }
-
-            }
-            catch (Exception)
-            {
-                return new VideoResult(TaskResult.None);
-            }
-        }
-
-        /// <summary>
-        /// Updates the buttons on the UI thread based on current state. 
-        /// </summary>
-        /// <param name="currentState">current UI state</param>
-        private void UpdateUI(VideoState currentState)
-        {
-            Dispatcher.BeginInvoke(delegate
-            {
-                switch (currentState)
-                {
-                    case VideoState.CameraNotSupported:
-                        btnStartRecording.IsEnabled = false;
-                        btnTakeVideo.IsEnabled = false;
-                        break;
-
-                    case VideoState.Initialized:
-                        btnStartRecording.Text = RecordingStartCaption;
-                        btnStartRecording.IconUri = new Uri(StartIconUri, UriKind.Relative);
-                        btnTakeVideo.IsEnabled = false;
-                        break;
-
-                    case VideoState.Ready:
-                        btnStartRecording.Text = RecordingStartCaption;
-                        btnStartRecording.IconUri = new Uri(StartIconUri, UriKind.Relative);
-                        btnTakeVideo.IsEnabled = true;
-                        break;
-
-                    case VideoState.Recording:
-                        btnStartRecording.Text = RecordingStopCaption;
-                        btnStartRecording.IconUri = new Uri(StopIconUri, UriKind.Relative);
-                        btnTakeVideo.IsEnabled = false;
-                        break;
-
-                    default:
-                        break;
-                }
-                currentVideoState = currentState;
-            });
-        }
-
-        /// <summary>
-        /// Initializes VideoRecorder
-        /// </summary>
-        public void InitializeVideoRecorder()
-        {
-            if (captureSource == null)
-            {
-                captureSource = new CaptureSource();
-                fileSink = new FileSink();
-                videoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
-
-                if (videoCaptureDevice != null)
-                {
-                    videoRecorderBrush = new VideoBrush();
-                    videoRecorderBrush.SetSource(captureSource);
-                    viewfinderRectangle.Fill = videoRecorderBrush;
-                    captureSource.Start();
-                    this.UpdateUI(VideoState.Initialized);
-                }
-                else
-                {
-                    this.UpdateUI(VideoState.CameraNotSupported);
-                }
-            }
-        }
-
-        /// <summary>
-        /// Sets recording state: start recording 
-        /// </summary>
-        private void StartVideoRecording()
-        {
-            try
-            {
-                if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Started))
-                {
-                    captureSource.Stop();
-                    fileSink.CaptureSource = captureSource;
-                    filePath = System.IO.Path.Combine("/" + LocalFolderName + "/", defaultFileName);
-
-                    using (IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForApplication())
-                    {
-                        if (!isoFile.DirectoryExists(LocalFolderName))
-                        {
-                            isoFile.CreateDirectory(LocalFolderName);
-                        }
-
-                        if (isoFile.FileExists(filePath))
-                        {
-                            isoFile.DeleteFile(filePath);
-                        }
-                    }
-
-                    fileSink.IsolatedStorageFileName = filePath;
-                }
-
-                if (captureSource.VideoCaptureDevice != null
-                    && captureSource.State == CaptureState.Stopped)
-                {
-                    captureSource.Start();
-                }
-                this.UpdateUI(VideoState.Recording);
-            }
-            catch (Exception)
-            {
-                this.result = new VideoResult(TaskResult.None);
-                this.NavigateBack();
-            }
-        }
-
-        /// <summary>
-        /// Sets the recording state: stop recording
-        /// </summary>
-        private void StopVideoRecording()
-        {
-            try
-            {
-                if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Started))
-                {
-                    captureSource.Stop();
-                    fileSink.CaptureSource = null;
-                    fileSink.IsolatedStorageFileName = null;
-                    this.StartVideoPreview();
-                }
-            }
-            catch (Exception)
-            {
-                this.result = new VideoResult(TaskResult.None);
-                this.NavigateBack();
-            }
-        }
-
-        /// <summary>
-        /// Sets the recording state: display the video on the viewfinder. 
-        /// </summary>
-        private void StartVideoPreview()
-        {
-            try
-            {
-                if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Stopped))
-                {
-                    videoRecorderBrush.SetSource(captureSource);
-                    viewfinderRectangle.Fill = videoRecorderBrush;
-                    captureSource.Start();
-                    this.UpdateUI(VideoState.Ready);
-                }
-            }
-            catch (Exception)
-            {
-                this.result = new VideoResult(TaskResult.None);
-                this.NavigateBack();
-            }
-        }
-
-        /// <summary>
-        /// Starts video recording 
-        /// </summary>
-        private void StartRecording_Click(object sender, EventArgs e)
-        {
-            if (currentVideoState == VideoState.Recording)
-            {
-                this.StopVideoRecording();
-            }
-            else
-            {
-                this.StartVideoRecording();
-            }
-        }
-
-        /// <summary>
-        /// Releases resources
-        /// </summary>
-        private void DisposeVideoRecorder()
-        {
-            if (captureSource != null)
-            {
-                if ((captureSource.VideoCaptureDevice != null) && (captureSource.State == CaptureState.Started))
-                {
-                    captureSource.Stop();
-                }
-                captureSource = null;
-                videoCaptureDevice = null;
-                fileSink = null;
-                videoRecorderBrush = null;
-            }
-        }
-
-    }
-}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org