mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 16:00:31 +05:30
Open video when clicking feed notification
This commit is contained in:
parent
5f8e0e70d7
commit
38298d9e43
@ -8,6 +8,7 @@ import android.os.Build
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
|
import android.util.Log
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@ -31,6 +32,7 @@ import com.github.libretube.R
|
|||||||
import com.github.libretube.constants.IntentData
|
import com.github.libretube.constants.IntentData
|
||||||
import com.github.libretube.constants.PreferenceKeys
|
import com.github.libretube.constants.PreferenceKeys
|
||||||
import com.github.libretube.databinding.ActivityMainBinding
|
import com.github.libretube.databinding.ActivityMainBinding
|
||||||
|
import com.github.libretube.extensions.TAG
|
||||||
import com.github.libretube.extensions.toID
|
import com.github.libretube.extensions.toID
|
||||||
import com.github.libretube.services.ClosingService
|
import com.github.libretube.services.ClosingService
|
||||||
import com.github.libretube.ui.base.BaseActivity
|
import com.github.libretube.ui.base.BaseActivity
|
||||||
|
@ -4,6 +4,7 @@ import android.content.Context
|
|||||||
import androidx.work.Constraints
|
import androidx.work.Constraints
|
||||||
import androidx.work.ExistingPeriodicWorkPolicy
|
import androidx.work.ExistingPeriodicWorkPolicy
|
||||||
import androidx.work.NetworkType
|
import androidx.work.NetworkType
|
||||||
|
import androidx.work.OneTimeWorkRequest
|
||||||
import androidx.work.PeriodicWorkRequest
|
import androidx.work.PeriodicWorkRequest
|
||||||
import androidx.work.WorkManager
|
import androidx.work.WorkManager
|
||||||
import com.github.libretube.constants.NOTIFICATION_WORK_NAME
|
import com.github.libretube.constants.NOTIFICATION_WORK_NAME
|
||||||
@ -64,12 +65,22 @@ object NotificationHelper {
|
|||||||
.setConstraints(constraints)
|
.setConstraints(constraints)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
// enqueue the task
|
// enqueue the task to the work manager instance
|
||||||
WorkManager.getInstance(context)
|
WorkManager.getInstance(context)
|
||||||
.enqueueUniquePeriodicWork(
|
.enqueueUniquePeriodicWork(
|
||||||
NOTIFICATION_WORK_NAME,
|
NOTIFICATION_WORK_NAME,
|
||||||
existingPeriodicWorkPolicy,
|
existingPeriodicWorkPolicy,
|
||||||
notificationWorker
|
notificationWorker
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// for testing the notifications by the work manager
|
||||||
|
/*
|
||||||
|
WorkManager.getInstance(context)
|
||||||
|
.enqueue(
|
||||||
|
OneTimeWorkRequest.Builder(NotificationWorker::class.java)
|
||||||
|
.setConstraints(constraints)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,14 +5,17 @@ import android.app.PendingIntent
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import android.util.Log
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.app.NotificationManagerCompat
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.work.Worker
|
import androidx.work.Worker
|
||||||
import androidx.work.WorkerParameters
|
import androidx.work.WorkerParameters
|
||||||
import com.github.libretube.R
|
import com.github.libretube.R
|
||||||
import com.github.libretube.api.SubscriptionHelper
|
import com.github.libretube.api.SubscriptionHelper
|
||||||
|
import com.github.libretube.constants.IntentData
|
||||||
import com.github.libretube.constants.PUSH_CHANNEL_ID
|
import com.github.libretube.constants.PUSH_CHANNEL_ID
|
||||||
import com.github.libretube.constants.PreferenceKeys
|
import com.github.libretube.constants.PreferenceKeys
|
||||||
|
import com.github.libretube.extensions.TAG
|
||||||
import com.github.libretube.extensions.filterUntil
|
import com.github.libretube.extensions.filterUntil
|
||||||
import com.github.libretube.extensions.toID
|
import com.github.libretube.extensions.toID
|
||||||
import com.github.libretube.ui.activities.MainActivity
|
import com.github.libretube.ui.activities.MainActivity
|
||||||
@ -81,6 +84,8 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
|
|||||||
private fun checkForNewStreams(): Boolean {
|
private fun checkForNewStreams(): Boolean {
|
||||||
var success = true
|
var success = true
|
||||||
|
|
||||||
|
Log.d(TAG(), "Work manager started")
|
||||||
|
|
||||||
runBlocking {
|
runBlocking {
|
||||||
// fetch the users feed
|
// fetch the users feed
|
||||||
val videoFeed = try {
|
val videoFeed = try {
|
||||||
@ -118,11 +123,14 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
|
|||||||
// group the new streams by the uploader
|
// group the new streams by the uploader
|
||||||
val channelGroups = filteredVideos.groupBy { it.uploaderUrl }
|
val channelGroups = filteredVideos.groupBy { it.uploaderUrl }
|
||||||
|
|
||||||
|
Log.d(TAG(), "Create notifications for new videos")
|
||||||
|
|
||||||
// create a notification for each new stream
|
// create a notification for each new stream
|
||||||
channelGroups.forEach { (_, streams) ->
|
channelGroups.forEach { (_, streams) ->
|
||||||
createNotification(
|
createNotification(
|
||||||
group = streams.first().uploaderUrl!!.toID(),
|
group = streams.first().uploaderUrl!!.toID(),
|
||||||
title = streams.first().uploaderName.toString(),
|
title = streams.first().uploaderName.toString(),
|
||||||
|
urlPath = streams.first().uploaderUrl!!,
|
||||||
isGroupSummary = true
|
isGroupSummary = true
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -130,6 +138,7 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
|
|||||||
createNotification(
|
createNotification(
|
||||||
title = streamItem.title.toString(),
|
title = streamItem.title.toString(),
|
||||||
description = streamItem.uploaderName.toString(),
|
description = streamItem.uploaderName.toString(),
|
||||||
|
urlPath = streamItem.url!!,
|
||||||
group = streamItem.uploaderUrl!!.toID()
|
group = streamItem.uploaderUrl!!.toID()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -147,19 +156,24 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
|
|||||||
private fun createNotification(
|
private fun createNotification(
|
||||||
title: String,
|
title: String,
|
||||||
group: String,
|
group: String,
|
||||||
|
urlPath: String,
|
||||||
description: String? = null,
|
description: String? = null,
|
||||||
isGroupSummary: Boolean = false
|
isGroupSummary: Boolean = false
|
||||||
) {
|
) {
|
||||||
// increase the notification ID to guarantee uniqueness
|
// increase the notification ID to guarantee uniqueness
|
||||||
notificationId += 1
|
notificationId += 1
|
||||||
|
|
||||||
|
val intent = Intent(applicationContext, MainActivity::class.java).apply {
|
||||||
|
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||||
|
if (isGroupSummary) putExtra(IntentData.channelId, urlPath.toID())
|
||||||
|
else putExtra(IntentData.videoId, urlPath.toID())
|
||||||
|
}
|
||||||
|
|
||||||
val pendingIntent: PendingIntent = PendingIntent.getActivity(
|
val pendingIntent: PendingIntent = PendingIntent.getActivity(
|
||||||
applicationContext,
|
applicationContext,
|
||||||
0,
|
notificationId,
|
||||||
Intent(applicationContext, MainActivity::class.java).apply {
|
intent,
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
|
||||||
},
|
|
||||||
PendingIntent.FLAG_IMMUTABLE
|
|
||||||
)
|
)
|
||||||
|
|
||||||
val builder = NotificationCompat.Builder(applicationContext, PUSH_CHANNEL_ID)
|
val builder = NotificationCompat.Builder(applicationContext, PUSH_CHANNEL_ID)
|
||||||
@ -167,7 +181,7 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
|
|||||||
.setGroup(group)
|
.setGroup(group)
|
||||||
.setSmallIcon(R.drawable.ic_launcher_lockscreen)
|
.setSmallIcon(R.drawable.ic_launcher_lockscreen)
|
||||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
// Set the intent that will fire when the user taps the notification
|
// The intent that will fire when the user taps the notification
|
||||||
.setContentIntent(pendingIntent)
|
.setContentIntent(pendingIntent)
|
||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
|
|
||||||
@ -177,7 +191,7 @@ class NotificationWorker(appContext: Context, parameters: WorkerParameters) :
|
|||||||
builder.setContentText(description)
|
builder.setContentText(description)
|
||||||
}
|
}
|
||||||
|
|
||||||
// notificationId is a unique int for each notification that you must define
|
// [notificationId] is a unique int for each notification that you must define
|
||||||
notificationManager.notify(notificationId, builder.build())
|
notificationManager.notify(notificationId, builder.build())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user