intial structure

This commit is contained in:
Bnyro 2022-07-28 12:39:56 +02:00
parent 5698cfd07f
commit bbea1bed99
4 changed files with 127 additions and 1 deletions

View File

@ -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

View File

@ -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(

View File

@ -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())
}
}
}

View File

@ -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()
}
}