summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2022-04-27 22:11:17 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-04-27 22:11:17 +0000
commit30fdd9646cecbd47af35c5aa1fbc2672f03d0ff6 (patch)
treed5ab17971af67403747b21f43dfefb5ca1e1f30a
parent64bf097abca4538289eb205990df4d4e75b41338 (diff)
parent99157ead88379cb76bd0fe72e2c2dcd3582ab436 (diff)
Merge "Fix RTL changes in PagedTileLayout" into tm-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java48
2 files changed, 38 insertions, 12 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
index 3ae11ff28345..9c7411bf3649 100644
--- a/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
+++ b/packages/SystemUI/src/com/android/systemui/fragments/FragmentHostManager.java
@@ -54,7 +54,7 @@ public class FragmentHostManager {
private final View mRootView;
private final InterestingConfigChanges mConfigChanges = new InterestingConfigChanges(
ActivityInfo.CONFIG_FONT_SCALE | ActivityInfo.CONFIG_LOCALE
- | ActivityInfo.CONFIG_LAYOUT_DIRECTION | ActivityInfo.CONFIG_ASSETS_PATHS);
+ | ActivityInfo.CONFIG_ASSETS_PATHS);
private final FragmentService mManager;
private final ExtensionFragmentManager mPlugins = new ExtensionFragmentManager();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index 34f771ce0431..ce50ddff7b0f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
@@ -39,6 +39,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
private static final boolean DEBUG = false;
private static final String CURRENT_PAGE = "current_page";
+ private static final int NO_PAGE = -1;
private static final String TAG = "PagedTileLayout";
private static final int REVEAL_SCROLL_DURATION_MILLIS = 750;
@@ -109,13 +110,14 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
}
public void saveInstanceState(Bundle outState) {
- outState.putInt(CURRENT_PAGE, getCurrentItem());
+ int resolvedPage = mPageToRestore != NO_PAGE ? mPageToRestore : getCurrentPageNumber();
+ outState.putInt(CURRENT_PAGE, resolvedPage);
}
public void restoreInstanceState(Bundle savedInstanceState) {
// There's only 1 page at this point. We want to restore the correct page once the
// pages have been inflated
- mPageToRestore = savedInstanceState.getInt(CURRENT_PAGE, -1);
+ mPageToRestore = savedInstanceState.getInt(CURRENT_PAGE, NO_PAGE);
}
@Override
@@ -151,12 +153,15 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
@Override
public void onRtlPropertiesChanged(int layoutDirection) {
+ // The configuration change will change the flag in the view (that's returned in
+ // isLayoutRtl). As we detect the change, we use the cached direction to store the page
+ // before setting it.
+ final int page = getPageNumberForDirection(mLayoutDirection == LAYOUT_DIRECTION_RTL);
super.onRtlPropertiesChanged(layoutDirection);
if (mLayoutDirection != layoutDirection) {
mLayoutDirection = layoutDirection;
setAdapter(mAdapter);
- setCurrentItem(0, false);
- mPageToRestore = 0;
+ setCurrentItem(page, false);
}
}
@@ -172,8 +177,12 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
* Obtains the current page number respecting RTL
*/
private int getCurrentPageNumber() {
+ return getPageNumberForDirection(isLayoutRtl());
+ }
+
+ private int getPageNumberForDirection(boolean isLayoutRTL) {
int page = getCurrentItem();
- if (mLayoutDirection == LAYOUT_DIRECTION_RTL) {
+ if (isLayoutRTL) {
page = mPages.size() - 1 - page;
}
return page;
@@ -388,9 +397,9 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
mPageIndicator.setNumPages(mPages.size());
setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
- if (mPageToRestore != -1) {
+ if (mPageToRestore != NO_PAGE) {
setCurrentItem(mPageToRestore, false);
- mPageToRestore = -1;
+ mPageToRestore = NO_PAGE;
}
}
@@ -479,9 +488,27 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
maxHeight = height;
}
}
+ if (mPages.get(0).getParent() == null) {
+ // Measure page 0 so we know how tall it is if it's not attached to the pager.
+ mPages.get(0).measure(widthMeasureSpec, heightMeasureSpec);
+ int height = mPages.get(0).getMeasuredHeight();
+ if (height > maxHeight) {
+ maxHeight = height;
+ }
+ }
setMeasuredDimension(getMeasuredWidth(), maxHeight + getPaddingBottom());
}
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
+ if (mPages.get(0).getParent() == null) {
+ // Layout page 0, so we can get the bottom of the tiles. We only do this if the page
+ // is not attached.
+ mPages.get(0).layout(l, t, r, b);
+ }
+ }
+
public int getColumnCount() {
if (mPages.size() == 0) return 0;
return mPages.get(0).mColumns;
@@ -625,8 +652,7 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
if (mPageIndicator == null) return;
if (mPageListener != null) {
int pageNumber = isLayoutRtl() ? mPages.size() - 1 - position : position;
- mPageListener.onPageChanged(isLayoutRtl() ? position == mPages.size() - 1
- : position == 0, pageNumber);
+ mPageListener.onPageChanged(pageNumber == 0, pageNumber);
}
}
@@ -645,8 +671,8 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout {
mPageIndicator.setLocation(mPageIndicatorPosition);
if (mPageListener != null) {
int pageNumber = isLayoutRtl() ? mPages.size() - 1 - position : position;
- mPageListener.onPageChanged(positionOffsetPixels == 0 &&
- (isLayoutRtl() ? position == mPages.size() - 1 : position == 0),
+ mPageListener.onPageChanged(
+ positionOffsetPixels == 0 && pageNumber == 0,
// Send only valid page number on integer pages
positionOffsetPixels == 0 ? pageNumber : PageListener.INVALID_PAGE
);