From 3de48ba162fb2ff7fa8f43effdf55adcb2a4dec4 Mon Sep 17 00:00:00 2001 From: Amine Date: Sat, 3 Nov 2018 11:29:03 +0100 Subject: [PATCH] Some more background tasks. --- .../bou/readerforselfoss/HomeActivity.kt | 4 ++- .../readerforselfoss/background/background.kt | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt index 687f6a8..e79063f 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt @@ -26,6 +26,7 @@ import android.widget.Toast import androidx.room.Room import androidx.room.RoomDatabase import androidx.work.Constraints +import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder import androidx.work.WorkManager @@ -1412,7 +1413,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { .build() - WorkManager.getInstance().enqueue(backgroundWork) + WorkManager.getInstance().enqueueUniquePeriodicWork("selfoss-loading", ExistingPeriodicWorkPolicy.REPLACE, backgroundWork) + } } diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt index 009d7c4..7366045 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/background/background.kt @@ -15,10 +15,33 @@ import retrofit2.Call import retrofit2.Callback import retrofit2.Response import kotlin.concurrent.thread +import android.app.NotificationManager +import android.app.NotificationChannel +import android.util.Log +import androidx.core.app.NotificationCompat +import apps.amine.bou.readerforselfoss.R class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(context, params) { override fun doWork(): Result { + val notificationManager = + applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + + //If on Oreo then notification required a notification channel. + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + val channel = + NotificationChannel("default", "Default", NotificationManager.IMPORTANCE_DEFAULT) + notificationManager.createNotificationChannel(channel) + } + + val notification = NotificationCompat.Builder(applicationContext, "default") + .setContentTitle("Loading") + .setContentText("Loading new items") + .setOngoing(true) + .setSmallIcon(R.mipmap.ic_launcher) + + notificationManager.notify(1, notification.build()) + val settings = this.context.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE) val sharedPref = PreferenceManager.getDefaultSharedPreferences(this.context) val shouldLogEverything = sharedPref.getBoolean("should_log_everything", false) @@ -36,6 +59,7 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con ) api.allItems().enqueue(object : Callback> { override fun onFailure(call: Call>, t: Throwable) { + notificationManager.cancel(1) } override fun onResponse( @@ -49,6 +73,7 @@ class LoadingWorker(val context: Context, params: WorkerParameters) : Worker(con db.itemsDao() .insertAllItems(*(apiItems.map { it.toEntity() }).toTypedArray()) } + notificationManager.cancel(1) } } })