From a51cdcd6ec31f24e4fc42dc74885879691e5d870 Mon Sep 17 00:00:00 2001 From: Koen Date: Tue, 26 Sep 2023 17:15:25 +0200 Subject: [PATCH] Fixed retryDialog button ordering. Fixed default action on confirmation dialog. Set notifications to be silent. AddToQueue button implemented on channel fragment. Added confirmation for deleting downloaded playlist videos. Separately handled UnknownHostException to prevent the dialog from showing when offline. --- app/src/main/java/com/futo/platformplayer/UIDialogs.kt | 8 +++++--- .../futo/platformplayer/background/BackgroundWorker.kt | 3 +++ .../fragment/channel/tab/ChannelContentsFragment.kt | 2 ++ .../fragment/mainactivity/main/ChannelFragment.kt | 8 ++++++++ .../fragment/mainactivity/main/PlaylistFragment.kt | 8 ++++++-- .../futo/platformplayer/services/DownloadService.kt | 2 ++ .../futo/platformplayer/services/ExportingService.kt | 1 + .../platformplayer/services/MediaPlaybackService.kt | 2 +- .../views/adapters/ChannelViewPagerAdapter.kt | 2 ++ .../futo/platformplayer/views/segments/CommentsList.kt | 10 ++++++++-- 10 files changed, 38 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/UIDialogs.kt b/app/src/main/java/com/futo/platformplayer/UIDialogs.kt index 0015cafb..fffd4515 100644 --- a/app/src/main/java/com/futo/platformplayer/UIDialogs.kt +++ b/app/src/main/java/com/futo/platformplayer/UIDialogs.kt @@ -190,7 +190,9 @@ class UIDialogs { "\nPlugin [${ex.config.name}]" else ""; showDialog(context, R.drawable.ic_error_pred, - "${msg}${pluginInfo}", (if(ex != null ) "${ex.message}" else ""), if(ex is PluginException) ex.code else null, + "${msg}${pluginInfo}", + (if(ex != null ) "${ex.message}" else ""), + if(ex is PluginException) ex.code else null, 0, UIDialogs.Action("Retry", { retryAction?.invoke(); @@ -209,14 +211,14 @@ class UIDialogs { fun showDataRetryDialog(context: Context, reason: String? = null, retryAction: (() -> Unit)? = null, closeAction: (() -> Unit)? = null) { val retryButtonAction = Action("Retry", retryAction ?: {}, ActionStyle.PRIMARY) val closeButtonAction = Action("Close", closeAction ?: {}, ActionStyle.ACCENT) - showDialog(context, R.drawable.ic_no_internet_86dp, "Data Retry", reason, null, 0, retryButtonAction, closeButtonAction) + showDialog(context, R.drawable.ic_no_internet_86dp, "Data Retry", reason, null, 0, closeButtonAction, retryButtonAction) } fun showConfirmationDialog(context: Context, text: String, action: () -> Unit, cancelAction: (() -> Unit)? = null) { val confirmButtonAction = Action("Confirm", action, ActionStyle.PRIMARY) val cancelButtonAction = Action("Cancel", cancelAction ?: {}, ActionStyle.ACCENT) - showDialog(context, R.drawable.ic_error, text, null, null, 1, cancelButtonAction, confirmButtonAction) + showDialog(context, R.drawable.ic_error, text, null, null, 0, cancelButtonAction, confirmButtonAction) } fun showUpdateAvailableDialog(context: Context, lastVersion: Int) { diff --git a/app/src/main/java/com/futo/platformplayer/background/BackgroundWorker.kt b/app/src/main/java/com/futo/platformplayer/background/BackgroundWorker.kt index c98646dd..72594e63 100644 --- a/app/src/main/java/com/futo/platformplayer/background/BackgroundWorker.kt +++ b/app/src/main/java/com/futo/platformplayer/background/BackgroundWorker.kt @@ -55,6 +55,7 @@ class BackgroundWorker(private val appContext: Context, workerParams: WorkerPara .setSmallIcon(com.futo.platformplayer.R.drawable.foreground) .setContentTitle("Grayjay") .setContentText("Failed subscriptions update\n${ex.message}") + .setSilent(true) .setChannelId(notificationChannel.id).build()); } @@ -72,6 +73,7 @@ class BackgroundWorker(private val appContext: Context, workerParams: WorkerPara .setSmallIcon(com.futo.platformplayer.R.drawable.foreground) .setContentTitle("Grayjay") .setContentText("Updating subscriptions...") + .setSilent(true) .setChannelId(notificationChannel.id) .setProgress(1, 0, true); @@ -109,6 +111,7 @@ class BackgroundWorker(private val appContext: Context, workerParams: WorkerPara .setSmallIcon(com.futo.platformplayer.R.drawable.foreground) .setContentTitle("Grayjay") .setContentText("${newItems.size} new content from ${newSubChanges.size} creators") + .setSilent(true) .setChannelId(notificationChannel.id).build()); } } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt index be12e48f..0ca2946b 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/channel/tab/ChannelContentsFragment.kt @@ -55,6 +55,7 @@ class ChannelContentsFragment : Fragment(), IChannelTabFragment { val onContentUrlClicked = Event2(); val onChannelClicked = Event1(); val onAddToClicked = Event1(); + val onAddToQueueClicked = Event1(); private fun getContentPager(channel: IPlatformChannel): IPager { Logger.i(TAG, "getContentPager"); @@ -147,6 +148,7 @@ class ChannelContentsFragment : Fragment(), IChannelTabFragment { this.onContentClicked.subscribe(this@ChannelContentsFragment.onContentClicked::emit); this.onChannelClicked.subscribe(this@ChannelContentsFragment.onChannelClicked::emit); this.onAddToClicked.subscribe(this@ChannelContentsFragment.onAddToClicked::emit); + this.onAddToQueueClicked.subscribe(this@ChannelContentsFragment.onAddToQueueClicked::emit); } _llmVideo = LinearLayoutManager(view.context); 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 c38eb798..b6720cc7 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 @@ -38,6 +38,7 @@ import com.futo.platformplayer.models.SearchType import com.futo.platformplayer.models.Subscription import com.futo.platformplayer.polycentric.PolycentricCache import com.futo.platformplayer.states.StatePlatform +import com.futo.platformplayer.states.StatePlayer import com.futo.platformplayer.states.StatePlaylists import com.futo.platformplayer.views.others.CreatorThumbnail import com.futo.platformplayer.views.subscriptions.SubscribeButton @@ -182,6 +183,13 @@ class ChannelFragment : MainFragment() { _slideUpOverlay = UISlideOverlays.showVideoOptionsOverlay(content, it); } } + adapter.onAddToQueueClicked.subscribe { content -> + if(content is IPlatformVideo) { + StatePlayer.instance.addToQueue(content); + val name = if (content.name.length > 20) (content.name.subSequence(0, 20).toString() + "...") else content.name; + UIDialogs.toast(context, "Queued [$name]", false); + } + } adapter.onContentUrlClicked.subscribe { url, contentType -> when(contentType) { ContentType.MEDIA -> fragment.navigate(url).maximizeVideoDetail(); diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt index 5d623461..350c3075 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PlaylistFragment.kt @@ -284,13 +284,17 @@ class PlaylistFragment : MainFragment() { _buttonDownload.setImageResource(R.drawable.ic_loader_animated); _buttonDownload.drawable.assume { it.start() }; _buttonDownload.setOnClickListener { - StateDownloads.instance.deleteCachedPlaylist(playlist.id); + UIDialogs.showConfirmationDialog(context, "Are you sure you want to delete the downloaded videos?", { + StateDownloads.instance.deleteCachedPlaylist(playlist.id); + }); } } else if(isDownloaded) { _buttonDownload.setImageResource(R.drawable.ic_download_off); _buttonDownload.setOnClickListener { - StateDownloads.instance.deleteCachedPlaylist(playlist.id); + UIDialogs.showConfirmationDialog(context, "Are you sure you want to delete the downloaded videos?", { + StateDownloads.instance.deleteCachedPlaylist(playlist.id); + }); } } else { diff --git a/app/src/main/java/com/futo/platformplayer/services/DownloadService.kt b/app/src/main/java/com/futo/platformplayer/services/DownloadService.kt index dc094b21..8803c4c0 100644 --- a/app/src/main/java/com/futo/platformplayer/services/DownloadService.kt +++ b/app/src/main/java/com/futo/platformplayer/services/DownloadService.kt @@ -221,6 +221,7 @@ class DownloadService : Service() { NotificationCompat.Builder(this, DOWNLOAD_NOTIF_TAG) .setSmallIcon(R.drawable.ic_download) .setOngoing(true) + .setSilent(true) .setContentIntent(PendingIntent.getActivity(this, 5, bringUpIntent, PendingIntent.FLAG_IMMUTABLE)) .setContentTitle("${download.state}: ${download.name}") .setContentText(download.getDownloadInfo()) @@ -230,6 +231,7 @@ class DownloadService : Service() { NotificationCompat.Builder(this, DOWNLOAD_NOTIF_TAG) .setSmallIcon(R.drawable.ic_download) .setOngoing(true) + .setSilent(true) .setContentIntent(PendingIntent.getActivity(this, 5, bringUpIntent, PendingIntent.FLAG_IMMUTABLE)) .setContentTitle("Preparing for download...") .setContentText("Initializing download process...") diff --git a/app/src/main/java/com/futo/platformplayer/services/ExportingService.kt b/app/src/main/java/com/futo/platformplayer/services/ExportingService.kt index c76991f4..7593c8b0 100644 --- a/app/src/main/java/com/futo/platformplayer/services/ExportingService.kt +++ b/app/src/main/java/com/futo/platformplayer/services/ExportingService.kt @@ -163,6 +163,7 @@ class ExportingService : Service() { var builder = NotificationCompat.Builder(this, EXPORT_NOTIF_TAG) .setSmallIcon(R.drawable.ic_export) .setOngoing(true) + .setSilent(true) .setContentIntent(PendingIntent.getActivity(this, 5, bringUpIntent, PendingIntent.FLAG_IMMUTABLE)) .setContentTitle("${export.state}: ${export.videoLocal.name}") .setContentText(export.getExportInfo()) diff --git a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt index c4852057..0254383f 100644 --- a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt +++ b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt @@ -60,7 +60,6 @@ class MediaPlaybackService : Service() { } try { - setupNotificationRequirements(); notifyMediaSession(null, null); @@ -235,6 +234,7 @@ class MediaPlaybackService : Service() { var builder = NotificationCompat.Builder(this, MEDIA_NOTIF_TAG) .setSmallIcon(icon) .setOngoing(true) + .setSilent(true) .setContentIntent(PendingIntent.getActivity(this, 5, bringUpIntent, PendingIntent.FLAG_IMMUTABLE)) .setStyle(if(hasQueue) androidx.media.app.NotificationCompat.MediaStyle() diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/ChannelViewPagerAdapter.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/ChannelViewPagerAdapter.kt index 7fe21e19..10f44e7f 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/ChannelViewPagerAdapter.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/ChannelViewPagerAdapter.kt @@ -18,6 +18,7 @@ class ChannelViewPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifec val onContentClicked = Event2(); val onChannelClicked = Event1(); val onAddToClicked = Event1(); + val onAddToQueueClicked = Event1(); override fun getItemCount(): Int { return _cache.size; @@ -51,6 +52,7 @@ class ChannelViewPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifec onContentUrlClicked.subscribe(this@ChannelViewPagerAdapter.onContentUrlClicked::emit); onChannelClicked.subscribe(this@ChannelViewPagerAdapter.onChannelClicked::emit); onAddToClicked.subscribe(this@ChannelViewPagerAdapter.onAddToClicked::emit); + onAddToQueueClicked.subscribe(this@ChannelViewPagerAdapter.onAddToQueueClicked::emit); }; 1 -> ChannelListFragment.newInstance().apply { onClickChannel.subscribe(onChannelClicked::emit) }; //2 -> ChannelStoreFragment.newInstance(); diff --git a/app/src/main/java/com/futo/platformplayer/views/segments/CommentsList.kt b/app/src/main/java/com/futo/platformplayer/views/segments/CommentsList.kt index 41c38b72..a729bd13 100644 --- a/app/src/main/java/com/futo/platformplayer/views/segments/CommentsList.kt +++ b/app/src/main/java/com/futo/platformplayer/views/segments/CommentsList.kt @@ -22,14 +22,20 @@ import com.futo.platformplayer.constructs.TaskHandler import com.futo.platformplayer.fragment.mainactivity.main.ChannelFragment import com.futo.platformplayer.views.adapters.CommentViewHolder import com.futo.platformplayer.views.adapters.InsertedViewAdapterWithLoader +import java.net.UnknownHostException class CommentsList : ConstraintLayout { private val _llmReplies: LinearLayoutManager; private val _taskLoadComments = if(!isInEditMode) TaskHandler IPager, IPager>(StateApp.instance.scopeGetter, { it(); }) .success { pager -> onCommentsLoaded(pager); } + .exception { + UIDialogs.toast("Failed to load comments"); + setLoading(false); + } .exception { - Logger.w(ChannelFragment.TAG, "Failed to load comments.", it); - UIDialogs.showGeneralRetryErrorDialog(context, it.message ?: "", it, ::fetchComments); + Logger.e(TAG, "Failed to load comments.", it); + UIDialogs.showGeneralRetryErrorDialog(context, "Failed to load comments. " + (it.message ?: ""), it, ::fetchComments); + setLoading(false); } else TaskHandler(IPlatformVideoDetails::class.java, StateApp.instance.scopeGetter); private var _nextPageHandler: TaskHandler, List> = TaskHandler, List>(StateApp.instance.scopeGetter, {