diff --git a/plugin.xml b/plugin.xml index 07a9b5d..dafa2f9 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..4663998 --- /dev/null +++ b/src/wp/YoikScreenOrientation.cs @@ -0,0 +1,127 @@ +/* + 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 LANDSCAPE = "landscape"; + + #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) + { + page.SupportedOrientations = SupportedPageOrientation.Portrait; + } + else if (orientation == LANDSCAPE) + { + 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..4900408 --- /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