Skip to content

Commit

Permalink
fix(android): optimize table and list view updates (#12405)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
build committed Jan 21, 2021
1 parent 5bfa46a commit 23c0f6c
Show file tree
Hide file tree
Showing 6 changed files with 177 additions and 178 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -113,15 +113,13 @@ public TiUIView createView(Activity activity)
}

/**
* Override fireEvent to inject row data into payload.
* Handle event data to generate payload with table data.
*
* @param eventName Name of fired event.
* @param data Data payload of fired event.
* @param bubbles Specify if event should bubble up to parent.
* @return
* @return Object of payload.
*/
@Override
public boolean fireEvent(String eventName, Object data, boolean bubbles)
private Object handleEvent(String eventName, Object data)
{
// Inject row data into events.
final TableViewProxy tableViewProxy = getTableViewProxy();
Expand All @@ -145,8 +143,29 @@ public boolean fireEvent(String eventName, Object data, boolean bubbles)
data = payload;
}

return data;
}

/**
* Override fireEvent to inject row data into payload.
*
* @param eventName Name of fired event.
* @param data Data payload of fired event.
* @param bubbles Specify if event should bubble up to parent.
* @return
*/
@Override
public boolean fireEvent(String eventName, Object data, boolean bubbles)
{
data = handleEvent(eventName, data);
return super.fireEvent(eventName, data, bubbles);
}
@Override
public boolean fireSyncEvent(String eventName, Object data, boolean bubbles)
{
data = handleEvent(eventName, data);
return super.fireSyncEvent(eventName, data, bubbles);
}

@Override
public String getApiName()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,35 +118,14 @@ public TiUIView createView(Activity activity)
return null;
}

/**
* Override fireEvent to inject ListItem data into payload.
*
* @param eventName Name of fired event.
* @param data Data payload of fired event.
* @param bubbles Specify if event should bubble up to parent.
* @return
*/
@Override
public boolean fireEvent(String eventName, Object data, boolean bubbles)
{
data = handleFireEvent(eventName, data);
return super.fireEvent(eventName, data, bubbles);
}
@Override
public boolean fireSyncEvent(String eventName, Object data, boolean bubbles)
{
data = handleFireEvent(eventName, data);
return super.fireSyncEvent(eventName, data, bubbles);
}

/**
* Handle event payload manipulation.
*
* @param eventName Name of fired event.
* @param data Data payload of fired event.
* @return Object of event payload.
*/
public Object handleFireEvent(String eventName, Object data)
public Object handleEvent(String eventName, Object data)
{
// Inject row data into events.
final ListViewProxy listViewProxy = getListViewProxy();
Expand Down Expand Up @@ -203,6 +182,27 @@ public Object handleFireEvent(String eventName, Object data)
return data;
}

/**
* Override fireEvent to inject ListItem data into payload.
*
* @param eventName Name of fired event.
* @param data Data payload of fired event.
* @param bubbles Specify if event should bubble up to parent.
* @return
*/
@Override
public boolean fireEvent(String eventName, Object data, boolean bubbles)
{
data = handleEvent(eventName, data);
return super.fireEvent(eventName, data, bubbles);
}
@Override
public boolean fireSyncEvent(String eventName, Object data, boolean bubbles)
{
data = handleEvent(eventName, data);
return super.fireSyncEvent(eventName, data, bubbles);
}

/**
* Generate views from specified template.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ private ListItemProxy processItem(Object object)

item.setParent(this);
item.handleCreationDataItem(new KrollDict((HashMap) object));

return item;

} else if (object instanceof ListItemProxy) {
Expand Down Expand Up @@ -386,10 +387,11 @@ public void replaceItemsAt(int index, int count, Object dataItems,
@Kroll.method
public void setItems(Object dataItems, @Kroll.argument(optional = true) KrollDict animation)
{
final List<ListItemProxy> newItems = processItems(dataItems);

removeAllItems();

final List<ListItemProxy> items = processItems(dataItems);
this.items.addAll(items);
this.items.addAll(newItems);

// Notify ListView of new items.
update();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ public void handleMarker(ListItemProxy item)
continue;
}
final boolean isVisible =
layoutManager.isViewPartiallyVisible(markedItemView, true, true);
layoutManager.isViewPartiallyVisible(markedItemView, false, true);

if (isVisible) {
final KrollDict data = new KrollDict();
Expand Down
Loading

0 comments on commit 23c0f6c

Please sign in to comment.