From 6c975278ea2693d621fb510850068d4c3d487fc1 Mon Sep 17 00:00:00 2001 From: EddyVerbruggen Date: Wed, 13 May 2015 20:17:14 +0200 Subject: [PATCH 1/2] Completed adding WP8 support --- plugin.xml | 2 +- src/wp/YoikScreenOrientation.cs | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/plugin.xml b/plugin.xml index dafa2f9..f2ef542 100644 --- a/plugin.xml +++ b/plugin.xml @@ -2,7 +2,7 @@ + version="1.3.4"> Screen Orientation Adds Screen Orientation API lock and unlock functions to the global screen object in android, iOS and BB10. diff --git a/src/wp/YoikScreenOrientation.cs b/src/wp/YoikScreenOrientation.cs index 4663998..776ce8d 100644 --- a/src/wp/YoikScreenOrientation.cs +++ b/src/wp/YoikScreenOrientation.cs @@ -43,10 +43,15 @@ namespace WPCordovaClassLib.Cordova.Commands public class YoikScreenOrientation : BaseCommand { #region Static members - private const string UNLOCKED = "unlocked"; + private const string PORTRAIT = "portrait"; + private const string PORTRAIT_PRIMARY = "portrait-primary"; + private const string PORTRAIT_SECONDARY = "portrait-secondary"; + private const string LANDSCAPE = "landscape"; + private const string LANDSCAPE_PRIMARY = "landscape-primary"; + private const string LANDSCAPE_SECONDARY = "landscape-secondary"; #endregion @@ -93,11 +98,12 @@ namespace WPCordovaClassLib.Cordova.Commands if (TryCast(Application.Current.RootVisual, out frame) && TryCast(frame.Content, out page)) { - if (orientation == PORTRAIT) + if (orientation == PORTRAIT || orientation == PORTRAIT_PRIMARY || orientation == PORTRAIT_SECONDARY) { page.SupportedOrientations = SupportedPageOrientation.Portrait; } - else if (orientation == LANDSCAPE) + + else if (orientation == LANDSCAPE || orientation == LANDSCAPE_PRIMARY || orientation == LANDSCAPE_SECONDARY) { page.SupportedOrientations = SupportedPageOrientation.Landscape; } From 865c81a09effa5a4176de8882bcbfbb1b7f11d25 Mon Sep 17 00:00:00 2001 From: EddyVerbruggen Date: Wed, 13 May 2015 20:30:41 +0200 Subject: [PATCH 2/2] Added WP8 support --- plugin.xml | 14 +++- src/wp/YoikScreenOrientation.cs | 133 ++++++++++++++++++++++++++++++++ www/screenorientation.wp8.js | 8 ++ 3 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 src/wp/YoikScreenOrientation.cs create mode 100644 www/screenorientation.wp8.js diff --git a/plugin.xml b/plugin.xml index 07a9b5d..874d7da 100644 --- a/plugin.xml +++ b/plugin.xml @@ -2,7 +2,7 @@ + version="1.3.3"> Screen Orientation Adds Screen Orientation API lock and unlock functions to the global screen object in android, iOS and BB10. @@ -52,4 +52,16 @@ + + + + + + + + + + + + diff --git a/src/wp/YoikScreenOrientation.cs b/src/wp/YoikScreenOrientation.cs new file mode 100644 index 0000000..00545e3 --- /dev/null +++ b/src/wp/YoikScreenOrientation.cs @@ -0,0 +1,133 @@ +/* + 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.Net; +using System.IO; +using Microsoft.Phone.Controls; +using Microsoft.Phone.Notification; +using Microsoft.Phone.Shell; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using System.Windows.Threading; +using System.Runtime.Serialization; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.Threading; + +using WPCordovaClassLib.Cordova; +using WPCordovaClassLib.Cordova.Commands; +using WPCordovaClassLib.Cordova.JSON; + + +namespace WPCordovaClassLib.Cordova.Commands +{ + public class YoikScreenOrientation : BaseCommand + { + #region Static members + private const string UNLOCKED = "unlocked"; + + private const string PORTRAIT = "portrait"; + private const string PORTRAIT_PRIMARY = "portrait-primary"; + private const string PORTRAIT_SECONDARY = "portrait-secondary"; + + private const string LANDSCAPE = "landscape"; + private const string LANDSCAPE_PRIMARY = "landscape-primary"; + private const string LANDSCAPE_SECONDARY = "landscape-secondary"; + + #endregion + + /// + /// Current orientation + /// + private string currentOrientation; + + public YoikScreenOrientation() + { + + } + + /// + /// Changes the orientation + /// + + public void screenOrientation(string options) + { + string orientation = null; + try + { + orientation = JSON.JsonHelper.Deserialize(options)[0]; + } + catch (Exception ex) + { + this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, ex.Message)); + return; + } + + if (string.IsNullOrEmpty(orientation)) + { + this.DispatchCommandResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION)); + return; + } + + if (this.currentOrientation != orientation) // Might prevent flickering + { + + Deployment.Current.Dispatcher.BeginInvoke(() => + { + PhoneApplicationFrame frame; + PhoneApplicationPage page; + if (TryCast(Application.Current.RootVisual, out frame) && + TryCast(frame.Content, out page)) + { + if (orientation == PORTRAIT || orientation == PORTRAIT_PRIMARY || orientation == PORTRAIT_SECONDARY) + { + page.SupportedOrientations = SupportedPageOrientation.Portrait; + } + + else if (orientation == LANDSCAPE || orientation == LANDSCAPE_PRIMARY || orientation == LANDSCAPE_SECONDARY) + { + page.SupportedOrientations = SupportedPageOrientation.Landscape; + } + else if (orientation == UNLOCKED) + { + page.SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape; + } + else + { + this.DispatchCommandResult(new PluginResult(PluginResult.Status.ERROR, "Screen orientation not detected.")); + return; + } + this.currentOrientation = orientation; + } + }); + + this.DispatchCommandResult(); + } + } + + static bool TryCast(object obj, out T result) where T : class + { + result = obj as T; + return result != null; + } + } +} diff --git a/www/screenorientation.wp8.js b/www/screenorientation.wp8.js new file mode 100644 index 0000000..9dd64ae --- /dev/null +++ b/www/screenorientation.wp8.js @@ -0,0 +1,8 @@ +var exec = require('cordova/exec'), + screenOrientation = {}; + +screenOrientation.setOrientation = function(orientation) { + exec(null, null, "YoikScreenOrientation", "screenOrientation", [orientation]); +}; + +module.exports = screenOrientation; \ No newline at end of file