/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. * */ /* * This class provides access to the device orientation. * @constructor */ function Orientation() { this.started = false; }; /* * Manually sets the orientation of the application window. * 'up', 'down', 'left' or 'right' used to specify fixed window orientation * 'free' WebOS will change the window orientation to match the device orientation * @param {String} orientation * Example: * navigator.orientation.setOrientation('up'); */ Orientation.prototype.setOrientation = function(orientation) { PalmSystem.setWindowOrientation(orientation); }; /* * Returns the current window orientation */ Orientation.prototype.getCurrentOrientation = function() { return PalmSystem.windowOrientation; }; /* * Starts the native orientationchange event listener. */ Orientation.prototype.start = function (successCallback) { var that = this; // This subscribes the callback once for the successCallback function that.callback = function (e) { document.removeEventListener("orientationChanged", that.callback); successCallback(e.orientation); } document.addEventListener("orientationChanged", that.callback); // This subscribes setOrientation to be constantly updating the currentOrientation property document.addEventListener("orientationchange", function(event) { var orient = null; switch (event.position) { case 0: orient = DisplayOrientation.FACE_UP; break; case 1: orient = DisplayOrientation.FACE_DOWN; break; case 2: orient = DisplayOrientation.PORTRAIT; break; case 3: orient = DisplayOrientation.REVERSE_PORTRAIT; break; case 4: orient = DisplayOrientation.LANDSCAPE_RIGHT_UP; break; case 5: orient = DisplayOrientation.LANDSCAPE_LEFT_UP; break; default: return; //orientationchange event seems to get thrown sometimes with a null event position } that.setOrientation(orient); }); this.started = true; }; /* * Asynchronously aquires the orientation repeatedly at a given interval. * @param {Function} successCallback The function to call each time the orientation * data is available. * @param {Function} errorCallback The function to call when there is an error * getting the orientation data. */ Orientation.prototype.watchOrientation = function(successCallback, errorCallback, options) { // Invoke the appropriate callback with a new Position object every time the implementation // determines that the position of the hosting device has changed. this.getCurrentOrientation(successCallback, errorCallback); var interval = 1000; if (options && !isNaN(options.interval)) interval = options.interval; var that = this; return setInterval(function() { that.getCurrentOrientation(successCallback, errorCallback); }, interval); }; /* * Clears the specified orientation watch. * @param {String} watchId The ID of the watch returned from #watchOrientation. */ Orientation.prototype.clearWatch = function(watchId) { clearInterval(watchId); }; /* * This class encapsulates the possible orientation values. * @constructor */ function DisplayOrientation() { this.code = null; this.message = ""; }; DisplayOrientation.PORTRAIT = 0; DisplayOrientation.REVERSE_PORTRAIT = 1; DisplayOrientation.LANDSCAPE_LEFT_UP = 2; DisplayOrientation.LANDSCAPE_RIGHT_UP = 3; DisplayOrientation.FACE_UP = 4; DisplayOrientation.FACE_DOWN = 5; if (typeof navigator.orientation == "undefined") navigator.orientation = new Orientation();