Skip to content

Instantly share code, notes, and snippets.

@phausler
Created October 21, 2013 07:05
Show Gist options
  • Save phausler/7079724 to your computer and use it in GitHub Desktop.
Save phausler/7079724 to your computer and use it in GitHub Desktop.
example bridge callbacks
/*
Foo.java
*/
package com.apportable.example;
...
public class Foo {
public static void initialize(Activity activity, String appId) {
/* do something here in java */
}
public native void myCallback(String value);
public Foo(Activity activity) {
}
public void invokeCallback(String value) {
myCallback(value);
}
}
/*
Foo.h
*/
#import <BridgeKit/JavaObject.h>
@class AndroidActivity;
@interface Foo : JavaObject
+ (void)initialize:(AndroidActivity *)activity appIdentifier:(NSString *)appId;
- (id)initWithActivity:(AndroidActivity *)activity;
- (id)init;
- (void)invokeCallback:(NSString *)value;
- (void)invokeCallback:(NSString *)value handler:(void (^)(NSString *))handler;
@end
/*
Foo.m
*/
#import "Foo.h"
@implementation Foo {
void (^_handler)(NSString *);
}
+ (void)initializeJava
{
[super initializeJava];
[Foo registerStaticMethod:@"initialize" selector:@selector(initialize:appIdentifier:) arguments:[AndroidActivity className], [NSString className], nil];
[Foo registerConstructorWithSelector:@selector(initWithActivity:) arguments:[AndroidActivity className], nil];
[Foo registerInstanceMethod:@"invokeCallback" selector:@selector(invokeCallback:) arguments:[NSString className], nil];
[Foo registerCallback:@"myCallback" selector:@selector(myCallback:) arguments:[NSString className], nil];
}
- (id)init
{
return [self initWithActivity:[AndroidActivity currentActivity]];
}
- (void)dealloc
{
[_handler release];
[super dealloc];
}
- (void)invokeCallback:(NSString *)value handler:(void (^)(NSString *))handler
{
if (_handler != handler)
{
[_handler release];
_handler = Block_copy(handler);
}
[self invokeCallback:value];
}
- (void)myCallback:(NSString *)value
{
if (_handler != NULL) {
_handler(value);
}
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment