mirror of
https://github.com/liberatedsystems/openCom-Companion.git
synced 2024-11-23 05:50:36 +01:00
82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
|
'''
|
||
|
IOS file chooser
|
||
|
--------------------
|
||
|
|
||
|
This module houses the iOS implementation of the plyer FileChooser.
|
||
|
|
||
|
.. versionadded:: 1.4.4
|
||
|
'''
|
||
|
|
||
|
from plyer.facades import FileChooser
|
||
|
from pyobjus import autoclass, protocol
|
||
|
from pyobjus.dylib_manager import load_framework
|
||
|
|
||
|
|
||
|
load_framework('/System/Library/Frameworks/Photos.framework')
|
||
|
|
||
|
|
||
|
class IOSFileChooser(FileChooser):
|
||
|
'''
|
||
|
FileChooser implementation for IOS using
|
||
|
the built-in file browser via UIImagePickerController.
|
||
|
|
||
|
.. versionadded:: 1.4.0
|
||
|
'''
|
||
|
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
super().__init__(*args, **kwargs)
|
||
|
self._on_selection = None
|
||
|
|
||
|
def _file_selection_dialog(self, *args, **kwargs):
|
||
|
"""
|
||
|
Function called when action is required, A "mode" parameter specifies
|
||
|
which and is one of "open", "save" or "dir".
|
||
|
"""
|
||
|
self._on_selection = kwargs["on_selection"]
|
||
|
if kwargs["mode"] == "open":
|
||
|
self._open()
|
||
|
else:
|
||
|
raise NotImplementedError()
|
||
|
|
||
|
def _get_picker(self):
|
||
|
"""
|
||
|
Return an instantiated and configured UIImagePickerController.
|
||
|
"""
|
||
|
picker = autoclass("UIImagePickerController")
|
||
|
po = picker.alloc().init()
|
||
|
po.sourceType = 0
|
||
|
po.delegate = self
|
||
|
return po
|
||
|
|
||
|
def _open(self):
|
||
|
"""
|
||
|
Launch the native iOS file browser. Upon selection, the
|
||
|
`imagePickerController_didFinishPickingMediaWithInfo_` delegate is
|
||
|
called where we close the file browser and handle the result.
|
||
|
"""
|
||
|
picker = self._get_picker()
|
||
|
UIApplication = autoclass('UIApplication')
|
||
|
vc = UIApplication.sharedApplication().keyWindow.rootViewController()
|
||
|
vc.presentViewController_animated_completion_(picker, True, None)
|
||
|
|
||
|
@protocol('UIImagePickerControllerDelegate')
|
||
|
def imagePickerController_didFinishPickingMediaWithInfo_(
|
||
|
self, image_picker, frozen_dict):
|
||
|
"""
|
||
|
Delegate which handles the result of the image selection process.
|
||
|
"""
|
||
|
image_picker.dismissViewControllerAnimated_completion_(True, None)
|
||
|
|
||
|
# Note: We need to call this Objective C class as there is currently
|
||
|
# no way to call a non-class function via pyobjus. And here,
|
||
|
# we have to use the `UIImagePNGRepresentation` to get the png
|
||
|
# representation. For this, please ensure you are using an
|
||
|
# appropriate version of kivy-ios.
|
||
|
native_image_picker = autoclass("NativeImagePicker").alloc().init()
|
||
|
path = native_image_picker.writeToPNG_(frozen_dict)
|
||
|
self._on_selection([path.UTF8String()])
|
||
|
|
||
|
|
||
|
def instance():
|
||
|
return IOSFileChooser()
|