diff --git a/.re-natal b/.re-natal
index 1455b14c43..b4f25ba62a 100644
--- a/.re-natal
+++ b/.re-natal
@@ -1,7 +1,7 @@
{
"name": "StatusIm",
"interface": "reagent",
- "androidHost": "localhost",
+ "androidHost": "10.0.3.2",
"modules": [
"react-native-contacts",
"react-native-invertible-scroll-view",
diff --git a/android/app/src/main/java/com/statusim/MainActivity.java b/android/app/src/main/java/com/statusim/MainActivity.java
index f076461d8b..7d14e08627 100644
--- a/android/app/src/main/java/com/statusim/MainActivity.java
+++ b/android/app/src/main/java/com/statusim/MainActivity.java
@@ -8,6 +8,10 @@ import com.facebook.react.shell.MainReactPackage;
import com.rt2zz.reactnativecontacts.ReactNativeContacts;
import android.os.Bundle;
import android.os.Environment;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnCancelListener;
import com.github.ethereum.go_ethereum.cmd.Geth;
import com.bitgo.randombytes.RandomBytesPackage;
import com.BV.LinearGradient.LinearGradientPackage;
@@ -21,22 +25,17 @@ import java.util.List;
import java.util.Properties;
import java.io.File;
+
import com.i18n.reactnativei18n.ReactNativeI18n;
import io.realm.react.RealmReactPackage;
+
public class MainActivity extends ReactActivity {
final Handler handler = new Handler();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- // Required for android-16 (???)
- System.loadLibrary("gethraw");
- System.loadLibrary("geth");
-
- // Required because of crazy APN settings redirecting localhost
+ protected void startStatus() {
+ // Required because of crazy APN settings redirecting localhost (found in GB)
Properties properties = System.getProperties();
properties.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");
properties.setProperty("https.nonProxyHosts", "localhost|127.0.0.1");
@@ -63,6 +62,43 @@ public class MainActivity extends ReactActivity {
handler.postDelayed(addPeer, 5000);
}
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Required for android-16 (???)
+ // Crash if put in startStatus() ?
+ System.loadLibrary("gethraw");
+ System.loadLibrary("geth");
+
+ if(!RootUtil.isDeviceRooted()) {
+ startStatus();
+ } else {
+ AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setMessage(getResources().getString(R.string.root_warning))
+ .setPositiveButton(getResources().getString(R.string.root_okay), new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ startStatus();
+ }
+ }).setNegativeButton(getResources().getString(R.string.root_cancel), new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ MainActivity.this.finishAffinity();
+ }
+ }).setOnCancelListener(new OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ dialog.dismiss();
+ MainActivity.this.finishAffinity();
+ }
+ }).create();
+ dialog.show();
+ }
+
+ }
+
/**
* Returns the name of the main component registered from JavaScript.
* This is used to schedule rendering of the component.
diff --git a/android/app/src/main/java/com/statusim/RootUtil.java b/android/app/src/main/java/com/statusim/RootUtil.java
new file mode 100644
index 0000000000..c5b9e88df0
--- /dev/null
+++ b/android/app/src/main/java/com/statusim/RootUtil.java
@@ -0,0 +1,41 @@
+package com.statusim;
+
+import java.io.File;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+/** @author Kevin Kowalewski */
+public class RootUtil {
+
+ public static boolean isDeviceRooted() {
+ return checkRootMethod1() || checkRootMethod2() || checkRootMethod3();
+ }
+
+ private static boolean checkRootMethod1() {
+ String buildTags = android.os.Build.TAGS;
+ return buildTags != null && buildTags.contains("test-keys");
+ }
+
+ private static boolean checkRootMethod2() {
+ String[] paths = { "/system/app/Superuser.apk", "/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su",
+ "/system/bin/failsafe/su", "/data/local/su" };
+ for (String path : paths) {
+ if (new File(path).exists()) return true;
+ }
+ return false;
+ }
+
+ private static boolean checkRootMethod3() {
+ Process process = null;
+ try {
+ process = Runtime.getRuntime().exec(new String[] { "/system/xbin/which", "su" });
+ BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ if (in.readLine() != null) return true;
+ return false;
+ } catch (Throwable t) {
+ return false;
+ } finally {
+ if (process != null) process.destroy();
+ }
+ }
+}
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index fb87cafc71..428623ba43 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -1,3 +1,6 @@
- StatusIm
-
+ Status
+ Your phone appears to be ROOTED, by pressing CONTINUE you understand and accept the risks in using this software.
+ Continue
+ Exit
+
\ No newline at end of file
diff --git a/env/dev/env/android/main.cljs b/env/dev/env/android/main.cljs
index 1bf474e505..f0c3d96fca 100644
--- a/env/dev/env/android/main.cljs
+++ b/env/dev/env/android/main.cljs
@@ -10,7 +10,7 @@
(def root-el (r/as-element [reloader]))
(figwheel/watch-and-reload
- :websocket-url "ws://localhost:3449/figwheel-ws"
+ :websocket-url "ws://10.0.3.2:3449/figwheel-ws"
:heads-up-display false
:jsload-callback #(swap! cnt inc))