From 042ced81efcb226ae53cad1f96671f218be6b118 Mon Sep 17 00:00:00 2001 From: Koen J Date: Wed, 3 Dec 2025 18:18:43 +0100 Subject: [PATCH] Fix for update when app is fully killed. --- app/src/main/AndroidManifest.xml | 7 +++ .../platformplayer/UpdateActionReceiver.kt | 39 ++------------- .../UpdateNotificationManager.kt | 16 ++----- .../activities/InstallUpdateActivity.kt | 47 +++++++++++++++++++ app/src/main/res/values/themes.xml | 10 ++++ 5 files changed, 72 insertions(+), 47 deletions(-) create mode 100644 app/src/main/java/com/futo/platformplayer/activities/InstallUpdateActivity.kt 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