From 199f860b709ea2cc362f2a752fe7a03c8a93da4c Mon Sep 17 00:00:00 2001 From: Brian Isganitis Date: Tue, 19 Nov 2024 18:15:46 -0500 Subject: [PATCH] Split up hotseat and recents into two methods. To support RTL with recents, will need to support calling updateRecents before updateHotseatItems. Splitting into two methods makes this doable. Test: go/testedequals Flag: EXEMPT refactor Bug: 343521765, 368522274 Change-Id: I8756ea23fff1606ef4ab9f72d18dd4b21f135b25 --- .../launcher3/taskbar/TaskbarView.java | 90 ++++++++++--------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index a7275ca407..360f5c5891 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -112,6 +112,8 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar // Only non-null when device supports having a Taskbar Overflow button. @Nullable private TaskbarOverflowView mTaskbarOverflowView; + private int mNextViewIndex; + /** * Whether the divider is between Hotseat icons and Recents, * instead of between All Apps button and Hotseat. @@ -375,8 +377,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar // TODO(b/343289567 and b/316004172): support app pairs and desktop mode. recentTasks = recentTasks.stream().filter(not(GroupTask::supportsMultipleTasks)).toList(); - int nextViewIndex = 0; - int numViewsAnimated = 0; + mNextViewIndex = 0; mAddedDividerForRecents = false; removeView(mAllAppsButtonContainer); @@ -389,7 +390,40 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar } removeView(mQsb); - // Add Hotseat icons. + updateHotseatItems(hotseatItemInfos); + + if (mTaskbarDividerContainer != null && !recentTasks.isEmpty()) { + addView(mTaskbarDividerContainer, mNextViewIndex++); + mAddedDividerForRecents = true; + } + + updateRecents(recentTasks); + + // Remove remaining views + while (mNextViewIndex < getChildCount()) { + removeAndRecycle(getChildAt(mNextViewIndex)); + } + + addView(mAllAppsButtonContainer, mIsRtl ? hotseatItemInfos.length : 0); + + // If there are no recent tasks, add divider after All Apps (unless it's the only view). + if (!mAddedDividerForRecents + && mTaskbarDividerContainer != null + && getChildCount() > 1) { + addView(mTaskbarDividerContainer, mIsRtl ? (getChildCount() - 1) : 1); + } + + + if (mActivityContext.getDeviceProfile().isQsbInline) { + addView(mQsb, mIsRtl ? getChildCount() : 0); + // Always set QSB to invisible after re-adding. + mQsb.setVisibility(View.INVISIBLE); + } + } + + private void updateHotseatItems(ItemInfo[] hotseatItemInfos) { + int numViewsAnimated = 0; + for (ItemInfo hotseatItemInfo : hotseatItemInfos) { // Replace any Hotseat views with the appropriate type if it's not already that type. final int expectedLayoutResId; @@ -406,8 +440,8 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar } View hotseatView = null; - while (nextViewIndex < getChildCount()) { - hotseatView = getChildAt(nextViewIndex); + while (mNextViewIndex < getChildCount()) { + hotseatView = getChildAt(mNextViewIndex); // see if the view can be reused if ((hotseatView.getSourceLayoutResId() != expectedLayoutResId) @@ -448,7 +482,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar } LayoutParams lp = new LayoutParams(mIconTouchSize, mIconTouchSize); hotseatView.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding); - addView(hotseatView, nextViewIndex, lp); + addView(hotseatView, mNextViewIndex, lp); } // Apply the Hotseat ItemInfos, or hide the view if there is none for a given index. @@ -464,14 +498,11 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar if (enableCursorHoverStates()) { setHoverListenerForIcon(hotseatView); } - nextViewIndex++; - } - - if (mTaskbarDividerContainer != null && !recentTasks.isEmpty()) { - addView(mTaskbarDividerContainer, nextViewIndex++); - mAddedDividerForRecents = true; + mNextViewIndex++; } + } + private void updateRecents(List recentTasks) { // At this point, the all apps button has not been added as a child view, but needs to be // accounted for when comparing current icon count to max number of icons. int nonTaskIconsToBeAdded = 1; @@ -479,11 +510,11 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar boolean supportsOverflow = Flags.taskbarOverflow(); int overflowSize = 0; if (supportsOverflow) { - mIdealNumIcons = nextViewIndex + recentTasks.size() + nonTaskIconsToBeAdded; + mIdealNumIcons = mNextViewIndex + recentTasks.size() + nonTaskIconsToBeAdded; overflowSize = mIdealNumIcons - mMaxNumIcons; if (overflowSize > 0 && mTaskbarOverflowView != null) { - addView(mTaskbarOverflowView, nextViewIndex++); + addView(mTaskbarOverflowView, mNextViewIndex++); } else if (mTaskbarOverflowView != null) { mTaskbarOverflowView.clearItems(); } @@ -495,7 +526,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar final int itemsToAddToOverflow = (overflowSize > 0) ? Math.min(overflowSize + 1, recentTasks.size()) : 0; if (overflowSize > 0) { - overflownTasks = new ArrayList(itemsToAddToOverflow); + overflownTasks = new ArrayList<>(itemsToAddToOverflow); } // Add Recent/Running icons. @@ -527,8 +558,8 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar } View recentIcon = null; - while (nextViewIndex < getChildCount()) { - recentIcon = getChildAt(nextViewIndex); + while (mNextViewIndex < getChildCount()) { + recentIcon = getChildAt(mNextViewIndex); // see if the view can be reused if ((recentIcon.getSourceLayoutResId() != expectedLayoutResId) @@ -546,7 +577,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar recentIcon = inflate(expectedLayoutResId); LayoutParams lp = new LayoutParams(mIconTouchSize, mIconTouchSize); recentIcon.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding); - addView(recentIcon, nextViewIndex, lp); + addView(recentIcon, mNextViewIndex, lp); } if (recentIcon instanceof BubbleTextView btv) { @@ -556,28 +587,7 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar if (enableCursorHoverStates()) { setHoverListenerForIcon(recentIcon); } - nextViewIndex++; - } - - // Remove remaining views - while (nextViewIndex < getChildCount()) { - removeAndRecycle(getChildAt(nextViewIndex)); - } - - addView(mAllAppsButtonContainer, mIsRtl ? hotseatItemInfos.length : 0); - - // If there are no recent tasks, add divider after All Apps (unless it's the only view). - if (!mAddedDividerForRecents - && mTaskbarDividerContainer != null - && getChildCount() > 1) { - addView(mTaskbarDividerContainer, mIsRtl ? (getChildCount() - 1) : 1); - } - - - if (mActivityContext.getDeviceProfile().isQsbInline) { - addView(mQsb, mIsRtl ? getChildCount() : 0); - // Always set QSB to invisible after re-adding. - mQsb.setVisibility(View.INVISIBLE); + mNextViewIndex++; } }