Use the current dimensions instead of relying on onConfigurationChanged
There are some cases when the View will not receive onConfigurationChanged event (such as DialogFragment). Always use the current dimensions instead. Fix: 205251075 Test: test with Settings app Change-Id: If626fe597c02efcb480c05ca88cffbfae1b21a89
This commit is contained in:
@@ -270,8 +270,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
private Drawable mCaptionBackgroundDrawable;
|
||||
private Drawable mUserCaptionBackgroundDrawable;
|
||||
|
||||
private float mAvailableWidth;
|
||||
|
||||
String mLogTag = TAG;
|
||||
private final Rect mFloatingInsets = new Rect();
|
||||
private boolean mApplyFloatingVerticalInsets = false;
|
||||
@@ -315,8 +313,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
mSemiTransparentBarColor = context.getResources().getColor(
|
||||
R.color.system_bar_background_semi_transparent, null /* theme */);
|
||||
|
||||
updateAvailableWidth();
|
||||
|
||||
setWindow(window);
|
||||
|
||||
updateLogTag(params);
|
||||
@@ -697,7 +693,8 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
final DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
|
||||
final Resources res = getContext().getResources();
|
||||
final DisplayMetrics metrics = res.getDisplayMetrics();
|
||||
final boolean isPortrait =
|
||||
getResources().getConfiguration().orientation == ORIENTATION_PORTRAIT;
|
||||
|
||||
@@ -767,17 +764,19 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
|
||||
if (!fixedWidth && widthMode == AT_MOST) {
|
||||
final TypedValue tv = isPortrait ? mWindow.mMinWidthMinor : mWindow.mMinWidthMajor;
|
||||
final float availableWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
|
||||
res.getConfiguration().screenWidthDp, metrics);
|
||||
if (tv.type != TypedValue.TYPE_NULL) {
|
||||
final int min;
|
||||
if (tv.type == TypedValue.TYPE_DIMENSION) {
|
||||
min = (int)tv.getDimension(metrics);
|
||||
min = (int) tv.getDimension(metrics);
|
||||
} else if (tv.type == TypedValue.TYPE_FRACTION) {
|
||||
min = (int)tv.getFraction(mAvailableWidth, mAvailableWidth);
|
||||
min = (int) tv.getFraction(availableWidth, availableWidth);
|
||||
} else {
|
||||
min = 0;
|
||||
}
|
||||
if (DEBUG_MEASURE) Log.d(mLogTag, "Adjust for min width: " + min + ", value::"
|
||||
+ tv.coerceToString() + ", mAvailableWidth=" + mAvailableWidth);
|
||||
+ tv.coerceToString() + ", mAvailableWidth=" + availableWidth);
|
||||
|
||||
if (width < min) {
|
||||
widthMeasureSpec = MeasureSpec.makeMeasureSpec(min, EXACTLY);
|
||||
@@ -2144,7 +2143,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
|
||||
updateDecorCaptionStatus(newConfig);
|
||||
|
||||
updateAvailableWidth();
|
||||
initializeElevation();
|
||||
}
|
||||
|
||||
@@ -2616,12 +2614,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
|
||||
mLogTag = TAG + "[" + getTitleSuffix(params) + "]";
|
||||
}
|
||||
|
||||
private void updateAvailableWidth() {
|
||||
Resources res = getResources();
|
||||
mAvailableWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
|
||||
res.getConfiguration().screenWidthDp, res.getDisplayMetrics());
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user