summaryrefslogtreecommitdiff
path: root/external/plyer/platforms/android/camera.py
diff options
context:
space:
mode:
Diffstat (limited to 'external/plyer/platforms/android/camera.py')
-rw-r--r--external/plyer/platforms/android/camera.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/external/plyer/platforms/android/camera.py b/external/plyer/platforms/android/camera.py
new file mode 100644
index 0000000..344296d
--- /dev/null
+++ b/external/plyer/platforms/android/camera.py
@@ -0,0 +1,59 @@
+import android
+import android.activity
+from os import unlink
+from jnius import autoclass, cast
+from plyer.facades import Camera
+from plyer.platforms.android import activity
+
+Intent = autoclass('android.content.Intent')
+PythonActivity = autoclass('org.renpy.android.PythonActivity')
+MediaStore = autoclass('android.provider.MediaStore')
+Uri = autoclass('android.net.Uri')
+
+
+class AndroidCamera(Camera):
+
+ def _take_picture(self, on_complete, filename=None):
+ assert(on_complete is not None)
+ self.on_complete = on_complete
+ self.filename = filename
+ android.activity.unbind(on_activity_result=self._on_activity_result)
+ android.activity.bind(on_activity_result=self._on_activity_result)
+ intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
+ uri = Uri.parse('file://' + filename)
+ parcelable = cast('android.os.Parcelable', uri)
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, parcelable)
+ activity.startActivityForResult(intent, 0x123)
+
+ def _take_video(self, on_complete, filename=None):
+ assert(on_complete is not None)
+ self.on_complete = on_complete
+ self.filename = filename
+ android.activity.unbind(on_activity_result=self._on_activity_result)
+ android.activity.bind(on_activity_result=self._on_activity_result)
+ intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
+ uri = Uri.parse('file://' + filename)
+ parcelable = cast('android.os.Parcelable', uri)
+ intent.putExtra(MediaStore.EXTRA_OUTPUT, parcelable)
+
+ # 0 = low quality, suitable for MMS messages,
+ # 1 = high quality
+ intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1)
+ activity.startActivityForResult(intent, 0x123)
+
+ def _on_activity_result(self, requestCode, resultCode, intent):
+ if requestCode != 0x123:
+ return
+ android.activity.unbind(on_activity_result=self._on_activity_result)
+ if self.on_complete(self.filename):
+ self._unlink(self.filename)
+
+ def _unlink(self, fn):
+ try:
+ unlink(fn)
+ except:
+ pass
+
+
+def instance():
+ return AndroidCamera()