Skip to content

Commit

Permalink
[NavigationBarView] Update item pool to be the size of the menu
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 662183567
  • Loading branch information
imhappi committed Aug 13, 2024
1 parent cfef899 commit 5378d52
Showing 1 changed file with 18 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
import androidx.core.util.Pools;
import androidx.core.util.Pools.SynchronizedPool;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat;
import androidx.transition.AutoTransition;
Expand All @@ -63,19 +64,17 @@
*/
@RestrictTo(LIBRARY_GROUP)
public abstract class NavigationBarMenuView extends ViewGroup implements MenuView {
private static final int ITEM_POOL_SIZE = 7;
private static final int NO_PADDING = -1;

private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
private static final int[] DISABLED_STATE_SET = {-android.R.attr.state_enabled};

@Nullable private final TransitionSet set;
@NonNull private final OnClickListener onClickListener;
private final Pools.Pool<NavigationBarItemView> itemPool =
new Pools.SynchronizedPool<>(ITEM_POOL_SIZE);
@Nullable private Pools.Pool<NavigationBarItemView> itemPool;

@NonNull
private final SparseArray<OnTouchListener> onTouchListeners = new SparseArray<>(ITEM_POOL_SIZE);
private final SparseArray<OnTouchListener> onTouchListeners = new SparseArray<>();

@NavigationBarView.LabelVisibility private int labelVisibilityMode;

Expand All @@ -96,7 +95,7 @@ public abstract class NavigationBarMenuView extends ViewGroup implements MenuVie
@Nullable private ColorStateList itemRippleColor;
private int itemBackgroundRes;
@NonNull private final SparseArray<BadgeDrawable> badgeDrawables =
new SparseArray<>(ITEM_POOL_SIZE);
new SparseArray<>();
private int itemPaddingTop = NO_PADDING;
private int itemPaddingBottom = NO_PADDING;
private int itemActiveIndicatorLabelPadding = NO_PADDING;
Expand All @@ -118,6 +117,8 @@ public abstract class NavigationBarMenuView extends ViewGroup implements MenuVie
private MenuBuilder menu;
private boolean measurePaddingFromLabelBaseline;

private int itemPoolSize = 0;

public NavigationBarMenuView(@NonNull Context context) {
super(context);

Expand Down Expand Up @@ -866,7 +867,9 @@ public void buildMenuView() {
if (buttons != null) {
for (NavigationBarItemView item : buttons) {
if (item != null) {
itemPool.release(item);
if (itemPool != null) {
itemPool.release(item);
}
item.clear();
}
}
Expand All @@ -876,13 +879,19 @@ public void buildMenuView() {
selectedItemId = 0;
selectedItemPosition = 0;
buttons = null;
itemPool = null;
return;
}
if (itemPool == null || itemPoolSize != menu.size()) {
itemPool = new SynchronizedPool<>(menu.size());
itemPoolSize = menu.size();
}
removeUnusedBadges();

buttons = new NavigationBarItemView[menu.size()];
int menuSize = menu.size();
buttons = new NavigationBarItemView[menuSize];
boolean shifting = isShifting(labelVisibilityMode, menu.getVisibleItems().size());
for (int i = 0; i < menu.size(); i++) {
for (int i = 0; i < menuSize; i++) {
presenter.setUpdateSuspended(true);
menu.getItem(i).setCheckable(true);
presenter.setUpdateSuspended(false);
Expand Down Expand Up @@ -980,7 +989,7 @@ public void updateMenuView() {
}

private NavigationBarItemView getNewItem() {
NavigationBarItemView item = itemPool.acquire();
NavigationBarItemView item = itemPool != null ? itemPool.acquire() : null;
if (item == null) {
item = createNavigationBarItemView(getContext());
}
Expand Down

0 comments on commit 5378d52

Please sign in to comment.