diff --git a/app/src/main/java/com/futo/platformplayer/UIDialogs.kt b/app/src/main/java/com/futo/platformplayer/UIDialogs.kt index 6090aa56..6c1e134d 100644 --- a/app/src/main/java/com/futo/platformplayer/UIDialogs.kt +++ b/app/src/main/java/com/futo/platformplayer/UIDialogs.kt @@ -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 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 cancelButtonAction = Action(context.getString(R.string.cancel), cancelAction ?: {}, ActionStyle.ACCENT) 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) { diff --git a/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt b/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt index 42f452f0..1789cc91 100644 --- a/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt +++ b/app/src/main/java/com/futo/platformplayer/UpdateActionReceiver.kt @@ -6,6 +6,7 @@ import android.content.Intent import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat import com.futo.platformplayer.activities.MainActivity +import com.futo.platformplayer.dialogs.AutoUpdateDialog import com.futo.platformplayer.states.StateApp import java.io.File @@ -21,6 +22,8 @@ class UpdateActionReceiver : BroadcastReceiver() { } private fun handleUpdateYes(context: Context, intent: Intent) { + AutoUpdateDialog.currentDialog?.dismiss() + val version = intent.getIntExtra(UpdateNotificationManager.EXTRA_VERSION, 0) if (version == 0) { return @@ -49,10 +52,12 @@ class UpdateActionReceiver : BroadcastReceiver() { } private fun handleUpdateNo(context: Context) { + AutoUpdateDialog.currentDialog?.dismiss() NotificationManagerCompat.from(context).cancel(UpdateNotificationManager.NOTIF_ID_AVAILABLE) } private fun handleUpdateNever(context: Context) { + AutoUpdateDialog.currentDialog?.dismiss() Settings.instance.autoUpdate.check = 1 Settings.instance.save() @@ -86,5 +91,6 @@ class UpdateActionReceiver : BroadcastReceiver() { UpdateNotificationManager.cancelAll(context) UpdateInstaller.startInstall(context, apkFile) + UpdateDownloadService.updateDownloadedDialog?.dismiss() } } diff --git a/app/src/main/java/com/futo/platformplayer/UpdateDownloadService.kt b/app/src/main/java/com/futo/platformplayer/UpdateDownloadService.kt index fe01051a..bc860479 100644 --- a/app/src/main/java/com/futo/platformplayer/UpdateDownloadService.kt +++ b/app/src/main/java/com/futo/platformplayer/UpdateDownloadService.kt @@ -1,5 +1,6 @@ package com.futo.platformplayer +import android.app.Dialog import android.app.Service import android.content.Intent import android.os.IBinder @@ -21,6 +22,8 @@ class UpdateDownloadService : Service() { private const val MAX_RETRIES = 5 private const val INITIAL_BACKOFF_MS = 5_000L private const val BUFFER_SIZE = 8 * 1024 + + var updateDownloadedDialog: Dialog? = null } private val job = SupervisorJob() @@ -216,12 +219,13 @@ class UpdateDownloadService : Service() { StateApp.instance.scopeOrNull?.launch(Dispatchers.Main) { StateApp.withContext { ctx -> try { - UIDialogs.showConfirmationDialog(ctx, "Update downloaded, press confirm to install", { + updateDownloadedDialog = UIDialogs.showConfirmationDialog(ctx, "Update downloaded, press confirm to install", { UpdateNotificationManager.cancelAll(ctx) UpdateInstaller.startInstall(ctx, apkFile) - }, {}) + }, dismissAction = { updateDownloadedDialog = null }) } catch (t: Throwable) { Logger.w(TAG, "Failed to show in-app update downloaded dialog", t) + updateDownloadedDialog = null } } } diff --git a/app/src/main/java/com/futo/platformplayer/dialogs/AutoUpdateDialog.kt b/app/src/main/java/com/futo/platformplayer/dialogs/AutoUpdateDialog.kt index fbca0f6b..9cfb840d 100644 --- a/app/src/main/java/com/futo/platformplayer/dialogs/AutoUpdateDialog.kt +++ b/app/src/main/java/com/futo/platformplayer/dialogs/AutoUpdateDialog.kt @@ -36,6 +36,8 @@ import java.io.InputStream class AutoUpdateDialog(context: Context?) : AlertDialog(context) { companion object { private val TAG = "AutoUpdateDialog"; + + var currentDialog: AutoUpdateDialog? = null } private lateinit var _buttonNever: Button; @@ -94,11 +96,13 @@ class AutoUpdateDialog(context: Context?) : AlertDialog(context) { } }; + currentDialog = this } override fun dismiss() { super.dismiss() InstallReceiver.onReceiveResult.clear(); + currentDialog = null Logger.i(TAG, "Cleared InstallReceiver.onReceiveResult handler.") } diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt index 541d7c7c..c95238aa 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/ChannelFragment.kt @@ -409,7 +409,7 @@ class ChannelFragment : MainFragment() { _fragment.topBar?.onShown(channel) 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) .replace("{channelName}", channel.name), { diff --git a/app/src/main/java/com/futo/platformplayer/views/lists/VideoListEditorView.kt b/app/src/main/java/com/futo/platformplayer/views/lists/VideoListEditorView.kt index 67be4058..7bc7dffe 100644 --- a/app/src/main/java/com/futo/platformplayer/views/lists/VideoListEditorView.kt +++ b/app/src/main/java/com/futo/platformplayer/views/lists/VideoListEditorView.kt @@ -77,7 +77,7 @@ class VideoListEditorView : FrameLayout { executeDelete() }, cancelAction = { - }, doNotAskAgainAction = { + }, dismissAction = {}, doNotAskAgainAction = { Settings.instance.other.playlistDeleteConfirmation = false Settings.instance.save() })