|
| 1 | +from jnius import PythonJavaClass, java_method |
| 2 | + |
| 3 | +_callbacks = { |
| 4 | + 'on_new_intent': [], |
| 5 | + 'on_activity_result': [] } |
| 6 | + |
| 7 | +class NewIntentListener(PythonJavaClass): |
| 8 | + __javainterfaces__ = ['org/renpy/android/PythonActivity$NewIntentListener'] |
| 9 | + __javacontext__ = 'app' |
| 10 | + |
| 11 | + def __init__(self, callback): |
| 12 | + super(NewIntentListener, self).__init__() |
| 13 | + self.callback = callback |
| 14 | + |
| 15 | + @java_method('(Landroid/content/Intent;)V') |
| 16 | + def onNewIntent(self, intent): |
| 17 | + self.callback(intent) |
| 18 | + |
| 19 | + |
| 20 | +class ActivityResultListener(PythonJavaClass): |
| 21 | + __javainterfaces__ = ['org/renpy/android/PythonActivity$ActivityResultListener'] |
| 22 | + __javacontext__ = 'app' |
| 23 | + |
| 24 | + def __init__(self, callback): |
| 25 | + super(ActivityResultListener, self).__init__() |
| 26 | + self.callback = callback |
| 27 | + |
| 28 | + @java_method('(IILandroid/content/Intent;)V') |
| 29 | + def onActivityResult(self, requestCode, resultCode, intent): |
| 30 | + self.callback(requestCode, resultCode, intent) |
| 31 | + |
| 32 | + |
| 33 | +def bind(**kwargs): |
| 34 | + for event, callback in kwargs.items(): |
| 35 | + if event not in _callbacks: |
| 36 | + raise Exception('Unknown {!r} event'.format(event)) |
| 37 | + elif event == 'on_new_intent': |
| 38 | + listener = NewIntentListener(callback) |
| 39 | + _callbacks[event].append(listener) |
| 40 | + elif event == 'on_activity_result': |
| 41 | + listener = ActivityResultListener(callback) |
| 42 | + _callbacks[event].append(callback) |
| 43 | + |
| 44 | +def unbind(**kwargs): |
| 45 | + for event, callback in kwargs.items(): |
| 46 | + if event not in _callbacks: |
| 47 | + raise Exception('Unknown {!r} event'.format(event)) |
| 48 | + else: |
| 49 | + for listener in _callbacks[event][:]: |
| 50 | + if listener.callback is callback: |
| 51 | + _callbacks[event].remove(listener) |
| 52 | + |
0 commit comments