Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

feat #352 Orientation change detection functionality for mobile devic…

…es added to AT
  • Loading branch information...
commit 13081ff7beb7ccf950d4f60bff07bb25c8285c07 1 parent fc797d0
sbehera authored
View
85 src/aria/utils/Orientation.js
@@ -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;
+ }
+ }
+ }
+});
View
92 test/aria/utils/OrientationTest.js
@@ -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();
+ }
+ }
+});
View
2  test/aria/utils/UtilsTestSuite.js
@@ -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");
}
});
Please sign in to comment.
Something went wrong with that request. Please try again.