diff options
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java')
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java | 51 |
1 files changed, 17 insertions, 34 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java index 1af400b3..a20c9523 100644 --- a/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java +++ b/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java @@ -17,27 +17,20 @@ package com.android.packageinstaller.permission.ui; import android.content.Context; import android.util.AttributeSet; -import android.widget.FrameLayout; +import android.view.View; +import android.view.ViewGroup; -/** - * Allows one standard layout pass, but afterwards holds getMeasuredHeight constant, - * however still allows drawing larger at the size needed by its children. This allows - * a dialog to tell the window the height is constant (with keeps its position constant) - * but allows the view to grow downwards for animation. - */ -public class ManualLayoutFrame extends FrameLayout { - private int mDesiredHeight; - private int mHeight; +public class ManualLayoutFrame extends ViewGroup { + private int mContentBottom; private int mWidth; public ManualLayoutFrame(Context context, AttributeSet attrs) { super(context, attrs); - setClipChildren(false); - setClipToPadding(false); } - public int getLayoutHeight() { - return mDesiredHeight; + public void onConfigurationChanged() { + mContentBottom = 0; + mWidth = 0; } @Override @@ -53,38 +46,28 @@ public class ManualLayoutFrame extends FrameLayout { newWidth = MeasureSpec.getSize(widthMeasureSpec); } break; } - // If the width changes we have to re-evaluate the height if (newWidth != mWidth) { mWidth = newWidth; - mHeight = 0; } widthMeasureSpec = MeasureSpec.makeMeasureSpec(mWidth, MeasureSpec.EXACTLY); } - - // Let the content measure how much it needs to be fully shown - heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - - mDesiredHeight = getMeasuredHeight(); - if (mHeight == 0 && mDesiredHeight != 0) { - // Record the first non-zero width and height, this will be the height henceforth. - mHeight = mDesiredHeight; + if (mWidth == 0) { mWidth = getMeasuredWidth(); } - if (mHeight != 0) { - // Always report the same height - setMeasuredDimension(getMeasuredWidth(), mHeight); - } + + measureChild(getChildAt(0), widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - if (mDesiredHeight != 0) { - // Draw at height we expect to be. - setBottom(getTop() + mDesiredHeight); - bottom = top + mDesiredHeight; + View content = getChildAt(0); + if (mContentBottom == 0) { + mContentBottom = (getMeasuredHeight() + content.getMeasuredHeight()) / 2; } - super.onLayout(changed, left, top, right, bottom); + final int contentLeft = (getMeasuredWidth() - content.getMeasuredWidth()) / 2; + final int contentTop = mContentBottom - content.getMeasuredHeight(); + final int contentRight = contentLeft + content.getMeasuredWidth(); + content.layout(contentLeft, contentTop, contentRight, mContentBottom); } } |