From 19f65255461d1ae186f257f859af0bbe0aeeae02 Mon Sep 17 00:00:00 2001 From: Holly Sun Date: Wed, 2 Aug 2023 16:01:49 -0700 Subject: [PATCH] Refresh `mNumAppsPerRowAllApps` when device profile changes. The return value of SrollableLayoutManager#getItemsHeight is wrong, which is caused by the return value of `incrementTotalHeight` (https://source.corp.google.com/h/googleplex-android/platform/superproject/main/+/main:packages/apps/Launcher3/src/com/android/launcher3/util/ScrollableLayoutManager.java;l=151-163). In AllAppsGridAdapter#incrementTotalHeight (https://source.corp.google.com/h/googleplex-android/platform/superproject/main/+/main:packages/apps/Launcher3/src/com/android/launcher3/allapps/AllAppsGridAdapter.java;l=172), `item.rowAppIndex` is still the staled value after app grid change / device fold & unfold. This value is calculated in AlphabeticalAppsList (https://source.corp.google.com/h/googleplex-android/platform/superproject/main/+/main:packages/apps/Launcher3/src/com/android/launcher3/allapps/AlphabeticalAppsList.java;l=276-280). The mod `mNumAppsPerRowAllApps` is staled. So add an setter in `AlphabeticalAppsList` to update `mNumAppsPerRowAllApps`. Bug: 262003765 Bug: 284940820 Test: manual Flag: N/A Change-Id: I74a99a3dc58ee45f066bcefb3e9c56be02b62f82 --- .../launcher3/allapps/ActivityAllAppsContainerView.java | 1 + .../android/launcher3/allapps/AlphabeticalAppsList.java | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index 82ed9621dd..40382b2a45 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -934,6 +934,7 @@ public class ActivityAllAppsContainerView public void onDeviceProfileChanged(DeviceProfile dp) { for (AdapterHolder holder : mAH) { holder.mAdapter.setAppsPerRow(dp.numShownAllAppsColumns); + holder.mAppsList.setNumAppsPerRowAllApps(dp.numShownAllAppsColumns); if (holder.mRecyclerView != null) { // Remove all views and clear the pool, while keeping the data same. After this // call, all the viewHolders will be recreated. diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java index 0657178ad5..ee4b5bc5f9 100644 --- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java +++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java @@ -82,7 +82,7 @@ public class AlphabeticalAppsList implement private final ArrayList mSearchResults = new ArrayList<>(); private BaseAllAppsAdapter mAdapter; private AppInfoComparator mAppNameComparator; - private final int mNumAppsPerRowAllApps; + private int mNumAppsPerRowAllApps; private int mNumAppRowsInAdapter; private Predicate mItemFilter; @@ -92,12 +92,17 @@ public class AlphabeticalAppsList implement mActivityContext = ActivityContext.lookupContext(context); mAppNameComparator = new AppInfoComparator(context); mWorkProviderManager = workProfileManager; - mNumAppsPerRowAllApps = mActivityContext.getDeviceProfile().inv.numAllAppsColumns; + mNumAppsPerRowAllApps = mActivityContext.getDeviceProfile().numShownAllAppsColumns; if (mAllAppsStore != null) { mAllAppsStore.addUpdateListener(this); } } + /** Set the number of apps per row when device profile changes. */ + public void setNumAppsPerRowAllApps(int numAppsPerRow) { + mNumAppsPerRowAllApps = numAppsPerRow; + } + public void updateItemFilter(Predicate itemFilter) { this.mItemFilter = itemFilter; onAppsUpdated();