Fix labels loading regression

DisplayResolveInfo#getDisplayLabel() internally loads the display label
if it is missing and a ResolveInfoPresentationGetter is set for the
instance.
Current view binding logic unconditionally calls getDisplayLabel method
which could trigger label resolution on the main thread and a
consequently scheduled label loading asynchronous task a no-op.

Test: manual functionality testing
Test: introduce artificial into LoadLabelTask, observe labels lading
asynchronously and does not reload when scrolling through a long list
of options.
Test: atest FrameworksCoreTests:ResolverActivityTest
Bug: 245934835

Change-Id: I392d6c8424617820bde58887d92ae99bc39c5b7b
This commit is contained in:
Andrey Epin
2022-10-20 20:43:37 -07:00
parent a04b35b697
commit 814b4dd00c

View File

@@ -647,15 +647,16 @@ public class ResolverListAdapter extends BaseAdapter {
if (info instanceof DisplayResolveInfo) {
DisplayResolveInfo dri = (DisplayResolveInfo) info;
boolean hasLabel = dri.hasDisplayLabel();
holder.bindLabel(
dri.getDisplayLabel(),
dri.getExtendedInfo(),
hasLabel && alwaysShowSubLabel());
holder.bindIcon(info);
if (!hasLabel) {
if (dri.hasDisplayLabel()) {
holder.bindLabel(
dri.getDisplayLabel(),
dri.getExtendedInfo(),
alwaysShowSubLabel());
} else {
holder.bindLabel("", "", false);
loadLabel(dri);
}
holder.bindIcon(info);
if (!dri.hasDisplayIcon()) {
loadIcon(dri);
}