package Ġcom . d roid af ric ana . move ery . di . worker factory Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work . List enable Worker Ċ import Ġandroidx . work . Worker Factory Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Provider Ċ Ċ /** Every Ġtime Ġa Ġnew Ġworker Ġis Ġrequested , Ġ[ Work Manager ] Ġwill Ġrequest Ġit Ġfrom Ġthis Ġclass */ Ċ class ĠMy Worker Factory Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġworker Factories : ĠMap < Class < out ĠList enable Worker >, Ġ@ Jvm Suppress W ild cards ĠProvider < Child Worker Factory >> Ċ ) Ġ: ĠWorker Factory () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Worker ( ĊĠĠĠĠĠĠĠ Ġapp Context : ĠContext , ĊĠĠĠĠĠĠĠ Ġworker ClassName : ĠString , ĊĠĠĠĠĠĠĠ Ġworker Parameters : ĠWorker Parameters ĊĠĠĠ Ġ): ĠList enable Worker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfound Entry Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworker Factories . entries . find Ġ{ ĠClass . forName ( worker ClassName ). isAssignableFrom ( it . key ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactory Provider Ġ= Ġfound Entry ?. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory Provider ?. get ()?. create ( app Context , Ġworker Parameters ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** A Ġfactory Ġfor Ġeach ĠWorker Ġthat Ġsupports Ġconstructor Ġinjection */ Ċ interface ĠChild Worker Factory Ġ{ ĊĠĠĠ Ġ/** Method Ġto Ġactually Ġcreate Ġthe Ġworker */ ĊĠĠĠ Ġfun Ġcreate ( app Context : ĠContext , Ġparams : ĠWorker Parameters ): ĠList enable Worker Ċ }