diff --git a/WorkManagerSample/app/build.gradle b/WorkManagerSample/app/build.gradle index 1152d220..c1ad6ab4 100644 --- a/WorkManagerSample/app/build.gradle +++ b/WorkManagerSample/app/build.gradle @@ -26,7 +26,7 @@ android { useSupportLibrary true } // Switching to Renderscript support provided by framework. - minSdkVersion 18 + minSdkVersion build_versions.min_sdk targetSdkVersion build_versions.target_sdk versionCode 1 versionName "1.0" diff --git a/WorkManagerSample/app/src/main/AndroidManifest.xml b/WorkManagerSample/app/src/main/AndroidManifest.xml index f7a9e7d2..d00c8a31 100644 --- a/WorkManagerSample/app/src/main/AndroidManifest.xml +++ b/WorkManagerSample/app/src/main/AndroidManifest.xml @@ -33,13 +33,18 @@ android:theme="@style/AppTheme"> + tools:targetApi="n" + tools:node="merge"> + + 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 95b2a207..4e9b8131 100644 --- a/WorkManagerSample/app/src/main/java/com/example/background/FilterActivity.kt +++ b/WorkManagerSample/app/src/main/java/com/example/background/FilterActivity.kt @@ -40,7 +40,7 @@ class FilterActivity : AppCompatActivity() { setContentView(root) bindViews(this) // Check to see if we have output. - viewModel.workInfo.observe(this@FilterActivity) { info -> + viewModel.workInfo?.observe(this@FilterActivity) { info -> onStateChange(info, this) } } 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 19d8de5d..a8dafd51 100644 --- a/WorkManagerSample/app/src/main/java/com/example/background/FilterViewModel.kt +++ b/WorkManagerSample/app/src/main/java/com/example/background/FilterViewModel.kt @@ -32,7 +32,11 @@ class FilterViewModel(application: Application) : ViewModel() { private val workManager = WorkManager.getInstance(application) internal val workInfo = - workManager.getWorkInfosByTagLiveData(Constants.TAG_OUTPUT).map { it[0] } + workManager.getWorkInfosByTagLiveData(Constants.TAG_OUTPUT).takeIf { + it.value != null + }?.map { + it[0] + } internal fun apply(imageOperations: ImageOperations) { imageOperations.continuation.enqueue() diff --git a/WorkManagerSample/lib/build.gradle b/WorkManagerSample/lib/build.gradle index e7016717..7feec749 100644 --- a/WorkManagerSample/lib/build.gradle +++ b/WorkManagerSample/lib/build.gradle @@ -26,7 +26,7 @@ android { useSupportLibrary true } // Switching to Renderscript support provided by framework. - minSdkVersion 18 + minSdkVersion build_versions.min_sdk targetSdkVersion build_versions.target_sdk versionCode 1 versionName "1.0" diff --git a/WorkManagerSample/lib/src/main/java/com/example/background/ImageOperations.kt b/WorkManagerSample/lib/src/main/java/com/example/background/ImageOperations.kt index 4e3fc48b..c0143d65 100644 --- a/WorkManagerSample/lib/src/main/java/com/example/background/ImageOperations.kt +++ b/WorkManagerSample/lib/src/main/java/com/example/background/ImageOperations.kt @@ -19,14 +19,7 @@ package com.example.background import android.annotation.SuppressLint import android.content.Context import android.net.Uri -import androidx.work.Data -import androidx.work.ExistingWorkPolicy -import androidx.work.ListenableWorker -import androidx.work.OneTimeWorkRequest -import androidx.work.OneTimeWorkRequestBuilder -import androidx.work.WorkContinuation -import androidx.work.WorkManager -import androidx.work.workDataOf +import androidx.work.* import com.example.background.workers.CleanupWorker import com.example.background.workers.SaveImageToGalleryWorker import com.example.background.workers.UploadWorker @@ -90,6 +83,7 @@ class ImageOperations( ) = OneTimeWorkRequestBuilder().apply { setInputData(inputData) + setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) if (!tag.isNullOrEmpty()) { addTag(tag) } 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 2d538317..4ad0ff86 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 @@ -31,11 +31,7 @@ import android.util.Log import androidx.annotation.StringRes import androidx.annotation.VisibleForTesting import androidx.core.app.NotificationCompat.Builder -import androidx.work.CoroutineWorker -import androidx.work.ForegroundInfo -import androidx.work.WorkManager -import androidx.work.WorkerParameters -import androidx.work.workDataOf +import androidx.work.* import com.example.background.Constants import com.example.background.library.R import java.io.File @@ -55,7 +51,6 @@ abstract class BaseFilterWorker(context: Context, parameters: WorkerParameters) val resourceUri = inputData.getString(Constants.KEY_IMAGE_URI) ?: throw IllegalArgumentException("Invalid input uri") return try { - setForeground(createForegroundInfo()) val inputStream = inputStreamFor(applicationContext, resourceUri) val bitmap = BitmapFactory.decodeStream(inputStream) val output = applyFilter(bitmap) @@ -109,7 +104,7 @@ abstract class BaseFilterWorker(context: Context, parameters: WorkerParameters) /** * Create ForegroundInfo required to run a Worker in a foreground service. */ - private fun createForegroundInfo(): ForegroundInfo { + override suspend fun getForegroundInfo(): ForegroundInfo { // For a real world app you might want to use a different id for each Notification. val notificationId = 1 return ForegroundInfo(notificationId, createNotification()) diff --git a/WorkManagerSample/versions.gradle b/WorkManagerSample/versions.gradle index ecb4df3d..0d346174 100644 --- a/WorkManagerSample/versions.gradle +++ b/WorkManagerSample/versions.gradle @@ -62,12 +62,12 @@ versions.rxjava2 = "2.1.3" versions.timber = "4.7.1" versions.transition = "1.3.0" versions.truth = "1.0.1" -versions.work = "2.4.0" +versions.work = "2.7.0-beta01" ext.versions = versions def build_versions = [:] -build_versions.min_sdk = 14 -build_versions.compile_sdk = 29 +build_versions.min_sdk = 21 +build_versions.compile_sdk = 'android-S' build_versions.target_sdk = 29 build_versions.build_tools = "29.0.3" ext.build_versions = build_versions