diff --git a/android/app/build.gradle b/android/app/build.gradle
index 16252077d3..9cf1a19a82 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -138,8 +138,6 @@ dependencies {
compile project(':react-native-fs')
compile project(':react-native-image-crop-picker')
compile project(':react-native-webview-bridge')
- //compile(name:'statusgo-android-16', ext:'aar')
- compile(group: 'status-im', name: 'status-go', version: '0.1.0-574f68-service', ext: 'aar')
compile fileTree(dir: "node_modules/realm/android/libs", include: ["*.jar"])
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 8131fa84ff..2dc81d9380 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -24,7 +24,7 @@
diff --git a/android/app/src/main/java/com/statusim/MainActivity.java b/android/app/src/main/java/com/statusim/MainActivity.java
index cc26f91d5f..190c4055a9 100644
--- a/android/app/src/main/java/com/statusim/MainActivity.java
+++ b/android/app/src/main/java/com/statusim/MainActivity.java
@@ -14,7 +14,7 @@ import java.util.Properties;
public class MainActivity extends ReactActivity {
private static final String TAG = "MainActivity";
- protected void startStatus() {
+ protected void configureStatus() {
// Required because of crazy APN settings redirecting localhost (found in GB)
Properties properties = System.getProperties();
properties.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");
@@ -26,7 +26,7 @@ public class MainActivity extends ReactActivity {
super.onCreate(savedInstanceState);
if (!RootUtil.isDeviceRooted()) {
- startStatus();
+ configureStatus();
} else {
AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
.setMessage(getResources().getString(R.string.root_warning))
@@ -34,7 +34,7 @@ public class MainActivity extends ReactActivity {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
- startStatus();
+ configureStatus();
}
})
.setNegativeButton(getResources().getString(R.string.root_cancel), new OnClickListener() {
diff --git a/android/app/src/main/java/com/statusim/MainApplication.java b/android/app/src/main/java/com/statusim/MainApplication.java
index 9c9a881d40..3d7bec0251 100644
--- a/android/app/src/main/java/com/statusim/MainApplication.java
+++ b/android/app/src/main/java/com/statusim/MainApplication.java
@@ -7,7 +7,7 @@ import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
-import com.statusim.Jail.JailPackage;
+import com.statusim.module.StatusPackage;
import io.realm.react.RealmReactPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.rt2zz.reactnativecontacts.ReactNativeContacts;
@@ -18,7 +18,6 @@ import com.lwansbrough.RCTCamera.*;
import com.centaurwarchief.smslistener.SmsListenerPackage;
import com.github.yamill.orientation.OrientationPackage;
import com.rnfs.RNFSPackage;
-import com.statusim.geth.module.GethPackage;
import com.aakashns.reactnativedialogs.ReactNativeDialogsPackage;
import fr.bamlab.rnimageresizer.ImageResizerPackage;
import com.reactnative.picker.PickerPackage;
@@ -39,7 +38,7 @@ public class MainApplication extends Application implements ReactApplication {
protected List getPackages() {
return Arrays.asList(
new MainReactPackage(),
- new JailPackage(),
+ new StatusPackage(),
new RealmReactPackage(),
new VectorIconsPackage(),
new ReactNativeContacts(),
@@ -50,7 +49,6 @@ public class MainApplication extends Application implements ReactApplication {
new SmsListenerPackage(),
new OrientationPackage(),
new RNFSPackage(),
- new GethPackage(),
new ReactNativeDialogsPackage(),
new ImageResizerPackage(),
new PickerPackage(),
diff --git a/android/app/src/main/java/com/statusim/geth/module/GethModule.java b/android/app/src/main/java/com/statusim/geth/module/GethModule.java
deleted file mode 100644
index 0d89f154e7..0000000000
--- a/android/app/src/main/java/com/statusim/geth/module/GethModule.java
+++ /dev/null
@@ -1,242 +0,0 @@
-package com.statusim.geth.module;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.os.Message;
-import android.os.RemoteException;
-import com.facebook.react.bridge.*;
-import com.facebook.react.modules.core.DeviceEventManagerModule;
-import com.statusim.geth.service.ConnectorHandler;
-import com.statusim.geth.service.GethConnector;
-import com.statusim.geth.service.GethMessages;
-import com.statusim.geth.service.GethService;
-import android.util.Log;
-
-import java.util.HashMap;
-import java.util.UUID;
-
-class GethModule extends ReactContextBaseJavaModule implements LifecycleEventListener, ConnectorHandler {
-
- private static final String TAG = "GethModule";
-
- private GethConnector geth = null;
-
- private HashMap callbacks = new HashMap<>();
-
- GethModule(ReactApplicationContext reactContext) {
- super(reactContext);
- reactContext.addLifecycleEventListener(this);
- }
-
- @Override
- public String getName() {
- return "Geth";
- }
-
- @Override
- public void onHostResume() { // Actvity `onResume`
-
- Activity currentActivity = getCurrentActivity();
-
- if (currentActivity == null) {
- return;
- }
- if (geth == null) {
- geth = new GethConnector(currentActivity, GethService.class);
- geth.registerHandler(this);
- }
- geth.bindService();
- }
-
- @Override
- public void onHostPause() { // Actvity `onPause`
-
- if (geth != null) {
- geth.unbindService();
- }
- }
-
- @Override
- public void onHostDestroy() { // Actvity `onDestroy`
-
- if (geth != null) {
- geth.stopNode(null);
- }
- }
-
- @Override
- public void onConnectorConnected() {
- }
-
- @Override
- public void onConnectorDisconnected() {
- }
-
- @Override
- public boolean handleMessage(Message message) {
-
- Log.d(TAG, "Received message: " + message.toString());
- boolean isClaimed = true;
- Bundle data = message.getData();
- String callbackIdentifier = data.getString(GethConnector.CALLBACK_IDENTIFIER);
- Log.d(TAG, "callback identifier: " + callbackIdentifier);
- Callback callback = callbacks.remove(callbackIdentifier);
- if (callback == null) {
- Log.d(TAG, "Could not find callback: " + callbackIdentifier);
- }
- switch (message.what) {
- case GethMessages.MSG_NODE_STARTED:
- if (callback != null) {
- callback.invoke(true);
- }
- break;
- case GethMessages.MSG_NODE_STOPPED:
- break;
- case GethMessages.MSG_ACCOUNT_CREATED:
- if (callback != null) {
- callback.invoke(data.getString("data"));
- }
- break;
- case GethMessages.MSG_ACCOUNT_RECOVERED:
- if (callback != null) {
- callback.invoke(data.getString("data"));
- }
- break;
- case GethMessages.MSG_LOGGED_IN:
- if (callback != null) {
- callback.invoke(data.getString("result"));
- }
- break;
- case GethMessages.MSG_TRANSACTION_COMPLETED:
- String result = data.getString("result");
- Log.d(TAG, "Send result: " + result + (callback == null));
- if (callback != null) {
- callback.invoke(result);
- }
- break;
- case GethMessages.MSG_GETH_EVENT:
- String event = data.getString("event");
- WritableMap params = Arguments.createMap();
- params.putString("jsonEvent", event);
- getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("gethEvent", params);
- default:
- isClaimed = false;
- }
-
- return isClaimed;
- }
-
- @ReactMethod
- public void startNode(Callback callback, Callback onAlreadyRunning) {
-
- if (GethService.isRunning()) {
- onAlreadyRunning.invoke();
- return;
- }
-
- Activity currentActivity = getCurrentActivity();
-
- if (currentActivity == null) {
- callback.invoke("Activity doesn't exist");
- return;
- }
-
- if (geth == null) {
- callback.invoke("Geth connector is null");
- return;
- }
-
- String callbackIdentifier = createIdentifier();
- callbacks.put(callbackIdentifier, callback);
-
- geth.startNode(callbackIdentifier);
- }
-
- @ReactMethod
- public void login(String address, String password, Callback callback) {
-
- Activity currentActivity = getCurrentActivity();
-
- if (currentActivity == null) {
- callback.invoke("Activity doesn't exist");
- return;
- }
-
- if (geth == null) {
- callback.invoke("Geth connector is null");
- return;
- }
-
- String callbackIdentifier = createIdentifier();
- callbacks.put(callbackIdentifier, callback);
-
- geth.login(callbackIdentifier, address, password);
- }
-
- @ReactMethod
- public void createAccount(String password, Callback callback) {
-
- Activity currentActivity = getCurrentActivity();
-
- if (currentActivity == null) {
- callback.invoke("Activity doesn't exist");
- return;
- }
-
- if (geth == null) {
- callback.invoke("Geth connector is null");
- return;
- }
-
- String callbackIdentifier = createIdentifier();
- callbacks.put(callbackIdentifier, callback);
-
- geth.createAccount(callbackIdentifier, password);
- }
-
- @ReactMethod
- public void recoverAccount(String passphrase, String password, Callback callback) {
-
- Activity currentActivity = getCurrentActivity();
-
- if (currentActivity == null) {
- callback.invoke("Activity doesn't exist");
- return;
- }
-
- if (geth == null) {
- callback.invoke("Geth connector is null");
- return;
- }
-
- String callbackIdentifier = createIdentifier();
- callbacks.put(callbackIdentifier, callback);
-
- geth.recoverAccount(callbackIdentifier, passphrase, password);
- }
-
- private String createIdentifier() {
- return UUID.randomUUID().toString();
- }
-
- @ReactMethod
- public void completeTransaction(String hash, String password, Callback callback) {
- Activity currentActivity = getCurrentActivity();
-
- if (currentActivity == null) {
- callback.invoke("Activity doesn't exist");
- return;
- }
-
- if (geth == null) {
- callback.invoke("Geth connector is null");
- return;
- }
-
- Log.d(TAG, "Complete transaction: " + hash);
- String callbackIdentifier = createIdentifier();
- callbacks.put(callbackIdentifier, callback);
-
- geth.completeTransaction(callbackIdentifier, hash, password);
- }
-}
diff --git a/android/app/src/main/java/com/statusim/geth/service/GethConnector.java b/android/app/src/main/java/com/statusim/geth/service/GethConnector.java
deleted file mode 100644
index 1a90b53e55..0000000000
--- a/android/app/src/main/java/com/statusim/geth/service/GethConnector.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package com.statusim.geth.service;
-
-
-import android.content.Context;
-import android.os.Bundle;
-import android.os.Message;
-import android.os.RemoteException;
-import android.util.Log;
-
-public class GethConnector extends ServiceConnector {
-
- private static final String TAG = "GethConnector";
-
- public static final String CALLBACK_IDENTIFIER = "callbackIdentifier";
-
- public GethConnector(Context context, Class serviceClass) {
-
- super(context, serviceClass);
- }
-
- public void startNode(String callbackIdentifier) {
-
- if (checkBound()) {
- Message msg = createMessage(callbackIdentifier, GethMessages.MSG_START_NODE, null);
- try {
- serviceMessenger.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Exception sending message(startNode) to service: ", e);
- }
- }
- }
-
- public void stopNode(String callbackIdentifier) {
-
- if (checkBound()) {
- Message msg = createMessage(callbackIdentifier, GethMessages.MSG_STOP_NODE, null);
- try {
- serviceMessenger.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Exception sending message(stopNode) to service: ", e);
- }
- }
- }
-
- public void login(String callbackIdentifier, String address, String password) {
-
- if (checkBound()) {
- Bundle data = new Bundle();
- data.putString("address", address);
- data.putString("password", password);
- Message msg = createMessage(callbackIdentifier, GethMessages.MSG_LOGIN, data);
- try {
- serviceMessenger.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Exception sending message(unlockAccount) to service: ", e);
- }
- }
- }
-
- public void createAccount(String callbackIdentifier, String password) {
-
- if (checkBound()) {
- Bundle data = new Bundle();
- data.putString("password", password);
- Message msg = createMessage(callbackIdentifier, GethMessages.MSG_CREATE_ACCOUNT, data);
- try {
- serviceMessenger.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Exception sending message(createAccount) to service: ", e);
- }
- }
- }
-
- public void recoverAccount(String callbackIdentifier, String passphrase, String password) {
-
- if (checkBound()) {
- Bundle data = new Bundle();
- data.putString("passphrase", passphrase);
- data.putString("password", password);
- Message msg = createMessage(callbackIdentifier, GethMessages.MSG_RECOVER_ACCOUNT, data);
- try {
- serviceMessenger.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Exception sending message(recoverAccount) to service: ", e);
- }
- }
- }
-
- public void completeTransaction(String callbackIdentifier, String hash, String password){
- if (checkBound()) {
- Bundle data = new Bundle();
- data.putString("hash", hash);
- data.putString("password", password);
- Message msg = createMessage(callbackIdentifier, GethMessages.MSG_COMPLETE_TRANSACTION, data);
- try {
- serviceMessenger.send(msg);
- } catch (RemoteException e) {
- Log.e(TAG, "Exception sending message(completeTransaction) to service: ", e);
- }
- }
- }
-
-
- private boolean checkBound() {
-
- if (!isBound) {
- Log.d(TAG, "GethConnector not bound!");
- return false;
- }
- return true;
- }
-
- private Message createMessage(String callbackIdentifier, int idMessage, Bundle data) {
-
- Log.d(TAG, "Client messenger: " + clientMessenger.toString());
- Message msg = Message.obtain(null, idMessage, 0, 0);
- msg.replyTo = clientMessenger;
- if (data == null) {
- data = new Bundle();
- }
- data.putString(CALLBACK_IDENTIFIER, callbackIdentifier);
- msg.setData(data);
- return msg;
- }
-}
diff --git a/android/app/src/main/java/com/statusim/geth/service/GethMessages.java b/android/app/src/main/java/com/statusim/geth/service/GethMessages.java
deleted file mode 100644
index 2194cbdd08..0000000000
--- a/android/app/src/main/java/com/statusim/geth/service/GethMessages.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.statusim.geth.service;
-
-
-public class GethMessages {
-
- /**
- * Start the node
- */
- static final int MSG_START_NODE = 1;
-
- /**
- * Node started event
- */
- public static final int MSG_NODE_STARTED = 2;
-
- /**
- * Stop the node
- */
- static final int MSG_STOP_NODE = 3;
-
- /**
- * Node stopped event
- */
- public static final int MSG_NODE_STOPPED = 4;
-
- /**
- * Unlock an account
- */
- static final int MSG_LOGIN = 5;
-
- /**
- * Account unlocked event
- */
- public static final int MSG_LOGGED_IN = 6;
-
- /**
- * Create an account
- */
- static final int MSG_CREATE_ACCOUNT = 7;
-
- /**
- * Account created event
- */
- public static final int MSG_ACCOUNT_CREATED = 8;
-
- /**
- * Create an account
- */
- static final int MSG_RECOVER_ACCOUNT = 9;
-
- /**
- * Account created event
- */
- public static final int MSG_ACCOUNT_RECOVERED = 10;
-
- /**
- * Account complete transaction event
- */
- static final int MSG_COMPLETE_TRANSACTION = 11;
-
- /**
- * Account complete transaction event
- */
- public static final int MSG_TRANSACTION_COMPLETED = 11;
-
- /**
- * Geth event
- */
- public static final int MSG_GETH_EVENT = 12;
-}
diff --git a/android/settings.gradle b/android/settings.gradle
index d68bcdd911..48440b5102 100644
--- a/android/settings.gradle
+++ b/android/settings.gradle
@@ -20,7 +20,7 @@ project(':realm').projectDir = new File(rootProject.projectDir, '../node_modules
include ':react-native-linear-gradient'
project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android')
include ':react-native-status'
-project(':react-native-status').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-status/android')
+project(':react-native-status').projectDir = new File(rootProject.projectDir, '../modules/react-native-status/android')
include ':react-native-camera'
project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android')
include ':react-native-orientation', ':app'
diff --git a/ios/StatusIm.xcodeproj/project.pbxproj b/ios/StatusIm.xcodeproj/project.pbxproj
index d1ce2be680..8f5965aede 100644
--- a/ios/StatusIm.xcodeproj/project.pbxproj
+++ b/ios/StatusIm.xcodeproj/project.pbxproj
@@ -25,7 +25,7 @@
2028DFFA1D4275B600227DCD /* SF-UI-Display-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2028DFF61D4275B600227DCD /* SF-UI-Display-Regular.otf */; };
2028DFFB1D4275B600227DCD /* SF-UI-Display-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2028DFF71D4275B600227DCD /* SF-UI-Display-Semibold.otf */; };
2028DFFC1D4275B600227DCD /* SF-UI-Display-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2028DFF81D4275B600227DCD /* SF-UI-Display-Thin.otf */; };
- 20AB9EC61D47CC0300E7FD9C /* libRCTJail.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 201067C41D4789F700FA83B6 /* libRCTJail.a */; };
+ 20AB9EC61D47CC0300E7FD9C /* libRCTStatus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 201067C41D4789F700FA83B6 /* libRCTStatus.a */; };
20B2DBFC1D47C70C00427CD8 /* Statusgo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20B2DBFB1D47C70C00427CD8 /* Statusgo.framework */; };
213311F38CA74CE280FD09AD /* libRNI18n.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 52F6ED6465184513A082652B /* libRNI18n.a */; };
22118DE1207A419FBFE7B62D /* libRealmReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD48A32459B64E96843BB238 /* libRealmReact.a */; };
@@ -131,10 +131,10 @@
};
201067C31D4789F700FA83B6 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
- containerPortal = 439B6B4B407A4E2AACAFE5BE /* RCTJail.xcodeproj */;
+ containerPortal = 439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 206C9F3A1D474E910063E3E6;
- remoteInfo = RCTJail;
+ remoteInfo = RCTStatus;
};
20B7D0FD1D3F74CC00B70F14 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
@@ -249,16 +249,16 @@
2028DFF61D4275B600227DCD /* SF-UI-Display-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Display-Regular.otf"; sourceTree = ""; };
2028DFF71D4275B600227DCD /* SF-UI-Display-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Display-Semibold.otf"; sourceTree = ""; };
2028DFF81D4275B600227DCD /* SF-UI-Display-Thin.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Display-Thin.otf"; sourceTree = ""; };
- 20B2DBDD1D47BD5E00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../node_modules/react-native-status/ios/RCTJail/Statusgo.framework"; sourceTree = ""; };
+ 20B2DBDD1D47BD5E00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../modules/react-native-status/ios/RCTStatus/Statusgo.framework"; sourceTree = ""; };
20B2DBF71D47C25500427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Statusgo.framework; sourceTree = ""; };
- 20B2DBFB1D47C70C00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../node_modules/react-native-status/ios/Statusgo.framework"; sourceTree = ""; };
+ 20B2DBFB1D47C70C00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../modules/react-native-status/ios/Statusgo.framework"; sourceTree = ""; };
2756305FAFF144C4A6B0A039 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; };
2F0276A9E90843E996A0E762 /* UdpSockets.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = UdpSockets.xcodeproj; path = "../node_modules/react-native-udp/ios/UdpSockets.xcodeproj"; sourceTree = ""; };
305F194186D848FDB07AF34C /* RNFS.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFS.xcodeproj; path = "../node_modules/react-native-fs/RNFS.xcodeproj"; sourceTree = ""; };
3384AFA9609A409B81928AD5 /* libRCTContacts.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTContacts.a; sourceTree = ""; };
359B076A658B4FBAB5128B03 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; };
38E1A2C8D0734EE99E2B16CE /* TcpSockets.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = TcpSockets.xcodeproj; path = "../node_modules/react-native-tcp/ios/TcpSockets.xcodeproj"; sourceTree = ""; };
- 439B6B4B407A4E2AACAFE5BE /* RCTJail.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTJail.xcodeproj; path = "../node_modules/react-native-status/ios/RCTJail/RCTJail.xcodeproj"; sourceTree = ""; };
+ 439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTStatus.xcodeproj; path = "../modules/react-native-status/ios/RCTStatus/RCTStatus.xcodeproj"; sourceTree = ""; };
43A6FA689D844B0BAF3AA8B4 /* RCTOrientation.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTOrientation.xcodeproj; path = "../node_modules/react-native-orientation/iOS/RCTOrientation.xcodeproj"; sourceTree = ""; };
45FB5F523DE04BDE9877869C /* RNRandomBytes.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNRandomBytes.xcodeproj; path = "../node_modules/react-native-randombytes/RNRandomBytes.xcodeproj"; sourceTree = ""; };
46E2F6052EB44C698C680894 /* RNI18n.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNI18n.xcodeproj; path = "../node_modules/react-native-i18n/RNI18n.xcodeproj"; sourceTree = ""; };
@@ -301,7 +301,7 @@
buildActionMask = 2147483647;
files = (
20B2DBFC1D47C70C00427CD8 /* Statusgo.framework in Frameworks */,
- 20AB9EC61D47CC0300E7FD9C /* libRCTJail.a in Frameworks */,
+ 20AB9EC61D47CC0300E7FD9C /* libRCTStatus.a in Frameworks */,
146834051AC3E58100842450 /* libReact.a in Frameworks */,
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
@@ -462,7 +462,7 @@
201067BA1D4789F700FA83B6 /* Products */ = {
isa = PBXGroup;
children = (
- 201067C41D4789F700FA83B6 /* libRCTJail.a */,
+ 201067C41D4789F700FA83B6 /* libRCTStatus.a */,
);
name = Products;
sourceTree = "";
@@ -583,7 +583,7 @@
F090E261B9854867A728CE4F /* RealmReact.xcodeproj */,
38E1A2C8D0734EE99E2B16CE /* TcpSockets.xcodeproj */,
2F0276A9E90843E996A0E762 /* UdpSockets.xcodeproj */,
- 439B6B4B407A4E2AACAFE5BE /* RCTJail.xcodeproj */,
+ 439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */,
5E5A7625B76441D984EA8C0D /* RCTImageResizer.xcodeproj */,
);
name = Libraries;
@@ -724,7 +724,7 @@
},
{
ProductGroup = 201067BA1D4789F700FA83B6 /* Products */;
- ProjectRef = 439B6B4B407A4E2AACAFE5BE /* RCTJail.xcodeproj */;
+ ProjectRef = 439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */;
},
{
ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
@@ -866,10 +866,10 @@
remoteRef = 201067711D477F5E00FA83B6 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
- 201067C41D4789F700FA83B6 /* libRCTJail.a */ = {
+ 201067C41D4789F700FA83B6 /* libRCTStatus.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
- path = libRCTJail.a;
+ path = libRCTStatus.a;
remoteRef = 201067C31D4789F700FA83B6 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
@@ -1144,8 +1144,8 @@
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-udp/ios/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
"$(SRCROOT)/../node_modules/react-native-image-resizer/ios/RCTImageResizer",
);
INFOPLIST_FILE = StatusIm/Info.plist;
@@ -1185,8 +1185,8 @@
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-udp/ios/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
"$(SRCROOT)/../node_modules/react-native-image-resizer/ios/RCTImageResizer",
);
INFOPLIST_FILE = StatusIm/Info.plist;
@@ -1250,8 +1250,8 @@
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-udp/ios/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
"$(SRCROOT)/../node_modules/react-native-image-resizer/ios/RCTImageResizer",
);
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
@@ -1304,8 +1304,8 @@
"$(SRCROOT)/../node_modules/realm/src/**",
"$(SRCROOT)/../node_modules/react-native-tcp/ios/**",
"$(SRCROOT)/../node_modules/react-native-udp/ios/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
- "$(SRCROOT)/../node_modules/react-native-status/ios/RCTJail/RCTJail/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
+ "$(SRCROOT)/../modules/react-native-status/ios/RCTStatus/**",
"$(SRCROOT)/../node_modules/react-native-image-resizer/ios/RCTImageResizer",
);
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
diff --git a/modules/react-native-status/android/build.gradle b/modules/react-native-status/android/build.gradle
new file mode 100644
index 0000000000..abdaecb7c1
--- /dev/null
+++ b/modules/react-native-status/android/build.gradle
@@ -0,0 +1,18 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion 23
+ buildToolsVersion "23.0.1"
+
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 22
+ versionCode 1
+ versionName "1.0"
+ }
+}
+
+dependencies {
+ compile 'com.facebook.react:react-native:+'
+ compile(group: 'status-im', name: 'status-go', version: '0.1.0-module', ext: 'aar')
+}
\ No newline at end of file
diff --git a/modules/react-native-status/android/src/main/AndroidManifest.xml b/modules/react-native-status/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..2b6aeb87f8
--- /dev/null
+++ b/modules/react-native-status/android/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/android/app/src/main/java/com/statusim/geth/service/ConnectorHandler.java b/modules/react-native-status/android/src/main/java/com/statusim/module/ConnectorHandler.java
similarity index 83%
rename from android/app/src/main/java/com/statusim/geth/service/ConnectorHandler.java
rename to modules/react-native-status/android/src/main/java/com/statusim/module/ConnectorHandler.java
index 1a9077490a..5259e17ce3 100644
--- a/android/app/src/main/java/com/statusim/geth/service/ConnectorHandler.java
+++ b/modules/react-native-status/android/src/main/java/com/statusim/module/ConnectorHandler.java
@@ -1,4 +1,4 @@
-package com.statusim.geth.service;
+package com.statusim.module;
import android.os.Message;
diff --git a/android/app/src/main/java/com/statusim/geth/service/ServiceConnector.java b/modules/react-native-status/android/src/main/java/com/statusim/module/ServiceConnector.java
similarity index 99%
rename from android/app/src/main/java/com/statusim/geth/service/ServiceConnector.java
rename to modules/react-native-status/android/src/main/java/com/statusim/module/ServiceConnector.java
index b2cd7996dd..78b225d109 100644
--- a/android/app/src/main/java/com/statusim/geth/service/ServiceConnector.java
+++ b/modules/react-native-status/android/src/main/java/com/statusim/module/ServiceConnector.java
@@ -1,4 +1,4 @@
-package com.statusim.geth.service;
+package com.statusim.module;
import android.content.ComponentName;
@@ -69,6 +69,7 @@ public class ServiceConnector {
// interact with the service. We are communicating with the
// service using a Messenger, so here we get a client-side
// representation of that from the raw IBinder object.
+
serviceMessenger = new Messenger(service);
isBound = true;
for (ConnectorHandler handler: handlers) {
diff --git a/modules/react-native-status/android/src/main/java/com/statusim/module/StatusConnector.java b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusConnector.java
new file mode 100644
index 0000000000..23cd3f9171
--- /dev/null
+++ b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusConnector.java
@@ -0,0 +1,135 @@
+package com.statusim.module;
+
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Log;
+
+public class StatusConnector extends ServiceConnector {
+
+ private static final String TAG = "StatusConnector";
+
+ public static final String CALLBACK_IDENTIFIER = "callbackIdentifier";
+
+ public StatusConnector(Context context, Class serviceClass) {
+
+ super(context, serviceClass);
+ }
+
+ public void startNode(String callbackIdentifier) {
+
+ if (checkBound()) {
+ sendMessage(callbackIdentifier, StatusMessages.MSG_START_NODE, null);
+ }
+ }
+
+ public void stopNode(String callbackIdentifier) {
+
+ if (checkBound()) {
+ sendMessage(callbackIdentifier, StatusMessages.MSG_STOP_NODE, null);
+ }
+ }
+
+ public void login(String callbackIdentifier, String address, String password) {
+
+ if (checkBound()) {
+ Bundle data = new Bundle();
+ data.putString("address", address);
+ data.putString("password", password);
+ sendMessage(callbackIdentifier, StatusMessages.MSG_LOGIN, data);
+ }
+ }
+
+ public void createAccount(String callbackIdentifier, String password) {
+
+ if (checkBound()) {
+ Bundle data = new Bundle();
+ data.putString("password", password);
+ sendMessage(callbackIdentifier, StatusMessages.MSG_CREATE_ACCOUNT, data);
+ }
+ }
+
+ public void recoverAccount(String callbackIdentifier, String passphrase, String password) {
+
+ if (checkBound()) {
+ Bundle data = new Bundle();
+ data.putString("passphrase", passphrase);
+ data.putString("password", password);
+ sendMessage(callbackIdentifier, StatusMessages.MSG_RECOVER_ACCOUNT, data);
+ }
+ }
+
+ public void completeTransaction(String callbackIdentifier, String hash, String password){
+
+ if (checkBound()) {
+ Bundle data = new Bundle();
+ data.putString("hash", hash);
+ data.putString("password", password);
+ sendMessage(callbackIdentifier, StatusMessages.MSG_COMPLETE_TRANSACTION, data);
+ }
+ }
+
+ public void initJail(String callbackIdentifier, String js){
+
+ if (checkBound()) {
+ Bundle data = new Bundle();
+ data.putString("js", js);
+ sendMessage(callbackIdentifier, StatusMessages.MSG_JAIL_INIT, data);
+ }
+ }
+
+ public void parseJail(String callbackIdentifier, String chatId, String js){
+
+ if (checkBound()) {
+ Bundle data = new Bundle();
+ data.putString("chatId", chatId);
+ data.putString("js", js);
+ sendMessage(callbackIdentifier, StatusMessages.MSG_JAIL_PARSE, data);
+ }
+ }
+
+ public void callJail(String callbackIdentifier, String chatId, String path, String params){
+
+ if (checkBound()) {
+ Bundle data = new Bundle();
+ data.putString("chatId", chatId);
+ data.putString("path", path);
+ data.putString("params", params);
+ sendMessage(callbackIdentifier, StatusMessages.MSG_JAIL_CALL, data);
+ }
+ }
+
+ private boolean checkBound() {
+
+ if (!isBound) {
+ Log.d(TAG, "StatusConnector not bound!");
+ return false;
+ }
+ return true;
+ }
+
+ private Message createMessage(String callbackIdentifier, int idMessage, Bundle data) {
+
+ Log.d(TAG, "Client messenger: " + clientMessenger.toString());
+ Message msg = Message.obtain(null, idMessage, 0, 0);
+ msg.replyTo = clientMessenger;
+ if (data == null) {
+ data = new Bundle();
+ }
+ data.putString(CALLBACK_IDENTIFIER, callbackIdentifier);
+ msg.setData(data);
+ return msg;
+ }
+
+ private void sendMessage(String callbackIdentifier, int idMessage, Bundle data) {
+
+ Message msg = createMessage(callbackIdentifier, idMessage, data);
+ try {
+ serviceMessenger.send(msg);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Exception sending message(" + msg.toString() + ") to service: ", e);
+ }
+ }
+}
diff --git a/modules/react-native-status/android/src/main/java/com/statusim/module/StatusMessages.java b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusMessages.java
new file mode 100644
index 0000000000..6365a45a20
--- /dev/null
+++ b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusMessages.java
@@ -0,0 +1,59 @@
+package com.statusim.module;
+
+
+public class StatusMessages {
+
+ /**
+ * Start the node
+ */
+ static final int MSG_START_NODE = 1;
+
+ /**
+ * Stop the node
+ */
+ static final int MSG_STOP_NODE = 2;
+
+ /**
+ * Unlock an account
+ */
+ static final int MSG_LOGIN = 3;
+
+ /**
+ * Create an account
+ */
+ static final int MSG_CREATE_ACCOUNT = 4;
+
+ /**
+ * Create an account
+ */
+ static final int MSG_RECOVER_ACCOUNT = 5;
+
+ /**
+ * Account complete transaction event
+ */
+ static final int MSG_COMPLETE_TRANSACTION = 6;
+
+ /**
+ * Geth event
+ */
+ public static final int MSG_GETH_EVENT = 7;
+
+ /**
+ * Initialize jail
+ */
+ public static final int MSG_JAIL_INIT = 8;
+
+
+ /**
+ * Parse js in jail
+ */
+ public static final int MSG_JAIL_PARSE = 9;
+
+ /**
+ * Parse js in jail
+ */
+ public static final int MSG_JAIL_CALL = 10;
+
+
+
+}
diff --git a/modules/react-native-status/android/src/main/java/com/statusim/module/StatusModule.java b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusModule.java
new file mode 100644
index 0000000000..959e72061b
--- /dev/null
+++ b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusModule.java
@@ -0,0 +1,298 @@
+package com.statusim.module;
+
+import android.app.Activity;
+import android.view.WindowManager;
+import android.os.Bundle;
+import android.os.Message;
+import android.os.RemoteException;
+import com.facebook.react.bridge.*;
+import com.facebook.react.modules.core.DeviceEventManagerModule;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.UUID;
+
+class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventListener, ConnectorHandler {
+
+ private static final String TAG = "StatusModule";
+
+ private StatusConnector status = null;
+
+ private HashMap callbacks = new HashMap<>();
+
+ StatusModule(ReactApplicationContext reactContext) {
+ super(reactContext);
+ reactContext.addLifecycleEventListener(this);
+ }
+
+ @Override
+ public String getName() {
+ return "Status";
+ }
+
+ @Override
+ public void onHostResume() { // Actvity `onResume`
+
+ Activity currentActivity = getCurrentActivity();
+ if (currentActivity == null) {
+ return;
+ }
+ if (status == null) {
+ status = new StatusConnector(currentActivity, StatusService.class);
+ status.registerHandler(this);
+ }
+ status.bindService();
+ }
+
+ @Override
+ public void onHostPause() { // Actvity `onPause`
+
+ if (status != null) {
+ status.unbindService();
+ }
+ }
+
+ @Override
+ public void onHostDestroy() { // Actvity `onDestroy`
+
+ if (status != null) {
+ status.stopNode(null);
+ }
+ }
+
+ @Override
+ public void onConnectorConnected() {
+ }
+
+ @Override
+ public void onConnectorDisconnected() {
+ }
+
+ @Override
+ public boolean handleMessage(Message message) {
+
+ Log.d(TAG, "Received message: " + message.toString());
+ boolean isClaimed = true;
+ Bundle bundle = message.getData();
+ String callbackIdentifier = bundle.getString(StatusConnector.CALLBACK_IDENTIFIER);
+ String data = bundle.getString("data");
+ Callback callback = callbacks.remove(callbackIdentifier);
+ switch (message.what) {
+ case StatusMessages.MSG_START_NODE:
+ case StatusMessages.MSG_STOP_NODE:
+ case StatusMessages.MSG_LOGIN:
+ case StatusMessages.MSG_CREATE_ACCOUNT:
+ case StatusMessages.MSG_RECOVER_ACCOUNT:
+ case StatusMessages.MSG_COMPLETE_TRANSACTION:
+ case StatusMessages.MSG_JAIL_INIT:
+ case StatusMessages.MSG_JAIL_PARSE:
+ case StatusMessages.MSG_JAIL_CALL:
+ if (callback == null) {
+ Log.d(TAG, "Could not find callback: " + callbackIdentifier);
+ } else {
+ callback.invoke(data);
+ }
+ break;
+ case StatusMessages.MSG_GETH_EVENT:
+ String event = bundle.getString("event");
+ WritableMap params = Arguments.createMap();
+ params.putString("jsonEvent", event);
+ getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("gethEvent", params);
+ break;
+ default:
+ isClaimed = false;
+ }
+
+ return isClaimed;
+ }
+
+ private boolean checkAvailability() {
+
+ Activity currentActivity = getCurrentActivity();
+ if (currentActivity == null) {
+ Log.d(TAG, "Activity doesn't exist");
+ return false;
+ }
+
+ if (status == null) {
+ Log.d(TAG, "Status connector is null");
+ return false;
+ }
+
+ return true;
+ }
+
+ // Geth
+
+ @ReactMethod
+ public void startNode(Callback callback, Callback onAlreadyRunning) {
+
+ if (StatusService.isRunning()) {
+ onAlreadyRunning.invoke();
+ return;
+ }
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.startNode(callbackIdentifier);
+ }
+
+ @ReactMethod
+ public void login(String address, String password, Callback callback) {
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.login(callbackIdentifier, address, password);
+ }
+
+ @ReactMethod
+ public void createAccount(String password, Callback callback) {
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.createAccount(callbackIdentifier, password);
+ }
+
+ @ReactMethod
+ public void recoverAccount(String passphrase, String password, Callback callback) {
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.recoverAccount(callbackIdentifier, passphrase, password);
+ }
+
+ private String createIdentifier() {
+ return UUID.randomUUID().toString();
+ }
+
+ @ReactMethod
+ public void completeTransaction(String hash, String password, Callback callback) {
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ Log.d(TAG, "Complete transaction: " + hash);
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.completeTransaction(callbackIdentifier, hash, password);
+ }
+
+ // Jail
+
+ @ReactMethod
+ public void initJail(String js, Callback callback) {
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.initJail(callbackIdentifier, js);
+ }
+
+ @ReactMethod
+ public void parseJail(String chatId, String js, Callback callback) {
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.parseJail(callbackIdentifier, chatId, js);
+ }
+
+ @ReactMethod
+ public void callJail(String chatId, String path, String params, Callback callback) {
+
+ if (!checkAvailability()) {
+ callback.invoke(false);
+ return;
+ }
+
+ String callbackIdentifier = createIdentifier();
+ callbacks.put(callbackIdentifier, callback);
+
+ status.callJail(callbackIdentifier, chatId, path, params);
+ }
+
+ @ReactMethod
+ public void setAdjustResize() {
+
+ final Activity activity = getCurrentActivity();
+ if (activity == null) {
+ return;
+ }
+
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ }
+ });
+ }
+
+ @ReactMethod
+ public void setAdjustPan() {
+
+ final Activity activity = getCurrentActivity();
+ if (activity == null) {
+ return;
+ }
+
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
+ }
+ });
+ }
+
+ @ReactMethod
+ public void setSoftInputMode(final int mode) {
+
+ final Activity activity = getCurrentActivity();
+ if (activity == null) {
+ return;
+ }
+
+ activity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ activity.getWindow().setSoftInputMode(mode);
+ }
+ });
+ }
+}
diff --git a/android/app/src/main/java/com/statusim/geth/module/GethPackage.java b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusPackage.java
similarity index 81%
rename from android/app/src/main/java/com/statusim/geth/module/GethPackage.java
rename to modules/react-native-status/android/src/main/java/com/statusim/module/StatusPackage.java
index d7dc02df6f..806bf8c1f4 100644
--- a/android/app/src/main/java/com/statusim/geth/module/GethPackage.java
+++ b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusPackage.java
@@ -1,22 +1,23 @@
-package com.statusim.geth.module;
+package com.statusim.module;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
+import com.statusim.module.StatusService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-public class GethPackage implements ReactPackage {
+public class StatusPackage implements ReactPackage {
@Override
public List createNativeModules(ReactApplicationContext reactContext) {
List modules = new ArrayList<>();
- modules.add(new GethModule(reactContext));
+ modules.add(new StatusModule(reactContext));
return modules;
}
diff --git a/android/app/src/main/java/com/statusim/geth/service/GethService.java b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusService.java
similarity index 67%
rename from android/app/src/main/java/com/statusim/geth/service/GethService.java
rename to modules/react-native-status/android/src/main/java/com/statusim/module/StatusService.java
index 2724a824b5..ca90ef3f71 100644
--- a/android/app/src/main/java/com/statusim/geth/service/GethService.java
+++ b/modules/react-native-status/android/src/main/java/com/statusim/module/StatusService.java
@@ -1,4 +1,4 @@
-package com.statusim.geth.service;
+package com.statusim.module;
import android.app.Service;
import android.content.Intent;
@@ -12,11 +12,11 @@ import com.github.status_im.status_go.Statusgo;
import java.io.File;
-public class GethService extends Service {
+public class StatusService extends Service {
- private static final String TAG = "GethService";
+ private static final String TAG = "StatusService";
- private static boolean isGethInitialized = false;
+ private static boolean isStatusInitialized = false;
private final Handler handler = new Handler();
private static String dataFolder;
@@ -25,9 +25,9 @@ public class GethService extends Service {
private static class IncomingHandler extends Handler {
- private final WeakReference service;
+ private final WeakReference service;
- IncomingHandler(GethService service) {
+ IncomingHandler(StatusService service) {
this.service = new WeakReference<>(service);
}
@@ -35,7 +35,7 @@ public class GethService extends Service {
@Override
public void handleMessage(Message message) {
- GethService service = this.service.get();
+ StatusService service = this.service.get();
if (service != null) {
if (!service.handleMessage(message)) {
super.handleMessage(message);
@@ -48,15 +48,21 @@ public class GethService extends Service {
public static void signalEvent(String jsonEvent) {
+
Log.d(TAG, "Signal event: " + jsonEvent);
Bundle replyData = new Bundle();
replyData.putString("event", jsonEvent);
- Message replyMessage = Message.obtain(null, GethMessages.MSG_GETH_EVENT, 0, 0, null);
+ Message replyMessage = Message.obtain(null, StatusMessages.MSG_GETH_EVENT, 0, 0, null);
replyMessage.setData(replyData);
sendReply(applicationMessenger, replyMessage);
}
+ static {
+ System.loadLibrary("statusgoraw");
+ System.loadLibrary("statusgo");
+ }
+
@Nullable
@Override
public IBinder onBind(Intent intent) {
@@ -65,53 +71,68 @@ public class GethService extends Service {
@Override
public void onCreate() {
+
super.onCreate();
- System.loadLibrary("statusgoraw");
- System.loadLibrary("statusgo");
+
}
@Override
public void onDestroy() {
+
super.onDestroy();
//TODO: stop geth
stopNode(null);
- isGethInitialized = false;
- Log.d(TAG, "Geth Service stopped !");
+ isStatusInitialized = false;
+ Log.d(TAG, "Status Service stopped !");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
+
return Service.START_STICKY;
}
private boolean handleMessage(Message message) {
+
switch (message.what) {
- case GethMessages.MSG_START_NODE:
+ case StatusMessages.MSG_START_NODE:
Log.d(TAG, "Received start node message." + message.toString());
startNode(message);
break;
- case GethMessages.MSG_STOP_NODE:
+ case StatusMessages.MSG_STOP_NODE:
stopNode(message);
break;
- case GethMessages.MSG_CREATE_ACCOUNT:
+ case StatusMessages.MSG_CREATE_ACCOUNT:
createAccount(message);
break;
- case GethMessages.MSG_RECOVER_ACCOUNT:
+ case StatusMessages.MSG_RECOVER_ACCOUNT:
recoverAccount(message);
break;
- case GethMessages.MSG_LOGIN:
+ case StatusMessages.MSG_LOGIN:
login(message);
break;
- case GethMessages.MSG_COMPLETE_TRANSACTION:
+ case StatusMessages.MSG_COMPLETE_TRANSACTION:
completeTransaction(message);
break;
+ case StatusMessages.MSG_JAIL_INIT:
+ initJail(message);
+ break;
+
+ case StatusMessages.MSG_JAIL_PARSE:
+ parseJail(message);
+ break;
+
+ case StatusMessages.MSG_JAIL_CALL:
+ callJail(message);
+ break;
+
default:
return false;
}
@@ -120,11 +141,12 @@ public class GethService extends Service {
}
private void startNode(Message message) {
- if (!isGethInitialized) {
- isGethInitialized = true;
+
+ if (!isStatusInitialized) {
+ isStatusInitialized = true;
Log.d(TAG, "Client messenger1: " + message.replyTo.toString());
Bundle data = message.getData();
- String callbackIdentifier = data.getString(GethConnector.CALLBACK_IDENTIFIER);
+ String callbackIdentifier = data.getString(StatusConnector.CALLBACK_IDENTIFIER);
Log.d(TAG, "Callback identifier: " + callbackIdentifier);
new StartTask(message.replyTo, callbackIdentifier).execute();
}
@@ -136,11 +158,13 @@ public class GethService extends Service {
Messenger messenger;
StartTask(Messenger messenger, String callbackIdentifier) {
+
this.messenger = messenger;
this.callbackIdentifier = callbackIdentifier;
}
protected Void doInBackground(Void... args) {
+
startGeth();
return null;
}
@@ -151,20 +175,19 @@ public class GethService extends Service {
}
private void onGethStarted(Messenger messenger, String callbackIdentifier) {
- Log.d(TAG, "Geth Service started");
- Message replyMessage = Message.obtain(null, GethMessages.MSG_NODE_STARTED, 0, 0, null);
+
+ Log.d(TAG, "Geth Node started");
+ Message replyMessage = Message.obtain(null, StatusMessages.MSG_START_NODE, 0, 0, null);
Bundle replyData = new Bundle();
Log.d(TAG, "Callback identifier: " + callbackIdentifier);
- replyData.putString(GethConnector.CALLBACK_IDENTIFIER, callbackIdentifier);
+ replyData.putString(StatusConnector.CALLBACK_IDENTIFIER, callbackIdentifier);
replyMessage.setData(replyData);
sendReply(messenger, replyMessage);
}
private void startGeth() {
-
-
+
File extStore = Environment.getExternalStorageDirectory();
-
dataFolder = extStore.exists() ?
extStore.getAbsolutePath() + "/ethereum" :
getApplicationInfo().dataDir + "/ethereum";
@@ -197,10 +220,11 @@ public class GethService extends Service {
private void stopNode(Message message) {
// TODO: stop node
- createAndSendReply(message, GethMessages.MSG_NODE_STOPPED, null);
+ createAndSendReply(message, StatusMessages.MSG_STOP_NODE, null);
}
private void createAccount(Message message) {
+
Bundle data = message.getData();
String password = data.getString("password");
Log.d(TAG, "Creating account: " + password);
@@ -209,10 +233,11 @@ public class GethService extends Service {
Bundle replyData = new Bundle();
replyData.putString("data", jsonData);
- createAndSendReply(message, GethMessages.MSG_ACCOUNT_CREATED, replyData);
+ createAndSendReply(message, StatusMessages.MSG_CREATE_ACCOUNT, replyData);
}
private void recoverAccount(Message message) {
+
Bundle data = message.getData();
String passphrase = data.getString("passphrase");
String password = data.getString("password");
@@ -222,10 +247,11 @@ public class GethService extends Service {
Bundle replyData = new Bundle();
replyData.putString("data", jsonData);
- createAndSendReply(message, GethMessages.MSG_ACCOUNT_RECOVERED, replyData);
+ createAndSendReply(message, StatusMessages.MSG_RECOVER_ACCOUNT, replyData);
}
private void login(Message message) {
+
applicationMessenger = message.replyTo;
Bundle data = message.getData();
String address = data.getString("address");
@@ -234,14 +260,15 @@ public class GethService extends Service {
Log.d(TAG, "Loggedin account: " + result);
Bundle replyData = new Bundle();
- replyData.putString("result", result);
- createAndSendReply(message, GethMessages.MSG_LOGGED_IN, replyData);
+ replyData.putString("data", result);
+ createAndSendReply(message, StatusMessages.MSG_LOGIN, replyData);
// Test signalEvent
//signalEvent("{ \"type\": \"test\", \"event\": \"test event\" }");
}
private void completeTransaction(Message message){
+
Bundle data = message.getData();
String hash = data.getString("hash");
String password = data.getString("password");
@@ -251,12 +278,50 @@ public class GethService extends Service {
Log.d(TAG, "After CompleteTransaction: " + result);
Bundle replyData = new Bundle();
- replyData.putString("result", result);
- createAndSendReply(message, GethMessages.MSG_TRANSACTION_COMPLETED, replyData);
+ replyData.putString("data", result);
+ createAndSendReply(message, StatusMessages.MSG_COMPLETE_TRANSACTION, replyData);
+ }
+
+ private void initJail(Message message){
+
+ Bundle data = message.getData();
+ String js = data.getString("js");
+
+ Statusgo.initJail(js);
+
+ Bundle replyData = new Bundle();
+ createAndSendReply(message, StatusMessages.MSG_JAIL_INIT, replyData);
+ }
+
+ private void parseJail(Message message){
+
+ Bundle data = message.getData();
+ String chatId = data.getString("chatId");
+ String js = data.getString("js");
+
+ String result = Statusgo.parse(chatId, js);
+
+ Bundle replyData = new Bundle();
+ replyData.putString("data", result);
+ createAndSendReply(message, StatusMessages.MSG_JAIL_PARSE, replyData);
+ }
+
+ private void callJail(Message message){
+
+ Bundle data = message.getData();
+ String chatId = data.getString("chatId");
+ String path = data.getString("path");
+ String params = data.getString("params");
+
+ String result = Statusgo.call(chatId, path, params);
+
+ Bundle replyData = new Bundle();
+ replyData.putString("data", result);
+ createAndSendReply(message, StatusMessages.MSG_JAIL_CALL, replyData);
}
public static boolean isRunning() {
- return isGethInitialized;
+ return isStatusInitialized;
}
private static void createAndSendReply(Message message, int replyIdMessage, Bundle replyData) {
@@ -269,15 +334,16 @@ public class GethService extends Service {
replyData = new Bundle();
}
Bundle data = message.getData();
- String callbackIdentifier = data.getString(GethConnector.CALLBACK_IDENTIFIER);
+ String callbackIdentifier = data.getString(StatusConnector.CALLBACK_IDENTIFIER);
Log.d(TAG, "Callback identifier: " + callbackIdentifier);
- replyData.putString(GethConnector.CALLBACK_IDENTIFIER, callbackIdentifier);
+ replyData.putString(StatusConnector.CALLBACK_IDENTIFIER, callbackIdentifier);
replyMessage.setData(replyData);
sendReply(message.replyTo, replyMessage);
}
private static void sendReply(Messenger messenger, Message message) {
+
try {
messenger.send(message);
} catch (Exception e) {
diff --git a/modules/react-native-status/index.js b/modules/react-native-status/index.js
new file mode 100644
index 0000000000..af2b94d150
--- /dev/null
+++ b/modules/react-native-status/index.js
@@ -0,0 +1,4 @@
+'use strict';
+
+import { NativeModules } from 'react-native';
+module.exports = NativeModules.Status;
\ No newline at end of file
diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.h b/modules/react-native-status/ios/RCTStatus/RCTStatus.h
new file mode 100644
index 0000000000..c3793a8b96
--- /dev/null
+++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.h
@@ -0,0 +1,6 @@
+#import
+#import "RCTBridgeModule.h"
+#import "RCTLog.h"
+
+@interface Status : NSObject
+@end
\ No newline at end of file
diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.m b/modules/react-native-status/ios/RCTStatus/RCTStatus.m
new file mode 100644
index 0000000000..7bc0c1acf7
--- /dev/null
+++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.m
@@ -0,0 +1,55 @@
+#import "RCTStatus.h"
+
+#import
+
+@implementation Status
+@synthesize bridge = _bridge;
+
+RCT_EXPORT_MODULE();
+
+RCT_EXPORT_METHOD(initJail: (NSString *) js
+ callback:(RCTResponseSenderBlock)callback) {
+ initJail((char *) [js UTF8String]);
+ callback(@[[NSNull null]]);
+}
+
+RCT_EXPORT_METHOD(parseJail:(NSString *)chatId
+ js:(NSString *)js
+ callback:(RCTResponseSenderBlock)callback) {
+#if DEBUG
+ NSLog(@"parseJail() method called");
+#endif
+ char * result = parse((char *) [chatId UTF8String], (char *) [js UTF8String]);
+ callback(@[[NSNull null], [NSString stringWithUTF8String: result]]);
+}
+
+RCT_EXPORT_METHOD(callJail:(NSString *)chatId
+ path:(NSString *)path
+ params:(NSString *)params
+ callback:(RCTResponseSenderBlock)callback) {
+#if DEBUG
+ NSLog(@"callJail() method called");
+#endif
+ char * result = call((char *) [chatId UTF8String], (char *) [path UTF8String], (char *) [params UTF8String]);
+ callback(@[[NSNull null], [NSString stringWithUTF8String: result]]);
+}
+
+RCT_EXPORT_METHOD(setAdjustResize) {
+#if DEBUG
+ NSLog(@"setAdjustResize() works only on Android");
+#endif
+}
+
+RCT_EXPORT_METHOD(setAdjustPan) {
+#if DEBUG
+ NSLog(@"setAdjustPan() works only on Android");
+#endif
+}
+
+RCT_EXPORT_METHOD(setSoftInputMode: (NSInteger) i) {
+#if DEBUG
+ NSLog(@"setSoftInputMode() works only on Android");
+#endif
+}
+
+@end
diff --git a/modules/react-native-status/ios/RCTStatus/RCTStatus.xcodeproj/project.pbxproj b/modules/react-native-status/ios/RCTStatus/RCTStatus.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..8db2d0ee36
--- /dev/null
+++ b/modules/react-native-status/ios/RCTStatus/RCTStatus.xcodeproj/project.pbxproj
@@ -0,0 +1,302 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 206C9F3E1D474E910063E3E6 /* RCTStatus.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 206C9F3D1D474E910063E3E6 /* RCTStatus.h */; };
+ 206C9F401D474E910063E3E6 /* RCTStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 206C9F3F1D474E910063E3E6 /* RCTStatus.m */; };
+ 20AB9EAE1D47CBF500E7FD9C /* Statusgo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20AB9EAD1D47CBF500E7FD9C /* Statusgo.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 206C9F381D474E910063E3E6 /* Copy Files */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ 206C9F3E1D474E910063E3E6 /* RCTStatus.h in Copy Files */,
+ );
+ name = "Copy Files";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 206C9F3A1D474E910063E3E6 /* libRCTStatus.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTStatus.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 206C9F3D1D474E910063E3E6 /* RCTStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTStatus.h; sourceTree = ""; };
+ 206C9F3F1D474E910063E3E6 /* RCTStatus.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTStatus.m; sourceTree = ""; };
+ 20AB9EAD1D47CBF500E7FD9C /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../../../../../react-native-status/ios/Statusgo.framework"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 206C9F371D474E910063E3E6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 20AB9EAE1D47CBF500E7FD9C /* Statusgo.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 206C9F311D474E910063E3E6 = {
+ isa = PBXGroup;
+ children = (
+ 20AB9EAD1D47CBF500E7FD9C /* Statusgo.framework */,
+ 206C9F3C1D474E910063E3E6 /* RCTStatus */,
+ 206C9F3B1D474E910063E3E6 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 206C9F3B1D474E910063E3E6 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 206C9F3A1D474E910063E3E6 /* libRCTStatus.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 206C9F3C1D474E910063E3E6 /* RCTStatus */ = {
+ isa = PBXGroup;
+ children = (
+ 206C9F3D1D474E910063E3E6 /* RCTStatus.h */,
+ 206C9F3F1D474E910063E3E6 /* RCTStatus.m */,
+ );
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 206C9F391D474E910063E3E6 /* RCTStatus */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 206C9F431D474E910063E3E6 /* Build configuration list for PBXNativeTarget "RCTStatus" */;
+ buildPhases = (
+ 206C9F361D474E910063E3E6 /* Sources */,
+ 206C9F371D474E910063E3E6 /* Frameworks */,
+ 206C9F381D474E910063E3E6 /* Copy Files */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = RCTStatus;
+ productName = RCTStatus;
+ productReference = 206C9F3A1D474E910063E3E6 /* libRCTStatus.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 206C9F321D474E910063E3E6 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0730;
+ ORGANIZATIONNAME = Status.im;
+ TargetAttributes = {
+ 206C9F391D474E910063E3E6 = {
+ CreatedOnToolsVersion = 7.3.1;
+ };
+ };
+ };
+ buildConfigurationList = 206C9F351D474E910063E3E6 /* Build configuration list for PBXProject "RCTStatus" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = 206C9F311D474E910063E3E6;
+ productRefGroup = 206C9F3B1D474E910063E3E6 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 206C9F391D474E910063E3E6 /* RCTStatus */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 206C9F361D474E910063E3E6 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 206C9F401D474E910063E3E6 /* RCTStatus.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 206C9F411D474E910063E3E6 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.3;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 206C9F421D474E910063E3E6 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.3;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 206C9F441D474E910063E3E6 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ "$(ARCHS_STANDARD)",
+ x86_64,
+ );
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/..",
+ );
+ FRAMEWORK_VERSION = A;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../React/**",
+ "$(SRCROOT)/../../../react-native/React/**",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "$(inherited)",
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ VALID_ARCHS = "armv7 armv7s arm64 x86_64";
+ };
+ name = Debug;
+ };
+ 206C9F451D474E910063E3E6 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ "$(ARCHS_STANDARD)",
+ x86_64,
+ );
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/..",
+ );
+ FRAMEWORK_VERSION = A;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../React/**",
+ "$(SRCROOT)/../../../react-native/React/**",
+ );
+ IPHONEOS_DEPLOYMENT_TARGET = 7.0;
+ ONLY_ACTIVE_ARCH = NO;
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "$(inherited)",
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ VALID_ARCHS = "armv7 armv7s arm64 x86_64";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 206C9F351D474E910063E3E6 /* Build configuration list for PBXProject "RCTStatus" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 206C9F411D474E910063E3E6 /* Debug */,
+ 206C9F421D474E910063E3E6 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 206C9F431D474E910063E3E6 /* Build configuration list for PBXNativeTarget "RCTStatus" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 206C9F441D474E910063E3E6 /* Debug */,
+ 206C9F451D474E910063E3E6 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 206C9F321D474E910063E3E6 /* Project object */;
+}
diff --git a/modules/react-native-status/ios/Statusgo.framework/Versions/A/Headers/Statusgo.h b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Headers/Statusgo.h
new file mode 100755
index 0000000000..a7a43155db
--- /dev/null
+++ b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Headers/Statusgo.h
@@ -0,0 +1,71 @@
+/* Created by "go tool cgo" - DO NOT EDIT. */
+
+/* package github.com/status-im/status-go/src */
+
+/* Start of preamble from import "C" comments. */
+
+
+
+
+/* End of preamble from import "C" comments. */
+
+
+/* Start of boilerplate cgo prologue. */
+
+#ifndef GO_CGO_PROLOGUE_H
+#define GO_CGO_PROLOGUE_H
+
+typedef signed char GoInt8;
+typedef unsigned char GoUint8;
+typedef short GoInt16;
+typedef unsigned short GoUint16;
+typedef int GoInt32;
+typedef unsigned int GoUint32;
+typedef long long GoInt64;
+typedef unsigned long long GoUint64;
+typedef GoInt64 GoInt;
+typedef GoUint64 GoUint;
+typedef __SIZE_TYPE__ GoUintptr;
+typedef float GoFloat32;
+typedef double GoFloat64;
+typedef float _Complex GoComplex64;
+typedef double _Complex GoComplex128;
+
+/*
+ static assertion to make sure the file is being used on architecture
+ at least with matching size of GoInt.
+*/
+typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1];
+
+typedef struct { const char *p; GoInt n; } GoString;
+typedef void *GoMap;
+typedef void *GoChan;
+typedef struct { void *t; void *v; } GoInterface;
+typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;
+
+#endif
+
+/* End of boilerplate cgo prologue. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern char* CreateAccount(char* p0);
+
+extern char* Login(char* p0, char* p1);
+
+extern char* UnlockAccount(char* p0, char* p1, GoInt p2);
+
+extern char* StartNode(char* p0);
+
+extern char* parse(char* p0, char* p1);
+
+extern char* call(char* p0, char* p1, char* p2);
+
+extern void initJail(char* p0);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/modules/react-native-status/ios/Statusgo.framework/Versions/A/Modules/module.modulemap b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Modules/module.modulemap
new file mode 100755
index 0000000000..25973b253d
--- /dev/null
+++ b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Modules/module.modulemap
@@ -0,0 +1,4 @@
+framework module "Statusgo" {
+ header "Statusgo.h"
+ export *
+}
diff --git a/modules/react-native-status/ios/Statusgo.framework/Versions/A/Resources/Info.plist b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Resources/Info.plist
new file mode 100755
index 0000000000..6631ffa6f2
--- /dev/null
+++ b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Resources/Info.plist
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/modules/react-native-status/ios/Statusgo.framework/Versions/A/Statusgo b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Statusgo
new file mode 100755
index 0000000000..bd7ae0b1c5
Binary files /dev/null and b/modules/react-native-status/ios/Statusgo.framework/Versions/A/Statusgo differ
diff --git a/modules/react-native-status/ios/Statusgo.framework/Versions/Current b/modules/react-native-status/ios/Statusgo.framework/Versions/Current
new file mode 120000
index 0000000000..8c7e5a667f
--- /dev/null
+++ b/modules/react-native-status/ios/Statusgo.framework/Versions/Current
@@ -0,0 +1 @@
+A
\ No newline at end of file
diff --git a/modules/react-native-status/ios/Statusgo.framework/fix_symlinks_ios.sh b/modules/react-native-status/ios/Statusgo.framework/fix_symlinks_ios.sh
new file mode 100755
index 0000000000..b371423470
--- /dev/null
+++ b/modules/react-native-status/ios/Statusgo.framework/fix_symlinks_ios.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+##########################################################
+# Fix Symlinks
+#
+# Usage : Copy this file into the Framework directory,
+# Execute it passing the Framework Name in argument.
+#
+##########################################################
+
+if [ -z $1 ] ; then
+ echo "Usage : $0 "
+ exit -1
+else
+ echo "Removing current Symlinks files"
+ rm Headers
+ rm Resources
+ rm Modules
+ rm $1
+ rm Versions/Current
+
+ echo "Creating new Symlinks"
+ cd Versions
+ ln -s A Current
+ cd ..
+
+ ln -s ./Versions/Current/Headers Headers
+ ln -s ./Versions/Current/Resources Resources
+ ln -s ./Versions/Current/Modules Modules
+ ln -s ./Versions/Current/$1 $1
+
+ echo "Job done!"
+fi
diff --git a/modules/react-native-status/package.json b/modules/react-native-status/package.json
new file mode 100644
index 0000000000..1df0d0b103
--- /dev/null
+++ b/modules/react-native-status/package.json
@@ -0,0 +1,21 @@
+{
+ "private": true,
+ "nativePackage": true,
+ "name": "react-native-status",
+ "version": "1.0.0",
+ "description": "Manage Geth, Jail & Background Service",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/status-im/react-native-status.git"
+ },
+ "author": "",
+ "license": "",
+ "bugs": {
+ "url": "https://github.com/status-im/react-native-status/issues"
+ },
+ "homepage": "https://github.com/status-im/react-native-status#readme"
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index 161c8f3446..f2fbb3e2eb 100644
--- a/package.json
+++ b/package.json
@@ -46,7 +46,6 @@
"react-native-orientation": "github:youennPennarun/react-native-orientation",
"react-native-qrcode": "^0.2.2",
"react-native-randombytes": "^2.1.0",
- "react-native-status": "github:status-im/react-native-status#ios-module",
"react-native-tcp": "^1.0.1",
"react-native-udp": "^1.2.5",
"react-native-vector-icons": "^2.0.3",
diff --git a/src/status_im/accounts/handlers.cljs b/src/status_im/accounts/handlers.cljs
index fed7ec8cac..dafc5d97db 100644
--- a/src/status_im/accounts/handlers.cljs
+++ b/src/status_im/accounts/handlers.cljs
@@ -3,7 +3,7 @@
[re-frame.core :refer [register-handler after dispatch dispatch-sync debug]]
[status-im.utils.logging :as log]
[status-im.protocol.api :as api]
- [status-im.components.geth :as geth]
+ [status-im.components.status :as status]
[status-im.utils.types :refer [json->clj]]
[status-im.persistence.simple-kv-store :as kv]
[status-im.protocol.state.storage :as storage]
@@ -52,7 +52,7 @@
(after #(dispatch [:init-wallet-chat]))
(u/side-effect!
(fn [_ [_ password]]
- (geth/create-account
+ (status/create-account
password
#(account-created % password)))))
diff --git a/src/status_im/accounts/login/handlers.cljs b/src/status_im/accounts/login/handlers.cljs
index df790b19b7..66f8f0902a 100644
--- a/src/status_im/accounts/login/handlers.cljs
+++ b/src/status_im/accounts/login/handlers.cljs
@@ -5,7 +5,7 @@
[status-im.utils.types :refer [json->clj]]
[status-im.db :refer [default-view]]
[status-im.persistence.realm.core :as realm]
- [status-im.components.geth :as geth]))
+ [status-im.components.status :as status]))
(defn set-login-from-qr
@@ -48,12 +48,12 @@
:login-account
(u/side-effect!
(fn [db [_ address password]]
- (geth/login address password
- (fn [result]
- (let [data (json->clj result)
- error (:error data)
- success (zero? (count error))]
- (log/debug "Logged in account: ")
- (if success
- (logged-in db address)
- (dispatch [:set-in [:login :error] error]))))))))
\ No newline at end of file
+ (status/login address password
+ (fn [result]
+ (let [data (json->clj result)
+ error (:error data)
+ success (zero? (count error))]
+ (log/debug "Logged in account: ")
+ (if success
+ (logged-in db address)
+ (dispatch [:set-in [:login :error] error]))))))))
\ No newline at end of file
diff --git a/src/status_im/accounts/recover/handlers.cljs b/src/status_im/accounts/recover/handlers.cljs
index 81cb14a734..e97a168d46 100644
--- a/src/status_im/accounts/recover/handlers.cljs
+++ b/src/status_im/accounts/recover/handlers.cljs
@@ -1,10 +1,8 @@
(ns status-im.accounts.recover.handlers
(:require [re-frame.core :refer [register-handler after dispatch dispatch-sync]]
- [status-im.components.geth :as geth]
- [status-im.utils.handlers :as u]
+ [status-im.components.status :as status]
[status-im.utils.types :refer [json->clj]]
[status-im.utils.identicon :refer [identicon]]
- [status-im.chat.sign-up :as sign-up-service]
[status-im.utils.logging :as log]
[clojure.string :as str]))
@@ -31,7 +29,7 @@
(defn recover-account
[{:keys [recover] :as db} [_ passphrase password]]
- (geth/recover-account passphrase password (fn [result] (account-recovered result password)))
+ (status/recover-account passphrase password (fn [result] (account-recovered result password)))
db)
(register-handler :recover-account recover-account)
\ No newline at end of file
diff --git a/src/status_im/android/core.cljs b/src/status_im/android/core.cljs
index 7681e112e4..1a3139dceb 100644
--- a/src/status_im/android/core.cljs
+++ b/src/status_im/android/core.cljs
@@ -32,7 +32,7 @@
[status-im.utils.encryption]
status-im.persistence.realm.core
[status-im.utils.logging :as log]
- [status-im.components.jail :as j]))
+ [status-im.components.status :as status]))
(defn init-back-button-handler! []
(let [new-listener (fn []
@@ -113,7 +113,7 @@
(dispatch-sync [:reset-app])
(dispatch [:initialize-crypt])
(dispatch [:initialize-geth])
- (j/set-soft-input-mode j/adjust-resize)
+ (status/set-soft-input-mode status/adjust-resize)
(dispatch [:load-user-phone-number])
(init-back-button-handler!)
(.registerComponent app-registry "StatusIm" #(r/reactify-component app-root)))
diff --git a/src/status_im/chat/handlers.cljs b/src/status_im/chat/handlers.cljs
index f9f8d5ec82..fe869c6be3 100644
--- a/src/status_im/chat/handlers.cljs
+++ b/src/status_im/chat/handlers.cljs
@@ -22,7 +22,7 @@
[status-im.handlers.content-suggestions :refer [get-content-suggestions]]
[status-im.utils.phone-number :refer [format-phone-number
valid-mobile-number?]]
- [status-im.components.jail :as j]
+ [status-im.components.status :as status]
[status-im.utils.types :refer [json->clj]]
[status-im.chat.handlers.commands :refer [command-prefix]]
[status-im.chat.utils :refer [console? not-console?]]
@@ -413,9 +413,9 @@
(after
(fn [{:keys [current-chat-id]} [_ mode chat-id]]
(when (or (nil? chat-id) (= current-chat-id chat-id))
- (j/set-soft-input-mode (if (= :pan mode)
- j/adjust-pan
- j/adjust-resize)))))
+ (status/set-soft-input-mode (if (= :pan mode)
+ status/adjust-pan
+ status/adjust-resize)))))
(fn [db [_ chat-id mode]]
(assoc-in db [:kb-mode chat-id] mode)))
diff --git a/src/status_im/chat/handlers/commands.cljs b/src/status_im/chat/handlers/commands.cljs
index 76e7b78bbd..2990467f61 100644
--- a/src/status_im/chat/handlers/commands.cljs
+++ b/src/status_im/chat/handlers/commands.cljs
@@ -1,7 +1,7 @@
(ns status-im.chat.handlers.commands
(:require [re-frame.core :refer [enrich after dispatch]]
[status-im.utils.handlers :refer [register-handler] :as u]
- [status-im.components.jail :as j]
+ [status-im.components.status :as status]
[status-im.components.react :as r]
[status-im.models.commands :as commands]
[clojure.string :as str]
@@ -30,12 +30,12 @@
0
:suggestions]
params {:value (content-by-command command content)}]
- (j/call current-chat-id
- path
- params
- #(dispatch [:suggestions-handler {:command command
- :content content
- :chat-id current-chat-id} %])))))
+ (status/call-jail current-chat-id
+ path
+ params
+ #(dispatch [:suggestions-handler {:command command
+ :content content
+ :chat-id current-chat-id} %])))))
(defn cancel-command!
[{:keys [canceled-command]}]
@@ -69,10 +69,10 @@
name
:preview]
params {:value content}]
- (j/call chat-id
- path
- params
- #(dispatch [:command-preview chat-id id %]))))
+ (status/call-jail chat-id
+ path
+ params
+ #(dispatch [:command-preview chat-id id %]))))
(defn command-input
([{:keys [current-chat-id] :as db}]
@@ -106,10 +106,10 @@
:validator]
params {:value content
:command data}]
- (j/call chat-id
- path
- params
- #(dispatch [::validate! data %]))))
+ (status/call-jail chat-id
+ path
+ params
+ #(dispatch [::validate! data %]))))
(register-handler :stage-command
(after start-validate!)
diff --git a/src/status_im/chat/handlers/send_message.cljs b/src/status_im/chat/handlers/send_message.cljs
index 3bb9a5fb71..02e29f9d06 100644
--- a/src/status_im/chat/handlers/send_message.cljs
+++ b/src/status_im/chat/handlers/send_message.cljs
@@ -2,7 +2,7 @@
(:require [status-im.utils.handlers :refer [register-handler] :as u]
[clojure.string :as s]
[status-im.models.messages :as messages]
- [status-im.components.jail :as j]
+ [status-im.components.status :as status]
[status-im.utils.random :as random]
[status-im.utils.datetime :as time]
[re-frame.core :refer [enrich after debug dispatch path]]
@@ -146,10 +146,10 @@
params {:value content
:command {:from address
:to to}}]
- (j/call chat-id
- path
- params
- #(dispatch [:command-handler! chat-id parameters %]))))))
+ (status/call-jail chat-id
+ path
+ params
+ #(dispatch [:command-handler! chat-id parameters %]))))))
(register-handler ::prepare-message
(u/side-effect!
diff --git a/src/status_im/commands/handlers/jail.cljs b/src/status_im/commands/handlers/jail.cljs
index 1b485f0f60..11031286ba 100644
--- a/src/status_im/commands/handlers/jail.cljs
+++ b/src/status_im/commands/handlers/jail.cljs
@@ -2,7 +2,7 @@
(:require [re-frame.core :refer [after dispatch subscribe trim-v debug]]
[status-im.utils.handlers :as u]
[status-im.utils.utils :refer [http-get toast]]
- [status-im.components.jail :as j]
+ [status-im.components.status :as status]
[status-im.utils.types :refer [json->clj]]
[status-im.commands.utils :refer [generate-hiccup reg-handler]]
[clojure.string :as s]
@@ -10,8 +10,8 @@
(defn init-render-command!
[_ [chat-id command message-id data]]
- (j/call chat-id [command :render] data
- #(dispatch [::render-command chat-id message-id %])))
+ (status/call-jail chat-id [command :render] data
+ #(dispatch [::render-command chat-id message-id %])))
(defn render-command
[db [chat-id message-id markup]]
diff --git a/src/status_im/commands/handlers/loading.cljs b/src/status_im/commands/handlers/loading.cljs
index f3d874e876..e81057d51d 100644
--- a/src/status_im/commands/handlers/loading.cljs
+++ b/src/status_im/commands/handlers/loading.cljs
@@ -5,7 +5,7 @@
[status-im.utils.utils :refer [http-get toast]]
[clojure.string :as s]
[status-im.persistence.realm.core :as realm]
- [status-im.components.jail :as j]
+ [status-im.components.status :as status]
[status-im.utils.types :refer [json->clj]]
[status-im.commands.utils :refer [reg-handler]]))
@@ -54,12 +54,12 @@
(hash file))
(defn parse-commands! [_ [identity file]]
- (j/parse identity file
- (fn [result]
- (let [{:keys [error result]} (json->clj result)]
- (if error
- (dispatch [::loading-failed! identity ::error-in-jail error])
- (dispatch [::add-commands identity file result]))))))
+ (status/parse-jail identity file
+ (fn [result]
+ (let [{:keys [error result]} (json->clj result)]
+ (if error
+ (dispatch [::loading-failed! identity ::error-in-jail error])
+ (dispatch [::add-commands identity file result]))))))
(defn validate-hash
[db [identity file]]
diff --git a/src/status_im/components/geth.cljs b/src/status_im/components/geth.cljs
deleted file mode 100644
index 5ede7e3b68..0000000000
--- a/src/status_im/components/geth.cljs
+++ /dev/null
@@ -1,31 +0,0 @@
-(ns status-im.components.geth
- (:require [status-im.components.react :as r]
- [re-frame.core :refer [dispatch]]))
-
-(def geth
- (when (exists? (.-NativeModules r/react-native))
- (.-Geth (.-NativeModules r/react-native))))
-
-(.addListener r/device-event-emitter "gethEvent"
- #(dispatch [:signal-event (.-jsonEvent %)]))
-
-(defn start-node [on-result on-already-running]
- (when geth
- (.startNode geth on-result on-already-running)))
-
-(defn create-account [password on-result]
- (when geth
- (.createAccount geth password on-result)))
-
-(defn recover-account [passphrase password on-result]
- (when geth
- (.recoverAccount geth passphrase password on-result)))
-
-(defn login [address password on-result]
- (when geth
- (.login geth address password on-result)))
-
-(defn complete-transaction
- [hash password callback]
- (when geth
- (.completeTransaction geth hash password callback)))
diff --git a/src/status_im/components/jail.cljs b/src/status_im/components/jail.cljs
deleted file mode 100644
index 4e2f896d62..0000000000
--- a/src/status_im/components/jail.cljs
+++ /dev/null
@@ -1,36 +0,0 @@
-(ns status-im.components.jail
- (:require-macros [status-im.utils.slurp :refer [slurp]])
- (:require [status-im.components.react :as r]
- [status-im.utils.types :as t]))
-
-(def status-js (slurp "resources/status.js"))
-
-(def jail
- (when (exists? (.-NativeModules r/react-native))
- (.-Jail (.-NativeModules r/react-native))))
-
-(when jail
- (.init jail status-js))
-
-(defn parse [chat-id file callback]
- (when jail
- (.parse jail chat-id file callback)))
-
-(defn cljs->json [data]
- (.stringify js/JSON (clj->js data)))
-
-(defn call [chat-id path params callback]
- (when jail
- (println :call chat-id (cljs->json path) (cljs->json params))
- (let [cb (fn [r]
- (let [r' (t/json->clj r)]
- (println r')
- (callback r')))]
- (.call jail chat-id (cljs->json path) (cljs->json params) cb))))
-
-(defn set-soft-input-mode [mode]
- (when jail
- (.setSoftInputMode jail mode)))
-
-(def adjust-resize 16)
-(def adjust-pan 32)
diff --git a/src/status_im/components/status.cljs b/src/status_im/components/status.cljs
new file mode 100644
index 0000000000..ff21d8a5dd
--- /dev/null
+++ b/src/status_im/components/status.cljs
@@ -0,0 +1,62 @@
+(ns status-im.components.status
+ (:require-macros [status-im.utils.slurp :refer [slurp]])
+ (:require [status-im.components.react :as r]
+ [status-im.utils.types :as t]
+ [re-frame.core :refer [dispatch]]
+ [status-im.utils.logging :as log]))
+
+(def status-js (slurp "resources/status.js"))
+
+(def status
+ (when (exists? (.-NativeModules r/react-native))
+ (.-Status (.-NativeModules r/react-native))))
+
+(when status
+ (.initJail status status-js #(log/debug "jail initialized")))
+
+(.addListener r/device-event-emitter "gethEvent"
+ #(dispatch [:signal-event (.-jsonEvent %)]))
+
+(defn start-node [on-result on-already-running]
+ (when status
+ (.startNode status on-result on-already-running)))
+
+(defn create-account [password on-result]
+ (when status
+ (.createAccount status password on-result)))
+
+(defn recover-account [passphrase password on-result]
+ (when status
+ (.recoverAccount status passphrase password on-result)))
+
+(defn login [address password on-result]
+ (when status
+ (.login status address password on-result)))
+
+(defn complete-transaction
+ [hash password callback]
+ (when status
+ (.completeTransaction status hash password callback)))
+
+(defn parse-jail [chat-id file callback]
+ (when status
+ (.parseJail status chat-id file callback)))
+
+(defn cljs->json [data]
+ (.stringify js/JSON (clj->js data)))
+
+(defn call-jail [chat-id path params callback]
+ (when status
+ (println :call chat-id (cljs->json path) (cljs->json params))
+ (let [cb (fn [r]
+ (let [r' (t/json->clj r)]
+ (println r')
+ (callback r')))]
+ (.callJail status chat-id (cljs->json path) (cljs->json params) cb))))
+
+(defn set-soft-input-mode [mode]
+ (when status
+ (.setSoftInputMode status mode)))
+
+(def adjust-resize 16)
+(def adjust-pan 32)
diff --git a/src/status_im/handlers.cljs b/src/status_im/handlers.cljs
index d1829af700..88f71b8881 100644
--- a/src/status_im/handlers.cljs
+++ b/src/status_im/handlers.cljs
@@ -8,7 +8,7 @@
[status-im.protocol.state.storage :as storage]
[status-im.utils.logging :as log]
[status-im.utils.crypt :refer [gen-random-bytes]]
- [status-im.components.geth :as geth]
+ [status-im.components.status :as status]
[status-im.utils.handlers :refer [register-handler] :as u]
status-im.chat.handlers
status-im.group-settings.handlers
@@ -112,8 +112,8 @@
(u/side-effect!
(fn [db _]
(log/debug "Starting node")
- (geth/start-node (fn [result] (node-started db result))
- #(log/debug "Geth already initialized")))))
+ (status/start-node (fn [result] (node-started db result))
+ #(log/debug "Geth already initialized")))))
(register-handler :crypt-initialized
(u/side-effect!
diff --git a/src/status_im/transactions/handlers.cljs b/src/status_im/transactions/handlers.cljs
index e2c47498f7..74b6ff5933 100644
--- a/src/status_im/transactions/handlers.cljs
+++ b/src/status_im/transactions/handlers.cljs
@@ -4,7 +4,7 @@
[status-im.navigation.handlers :as nav]
[status-im.utils.handlers :as u]
[status-im.utils.types :as t]
- [status-im.components.geth :as g]
+ [status-im.components.status :as status]
cljsjs.web3
[clojure.string :as s]))
@@ -18,7 +18,7 @@
(do
;(dispatch [:set :wrong-password? false])
(doseq [hash hashes]
- (g/complete-transaction
+ (status/complete-transaction
hash
password
#(dispatch [:transaction-completed hash %])))