@@ -24,26 +24,29 @@ class EntityLoaderHelper(
24
24
detail : Detail ,
25
25
sessionDatum : EntityDatum ? ,
26
26
evalCtx : EvaluationContext ,
27
- inBackground : Boolean
27
+ inBackground : Boolean ,
28
+ var factory : NodeEntityFactory ? = null
28
29
) : Cancellable {
29
30
30
31
var focusTargetIndex: Int = - 1
31
32
private var stopLoading: Boolean = false
32
- var factory: NodeEntityFactory
33
33
34
34
init {
35
35
evalCtx.addFunctionHandler(EntitySelectActivity .getHereFunctionHandler())
36
- if (detail.shouldOptimize()) {
37
- val entityStorageCache: EntityStorageCache = CommCareEntityStorageCache (" case" )
38
- factory = AndroidAsyncNodeEntityFactory (detail, sessionDatum, evalCtx, entityStorageCache, inBackground)
39
- } else if (detail.useAsyncStrategy()) {
40
- // legacy cache and index
41
- val entityStorageCache: EntityStorageCache = CommCareEntityStorageCache (" case" )
42
- factory = AsyncNodeEntityFactory (detail, evalCtx, entityStorageCache, inBackground)
43
- } else {
44
- factory = NodeEntityFactory (detail, evalCtx)
45
- if (DeveloperPreferences .collectAndDisplayEntityTraces()) {
46
- factory.activateDebugTraceOutput()
36
+ if (factory == null ) {
37
+ if (detail.shouldOptimize()) {
38
+ val entityStorageCache: EntityStorageCache = CommCareEntityStorageCache (" case" )
39
+ factory =
40
+ AndroidAsyncNodeEntityFactory (detail, sessionDatum, evalCtx, entityStorageCache, inBackground)
41
+ } else if (detail.useAsyncStrategy()) {
42
+ // legacy cache and index
43
+ val entityStorageCache: EntityStorageCache = CommCareEntityStorageCache (" case" )
44
+ factory = AsyncNodeEntityFactory (detail, evalCtx, entityStorageCache, inBackground)
45
+ } else {
46
+ factory = NodeEntityFactory (detail, evalCtx)
47
+ if (DeveloperPreferences .collectAndDisplayEntityTraces()) {
48
+ factory!! .activateDebugTraceOutput()
49
+ }
47
50
}
48
51
}
49
52
}
@@ -60,11 +63,11 @@ class EntityLoaderHelper(
60
63
CommCareApplication .instance().currentApp.primeEntityCacheHelper.cancelWork()
61
64
}
62
65
try {
63
- val references = factory.expandReferenceList(nodeset)
66
+ val references = factory!! .expandReferenceList(nodeset)
64
67
val entities = loadEntitiesWithReferences(references, progressListener)
65
68
entities?.let {
66
- factory.prepareEntities(entities)
67
- factory.printAndClearTraces(" build" )
69
+ factory!! .prepareEntities(entities)
70
+ factory!! .printAndClearTraces(" build" )
68
71
return Pair <List <Entity <TreeReference >>, List <TreeReference >>(entities, references)
69
72
}
70
73
} finally {
@@ -80,14 +83,14 @@ class EntityLoaderHelper(
80
83
* Primes the entity cache
81
84
*/
82
85
fun cacheEntities (nodeset : TreeReference ): Pair <List <Entity <TreeReference >>, List<TreeReference>> {
83
- val references = factory.expandReferenceList(nodeset)
86
+ val references = factory!! .expandReferenceList(nodeset)
84
87
val entities = loadEntitiesWithReferences(references, null )
85
88
cacheEntities(entities)
86
89
return Pair <List <Entity <TreeReference >>, List <TreeReference >>(entities, references)
87
90
}
88
91
89
92
fun cacheEntities (entities : MutableList <Entity <TreeReference >>? ) {
90
- factory.cacheEntities(entities)
93
+ factory!! .cacheEntities(entities)
91
94
}
92
95
93
96
/* *
@@ -109,7 +112,7 @@ class EntityLoaderHelper(
109
112
if (stopLoading) {
110
113
return null
111
114
}
112
- val e = factory.getEntity(ref)
115
+ val e = factory!! .getEntity(ref)
113
116
if (e != null ) {
114
117
entities.add(e)
115
118
if (e.shouldReceiveFocus()) {
@@ -123,6 +126,6 @@ class EntityLoaderHelper(
123
126
124
127
override fun cancel () {
125
128
stopLoading = true
126
- factory.markAsCancelled()
129
+ factory!! .markAsCancelled()
127
130
}
128
131
}
0 commit comments