From fd13c2e2bc6ddac11e0ef110b68eb0ed856989eb Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Fri, 23 Oct 2015 12:57:17 +0200 Subject: [PATCH] Bug 1202753 - Tabs tray (Grid): Scroll to selected tab if it is not visible. r=margaret --HG-- extra : commitid : Cm97FTi6pCd extra : rebase_source : 94961d50ccf77ccfcb884df4f41ab1e970630224 extra : amend_source : eccc38963aa0244ed05eb11481fe06b603d837f8 --- mobile/android/base/tabs/TabsGridLayout.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mobile/android/base/tabs/TabsGridLayout.java b/mobile/android/base/tabs/TabsGridLayout.java index 6e6fdc002c9c..da6f81b86a0a 100644 --- a/mobile/android/base/tabs/TabsGridLayout.java +++ b/mobile/android/base/tabs/TabsGridLayout.java @@ -171,9 +171,15 @@ class TabsGridLayout extends GridView Tabs.registerOnTabsChangedListener(this); refreshTabsData(); - Tab currentlySelectedTab = Tabs.getInstance().getSelectedTab(); - if (lastSelectedTabId != currentlySelectedTab.getId()) { - smoothScrollToPosition(tabsAdapter.getPositionForTab(currentlySelectedTab)); + final Tab currentlySelectedTab = Tabs.getInstance().getSelectedTab(); + final int position = currentlySelectedTab != null ? tabsAdapter.getPositionForTab(currentlySelectedTab) : -1; + if (position != -1) { + final boolean selectionChanged = lastSelectedTabId != currentlySelectedTab.getId(); + final boolean positionIsVisible = position >= getFirstVisiblePosition() && position <= getLastVisiblePosition(); + + if (selectionChanged || !positionIsVisible) { + smoothScrollToPosition(position); + } } }