From 6b457d882c08a20daa135563f67e423c6485d045 Mon Sep 17 00:00:00 2001 From: Yanting Yang Date: Thu, 21 May 2020 18:09:36 +0800 Subject: [PATCH] Improve scrolling performance for App Info page Root cause: App info page will load application icon and content description in onBindViewHolder(), it will query PackageManager and UserManager many times in scrolling. Actually these actions will become time consuming if there is a large app list. Solution: To relieve the janky scrolling, cache the icon and content description if it has been loaded once. Bug: 156527207 Test: manual test and robotests Change-Id: I997179834511f86b3155c7d54989a873ac8e2559 --- .../manageapplications/ManageApplications.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 69f65a47316..5ef12329a54 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -119,7 +119,6 @@ import com.android.settings.widget.LoadingViewController; import com.android.settings.wifi.AppStateChangeWifiStateBridge; import com.android.settings.wifi.ChangeWifiStateDetails; import com.android.settingslib.HelpUtils; -import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppFilter; @@ -1462,12 +1461,10 @@ public class ManageApplications extends InstrumentedFragment ApplicationsState.AppEntry entry = mEntries.get(position); synchronized (entry) { holder.setTitle(entry.label); - holder.itemView.setContentDescription( - AppUtils.getAppContentDescription( - mContext, - entry.info.packageName, - UserHandle.getUserId(entry.info.uid))); - holder.setIcon(Utils.getBadgedIcon(mContext, entry.info)); + mState.ensureLabelDescription(entry); + holder.itemView.setContentDescription(entry.labelDescription); + mState.ensureIcon(entry); + holder.setIcon(entry.icon); updateSummary(holder, entry); updateSwitch(holder, entry); holder.updateDisableView(entry.info);