| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| class EmulatorScreen(object): |
| """Class for screen related emulator commands.""" |
| |
| SO_PORTRAIT_PRIMARY = 'portrait-primary' |
| SO_PORTRAIT_SECONDARY = 'portrait-secondary' |
| SO_LANDSCAPE_PRIMARY = 'landscape-primary' |
| SO_LANDSCAPE_SECONDARY = 'landscape-secondary' |
| |
| def __init__(self, emulator): |
| self.emulator = emulator |
| |
| def initialize(self): |
| self.orientation = self.SO_PORTRAIT_PRIMARY |
| |
| def _get_raw_orientation(self): |
| """Get the raw value of the current device orientation.""" |
| response = self.emulator._run_telnet('sensor get orientation') |
| |
| return response[0].split('=')[1].strip() |
| |
| def _set_raw_orientation(self, data): |
| """Set the raw value of the specified device orientation.""" |
| self.emulator._run_telnet('sensor set orientation %s' % data) |
| |
| def get_orientation(self): |
| """Get the current device orientation. |
| |
| Returns; |
| orientation -- Orientation of the device. One of: |
| SO_PORTRAIT_PRIMARY - system buttons at the bottom |
| SO_PORTRIAT_SECONDARY - system buttons at the top |
| SO_LANDSCAPE_PRIMARY - system buttons at the right |
| SO_LANDSCAPE_SECONDARY - system buttons at the left |
| |
| """ |
| data = self._get_raw_orientation() |
| |
| if data == '0:-90:0': |
| orientation = self.SO_PORTRAIT_PRIMARY |
| elif data == '0:90:0': |
| orientation = self.SO_PORTRAIT_SECONDARY |
| elif data == '0:0:90': |
| orientation = self.SO_LANDSCAPE_PRIMARY |
| elif data == '0:0:-90': |
| orientation = self.SO_LANDSCAPE_SECONDARY |
| else: |
| raise ValueError('Unknown orientation sensor value: %s.' % data) |
| |
| return orientation |
| |
| def set_orientation(self, orientation): |
| """Set the specified device orientation. |
| |
| Args |
| orientation -- Orientation of the device. One of: |
| SO_PORTRAIT_PRIMARY - system buttons at the bottom |
| SO_PORTRIAT_SECONDARY - system buttons at the top |
| SO_LANDSCAPE_PRIMARY - system buttons at the right |
| SO_LANDSCAPE_SECONDARY - system buttons at the left |
| """ |
| orientation = SCREEN_ORIENTATIONS[orientation] |
| |
| if orientation == self.SO_PORTRAIT_PRIMARY: |
| data = '0:-90:0' |
| elif orientation == self.SO_PORTRAIT_SECONDARY: |
| data = '0:90:0' |
| elif orientation == self.SO_LANDSCAPE_PRIMARY: |
| data = '0:0:90' |
| elif orientation == self.SO_LANDSCAPE_SECONDARY: |
| data = '0:0:-90' |
| else: |
| raise ValueError('Invalid orientation: %s' % orientation) |
| |
| self._set_raw_orientation(data) |
| |
| orientation = property(get_orientation, set_orientation) |
| |
| |
| SCREEN_ORIENTATIONS = {"portrait": EmulatorScreen.SO_PORTRAIT_PRIMARY, |
| "landscape": EmulatorScreen.SO_LANDSCAPE_PRIMARY, |
| "portrait-primary": EmulatorScreen.SO_PORTRAIT_PRIMARY, |
| "landscape-primary": EmulatorScreen.SO_LANDSCAPE_PRIMARY, |
| "portrait-secondary": EmulatorScreen.SO_PORTRAIT_SECONDARY, |
| "landscape-secondary": EmulatorScreen.SO_LANDSCAPE_SECONDARY} |
| |