From f04ae6b09f9bea175a6d612b090aaa2af09ce18c Mon Sep 17 00:00:00 2001 From: Brian Isganitis Date: Thu, 21 Nov 2024 14:33:39 -0500 Subject: [PATCH] Fix LayoutTransition All Apps divider logic for RTL. We were checking the wrong index (off by one), leading to a crash if the divider is already in the Taskbar at the correct index. However, we do need to add it after the expected index if the divider isn't there, otherwise it will push the icon that is at that position to the right of the divider (it should be to the left). Flag: com.android.launcher3.taskbar_recents_layout_transition Bug: 343521765 Bug: 368522274 Test: go/testedequals Change-Id: I0263f704728286b53da5b45828784b20aaae31ce --- .../android/launcher3/taskbar/TaskbarView.java | 16 ++++++++++------ .../TaskbarViewWithLayoutTransitionTest.kt | 12 +++++++++++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index b609511160..7856c43a9c 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -501,16 +501,20 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar } private void updateAllAppsDivider() { - final int allAppsDividerIndex = - mIsRtl ? getChildCount() - mNumStaticViews : mNumStaticViews; - if (getChildAt(allAppsDividerIndex) == mTaskbarDividerContainer + // Index where All Apps divider would be if it is already in Taskbar. + final int expectedAllAppsDividerIndex = + mIsRtl ? getChildCount() - mNumStaticViews - 1 : mNumStaticViews; + if (getChildAt(expectedAllAppsDividerIndex) == mTaskbarDividerContainer && getChildCount() == mNumStaticViews + 1) { // Only static views with divider so remove divider. removeView(mTaskbarDividerContainer); - } else if (getChildAt(allAppsDividerIndex) != mTaskbarDividerContainer + } else if (getChildAt(expectedAllAppsDividerIndex) != mTaskbarDividerContainer && getChildCount() >= mNumStaticViews + 1) { - // Static views with at least one app icon so add divider. - addView(mTaskbarDividerContainer, allAppsDividerIndex); + // Static views with at least one app icon so add divider. For RTL, add it after the + // icon that is at the expected index. + addView( + mTaskbarDividerContainer, + mIsRtl ? expectedAllAppsDividerIndex + 1 : expectedAllAppsDividerIndex); } } diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewWithLayoutTransitionTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewWithLayoutTransitionTest.kt index 15ded8d5ea..78d8e5d70e 100644 --- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewWithLayoutTransitionTest.kt +++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewWithLayoutTransitionTest.kt @@ -84,7 +84,17 @@ class TaskbarViewWithLayoutTransitionTest { @Test @ForceRtl - fun testUpdateItems_rtl_addHotseatItem_updatesHotseat() { + fun testUpdateItems_rtl_addHotseatItemWithoutRecents_updatesHotseat() { + runOnMainSync { + taskbarView.updateItems(createHotseatItems(1), emptyList()) + taskbarView.updateItems(createHotseatItems(2), emptyList()) + } + assertThat(taskbarView).hasIconTypes(*HOTSEAT * 2, DIVIDER, ALL_APPS) + } + + @Test + @ForceRtl + fun testUpdateItems_rtl_addHotseatItemWithRecents_updatesHotseat() { runOnMainSync { taskbarView.updateItems(createHotseatItems(1), createRecents(1)) taskbarView.updateItems(createHotseatItems(2), createRecents(1))