From 6263d684d9f81ff7ae015dee9eea5d43deabd488 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sat, 21 Jul 2018 02:59:36 +0800 Subject: [PATCH] Migrate to JobIntentService to prevent boot notification --- app/src/full/AndroidManifest.xml | 5 ++- .../magisk/receivers/BootReceiver.java | 11 ++--- .../magisk/services/OnBootIntentService.java | 44 ------------------- .../magisk/services/OnBootService.java | 33 ++++++++++++++ .../com/topjohnwu/magisk/utils/Logger.java | 2 - .../com/topjohnwu/magisk/utils/RootUtils.java | 12 ----- .../com/topjohnwu/magisk/utils/Const.java | 3 +- 7 files changed, 42 insertions(+), 68 deletions(-) delete mode 100644 app/src/full/java/com/topjohnwu/magisk/services/OnBootIntentService.java create mode 100644 app/src/full/java/com/topjohnwu/magisk/services/OnBootService.java 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"; }