mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 23:40:33 +05:30
intial structure
This commit is contained in:
parent
5698cfd07f
commit
bbea1bed99
@ -68,6 +68,7 @@ dependencies {
|
||||
implementation libs.androidx.navigation.fragment
|
||||
implementation libs.androidx.navigation.ui
|
||||
implementation libs.androidx.preference
|
||||
implementation "androidx.work:work-runtime-ktx:2.7.1"
|
||||
|
||||
androidTestImplementation libs.androidx.test.junit
|
||||
androidTestImplementation libs.androidx.test.espressoCore
|
||||
|
@ -6,7 +6,16 @@ import android.app.NotificationManager
|
||||
import android.os.Build
|
||||
import android.os.StrictMode
|
||||
import android.os.StrictMode.VmPolicy
|
||||
import androidx.work.Constraints
|
||||
import androidx.work.ExistingPeriodicWorkPolicy
|
||||
import androidx.work.NetworkType
|
||||
import androidx.work.PeriodicWorkRequest
|
||||
import androidx.work.WorkManager
|
||||
import com.github.libretube.preferences.PreferenceHelper
|
||||
import com.github.libretube.util.NotificationHelper
|
||||
import com.github.libretube.util.NotificationWorker
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
|
||||
class MyApp : Application() {
|
||||
override fun onCreate() {
|
||||
@ -27,6 +36,11 @@ class MyApp : Application() {
|
||||
*/
|
||||
val builder = VmPolicy.Builder()
|
||||
StrictMode.setVmPolicy(builder.build())
|
||||
|
||||
/**
|
||||
* initialize the notification
|
||||
*/
|
||||
NotificationHelper.enqueueWork(this)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -36,7 +50,7 @@ class MyApp : Application() {
|
||||
createNotificationChannel(
|
||||
"download_service",
|
||||
"Download Service",
|
||||
"DownloadService",
|
||||
"Shows a notification when downloading media.",
|
||||
NotificationManager.IMPORTANCE_NONE
|
||||
)
|
||||
createNotificationChannel(
|
||||
@ -45,6 +59,12 @@ class MyApp : Application() {
|
||||
"Shows a notification with buttons to control the audio player",
|
||||
NotificationManager.IMPORTANCE_LOW
|
||||
)
|
||||
createNotificationChannel(
|
||||
"notification_worker",
|
||||
"Notification Worker",
|
||||
"Shows a notification when new streams are available.",
|
||||
NotificationManager.IMPORTANCE_DEFAULT
|
||||
)
|
||||
}
|
||||
|
||||
private fun createNotificationChannel(
|
||||
|
@ -0,0 +1,88 @@
|
||||
package com.github.libretube.util
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.work.Constraints
|
||||
import androidx.work.CoroutineWorker
|
||||
import androidx.work.ExistingPeriodicWorkPolicy
|
||||
import androidx.work.NetworkType
|
||||
import androidx.work.PeriodicWorkRequest
|
||||
import androidx.work.WorkManager
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.activities.MainActivity
|
||||
import com.github.libretube.obj.StreamItem
|
||||
import com.github.libretube.preferences.PreferenceHelper
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Deferred
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.stream.Stream
|
||||
|
||||
object NotificationHelper {
|
||||
fun enqueueWork(
|
||||
context: Context
|
||||
) {
|
||||
val constraints = Constraints.Builder()
|
||||
.setRequiredNetworkType(NetworkType.CONNECTED)
|
||||
.build()
|
||||
|
||||
val myWorkBuilder = PeriodicWorkRequest.Builder(
|
||||
NotificationWorker::class.java,
|
||||
1,
|
||||
TimeUnit.SECONDS
|
||||
)
|
||||
.setConstraints(constraints)
|
||||
|
||||
val myWork = myWorkBuilder.build()
|
||||
WorkManager.getInstance(context)
|
||||
.enqueueUniquePeriodicWork(
|
||||
"NotificationService",
|
||||
ExistingPeriodicWorkPolicy.REPLACE,
|
||||
myWork
|
||||
)
|
||||
}
|
||||
|
||||
fun checkForNewStreams(context: Context) {
|
||||
val token = PreferenceHelper.getToken()
|
||||
var response: List<StreamItem>
|
||||
runBlocking {
|
||||
val task = async {
|
||||
RetrofitInstance.authApi.getFeed(token)
|
||||
}
|
||||
response = task.await()
|
||||
}
|
||||
createNotification(
|
||||
context,
|
||||
response[0].title.toString(),
|
||||
response[0].uploaderName.toString()
|
||||
)
|
||||
}
|
||||
|
||||
fun createNotification(context: Context, title: String, description: String) {
|
||||
val intent = Intent(context, MainActivity::class.java).apply {
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||
}
|
||||
val pendingIntent: PendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
|
||||
|
||||
val builder = NotificationCompat.Builder(context, "notification_worker")
|
||||
.setContentTitle(title)
|
||||
.setSmallIcon(R.drawable.ic_bell)
|
||||
.setContentText(description)
|
||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||
// Set the intent that will fire when the user taps the notification
|
||||
.setContentIntent(pendingIntent)
|
||||
.setAutoCancel(true)
|
||||
with(NotificationManagerCompat.from(context)) {
|
||||
// notificationId is a unique int for each notification that you must define
|
||||
notify(2, builder.build())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.github.libretube.util
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import androidx.work.Worker
|
||||
import androidx.work.WorkerParameters
|
||||
|
||||
class NotificationWorker(appContext: Context, parameters: WorkerParameters) : Worker(appContext, parameters) {
|
||||
private val TAG = "NotificationWorker"
|
||||
|
||||
override fun doWork(): Result {
|
||||
Log.e(TAG, "working")
|
||||
NotificationHelper.checkForNewStreams(applicationContext)
|
||||
NotificationHelper.enqueueWork(applicationContext)
|
||||
return Result.success()
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user