diff --git a/app/src/main/java/com/topjohnwu/magisk/core/App.kt b/app/src/main/java/com/topjohnwu/magisk/core/App.kt
index 56c3a05f0..3241b57a8 100644
--- a/app/src/main/java/com/topjohnwu/magisk/core/App.kt
+++ b/app/src/main/java/com/topjohnwu/magisk/core/App.kt
@@ -64,7 +64,7 @@ open class App() : Application() {
         }
 
         base.resources.patch()
-        app.registerActivityLifecycleCallbacks(ForegroundTracker)
+        app.registerActivityLifecycleCallbacks(ActivityTracker)
     }
 
     override fun onCreate() {
@@ -86,7 +86,7 @@ open class App() : Application() {
 }
 
 @SuppressLint("StaticFieldLeak")
-object ForegroundTracker : Application.ActivityLifecycleCallbacks {
+object ActivityTracker : Application.ActivityLifecycleCallbacks {
 
     @Volatile
     var foreground: Activity? = null
diff --git a/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt b/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt
index fe03cc5bc..9956576a1 100644
--- a/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt
+++ b/app/src/main/java/com/topjohnwu/magisk/core/download/DownloadService.kt
@@ -11,7 +11,7 @@ import android.os.IBinder
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.MutableLiveData
 import com.topjohnwu.magisk.R
-import com.topjohnwu.magisk.core.ForegroundTracker
+import com.topjohnwu.magisk.core.ActivityTracker
 import com.topjohnwu.magisk.core.base.BaseService
 import com.topjohnwu.magisk.core.intent
 import com.topjohnwu.magisk.core.utils.ProgressInputStream
@@ -68,9 +68,10 @@ class DownloadService : BaseService() {
                     is Subject.Manager -> handleAPK(subject, stream)
                     else -> stream.toModule(subject.file, service.fetchInstaller().byteStream())
                 }
-                if (ForegroundTracker.hasForeground) {
+                val activity = ActivityTracker.foreground
+                if (activity != null && subject.autoStart) {
                     remove(subject.notifyId)
-                    subject.pendingIntent(this@DownloadService)?.send()
+                    subject.pendingIntent(activity).send()
                 } else {
                     notifyFinish(subject)
                 }
diff --git a/app/src/main/java/com/topjohnwu/magisk/core/download/ManagerHandler.kt b/app/src/main/java/com/topjohnwu/magisk/core/download/ManagerHandler.kt
index ef90b0f61..81b5744ab 100644
--- a/app/src/main/java/com/topjohnwu/magisk/core/download/ManagerHandler.kt
+++ b/app/src/main/java/com/topjohnwu/magisk/core/download/ManagerHandler.kt
@@ -7,7 +7,7 @@ import androidx.core.content.getSystemService
 import androidx.core.net.toFile
 import com.topjohnwu.magisk.DynAPK
 import com.topjohnwu.magisk.R
-import com.topjohnwu.magisk.core.ForegroundTracker
+import com.topjohnwu.magisk.core.ActivityTracker
 import com.topjohnwu.magisk.core.Info
 import com.topjohnwu.magisk.core.isRunningAsStub
 import com.topjohnwu.magisk.core.tasks.HideAPK
@@ -64,7 +64,7 @@ suspend fun DownloadService.handleAPK(subject: Subject.Manager, stream: InputStr
             //noinspection InlinedApi
             val flag = PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
             val pending = PendingIntent.getActivity(this, id, intent, flag)
-            if (ForegroundTracker.hasForeground) {
+            if (ActivityTracker.hasForeground) {
                 val alarm = getSystemService<AlarmManager>()
                 alarm!!.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, pending)
             }
diff --git a/app/src/main/java/com/topjohnwu/magisk/core/download/Subject.kt b/app/src/main/java/com/topjohnwu/magisk/core/download/Subject.kt
index 6fe79972b..9ba7ce107 100644
--- a/app/src/main/java/com/topjohnwu/magisk/core/download/Subject.kt
+++ b/app/src/main/java/com/topjohnwu/magisk/core/download/Subject.kt
@@ -34,8 +34,9 @@ sealed class Subject : Parcelable {
     abstract val file: Uri
     abstract val title: String
     abstract val notifyId: Int
+    open val autoStart: Boolean get() = true
 
-    abstract fun pendingIntent(context: Context): PendingIntent?
+    abstract fun pendingIntent(context: Context): PendingIntent
 
     @Parcelize
     class Module(
@@ -45,16 +46,15 @@ sealed class Subject : Parcelable {
     ) : Subject() {
         override val url: String get() = module.zipUrl
         override val title: String get() = module.downloadFilename
+        override val autoStart: Boolean get() = action == Action.Flash
 
         @IgnoredOnParcel
         override val file by lazy {
             MediaStoreUtils.getFile(title).uri
         }
 
-        override fun pendingIntent(context: Context) = when (action) {
-            Action.Flash -> FlashFragment.installIntent(context, file)
-            else -> null
-        }
+        override fun pendingIntent(context: Context) =
+            FlashFragment.installIntent(context, file)
     }
 
     @Parcelize