diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9cafddaa..5c5fb27d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -261,5 +261,12 @@
android:name=".UpdateActionReceiver"
android:exported="false" />
+
+
diff --git a/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt b/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt
index 1789cc91..3050a154 100644
--- a/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt
+++ b/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt
@@ -17,7 +17,6 @@ class UpdateActionReceiver : BroadcastReceiver() {
UpdateNotificationManager.ACTION_UPDATE_NO -> handleUpdateNo(context)
UpdateNotificationManager.ACTION_UPDATE_NEVER -> handleUpdateNever(context)
UpdateNotificationManager.ACTION_DOWNLOAD_CANCEL -> handleDownloadCancel(context, intent)
- UpdateNotificationManager.ACTION_INSTALL_NOW -> handleInstallNow(context, intent)
}
}
@@ -31,24 +30,10 @@ class UpdateActionReceiver : BroadcastReceiver() {
NotificationManagerCompat.from(context).cancel(UpdateNotificationManager.NOTIF_ID_AVAILABLE)
- if (Settings.instance.autoUpdate.backgroundDownload == 1) {
- val serviceIntent = Intent(context, UpdateDownloadService::class.java).apply {
- putExtra(UpdateDownloadService.EXTRA_VERSION, version)
- }
- ContextCompat.startForegroundService(context, serviceIntent)
- } else {
- if (StateApp.instance.isMainActive) {
- StateApp.withContext { ctx ->
- UIDialogs.showUpdateAvailableDialog(ctx, version, false)
- }
- } else {
- val startIntent = Intent(context, MainActivity::class.java).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
- putExtra("SHOW_UPDATE_DIALOG_VERSION", version)
- }
- context.startActivity(startIntent)
- }
+ val serviceIntent = Intent(context, UpdateDownloadService::class.java).apply {
+ putExtra(UpdateDownloadService.EXTRA_VERSION, version)
}
+ ContextCompat.startForegroundService(context, serviceIntent)
}
private fun handleUpdateNo(context: Context) {
@@ -75,22 +60,4 @@ class UpdateActionReceiver : BroadcastReceiver() {
NotificationManagerCompat.from(context).cancel(UpdateNotificationManager.NOTIF_ID_DOWNLOADING)
}
-
- private fun handleInstallNow(context: Context, intent: Intent) {
- val version = intent.getIntExtra(UpdateNotificationManager.EXTRA_VERSION, 0)
- val apkPath = intent.getStringExtra(UpdateNotificationManager.EXTRA_APK_PATH)
-
- if (version == 0 || apkPath.isNullOrEmpty()) {
- return
- }
-
- val apkFile = File(apkPath)
- if (!apkFile.exists()) {
- return
- }
-
- UpdateNotificationManager.cancelAll(context)
- UpdateInstaller.startInstall(context, apkFile)
- UpdateDownloadService.updateDownloadedDialog?.dismiss()
- }
}
diff --git a/app/src/main/java/com/futo/platformplayer/UpdateNotificationManager.kt b/app/src/main/java/com/futo/platformplayer/UpdateNotificationManager.kt
index 279d0306..09a39ee9 100644
--- a/app/src/main/java/com/futo/platformplayer/UpdateNotificationManager.kt
+++ b/app/src/main/java/com/futo/platformplayer/UpdateNotificationManager.kt
@@ -4,6 +4,7 @@ import android.Manifest
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
+import android.app.PendingIntent
import android.app.PendingIntent.FLAG_MUTABLE
import android.app.PendingIntent.FLAG_UPDATE_CURRENT
import android.app.PendingIntent.getBroadcast
@@ -13,6 +14,7 @@ import android.content.pm.PackageManager
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
+import com.futo.platformplayer.activities.InstallUpdateActivity
import java.io.File
object UpdateNotificationManager {
@@ -25,6 +27,7 @@ object UpdateNotificationManager {
const val ACTION_UPDATE_NEVER = "com.futo.platformplayer.UPDATE_NEVER"
const val ACTION_DOWNLOAD_CANCEL = "com.futo.platformplayer.UPDATE_CANCEL"
const val ACTION_INSTALL_NOW = "com.futo.platformplayer.UPDATE_INSTALL"
+ private const val REQUEST_CODE_INSTALL = 1001
const val EXTRA_VERSION = "version"
const val EXTRA_APK_PATH = "apk_path"
@@ -130,17 +133,8 @@ object UpdateNotificationManager {
}
ensureChannel(context)
- val installIntent = Intent(context, UpdateActionReceiver::class.java).apply {
- action = ACTION_INSTALL_NOW
- putExtra(EXTRA_VERSION, version)
- putExtra(EXTRA_APK_PATH, apkFile.absolutePath)
- }
- val installPendingIntent = getBroadcast(
- context,
- 4,
- installIntent,
- FLAG_MUTABLE or FLAG_UPDATE_CURRENT
- )
+ val installIntent = InstallUpdateActivity.createIntent(context, version, apkFile.absolutePath)
+ val installPendingIntent = PendingIntent.getActivity(context, REQUEST_CODE_INSTALL, installIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.foreground)
diff --git a/app/src/main/java/com/futo/platformplayer/activities/InstallUpdateActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/InstallUpdateActivity.kt
new file mode 100644
index 00000000..24e5299b
--- /dev/null
+++ b/app/src/main/java/com/futo/platformplayer/activities/InstallUpdateActivity.kt
@@ -0,0 +1,47 @@
+package com.futo.platformplayer.activities
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import com.futo.platformplayer.UIDialogs
+import com.futo.platformplayer.UpdateInstaller
+import com.futo.platformplayer.UpdateNotificationManager
+import com.futo.platformplayer.logging.Logger
+import java.io.File
+
+class InstallUpdateActivity : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ val version = intent.getIntExtra(UpdateNotificationManager.EXTRA_VERSION, 0)
+ val apkPath = intent.getStringExtra(UpdateNotificationManager.EXTRA_APK_PATH)
+
+ if (version == 0 || apkPath.isNullOrEmpty()) {
+ Logger.w("InstallUpdateActivity", "Missing version or apkPath")
+ finish()
+ return
+ }
+
+ val apkFile = File(apkPath)
+ if (!apkFile.exists()) {
+ Logger.w("InstallUpdateActivity", "APK file does not exist: $apkPath")
+ UIDialogs.Companion.toast(this, "Update file missing")
+ finish()
+ return
+ }
+
+ UpdateInstaller.startInstall(this, apkFile)
+ finish()
+ }
+
+ companion object {
+ fun createIntent(context: Context, version: Int, apkPath: String): Intent =
+ Intent(context, InstallUpdateActivity::class.java).apply {
+ putExtra(UpdateNotificationManager.EXTRA_VERSION, version)
+ putExtra(UpdateNotificationManager.EXTRA_APK_PATH, apkPath)
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ }
+}
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index fe77ab0b..63173930 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -116,4 +116,14 @@
- @font/inter_regular
+
+
\ No newline at end of file