# coding=utf-8


class SpatialOrientation(object):
    '''Spatial Orientation facade.

    Computes the device's orientation based on the rotation matrix.

    .. versionadded:: 1.3.1
    '''

    @property
    def orientation(self):
        '''Property that returns values of the current device orientation
        as a (azimuth, pitch, roll) tuple.

        Azimuth, angle of rotation about the -z axis. This value represents the
        angle between the device's y axis and the magnetic north pole.
        The range of values is -π to π.

        Pitch, angle of rotation about the x axis. This value represents the
        angle between a plane parallel to the device's screen and a plane
        parallel to the ground.
        The range of values is -π to π.

        Roll, angle of rotation about the y axis. This value represents the
        angle between a plane perpendicular to the device's screen and a plane
        perpendicular to the ground.
        The range of values is -π/2 to π/2.

        Returns (None, None, None) if no data is currently available.

        Supported Platforms:: Android
        '''
        return self._get_orientation() or (None, None, None)

    def _get_orientation(self):
        raise NotImplementedError()

    def enable_listener(self):
        '''Enable the orientation sensor.
        '''
        self._enable_listener()

    def _enable_listener(self, **kwargs):
        raise NotImplementedError()

    def disable_listener(self):
        '''Disable the orientation sensor.
        '''
        self._disable_listener()

    def _disable_listener(self, **kwargs):
        raise NotImplementedError()

# coding=utf-8


class SpatialOrientation(object):
    '''Spatial Orientation facade.

    Computes the device's orientation based on the rotation matrix.

    .. versionadded:: 1.3.1
    '''

    @property
    def orientation(self):
        '''Property that returns values of the current device orientation
        as a (azimuth, pitch, roll) tuple.

        Azimuth, angle of rotation about the -z axis. This value represents the
        angle between the device's y axis and the magnetic north pole.
        The range of values is -π to π.

        Pitch, angle of rotation about the x axis. This value represents the
        angle between a plane parallel to the device's screen and a plane
        parallel to the ground.
        The range of values is -π to π.

        Roll, angle of rotation about the y axis. This value represents the
        angle between a plane perpendicular to the device's screen and a plane
        perpendicular to the ground.
        The range of values is -π/2 to π/2.

        Returns (None, None, None) if no data is currently available.

        Supported Platforms:: Android
        '''
        return self._get_orientation() or (None, None, None)

    def _get_orientation(self):
        raise NotImplementedError()

    def enable_listener(self):
        '''Enable the orientation sensor.
        '''
        self._enable_listener()

    def _enable_listener(self, **kwargs):
        raise NotImplementedError()

    def disable_listener(self):
        '''Disable the orientation sensor.
        '''
        self._disable_listener()

    def _disable_listener(self, **kwargs):
        raise NotImplementedError()

# coding=utf-8 Spatial Orientation facade.      Computes the device's orientation based on the rotation matrix.      .. versionadded:: 1.3.1 Property that returns values of the current device orientation         as a (azimuth, pitch, roll) tuple.          Azimuth, angle of rotation about the -z axis. This value represents the         angle between the device's y axis and the magnetic north pole.         The range of values is -π to π.          Pitch, angle of rotation about the x axis. This value represents the         angle between a plane parallel to the device's screen and a plane         parallel to the ground.         The range of values is -π to π.          Roll, angle of rotation about the y axis. This value represents the         angle between a plane perpendicular to the device's screen and a plane         perpendicular to the ground.         The range of values is -π/2 to π/2.          Returns (None, None, None) if no data is currently available.          Supported Platforms:: Android Enable the orientation sensor. Disable the orientation sensor.