Sideband/sbapp/plyer/platforms/android/flash.py

56 lines
1.5 KiB
Python

# coding=utf-8
"""
Flash
-----
"""
from plyer.facades import Flash
from jnius import autoclass
from plyer.platforms.android import activity
Camera = autoclass("android.hardware.Camera")
CameraParameters = autoclass("android.hardware.Camera$Parameters")
SurfaceTexture = autoclass("android.graphics.SurfaceTexture")
PackageManager = autoclass('android.content.pm.PackageManager')
pm = activity.getPackageManager()
flash_available = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)
class AndroidFlash(Flash):
_camera = None
def _on(self):
if self._camera is None:
self._camera_open()
if not self._camera:
return
self._camera.setParameters(self._f_on)
def _off(self):
if not self._camera:
return
self._camera.setParameters(self._f_off)
def _release(self):
if not self._camera:
return
self._camera.stopPreview()
self._camera.release()
self._camera = None
def _camera_open(self):
if not flash_available:
return
self._camera = Camera.open()
self._f_on = Camera.getParameters()
self._f_off = Camera.getParameters()
self._f_on.setFlashMode(CameraParameters.FLASH_MODE_TORCH)
self._f_off.setFlashMode(CameraParameters.FLASH_MODE_OFF)
self._camera.startPreview()
# Need this for Nexus 5
self._camera.setPreviewTexture(SurfaceTexture(0))
def instance():
return AndroidFlash()