summaryrefslogtreecommitdiffstats
path: root/src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java')
-rw-r--r--src/com/android/packageinstaller/permission/ui/ManualLayoutFrame.java51
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);
}
}