Skip to content

Instantly share code, notes, and snippets.

@bhavesh3005sharma
Last active August 24, 2022 11:11
Show Gist options
  • Save bhavesh3005sharma/6c286cad421c03095c19e72a8cd4d826 to your computer and use it in GitHub Desktop.
Save bhavesh3005sharma/6c286cad421c03095c19e72a8cd4d826 to your computer and use it in GitHub Desktop.
@AndroidEntryPoint
class SampleFragment : Fragment() {
@Inject lateinit var sampleWorker : SampleWorkerInterface
....
....
private fun sendData(input : String, onComplete: ((String?) -> Unit)?) {
sampleWorker.sendData(input) { responseString ->
// responseString : Workers' result
}
}
}
@HiltWorker
class SampleWorker @AssistedInject constructor(
@Assisted context: Context,
@Assisted params: WorkerParameters,
private val sampleRepository: SampleRepository
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
super.doWork()
var result = Result.failure()
....
....
return result
}
}
class SampleWorkerImp @Inject constructor(
private val workManager: WorkManager
) : SampleWorkerInterface {
override fun sendData( input : String, onComplete: ((String?) -> Unit)? ) {
OneTimeWorkRequest.Builder(SampleWorker::class.java).apply {
setConstraints(constraints.build())
setInputData(Data.Builder().apply {
putString("KEY_DATA", input)
}.build())
}.build().main {
workManager.enqueue(this)
with(workManager.getWorkInfoByIdLiveData(id)) {
observeForever(object : Observer<WorkInfo> {
override fun onChanged(work: WorkInfo) {
if (work.state == WorkInfo.State.SUCCEEDED
|| work.state == WorkInfo.State.FAILED
) {
onComplete?.invoke(
work.outputData.getString("KEY_OUTPUT_DATA")
)
removeObserver(this)
}
}
})
}
}
}
}
interface SampleWorkerInterface {
fun sendData(
input : String,
onComplete: ((String?) -> Unit)?
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment