From d70aea312cd68271428f369a27e9ff296a98dc96 Mon Sep 17 00:00:00 2001 From: Ben Weiss Date: Fri, 22 Oct 2021 13:10:53 +0100 Subject: [PATCH] Update to 2.7.0 stable and target 31 --- .../com/example/background/FilterActivity.kt | 4 +-- .../com/example/background/FilterViewModel.kt | 3 +- .../workers/filters/BaseFilterWorker.kt | 34 +++++++++++++++---- WorkManagerSample/versions.gradle | 6 ++-- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/WorkManagerSample/app/src/main/java/com/example/background/FilterActivity.kt b/WorkManagerSample/app/src/main/java/com/example/background/FilterActivity.kt index 4060aa8d..e4154eee 100644 --- a/WorkManagerSample/app/src/main/java/com/example/background/FilterActivity.kt +++ b/WorkManagerSample/app/src/main/java/com/example/background/FilterActivity.kt @@ -75,9 +75,7 @@ class FilterActivity : AppCompatActivity() { output.setOnClickListener { if (outputImageUri != null) { val viewOutput = Intent(Intent.ACTION_VIEW, outputImageUri) - if (viewOutput.resolveActivity(packageManager) != null) { - startActivity(viewOutput) - } + startActivity(viewOutput) } } cancel.setOnClickListener { viewModel.cancel() } diff --git a/WorkManagerSample/app/src/main/java/com/example/background/FilterViewModel.kt b/WorkManagerSample/app/src/main/java/com/example/background/FilterViewModel.kt index 992220ec..2119a574 100644 --- a/WorkManagerSample/app/src/main/java/com/example/background/FilterViewModel.kt +++ b/WorkManagerSample/app/src/main/java/com/example/background/FilterViewModel.kt @@ -19,8 +19,6 @@ package com.example.background import android.app.Application import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.map -import androidx.work.WorkInfo import androidx.work.WorkManager /** @@ -48,6 +46,7 @@ class FilterViewModelFactory(private val application: Application) : ViewModelPr override fun create(modelClass: Class): T { return if (modelClass.isAssignableFrom(FilterViewModel::class.java)) { + @Suppress("UNCHECKED_CAST") FilterViewModel(application) as T } else { throw IllegalArgumentException("Unknown ViewModel class") diff --git a/WorkManagerSample/lib/src/main/java/com/example/background/workers/filters/BaseFilterWorker.kt b/WorkManagerSample/lib/src/main/java/com/example/background/workers/filters/BaseFilterWorker.kt index 3ba6755b..cf6d597b 100644 --- a/WorkManagerSample/lib/src/main/java/com/example/background/workers/filters/BaseFilterWorker.kt +++ b/WorkManagerSample/lib/src/main/java/com/example/background/workers/filters/BaseFilterWorker.kt @@ -16,14 +16,18 @@ package com.example.background.workers.filters -import android.app.NotificationManager +import android.app.ForegroundServiceStartNotAllowedException import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri import android.util.Log import androidx.annotation.VisibleForTesting -import androidx.work.* +import androidx.core.os.BuildCompat +import androidx.work.CoroutineWorker +import androidx.work.ForegroundInfo +import androidx.work.WorkerParameters +import androidx.work.workDataOf import com.example.background.Constants import com.example.background.library.R import com.example.background.workers.createNotification @@ -38,8 +42,8 @@ abstract class BaseFilterWorker(context: Context, parameters: WorkerParameters) CoroutineWorker(context, parameters) { override suspend fun doWork(): Result { - val resourceUri = inputData.getString(Constants.KEY_IMAGE_URI) ?: - throw IllegalArgumentException("Invalid input uri") + val resourceUri = inputData.getString(Constants.KEY_IMAGE_URI) + ?: throw IllegalArgumentException("Invalid input uri") return try { val inputStream = inputStreamFor(applicationContext, resourceUri) val bitmap = BitmapFactory.decodeStream(inputStream) @@ -50,6 +54,19 @@ abstract class BaseFilterWorker(context: Context, parameters: WorkerParameters) } catch (fileNotFoundException: FileNotFoundException) { Log.e(TAG, "Failed to decode input stream", fileNotFoundException) Result.failure() + } catch (e: IllegalStateException) { + // Check if this is a ForegroundServiceStartNotAllowedException and handle accordingly. + val isForegroundStartNotAllowed = + BuildCompat.isAtLeastS() && e is ForegroundServiceStartNotAllowedException + val logMessage = if (isForegroundStartNotAllowed) { + "Couldn't start a foreground service" + } else { + "An error occured" + } + Log.e(TAG, logMessage, e) + // TODO Handle depending on the Worker's use case. + // e.g. Batch long running work, clean up work or in this example fail the worker. + Result.failure() } catch (throwable: Throwable) { Log.e(TAG, "Error applying filter", throwable) Result.failure() @@ -95,13 +112,18 @@ abstract class BaseFilterWorker(context: Context, parameters: WorkerParameters) * Create ForegroundInfo required to run a Worker in a foreground service. */ override suspend fun getForegroundInfo(): ForegroundInfo { - return ForegroundInfo(NOTIFICATION_ID, createNotification(applicationContext, id, - applicationContext.getString(R.string.notification_title_filtering_image))) + return ForegroundInfo( + NOTIFICATION_ID, createNotification( + applicationContext, id, + applicationContext.getString(R.string.notification_title_filtering_image) + ) + ) } companion object { const val TAG = "BaseFilterWorker" const val ASSET_PREFIX = "file:///android_asset/" + // For a real world app you might want to use a different id for each Notification. const val NOTIFICATION_ID = 1 diff --git a/WorkManagerSample/versions.gradle b/WorkManagerSample/versions.gradle index e5cd59f3..66580305 100644 --- a/WorkManagerSample/versions.gradle +++ b/WorkManagerSample/versions.gradle @@ -62,13 +62,13 @@ versions.rxjava2 = "2.1.3" versions.timber = "4.7.1" versions.transition = "1.3.0" versions.truth = "1.0.1" -versions.work = "2.7.0-rc01" +versions.work = "2.7.0" ext.versions = versions def build_versions = [:] -build_versions.min_sdk = 21 +build_versions.min_sdk = 14 build_versions.compile_sdk = 31 -build_versions.target_sdk = 29 +build_versions.target_sdk = 31 build_versions.build_tools = "29.0.3" ext.build_versions = build_versions