Update dialogs should nicely be hidden when interacting with notifications.

This commit is contained in:
Koen J
2025-12-03 16:33:51 +01:00
parent 961710cc8b
commit 300466f722
6 changed files with 24 additions and 8 deletions
@@ -370,17 +370,19 @@ class UIDialogs {
} }
fun showConfirmationDialog(context: Context, text: String, action: () -> Unit, cancelAction: (() -> Unit)? = null) { fun showConfirmationDialog(context: Context, text: String, action: () -> Unit, cancelAction: (() -> Unit)? = null, dismissAction: (() -> Unit)? = null): AlertDialog {
val confirmButtonAction = Action(context.getString(R.string.confirm), action, ActionStyle.PRIMARY) val confirmButtonAction = Action(context.getString(R.string.confirm), action, ActionStyle.PRIMARY)
val cancelButtonAction = Action(context.getString(R.string.cancel), cancelAction ?: {}, ActionStyle.ACCENT) val cancelButtonAction = Action(context.getString(R.string.cancel), cancelAction ?: {}, ActionStyle.ACCENT)
showDialog(context, R.drawable.ic_error, text, null, null, 0, cancelButtonAction, confirmButtonAction) return showDialog(context, R.drawable.ic_error, text, null, null, 0, cancelButtonAction, confirmButtonAction).apply {
setOnDismissListener { dismissAction?.invoke() }
}
} }
fun showConfirmationDialog(context: Context, text: String, action: () -> Unit, cancelAction: (() -> Unit)? = null, doNotAskAgainAction: (() -> Unit)? = null) { fun showConfirmationDialog(context: Context, text: String, action: () -> Unit, cancelAction: (() -> Unit)? = null, dismissAction: (() -> Unit)? = null, doNotAskAgainAction: (() -> Unit)? = null): AlertDialog {
val confirmButtonAction = Action(context.getString(R.string.confirm), action, ActionStyle.PRIMARY) val confirmButtonAction = Action(context.getString(R.string.confirm), action, ActionStyle.PRIMARY)
val cancelButtonAction = Action(context.getString(R.string.cancel), cancelAction ?: {}, ActionStyle.ACCENT) val cancelButtonAction = Action(context.getString(R.string.cancel), cancelAction ?: {}, ActionStyle.ACCENT)
val doNotAskAgain = Action(context.getString(R.string.do_not_ask_again), doNotAskAgainAction ?: {}, ActionStyle.NONE) val doNotAskAgain = Action(context.getString(R.string.do_not_ask_again), doNotAskAgainAction ?: {}, ActionStyle.NONE)
showDialog(context, R.drawable.ic_error, text, null, null, 0, doNotAskAgain, cancelButtonAction, confirmButtonAction) return showDialog(context, R.drawable.ic_error, text, null, null, 0, doNotAskAgain, cancelButtonAction, confirmButtonAction)
} }
fun showUpdateAvailableDialog(context: Context, lastVersion: Int, hideExceptionButtons: Boolean = false) { fun showUpdateAvailableDialog(context: Context, lastVersion: Int, hideExceptionButtons: Boolean = false) {
@@ -6,6 +6,7 @@ import android.content.Intent
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.futo.platformplayer.activities.MainActivity import com.futo.platformplayer.activities.MainActivity
import com.futo.platformplayer.dialogs.AutoUpdateDialog
import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.states.StateApp
import java.io.File import java.io.File
@@ -21,6 +22,8 @@ class UpdateActionReceiver : BroadcastReceiver() {
} }
private fun handleUpdateYes(context: Context, intent: Intent) { private fun handleUpdateYes(context: Context, intent: Intent) {
AutoUpdateDialog.currentDialog?.dismiss()
val version = intent.getIntExtra(UpdateNotificationManager.EXTRA_VERSION, 0) val version = intent.getIntExtra(UpdateNotificationManager.EXTRA_VERSION, 0)
if (version == 0) { if (version == 0) {
return return
@@ -49,10 +52,12 @@ class UpdateActionReceiver : BroadcastReceiver() {
} }
private fun handleUpdateNo(context: Context) { private fun handleUpdateNo(context: Context) {
AutoUpdateDialog.currentDialog?.dismiss()
NotificationManagerCompat.from(context).cancel(UpdateNotificationManager.NOTIF_ID_AVAILABLE) NotificationManagerCompat.from(context).cancel(UpdateNotificationManager.NOTIF_ID_AVAILABLE)
} }
private fun handleUpdateNever(context: Context) { private fun handleUpdateNever(context: Context) {
AutoUpdateDialog.currentDialog?.dismiss()
Settings.instance.autoUpdate.check = 1 Settings.instance.autoUpdate.check = 1
Settings.instance.save() Settings.instance.save()
@@ -86,5 +91,6 @@ class UpdateActionReceiver : BroadcastReceiver() {
UpdateNotificationManager.cancelAll(context) UpdateNotificationManager.cancelAll(context)
UpdateInstaller.startInstall(context, apkFile) UpdateInstaller.startInstall(context, apkFile)
UpdateDownloadService.updateDownloadedDialog?.dismiss()
} }
} }
@@ -1,5 +1,6 @@
package com.futo.platformplayer package com.futo.platformplayer
import android.app.Dialog
import android.app.Service import android.app.Service
import android.content.Intent import android.content.Intent
import android.os.IBinder import android.os.IBinder
@@ -21,6 +22,8 @@ class UpdateDownloadService : Service() {
private const val MAX_RETRIES = 5 private const val MAX_RETRIES = 5
private const val INITIAL_BACKOFF_MS = 5_000L private const val INITIAL_BACKOFF_MS = 5_000L
private const val BUFFER_SIZE = 8 * 1024 private const val BUFFER_SIZE = 8 * 1024
var updateDownloadedDialog: Dialog? = null
} }
private val job = SupervisorJob() private val job = SupervisorJob()
@@ -216,12 +219,13 @@ class UpdateDownloadService : Service() {
StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) { StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) {
StateApp.withContext { ctx -> StateApp.withContext { ctx ->
try { try {
UIDialogs.showConfirmationDialog(ctx, "Update downloaded, press confirm to install", { updateDownloadedDialog = UIDialogs.showConfirmationDialog(ctx, "Update downloaded, press confirm to install", {
UpdateNotificationManager.cancelAll(ctx) UpdateNotificationManager.cancelAll(ctx)
UpdateInstaller.startInstall(ctx, apkFile) UpdateInstaller.startInstall(ctx, apkFile)
}, {}) }, dismissAction = { updateDownloadedDialog = null })
} catch (t: Throwable) { } catch (t: Throwable) {
Logger.w(TAG, "Failed to show in-app update downloaded dialog", t) Logger.w(TAG, "Failed to show in-app update downloaded dialog", t)
updateDownloadedDialog = null
} }
} }
} }
@@ -36,6 +36,8 @@ import java.io.InputStream
class AutoUpdateDialog(context: Context?) : AlertDialog(context) { class AutoUpdateDialog(context: Context?) : AlertDialog(context) {
companion object { companion object {
private val TAG = "AutoUpdateDialog"; private val TAG = "AutoUpdateDialog";
var currentDialog: AutoUpdateDialog? = null
} }
private lateinit var _buttonNever: Button; private lateinit var _buttonNever: Button;
@@ -94,11 +96,13 @@ class AutoUpdateDialog(context: Context?) : AlertDialog(context) {
} }
}; };
currentDialog = this
} }
override fun dismiss() { override fun dismiss() {
super.dismiss() super.dismiss()
InstallReceiver.onReceiveResult.clear(); InstallReceiver.onReceiveResult.clear();
currentDialog = null
Logger.i(TAG, "Cleared InstallReceiver.onReceiveResult handler.") Logger.i(TAG, "Cleared InstallReceiver.onReceiveResult handler.")
} }
@@ -409,7 +409,7 @@ class ChannelFragment : MainFragment() {
_fragment.topBar?.onShown(channel) _fragment.topBar?.onShown(channel)
val buttons = arrayListOf(Pair(R.drawable.ic_playlist_add) { val buttons = arrayListOf(Pair(R.drawable.ic_playlist_add) {
UIDialogs.showConfirmationDialog(context, val dialog = UIDialogs.showConfirmationDialog(context,
context.getString(R.string.do_you_want_to_convert_channel_channelname_to_a_playlist) context.getString(R.string.do_you_want_to_convert_channel_channelname_to_a_playlist)
.replace("{channelName}", channel.name), .replace("{channelName}", channel.name),
{ {
@@ -77,7 +77,7 @@ class VideoListEditorView : FrameLayout {
executeDelete() executeDelete()
}, cancelAction = { }, cancelAction = {
}, doNotAskAgainAction = { }, dismissAction = {}, doNotAskAgainAction = {
Settings.instance.other.playlistDeleteConfirmation = false Settings.instance.other.playlistDeleteConfirmation = false
Settings.instance.save() Settings.instance.save()
}) })