Skip to content

Commit e63706e

Browse files
author
Petter Hesselberg
committed
Added event sample.
1 parent 17f346b commit e63706e

File tree

6 files changed

+60
-10
lines changed

6 files changed

+60
-10
lines changed

android/app/src/main/java/com/demo/activity/ActivityStarterModule.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,32 @@
1414
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1515
import com.facebook.react.bridge.ReactMethod;
1616
import com.facebook.react.bridge.WritableNativeArray;
17+
import com.facebook.react.bridge.WritableNativeMap;
18+
import com.facebook.react.modules.core.DeviceEventManagerModule;
19+
20+
import java.util.HashMap;
21+
import java.util.Map;
1722

1823
import javax.annotation.Nonnull;
24+
import javax.annotation.Nullable;
1925

2026
/**
2127
* Expose Java to JavaScript.
2228
*/
2329
class ActivityStarterModule extends ReactContextBaseJavaModule {
2430

31+
private static DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter = null;
32+
2533
ActivityStarterModule(ReactApplicationContext reactContext) {
2634
super(reactContext);
2735
}
2836

37+
@Override
38+
public void initialize() {
39+
super.initialize();
40+
eventEmitter = getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class);
41+
}
42+
2943
/**
3044
* @return the name of this module. This will be the name used to {@code require()} this module
3145
* from JavaScript.
@@ -35,6 +49,14 @@ public String getName() {
3549
return "ActivityStarter";
3650
}
3751

52+
@Nullable
53+
@Override
54+
public Map<String, Object> getConstants() {
55+
final Map<String, Object> constants = new HashMap<>();
56+
constants.put("MyEventName", "MyEventValue");
57+
return constants;
58+
}
59+
3860
@ReactMethod
3961
void navigateToExample() {
4062
Activity activity = getCurrentActivity();
@@ -86,4 +108,11 @@ void callJavaScript() {
86108
}
87109
}
88110
}
111+
112+
/**
113+
* To pass an object instead of a simple string, create a {@link WritableNativeMap} and populate it.
114+
*/
115+
static void triggerAlert(@Nonnull String message) {
116+
eventEmitter.emit("MyEventValue", message);
117+
}
89118
}

android/app/src/main/java/com/demo/activity/ActivityStarterReactPackage.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.demo.activity;
22

33
import com.facebook.react.ReactPackage;
4-
import com.facebook.react.bridge.JavaScriptModule;
54
import com.facebook.react.bridge.NativeModule;
65
import com.facebook.react.bridge.ReactApplicationContext;
76
import com.facebook.react.uimanager.ViewManager;
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
package com.demo.activity;
22

33
import android.os.Bundle;
4-
import android.support.v7.app.AppCompatActivity;
54
import android.view.View;
65

6+
import com.facebook.react.ReactActivity;
77

8-
public class ExampleActivity extends AppCompatActivity {
8+
public class ExampleActivity extends ReactActivity {
99

1010
@Override
1111
protected void onCreate(Bundle savedInstanceState) {
1212
super.onCreate(savedInstanceState);
1313
setContentView(R.layout.activity_example);
1414

15-
View goBack = findViewById(R.id.go_back_btn);
16-
goBack.setOnClickListener(new View.OnClickListener() {
15+
findViewById(R.id.call_callback_btn).setEnabled(true);
16+
findViewById(R.id.go_back_btn).setOnClickListener(new View.OnClickListener() {
1717
@Override
1818
public void onClick(View view) {
1919
onBackPressed();
2020
}
2121
});
22+
23+
findViewById(R.id.call_callback_btn).setOnClickListener(new View.OnClickListener() {
24+
@Override
25+
public void onClick(View view) {
26+
ActivityStarterModule.triggerAlert("Hello from " + getClass().getSimpleName());
27+
}
28+
});
2229
}
2330
}

android/app/src/main/res/layout/activity_example.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,15 @@
2222
android:layout_gravity="center"
2323
android:layout_width="wrap_content"
2424
android:layout_height="wrap_content"
25+
android:layout_marginBottom="12dp"
2526
android:text="@string/go_back"
2627
/>
28+
<Button
29+
android:id="@+id/call_callback_btn"
30+
android:layout_gravity="center"
31+
android:layout_width="wrap_content"
32+
android:layout_height="wrap_content"
33+
android:text="@string/trigger_event"
34+
/>
2735

2836
</LinearLayout>

android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
<string name="example_activity_title">Example activity</string>
55
<string name="go_back">Go back!</string>
66
<string name="call_javascript_method">Call JavaScript method</string>
7+
<string name="trigger_event">Trigger event</string>
78
</resources>

index.android.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import React, { Component } from 'react';
88
import {
99
AppRegistry,
1010
Button,
11+
NativeEventEmitter,
1112
NativeModules,
1213
StyleSheet,
1314
Text,
@@ -25,6 +26,8 @@ export class ExposedToJava {
2526
const exposedToJava = new ExposedToJava();
2627
BatchedBridge.registerCallableModule("JavaScriptVisibleToJava", exposedToJava);
2728

29+
const activityStarter = NativeModules.ActivityStarter;
30+
2831
export default class ActivityDemoComponent extends Component {
2932
render() {
3033
return (
@@ -41,21 +44,21 @@ export default class ActivityDemoComponent extends Component {
4144
</Text>
4245
<View style={styles.buttonContainer}>
4346
<Button
44-
onPress={() => NativeModules.ActivityStarter.navigateToExample()}
47+
onPress={() => activityStarter.navigateToExample()}
4548
title='Start example activity'
4649
/>
4750
<Button
48-
onPress={() => NativeModules.ActivityStarter.dialNumber('+1 (234) 567-8910')}
51+
onPress={() => activityStarter.dialNumber('+1 (234) 567-8910')}
4952
title='Dial +1 (234) 567-8910'
5053
/>
5154
<Button
52-
onPress={() => NativeModules.ActivityStarter.getActivityName((name) => { alert(name); })}
55+
onPress={() => activityStarter.getActivityName((name) => { alert(name); })}
5356
title='Get activity name'
5457
/>
5558
<Button
5659
onPress={async () => {
5760
try {
58-
var name = await NativeModules.ActivityStarter.getActivityNameAsPromise();
61+
var name = await activityStarter.getActivityNameAsPromise();
5962
alert(name);
6063
} catch (e) {
6164
alert(e.message);
@@ -68,7 +71,7 @@ export default class ActivityDemoComponent extends Component {
6871
title='Copy to clipboard'
6972
/>
7073
<Button
71-
onPress={() => NativeModules.ActivityStarter.callJavaScript()}
74+
onPress={() => activityStarter.callJavaScript()}
7275
title='Call JavaScript from Java'
7376
/>
7477
</View>
@@ -103,3 +106,6 @@ const styles = StyleSheet.create({
103106
});
104107

105108
AppRegistry.registerComponent('ActivityDemoComponent', () => ActivityDemoComponent);
109+
110+
const eventEmitter = new NativeEventEmitter(activityStarter);
111+
eventEmitter.addListener(activityStarter.MyEventName, (params) => alert(params));

0 commit comments

Comments
 (0)