Skip to content

Instantly share code, notes, and snippets.

@ubarua123
Created August 26, 2020 06:17
Show Gist options
  • Save ubarua123/362fd176a649a1d53efd1511c810f1be to your computer and use it in GitHub Desktop.
Save ubarua123/362fd176a649a1d53efd1511c810f1be to your computer and use it in GitHub Desktop.
WorkManager
class WorkManagerWorkFactory @Inject constructor(private val subComponentBuilder: WorkManagerFactorySubComponent.Builder) : WorkerFactory() {
override fun createWorker(appContext: Context, workerClassName: String, workerParameters: WorkerParameters): RxWorker? {
val workManagerFactorySubComponent = subComponentBuilder.parameters(workerParameters).build()
return createWorker(workerClassName, workManagerFactorySubComponent.workerMap)
}
private fun createWorker(workerClassName: String, workerMap: Map<Class<out RxWorker>, Provider<RxWorker>>): RxWorker {
// Get the worker class definition
val workerClass = Class.forName(workerClassName).asSubclass(RxWorker::class.java)
// Get the worker class instance
var provider = workerMap[workerClass]
if (provider == null) {
// Fetch the binding
for ((key, value) in workerMap) {
if (workerClass.isAssignableFrom(key)) {
provider = value
break
}
}
}
return requireNotNull(provider) { "Missing binding for " + workerClassName + ". Consider adding an entry in " + WorkerBindingModule::class.java.simpleName }.get()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment