Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

feat #352 Orientation change detection #351

Closed
wants to merge 1 commit into from

2 participants

Susanta Kumar Behera Fabio Crisci
Susanta Kumar Behera

Customized orientation change detection functionality is added to AT.

Fabio Crisci

Integrated in 0752669

Fabio Crisci piuccio closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jan 31, 2013
  1. feat #352 Orientation change detection functionality for mobile devic…

    sbehera authored
    …es added to AT
This page is out of date. Refresh to see the latest.
85 src/aria/utils/Orientation.js
View
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2012 Amadeus s.a.s.
+ * 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.
+ */
+
+Aria.classDefinition({
+ $classpath : "aria.utils.Orientation",
+ $dependencies : ["aria.utils.Event"],
+ $singleton : true,
+ $events : {
+ "change" : {
+ description : "This event is fired when there is orientation change on the device",
+ properties : {
+ "screenOrientation" : "Current Orientation of the device",
+ "isPortrait" : "Boolean values to tell if the screen is portrait"
+ }
+ }
+ },
+
+ /**
+ * Adding a listener while initializing Orientation to listen to the native orientationchange event.
+ */
+ $constructor : function () {
+ var window = Aria.$window;
+ if (typeof(window.orientation) != "undefined") { // check if browser support orientation change
+ this.screenOrientation = window.orientation;
+ this.isPortrait = this.__isPortrait();
+
+ // start listening native event orinetationchange.
+ aria.utils.Event.addListener(window, "orientationchange", {
+ fn : this._onOrientationChange,
+ scope : this
+ });
+ }
+ },
+
+ $destructor : function () {
+ aria.utils.Event.removeListener(Aria.$window, "orientationchange", {
+ fn : this._onOrientationChange
+ });
+ },
+
+ $prototype : {
+
+ /**
+ * Callback executed after orientation of the device is changed. This raises a wrapper event for the native
+ * event orientationchange and provides properties screenOrientation which is exact value of window.orientation
+ * and additional variable isPortrait to tell if device orientation is portrait
+ * @protected
+ */
+ _onOrientationChange : function () {
+ this.screenOrientation = Aria.$window.orientation
+ this.isPortrait = this.__isPortrait();
+ // raise event "change" to notify about orientation change along with properties for current orientation
+ this.$raiseEvent({
+ name : "change",
+ screenOrientation : this.screenOrientation,
+ isPortrait : this.isPortrait
+ });
+ },
+
+ /**
+ * Returns a boolean value to signify if the device orientation is portrait.
+ * @private
+ * @return {Boolean}
+ */
+ __isPortrait : function () {
+ if (Aria.$window.orientation % 180 === 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+});
92 test/aria/utils/OrientationTest.js
View
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2012 Amadeus s.a.s.
+ * 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.
+ */
+
+/**
+ * Test case for aria.utils.Orientation
+ */
+Aria.classDefinition({
+ $classpath : "test.aria.utils.OrientationTest",
+ $extends : "aria.jsunit.TestCase",
+ $dependencies : ["aria.utils.Orientation"],
+ $constructor : function () {
+ this.$TestCase.constructor.call(this);
+ this.counter = 0;
+ },
+ $destructor : function () {
+ this.$TestCase.$destructor.call(this);
+ this.emitter = null;
+ },
+ $prototype : {
+
+ setUp : function () {
+ // Setup required environment for orientation change simulation test
+ this.emitter = aria.utils.Orientation;
+ Aria.$window.orientationchange = function (thisObj) {
+ this.$raiseEvent({
+ name : "change",
+ screenOrientation : Aria.$window.orientation,
+ isPortrait : this.isPortrait,
+ scope : thisObj
+ })
+ };
+ // capture the change event raised by Orientation object
+ this.emitter.$on({
+ "change" : this.__assertValues,
+ scope : this
+ });
+ },
+
+ /**
+ * Test case for aria.utils.Orientation will be used for simulating orientation change on desktop browser that
+ * with mobile device browser where orientationchange event is present
+ * @public
+ */
+ testOrientation : function () {
+ // Call the mock method to add orientation change. Mock for portrait by passing 0
+ this.__mockOrientation(0);
+ // Call the mock method to add orientation change. Mock for landscape by passing 90
+ this.__mockOrientation(90);
+ this.assertTrue(this.counter == 2, " The event was expected to get raised two times, but actually it got raised "
+ + this.counter + " times");
+ },
+
+ /**
+ * asserts isPortrait based on the screenOrientation
+ * @private
+ * @param {Object} evt
+ */
+ __assertValues : function (evt) {
+ if (evt.screenOrientation % 180 === 0) {
+ this.assertTrue(evt.isPortrait == true, "Expected isPortrait true got " + evt.isPortrait
+ + " for screenOrientation :" + evt.screenOrientation);
+ } else {
+ this.assertTrue(evt.isPortrait == false, "Expected isPortrait false got " + evt.isPortrait
+ + " for screenOrientation :" + evt.screenOrientation);
+ }
+ this.counter++;
+ },
+
+ /**
+ * Mock Orientation change for desktop browsers. Add orientationchange mock event through a normal function
+ * Invoke the mock event explicitly.
+ * @private
+ * @param arg
+ */
+ __mockOrientation : function (orientation) {
+ Aria.$window.orientation = orientation;
+ this.emitter._onOrientationChange();
+ }
+ }
+});
2  test/aria/utils/UtilsTestSuite.js
View
@@ -60,6 +60,6 @@ Aria.classDefinition({
this.addTests("test.aria.utils.TypeTest");
this.addTests("test.aria.utils.Xml");
this.addTests("test.aria.utils.DeviceTest");
-
+ this.addTests("test.aria.utils.OrientationTest");
}
});
Something went wrong with that request. Please try again.