Merge pull request #221 from status-im/feature/merge-status-module

merged and refactored react-native-status

Former-commit-id: 64e00a0016
This commit is contained in:
Roman Volosovskyi 2016-09-08 16:51:28 +03:00 committed by GitHub
commit 4ebaa3f14a
44 changed files with 1269 additions and 635 deletions

View File

@ -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"])
}

View File

@ -24,7 +24,7 @@
</intent-filter>
</activity>
<service
android:name=".geth.service.GethService"
android:name=".module.StatusService"
android:enabled="true"
android:exported="true"/>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>

View File

@ -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() {

View File

@ -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<ReactPackage> 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(),

View File

@ -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<String, Callback> 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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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'

View File

@ -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 = "<group>"; };
2028DFF71D4275B600227DCD /* SF-UI-Display-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Display-Semibold.otf"; sourceTree = "<group>"; };
2028DFF81D4275B600227DCD /* SF-UI-Display-Thin.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-UI-Display-Thin.otf"; sourceTree = "<group>"; };
20B2DBDD1D47BD5E00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../node_modules/react-native-status/ios/RCTJail/Statusgo.framework"; sourceTree = "<group>"; };
20B2DBDD1D47BD5E00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../modules/react-native-status/ios/RCTStatus/Statusgo.framework"; sourceTree = "<group>"; };
20B2DBF71D47C25500427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Statusgo.framework; sourceTree = "<group>"; };
20B2DBFB1D47C70C00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../node_modules/react-native-status/ios/Statusgo.framework"; sourceTree = "<group>"; };
20B2DBFB1D47C70C00427CD8 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../modules/react-native-status/ios/Statusgo.framework"; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
3384AFA9609A409B81928AD5 /* libRCTContacts.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTContacts.a; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
@ -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 = "<group>";
@ -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;

View File

@ -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')
}

View File

@ -0,0 +1,2 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.statusim.module">
</manifest>

View File

@ -1,4 +1,4 @@
package com.statusim.geth.service;
package com.statusim.module;
import android.os.Message;

View File

@ -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) {

View File

@ -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);
}
}
}

View File

@ -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;
}

View File

@ -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<String, Callback> 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);
}
});
}
}

View File

@ -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<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new GethModule(reactContext));
modules.add(new StatusModule(reactContext));
return modules;
}

View File

@ -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<GethService> service;
private final WeakReference<StatusService> 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) {

4
modules/react-native-status/index.js vendored Normal file
View File

@ -0,0 +1,4 @@
'use strict';
import { NativeModules } from 'react-native';
module.exports = NativeModules.Status;

View File

@ -0,0 +1,6 @@
#import <Foundation/Foundation.h>
#import "RCTBridgeModule.h"
#import "RCTLog.h"
@interface Status : NSObject <RCTBridgeModule>
@end

View File

@ -0,0 +1,55 @@
#import "RCTStatus.h"
#import <Statusgo/Statusgo.h>
@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

View File

@ -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 = "<group>"; };
206C9F3F1D474E910063E3E6 /* RCTStatus.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTStatus.m; sourceTree = "<group>"; };
20AB9EAD1D47CBF500E7FD9C /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../../../../../react-native-status/ios/Statusgo.framework"; sourceTree = "<group>"; };
/* 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 = "<group>";
};
206C9F3B1D474E910063E3E6 /* Products */ = {
isa = PBXGroup;
children = (
206C9F3A1D474E910063E3E6 /* libRCTStatus.a */,
);
name = Products;
sourceTree = "<group>";
};
206C9F3C1D474E910063E3E6 /* RCTStatus */ = {
isa = PBXGroup;
children = (
206C9F3D1D474E910063E3E6 /* RCTStatus.h */,
206C9F3F1D474E910063E3E6 /* RCTStatus.m */,
);
sourceTree = "<group>";
};
/* 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 */;
}

View File

@ -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

View File

@ -0,0 +1,4 @@
framework module "Statusgo" {
header "Statusgo.h"
export *
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>

View File

@ -0,0 +1 @@
bd7ae0b1c5bf90e4a4fa06bd17667234485f130a

View File

@ -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 <Framework_Name>"
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

View File

@ -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"
}

View File

@ -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",

View File

@ -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)))))

View File

@ -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]))))))))
(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]))))))))

View File

@ -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)

View File

@ -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)))

View File

@ -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)))

View File

@ -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!)

View File

@ -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!

View File

@ -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]]

View File

@ -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]]

View File

@ -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)))

View File

@ -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)

View File

@ -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)

View File

@ -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!

View File

@ -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 %])))