@@ -22,9 +22,14 @@ import android.content.Context
22
22
import android.net.Uri
23
23
import androidx.lifecycle.ViewModel
24
24
import androidx.lifecycle.ViewModelProvider
25
+ import androidx.work.Data
25
26
import androidx.work.OneTimeWorkRequest
27
+ // import androidx.work.OneTimeWorkRequest
28
+ import androidx.work.OneTimeWorkRequestBuilder
26
29
import androidx.work.WorkManager
27
30
import com.example.background.workers.BlurWorker
31
+ import com.example.background.workers.CleanupWorker
32
+ import com.example.background.workers.SaveImageToFileWorker
28
33
29
34
30
35
class BlurViewModel (application : Application ) : ViewModel() {
@@ -40,7 +45,33 @@ class BlurViewModel(application: Application) : ViewModel() {
40
45
* @param blurLevel The amount to blur the image
41
46
*/
42
47
internal fun applyBlur (blurLevel : Int ) {
43
- workManager.enqueue(OneTimeWorkRequest .from(BlurWorker ::class .java))
48
+ // workManager.enqueue(OneTimeWorkRequest.from(BlurWorker::class.java))
49
+
50
+ // add input and output
51
+ /* val blurRequest = OneTimeWorkRequestBuilder<BlurWorker>()
52
+ .setInputData(createInputDataForUri())
53
+ .build()
54
+
55
+ workManager.enqueue(blurRequest)*/
56
+
57
+ // chain your work
58
+ // add work request to clean up temporary images
59
+ var continuation = workManager
60
+ .beginWith(OneTimeWorkRequest .from(CleanupWorker ::class .java))
61
+ // add work request to blur the image the number of times requested
62
+ for (i in 0 until blurLevel) {
63
+ val blurBuilder = OneTimeWorkRequestBuilder <BlurWorker >()
64
+ if (i == 0 ) {
65
+ blurBuilder.setInputData(createInputDataForUri())
66
+ }
67
+ continuation = continuation.then(blurBuilder.build())
68
+ }
69
+ // add work request to save the image to the filesystem
70
+ val save = OneTimeWorkRequest .Builder (SaveImageToFileWorker ::class .java).build()
71
+ continuation = continuation.then(save)
72
+
73
+ // actually start the work
74
+ continuation.enqueue()
44
75
}
45
76
46
77
private fun uriOrNull (uriString : String? ): Uri ? {
@@ -64,6 +95,14 @@ class BlurViewModel(application: Application) : ViewModel() {
64
95
return imageUri
65
96
}
66
97
98
+ private fun createInputDataForUri () : Data {
99
+ val builder = Data .Builder ()
100
+ imageUri?.let {
101
+ builder.putString(KEY_IMAGE_URI , imageUri.toString())
102
+ }
103
+ return builder.build()
104
+ }
105
+
67
106
internal fun setOutputUri (outputImageUri : String? ) {
68
107
outputUri = uriOrNull(outputImageUri)
69
108
}
0 commit comments