diff --git a/README.md b/README.md
index c4dd024..c49334c 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,62 @@
#cordova-yoik-screenorientation
-Cordova plugin to set/lock the screen orientation in a common way for both iOS and Android.
+Cordova plugin to set/lock the screen orientation in a common way for both iOS and Android. From version 1.0.0 the
+interface is based on the [Screen Orientation API](http://www.w3.org/TR/screen-orientation/).
##Install
-cordova plugin add https://github.com/yoik/cordova-yoik-screenorientation
+cordova plugin add net.yoik.cordova.plugins.screenorientation
-###Android
+###Source
+https://github.com/yoik/cordova-yoik-screenorientation
-The android version is implemented via the standard _activity.setRequestedOrientation_ as used in other screen orientation plugins
-###iOS
+##Orientations
+
+__portrait-primary__
+The orientation is in the primary portrait mode.
+
+__portrait-secondary__
+The orientation is in the secondary portrait mode.
+
+__landscape-primary__
+The orientation is in the primary landscape mode.
+
+__landscape-secondary__
+The orientation is in the secondary landscape mode.
+
+##Usage
+
+ screen.lockOrientation('landscape');
+
+ screen.unlockOrientation();
+
+##Events
+
+Both android and iOS will fire the orientationchange event on the window object.
+For this version of the plugin use the window object if you require notification.
+
+i.e.
+
+ function init() {
+ window.addEventListener("orientationchange", orientationChange, true);
+ }
+
+ function orientationChange(e) {
+ var orientation="portrait";
+ if(window.orientation == -90 || window.orientation == 90) orientation = "landscape";
+ document.getElementById("status").innerHTML+=orientation+"
";
+ }
+
+For this plugin to follow the API events should be fired on the screen object.
+iOS does not currently support events on the _screen_ object so custom event
+handling will need to be added (Suggestions welcome!).
+
+##iOS Notes
The iOS version is a combination of the cordova JS callback _window.shouldRotateToOrientation_ and the workaround to recheck the orientation as implemented in https://github.com/Adlotto/cordova-plugin-recheck-screen-orientation.
-If you have a custom impelemntation of the _window.shouldRotateToOrientation_ it will have to be removed for the plugin to function as expected.
+__If you have a custom implementation of the _window.shouldRotateToOrientation_ it will have to be removed for the plugin to function as expected.__
####iOS6
@@ -24,30 +66,5 @@ Issue [#1](https://github.com/yoik/cordova-yoik-screenorientation/issues/1) @dok
>It seems to be related to having width=device-width, height=device-height in the meta viewport (which is part of the boilerplate phonegap/cordova app). It can be solved by updating the viewport with width=device-height, height=device-width or simply removing width and height altogether.
-Constants
-====
- Orientation: {
- UNSPECIFIED: "unspecified",
- LANDSCAPE: "landscape",
- PORTRAIT: "portrait",
- USER: "user",
- BEHIND: "behind",
- SENSOR: "sensor",
- NOSENSOR: "nosensor",
- SENSOR_LANDSCAPE: "sensorLandscape",
- SENSOR_PORTRAIT: "sensorPortrait",
- REVERSE_LANDSCAPE: "reverseLandscape",
- REVERSE_PORTRAIT: "reversePortrait",
- FULL_SENSOR: "fullSensor"
- }
-Usage
-====
-
- var so = cordova.plugins.screenorientation;
-
- // with callbacks
- so.setOrientation(successCallback, errorCallback, so.Orientation.PORTRAIT);
-
- // no callbacks
- so.setOrientation(so.Orientation.SENSOR_LANDSCAPE);
+Pull requests welcome.
diff --git a/plugin.xml b/plugin.xml
index af5c5ad..47d4c04 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -2,7 +2,7 @@
+ version="1.0.0">
YoikScreenOrientation
Yoik Screen Orientation Plugin
@@ -36,4 +36,4 @@
-
\ No newline at end of file
+
diff --git a/src/android/net/yoik/cordova/plugins/screenorientation/YoikScreenOrientation.java b/src/android/net/yoik/cordova/plugins/screenorientation/YoikScreenOrientation.java
index efe36f1..bce750b 100644
--- a/src/android/net/yoik/cordova/plugins/screenorientation/YoikScreenOrientation.java
+++ b/src/android/net/yoik/cordova/plugins/screenorientation/YoikScreenOrientation.java
@@ -41,21 +41,13 @@ public class YoikScreenOrientation extends CordovaPlugin {
* Screen Orientation Constants
*/
- // Refer to
- // http://developer.android.com/reference/android/R.attr.html#screenOrientation
-
- private static final String UNSPECIFIED = "unspecified";
- private static final String LANDSCAPE = "landscape";
+ private static final String UNLOCKED = "unlocked";
+ private static final String PORTRAIT_PRIMARY = "portrait-primary";
+ private static final String PORTRAIT_SECONDARY = "portrait-secondary";
+ private static final String LANDSCAPE_PRIMARY = "landscape-primary";
+ private static final String LANDSCAPE_SECONDARY = "landscape-secondary";
private static final String PORTRAIT = "portrait";
- private static final String USER = "user";
- private static final String BEHIND = "behind";
- private static final String SENSOR = "sensor";
- private static final String NOSENSOR = "nosensor";
- private static final String SENSOR_LANDSCAPE = "sensorLandscape";
- private static final String SENSOR_PORTRAIT = "sensorPortrait";
- private static final String REVERSE_LANDSCAPE = "reverseLandscape";
- private static final String REVERSE_PORTRAIT = "reversePortrait";
- private static final String FULL_SENSOR = "fullSensor";
+ private static final String LANDSCAPE = "landscape";
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
@@ -84,40 +76,28 @@ public class YoikScreenOrientation extends CordovaPlugin {
Activity activity = cordova.getActivity();
- if (orientation.equals(UNSPECIFIED)) {
+ if (orientation.equals(UNLOCKED)) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
- } else if (orientation.equals(LANDSCAPE)) {
+ } else if (orientation.equals(LANDSCAPE_PRIMARY)) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- } else if (orientation.equals(PORTRAIT)) {
+ } else if (orientation.equals(PORTRAIT_PRIMARY)) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- } else if (orientation.equals(USER)) {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
- } else if (orientation.equals(BEHIND)) {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_BEHIND);
- } else if (orientation.equals(SENSOR)) {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- } else if (orientation.equals(NOSENSOR)) {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
- } else if (orientation.equals(SENSOR_LANDSCAPE)) {
+ } else if (orientation.equals(LANDSCAPE)) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
- } else if (orientation.equals(SENSOR_PORTRAIT)) {
+ } else if (orientation.equals(PORTRAIT)) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
- } else if (orientation.equals(REVERSE_LANDSCAPE)) {
+ } else if (orientation.equals(LANDSCAPE_SECONDARY)) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
- } else if (orientation.equals(REVERSE_PORTRAIT)) {
+ } else if (orientation.equals(PORTRAIT_SECONDARY)) {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
- } else if (orientation.equals(FULL_SENSOR)) {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}
callbackContext.success();
return true;
} else {
-
callbackContext.error("ScreenOrientation not recognised");
return false;
}
}
-
}
\ No newline at end of file
diff --git a/www/screenorientation.js b/www/screenorientation.js
index 1614453..a53af30 100644
--- a/www/screenorientation.js
+++ b/www/screenorientation.js
@@ -23,71 +23,72 @@ SOFTWARE.
*/
var argscheck = require('cordova/argscheck'),
exec = require('cordova/exec'),
- Constants = {
- Orientation: {
- UNSPECIFIED: "unspecified",
- LANDSCAPE: "landscape",
- PORTRAIT: "portrait",
- USER: "user",
- BEHIND: "behind",
- SENSOR: "sensor",
- NOSENSOR: "nosensor",
- SENSOR_LANDSCAPE: "sensorLandscape",
- SENSOR_PORTRAIT: "sensorPortrait",
- REVERSE_LANDSCAPE: "reverseLandscape",
- REVERSE_PORTRAIT: "reversePortrait",
- FULL_SENSOR: "fullSensor"
- }
- },
- currOrientation = Constants.Orientation.UNSPECIFIED;
+ Orientations = [
+ 'portrait-primary',
+ // The orientation is in the primary portrait mode.
+ 'portrait-secondary',
+ // The orientation is in the secondary portrait mode.
+ 'landscape-primary',
+ // The orientation is in the primary landscape mode.
+ 'landscape-secondary',
+ // The orientation is in the secondary landscape mode.
+ 'portrait',
+ // The orientation is either portrait-primary or portrait-secondary.
+ 'landscape'
+ ],
+ currOrientation = 'unlocked';
var orientationExports = {};
-// Tack on the orientation Constants to the base plugin.
-for (var key in Constants) {
- orientationExports[key] = Constants[key];
+function setOrientation(orientation) {
+ currOrientation = orientation ? orientation : 'unlocked';
+ exec(null, null, "YoikScreenOrientation", "screenOrientation", ['set', currOrientation]);
}
-orientationExports.setOrientation = function(successCallback, errorCallback, orientation) {
- if (typeof successCallback == "string") {
- orientation = successCallback;
- successCallback = function(){};
- errorCallback = function(){};
+function addScreenOrientationApi(obj) {
+ if (obj.unlockOrientation || obj.lockOrientation) {
+ return;
}
- currOrientation = orientation ? orientation : Constants.Orientation.UNSPECIFIED;
+ obj.lockOrientation = function(orientation) {
+ if (Orientations.indexOf(orientation) == -1) {
+ console.log('INVALID ORIENTATION', orientation);
+ return;
+ }
+ setOrientation(orientation);
+ };
- exec(successCallback, errorCallback, "YoikScreenOrientation", "screenOrientation", ['set', currOrientation]);
-};
+ obj.unlockOrientation = function() {
+ setOrientation('unlocked');
+ };
+}
+
+addScreenOrientationApi(screen);
// ios orientation callback/hook
window.shouldRotateToOrientation = function(orientation) {
- var o = Constants.Orientation;
switch (currOrientation) {
- case o.PORTRAIT:
- case o.SENSOR_PORTRAIT:
+ case 'portrait':
+ case 'portrait-primary':
if (orientation === 0) return true;
break;
- case o.LANDSCAPE:
- case o.SENSOR_LANDSCAPE:
+ case 'landscape':
+ case 'landscape-primary':
if (orientation === -90) return true;
break;
- case o.REVERSE_LANDSCAPE:
+ case 'landscape':
+ case 'landscape-secondary':
if (orientation === 90) return true;
break;
- case o.REVERSE_PORTRAIT:
+ case 'portrait':
+ case 'portrait-secondary':
if (orientation === 180) return true;
break;
- case o.FULL_SENSOR:
- return true;
- break;
- case o.SENSOR:
- case o.UNSPECIFIED:
+ default:
if (orientation === -90 || orientation === 90 || orientation === 0) return true;
break;
}
-
return false;
-}
+};
-module.exports = orientationExports;
\ No newline at end of file
+module.exports = {};
\ No newline at end of file