Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(android): optimize list view updates #12363

Merged
merged 12 commits into from
Jan 21, 2021
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