Skip to content

Commit 23c0f6c

Browse files
authored
fix(android): optimize table and list view updates (#12405)
* sync for thread safety * amend table fireEvent * revert to basic optimization * reduce cache size * validate first visible view * amend activity validation * allow marker to fire on partially visible rows * implement noresults event for ListView Fixes TIMOB-28294, TIMOB-28308
1 parent 5bfa46a commit 23c0f6c

File tree

6 files changed

+177
-178
lines changed

6 files changed

+177
-178
lines changed

android/modules/ui/src/java/ti/modules/titanium/ui/TableViewRowProxy.java

+24-5
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,13 @@ public TiUIView createView(Activity activity)
113113
}
114114

115115
/**
116-
* Override fireEvent to inject row data into payload.
116+
* Handle event data to generate payload with table data.
117117
*
118118
* @param eventName Name of fired event.
119119
* @param data Data payload of fired event.
120-
* @param bubbles Specify if event should bubble up to parent.
121-
* @return
120+
* @return Object of payload.
122121
*/
123-
@Override
124-
publicbooleanfireEvent(StringeventName, Objectdata, booleanbubbles)
122+
privateObjecthandleEvent(StringeventName, Objectdata)
125123
{
126124
// Inject row data into events.
127125
finalTableViewProxytableViewProxy = getTableViewProxy();
@@ -145,8 +143,29 @@ public boolean fireEvent(String eventName, Object data, boolean bubbles)
145143
data = payload;
146144
}
147145

146+
returndata;
147+
}
148+
149+
/**
150+
* Override fireEvent to inject row data into payload.
151+
*
152+
* @param eventName Name of fired event.
153+
* @param data Data payload of fired event.
154+
* @param bubbles Specify if event should bubble up to parent.
155+
* @return
156+
*/
157+
@Override
158+
publicbooleanfireEvent(StringeventName, Objectdata, booleanbubbles)
159+
{
160+
data = handleEvent(eventName, data);
148161
returnsuper.fireEvent(eventName, data, bubbles);
149162
}
163+
@Override
164+
publicbooleanfireSyncEvent(StringeventName, Objectdata, booleanbubbles)
165+
{
166+
data = handleEvent(eventName, data);
167+
returnsuper.fireSyncEvent(eventName, data, bubbles);
168+
}
150169

151170
@Override
152171
publicStringgetApiName()

android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/ListItemProxy.java

+22-22
Original file line numberDiff line numberDiff line change
@@ -118,35 +118,14 @@ public TiUIView createView(Activity activity)
118118
returnnull;
119119
}
120120

121-
/**
122-
* Override fireEvent to inject ListItem data into payload.
123-
*
124-
* @param eventName Name of fired event.
125-
* @param data Data payload of fired event.
126-
* @param bubbles Specify if event should bubble up to parent.
127-
* @return
128-
*/
129-
@Override
130-
publicbooleanfireEvent(StringeventName, Objectdata, booleanbubbles)
131-
{
132-
data = handleFireEvent(eventName, data);
133-
returnsuper.fireEvent(eventName, data, bubbles);
134-
}
135-
@Override
136-
publicbooleanfireSyncEvent(StringeventName, Objectdata, booleanbubbles)
137-
{
138-
data = handleFireEvent(eventName, data);
139-
returnsuper.fireSyncEvent(eventName, data, bubbles);
140-
}
141-
142121
/**
143122
* Handle event payload manipulation.
144123
*
145124
* @param eventName Name of fired event.
146125
* @param data Data payload of fired event.
147126
* @return Object of event payload.
148127
*/
149-
publicObjecthandleFireEvent(StringeventName, Objectdata)
128+
publicObjecthandleEvent(StringeventName, Objectdata)
150129
{
151130
// Inject row data into events.
152131
finalListViewProxylistViewProxy = getListViewProxy();
@@ -203,6 +182,27 @@ public Object handleFireEvent(String eventName, Object data)
203182
returndata;
204183
}
205184

185+
/**
186+
* Override fireEvent to inject ListItem data into payload.
187+
*
188+
* @param eventName Name of fired event.
189+
* @param data Data payload of fired event.
190+
* @param bubbles Specify if event should bubble up to parent.
191+
* @return
192+
*/
193+
@Override
194+
publicbooleanfireEvent(StringeventName, Objectdata, booleanbubbles)
195+
{
196+
data = handleEvent(eventName, data);
197+
returnsuper.fireEvent(eventName, data, bubbles);
198+
}
199+
@Override
200+
publicbooleanfireSyncEvent(StringeventName, Objectdata, booleanbubbles)
201+
{
202+
data = handleEvent(eventName, data);
203+
returnsuper.fireSyncEvent(eventName, data, bubbles);
204+
}
205+
206206
/**
207207
* Generate views from specified template.
208208
*

android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/ListSectionProxy.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ private ListItemProxy processItem(Object object)
269269

270270
item.setParent(this);
271271
item.handleCreationDataItem(newKrollDict((HashMap) object));
272+
272273
returnitem;
273274

274275
} elseif (objectinstanceofListItemProxy) {
@@ -386,10 +387,11 @@ public void replaceItemsAt(int index, int count, Object dataItems,
386387
@Kroll.method
387388
publicvoidsetItems(ObjectdataItems, @Kroll.argument(optional = true) KrollDictanimation)
388389
{
390+
finalList<ListItemProxy> newItems = processItems(dataItems);
391+
389392
removeAllItems();
390393

391-
finalList<ListItemProxy> items = processItems(dataItems);
392-
this.items.addAll(items);
394+
this.items.addAll(newItems);
393395

394396
// Notify ListView of new items.
395397
update();

android/modules/ui/src/java/ti/modules/titanium/ui/widget/listview/ListViewProxy.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ public void handleMarker(ListItemProxy item)
458458
continue;
459459
}
460460
finalbooleanisVisible =
461-
layoutManager.isViewPartiallyVisible(markedItemView, true, true);
461+
layoutManager.isViewPartiallyVisible(markedItemView, false, true);
462462

463463
if (isVisible) {
464464
finalKrollDictdata = newKrollDict();

0 commit comments

Comments
 (0)
close