Я создал файл AppGlideModule для Glide и заменяю реестр своим собственным ModelLoader и фабрикой.Тем не менее, передача экземпляра (GlideModel), для которого у меня есть ModelLoader, не загружает ModelLoader, о чем свидетельствуют операторы отладки / журнала, которые даже не затрагивают внутреннюю часть ModelLoader.Мои правила proguard просто
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep class com.bumptech.glide.GeneratedAppGlideModuleImpl
, и я могу подтвердить, что Glide работает и выполняет замену реестра в registerComponents.Добавление прослушивателя запросов к вызову glide также не дает исключения и не меняет уровень журнала отладки glide.
В AppGlideModule у меня есть:
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
val locallibFactory = LocallibFactory.Factory()
registry.replace(GlideModel::class.java, InputStream::class.java, locallibFactory)
}
LocallibFactory равен
internal class LocallibFactory : ModelLoader<GlideModel, InputStream> {
override fun handles(model: GlideModel): Boolean {
return true
}
override fun buildLoadData(
model: GlideModel,
width: Int,
height: Int,
options: Options
): ModelLoader.LoadData<InputStream>? {
val key = ObjectKey("${model.book.filePath}:${model.position}")
Timber.d("Got here")
return ModelLoader.LoadData(key, LocallibDataFetcher(model))
}
internal class Factory : ModelLoaderFactory<GlideModel, InputStream> {
override fun build(multiFactory: MultiModelLoaderFactory): ModelLoader<GlideModel, InputStream> {
Timber.d("Got here2")
return LocallibFactory()
}
override fun teardown() {
// Do nothing
}
}
}
Glide используется во фрагменте как
Glide.with(this)
.load(GlideModel(book, 0, true))
.into(card.imageView)
Но операторы журнала древесины никогда не выполняются, и отладка показывает, что он никогда не идет в LocallibFactory ModelLoader.Это не должно случиться с заменой.Почему это когда-нибудь случится и как я могу заставить ModelLoader на самом деле вызываться?