diff --git a/app/src/full/AndroidManifest.xml b/app/src/full/AndroidManifest.xml
index 089a603e0..e466dc25d 100644
--- a/app/src/full/AndroidManifest.xml
+++ b/app/src/full/AndroidManifest.xml
@@ -66,7 +66,10 @@
-
+
= Build.VERSION_CODES.O) {
- context.startForegroundService(new Intent(context, OnBootIntentService.class));
- } else {
- context.startService(new Intent(context, OnBootIntentService.class));
- }
+ if (TextUtils.equals(intent.getAction(), Intent.ACTION_BOOT_COMPLETED))
+ OnBootService.enqueueWork(context);
}
}
diff --git a/app/src/full/java/com/topjohnwu/magisk/services/OnBootIntentService.java b/app/src/full/java/com/topjohnwu/magisk/services/OnBootIntentService.java
deleted file mode 100644
index a172736a5..000000000
--- a/app/src/full/java/com/topjohnwu/magisk/services/OnBootIntentService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.topjohnwu.magisk.services;
-
-import android.app.IntentService;
-import android.content.Intent;
-import android.os.Build;
-import android.support.v4.app.NotificationCompat;
-
-import com.topjohnwu.magisk.MagiskManager;
-import com.topjohnwu.magisk.R;
-import com.topjohnwu.magisk.utils.Const;
-import com.topjohnwu.magisk.utils.RootUtils;
-
-public class OnBootIntentService extends IntentService {
-
- public OnBootIntentService() {
- super("OnBootIntentService");
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- startForeground(Const.ID.ONBOOT_NOTIFICATION_ID,
- new NotificationCompat.Builder(this, Const.ID.NOTIFICATION_CHANNEL)
- .setSmallIcon(R.drawable.ic_magisk_outline)
- .setContentTitle("Startup Operations")
- .setContentText("Running startup operations...")
- .build());
- }
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
- /* Pixel 2 (XL) devices will need to patch dtbo.img.
- * However, that is not possible if Magisk is installed by
- * patching boot image with Magisk Manager and fastboot flash
- * the boot image, since at that time we do not have root.
- * Check for dtbo status every boot time, and prompt user
- * to reboot if dtbo wasn't patched and patched by Magisk Manager.
- * */
- MagiskManager.get().loadMagiskInfo();
- RootUtils.patchDTBO();
- }
-}
diff --git a/app/src/full/java/com/topjohnwu/magisk/services/OnBootService.java b/app/src/full/java/com/topjohnwu/magisk/services/OnBootService.java
new file mode 100644
index 000000000..26f8153c3
--- /dev/null
+++ b/app/src/full/java/com/topjohnwu/magisk/services/OnBootService.java
@@ -0,0 +1,33 @@
+package com.topjohnwu.magisk.services;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.NonNull;
+import android.support.v4.app.JobIntentService;
+
+import com.topjohnwu.magisk.utils.Const;
+import com.topjohnwu.magisk.utils.ShowUI;
+import com.topjohnwu.superuser.Shell;
+import com.topjohnwu.superuser.ShellUtils;
+
+public class OnBootService extends JobIntentService {
+
+ public static void enqueueWork(Context context) {
+ enqueueWork(context, OnBootService.class, Const.ID.ONBOOT_SERVICE_ID, new Intent());
+ }
+
+ @Override
+ protected void onHandleWork(@NonNull Intent intent) {
+ /* Devices with DTBO might want to patch dtbo.img.
+ * However, that is not possible if Magisk is installed by
+ * patching boot image with Magisk Manager and flashed via
+ * fastboot, since at that time we do not have root.
+ * Check for dtbo status every boot time, and prompt user
+ * to reboot if dtbo wasn't patched and patched by Magisk Manager.
+ * */
+ Shell shell = Shell.newInstance();
+ if (shell.getStatus() >= Shell.ROOT_SHELL &&
+ Boolean.parseBoolean(ShellUtils.fastCmd(shell, "mm_patch_dtbo")))
+ ShowUI.dtboPatchedNotification();
+ }
+}
diff --git a/app/src/full/java/com/topjohnwu/magisk/utils/Logger.java b/app/src/full/java/com/topjohnwu/magisk/utils/Logger.java
index b3f05c111..f1cebe725 100644
--- a/app/src/full/java/com/topjohnwu/magisk/utils/Logger.java
+++ b/app/src/full/java/com/topjohnwu/magisk/utils/Logger.java
@@ -4,8 +4,6 @@ import android.util.Log;
import com.topjohnwu.magisk.BuildConfig;
-import java.util.Locale;
-
public class Logger {
public static void debug(String line) {
diff --git a/app/src/full/java/com/topjohnwu/magisk/utils/RootUtils.java b/app/src/full/java/com/topjohnwu/magisk/utils/RootUtils.java
index 00729a04d..b2e3318a3 100644
--- a/app/src/full/java/com/topjohnwu/magisk/utils/RootUtils.java
+++ b/app/src/full/java/com/topjohnwu/magisk/utils/RootUtils.java
@@ -1,8 +1,6 @@
package com.topjohnwu.magisk.utils;
-import com.topjohnwu.magisk.MagiskManager;
import com.topjohnwu.superuser.Shell;
-import com.topjohnwu.superuser.ShellUtils;
import com.topjohnwu.superuser.io.SuFile;
public class RootUtils {
@@ -25,14 +23,4 @@ public class RootUtils {
public static void uninstallPkg(String pkg) {
Shell.Sync.su("db_clean " + Const.USER_ID, "pm uninstall " + pkg);
}
-
- public static void patchDTBO() {
- if (Shell.rootAccess()) {
- MagiskManager mm = MagiskManager.get();
- if (mm.magiskVersionCode >= Const.MAGISK_VER.DTBO_SUPPORT) {
- if (Boolean.parseBoolean(ShellUtils.fastCmd("mm_patch_dtbo")))
- ShowUI.dtboPatchedNotification();
- }
- }
- }
}
diff --git a/app/src/main/java/com/topjohnwu/magisk/utils/Const.java b/app/src/main/java/com/topjohnwu/magisk/utils/Const.java
index 11196665a..49afb20af 100644
--- a/app/src/main/java/com/topjohnwu/magisk/utils/Const.java
+++ b/app/src/main/java/com/topjohnwu/magisk/utils/Const.java
@@ -59,7 +59,6 @@ public class Const {
public static final int FBE_AWARE = 1410;
public static final int RESETPROP_PERSIST = 1436;
public static final int MANAGER_HIDE = 1440;
- public static final int DTBO_SUPPORT = 1446;
public static final int HIDDEN_PATH = 1460;
public static final int REMOVE_LEGACY_LINK = 1630;
public static final int SEPOL_REFACTOR = 1640;
@@ -70,11 +69,11 @@ public class Const {
public static final int UPDATE_SERVICE_ID = 1;
public static final int FETCH_ZIP = 2;
public static final int SELECT_BOOT = 3;
+ public static final int ONBOOT_SERVICE_ID = 6;
// notifications
public static final int MAGISK_UPDATE_NOTIFICATION_ID = 4;
public static final int APK_UPDATE_NOTIFICATION_ID = 5;
- public static final int ONBOOT_NOTIFICATION_ID = 6;
public static final int DTBO_NOTIFICATION_ID = 7;
public static final String NOTIFICATION_CHANNEL = "magisk_notification";
}