diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0344417bc..007ea3fdc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,13 +12,13 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
-
-
-
+
+
+
-
-
-
+
+
+
diff --git a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java
index d5b64b2ed..141f2329a 100644
--- a/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java
+++ b/app/src/main/java/com/topjohnwu/magisk/WelcomeActivity.java
@@ -19,6 +19,7 @@ import android.view.View;
import com.topjohnwu.magisk.ui.LogFragment;
import com.topjohnwu.magisk.ui.ModulesFragment;
import com.topjohnwu.magisk.ui.RootFragment;
+import com.topjohnwu.magisk.ui.utils.Utils;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -44,6 +45,9 @@ public class WelcomeActivity extends AppCompatActivity implements NavigationView
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
+ Utils.initialize.execute();
+
+
setSupportActionBar(toolbar);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/LogFragment.java b/app/src/main/java/com/topjohnwu/magisk/ui/LogFragment.java
index 4616ad4d6..a5235d785 100644
--- a/app/src/main/java/com/topjohnwu/magisk/ui/LogFragment.java
+++ b/app/src/main/java/com/topjohnwu/magisk/ui/LogFragment.java
@@ -35,6 +35,7 @@ import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;
+import java.util.concurrent.ExecutionException;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -226,13 +227,18 @@ public class LogFragment extends Fragment {
@Override
protected void onPreExecute() {
- Utils.su("chmod 755 /cache");
- Utils.su("chmod 644 /cache/magisk.log");
txtLog.setText("");
}
@Override
protected String doInBackground(File... log) {
+ // Ensure initialize is done
+ try {
+ Utils.initialize.get();
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ }
+
Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 2);
StringBuilder llog = new StringBuilder(15 * 10 * 1024);
diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java b/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java
index 2b3027803..4dee33a3b 100644
--- a/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java
+++ b/app/src/main/java/com/topjohnwu/magisk/ui/ModulesFragment.java
@@ -21,6 +21,7 @@ import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ExecutionException;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -81,6 +82,13 @@ public class ModulesFragment extends Fragment {
@Override
protected Boolean doInBackground(Void... voids) {
+ // Ensure initialize is done
+ try {
+ Utils.initialize.get();
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ }
+
File[] magisk = new File(MAGISK_PATH).listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
@@ -88,8 +96,6 @@ public class ModulesFragment extends Fragment {
}
});
- Utils.su("chmod 755 /cache");
-
File[] magiskCache = new File(MAGISK_CACHE_PATH).listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/utils/Utils.java b/app/src/main/java/com/topjohnwu/magisk/ui/utils/Utils.java
index 48588823f..f4572f487 100644
--- a/app/src/main/java/com/topjohnwu/magisk/ui/utils/Utils.java
+++ b/app/src/main/java/com/topjohnwu/magisk/ui/utils/Utils.java
@@ -1,5 +1,7 @@
package com.topjohnwu.magisk.ui.utils;
+import android.os.AsyncTask;
+
import java.util.List;
import eu.chainfire.libsuperuser.Shell;
@@ -7,7 +9,22 @@ import eu.chainfire.libsuperuser.Shell;
public class Utils {
public static final String suPath = sh("getprop magisk.supath");
- public static final boolean rootAccess = isRoot();
+ public static boolean rootAccess = false;
+ public static Init initialize = new Init();
+
+ public static class Init extends AsyncTask {
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ // Check root access
+ rootAccess = isRoot();
+ // Permission for java code to read /cache files
+ if (rootAccess) {
+ su("chmod 755 /cache", "chmod 644 /cache/magisk.log");
+ }
+ return null;
+ }
+ }
public static String sh(String... commands) {
List result = Shell.SH.run(commands);
@@ -28,8 +45,6 @@ public class Utils {
builder.append(s);
}
- Shell.SU.available();
-
return builder.toString();
}