package Ġcom . kir ich 1 4 0 9 . android . inject . d agger Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Factory Ċ import Ġjavax . inject . Provider Ċ Ċ /** Ċ Ġ* ĠImplementation Ġof Ġ[ Fragment Factory ] Ġthat Ġused Ġ[ D agger ĠMult ib ind ings ]( https :// d agger . dev / mult ib ind ings . html ) Ċ Ġ* Ġinto ĠMap Ġto Ġget ĠFragment Ġcre ators Ċ Ġ*/ Ċ class ĠInject Fragment Factory ( ĊĠĠĠ Ġprivate Ġval Ġproviders : ĠMap < String , ĠProvider < Fragment >> Ċ ) Ġ: ĠFragment Factory () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinstantiate ( class Loader : ĠClassLoader , ĠclassName : ĠString ): ĠFragment Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTry Ġto Ġfind ĠProvider Ġfor Ġa ĠFragment Ġwith Ġspecified Ġclass Ġname ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= Ġproviders [ className ] ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġprovider Ġwas Ġnot Ġfound Ġuse Ġsuper Ġfunction Ġto Ġcreate Ġfragment ĊĠĠĠĠĠĠĠ Ġ// Ġ( using ĠReflection Ġand Ġdefault Ġconstructor ) ĊĠĠĠĠĠĠĠ Ġif Ġ( provider Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" Can 't Ġfind ĠProvider Ġfor Ġ`$ className `. ĠFragment Ġwill Ġbe Ġcreated Ġusing ĠReflection ĠAPI .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . instantiate ( class Loader , ĠclassName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġnew ĠFragment Ġinstance ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Create Ġ`$ className ` Ġusing ĠD agger ") ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Inject Fragment Factory " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Name (" newInstance ") ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( providers : ĠMap < Class < out ĠFragment >, ĠProvider < Fragment >>) Ġ: ĠInject Fragment Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠInject Fragment Factory ( providers . map Keys Ġ{ Ġ( fragment Class , Ġ_) Ġ-> Ġfragment Class . name Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ