diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 58fea94f0b..a1b389441b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -174,11 +174,6 @@
-
-
@@ -200,6 +195,10 @@
android:name=".data.notification.NotificationReceiver"
android:exported="false" />
+
+
diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallBroadcast.kt
similarity index 77%
rename from app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallActivity.kt
rename to app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallBroadcast.kt
index 8d081dd37c..4edefea06b 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallActivity.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstallBroadcast.kt
@@ -1,15 +1,14 @@
package eu.kanade.tachiyomi.extension.util
-import android.app.Activity
import android.app.DownloadManager
import android.app.PendingIntent
+import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import android.content.pm.PackageInstaller.SessionParams
import android.content.pm.PackageInstaller.SessionParams.USER_ACTION_NOT_REQUIRED
import android.os.Build
-import android.os.Bundle
import android.widget.Toast
import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.R
@@ -22,19 +21,17 @@ import uy.kohesive.injekt.injectLazy
* Activity used to install extensions, because we can only receive the result of the installation
* with [startActivityForResult], which we need to update the UI.
*/
-class ExtensionInstallActivity : Activity() {
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
+class ExtensionInstallBroadcast : BroadcastReceiver() {
+ override fun onReceive(context: Context, intent: Intent) {
try {
if (PACKAGE_INSTALLED_ACTION == intent.action) {
- packageInstallStep(intent)
+ packageInstallStep(context, intent)
return
}
val downloadId = intent.extras!!.getLong(ExtensionInstaller.EXTRA_DOWNLOAD_ID)
- val packageInstaller = packageManager.packageInstaller
- val data = UniFile.fromUri(this, intent.data).openInputStream()
+ val packageInstaller = context.packageManager.packageInstaller
+ val data = UniFile.fromUri(context, intent.data).openInputStream()
val params = SessionParams(
SessionParams.MODE_FULL_INSTALL
@@ -48,29 +45,28 @@ class ExtensionInstallActivity : Activity() {
data.copyTo(packageInSession)
}
- val newIntent = Intent(this, ExtensionInstallActivity::class.java)
+ val newIntent = Intent(context, ExtensionInstallBroadcast::class.java)
.setAction(PACKAGE_INSTALLED_ACTION)
.putExtra(ExtensionInstaller.EXTRA_DOWNLOAD_ID, downloadId)
.putExtra(EXTRA_SESSION_ID, sessionId)
- val pendingIntent = PendingIntent.getActivity(this, downloadId.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT)
+ val pendingIntent = PendingIntent.getBroadcast(context, downloadId.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT)
val statusReceiver = pendingIntent.intentSender
session.commit(statusReceiver)
val extensionManager: ExtensionManager by injectLazy()
extensionManager.setInstalling(downloadId, sessionId)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
- (getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager).remove(downloadId)
+ (context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager).remove(downloadId)
}
data.close()
} catch (error: Exception) {
// Either install package can't be found (probably bots) or there's a security exception
// with the download manager. Nothing we can workaround.
- toast(error.message)
+ context.toast(error.message)
}
- finish()
}
- private fun packageInstallStep(intent: Intent) {
+ private fun packageInstallStep(context: Context, intent: Intent) {
val extras = intent.extras ?: return
if (PACKAGE_INSTALLED_ACTION == intent.action) {
val downloadId = extras.getLong(ExtensionInstaller.EXTRA_DOWNLOAD_ID)
@@ -78,27 +74,23 @@ class ExtensionInstallActivity : Activity() {
when (val status = extras.getInt(PackageInstaller.EXTRA_STATUS)) {
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
val confirmIntent = extras[Intent.EXTRA_INTENT] as? Intent
- startActivityForResult(confirmIntent, INSTALL_REQUEST_CODE)
- finish()
+ context.startActivity(confirmIntent?.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
}
PackageInstaller.STATUS_SUCCESS -> {
extensionManager.setInstallationResult(downloadId, true)
- finish()
}
PackageInstaller.STATUS_FAILURE, PackageInstaller.STATUS_FAILURE_ABORTED, PackageInstaller.STATUS_FAILURE_BLOCKED, PackageInstaller.STATUS_FAILURE_CONFLICT, PackageInstaller.STATUS_FAILURE_INCOMPATIBLE, PackageInstaller.STATUS_FAILURE_INVALID, PackageInstaller.STATUS_FAILURE_STORAGE -> {
extensionManager.setInstallationResult(downloadId, false)
if (status != PackageInstaller.STATUS_FAILURE_ABORTED) {
if (MiuiUtil.isMiui()) {
- toast(R.string.extensions_miui_warning, Toast.LENGTH_LONG)
+ context.toast(R.string.extensions_miui_warning, Toast.LENGTH_LONG)
} else {
- toast(R.string.could_not_install_extension)
+ context.toast(R.string.could_not_install_extension)
}
}
- finish()
}
else -> {
extensionManager.setInstallationResult(downloadId, false)
- finish()
}
}
}
diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt
index 937c5df728..6ee88927ee 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/extension/util/ExtensionInstaller.kt
@@ -211,12 +211,12 @@ internal class ExtensionInstaller(private val context: Context) {
* @param uri The uri of the extension to install.
*/
fun installApk(downloadId: Long, uri: Uri) {
- val intent = Intent(context, ExtensionInstallActivity::class.java)
+ val intent = Intent(context, ExtensionInstallBroadcast::class.java)
.setDataAndType(uri, APK_MIME)
.putExtra(EXTRA_DOWNLOAD_ID, downloadId)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION)
- context.startActivity(intent)
+ context.sendBroadcast(intent)
}
/**