1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.android_webview; 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.View; 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.view.View.MeasureSpec; 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/** 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Helper methods used to manage the layout of the View that contains AwContents. 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public class AwLayoutSizer { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These are used to prevent a re-layout if the content size changes within a dimension that is 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // fixed by the view system. 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private boolean mWidthMeasurementIsFixed; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private boolean mHeightMeasurementIsFixed; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Size of the rendered content, as reported by native. 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private int mContentHeightCss; 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private int mContentWidthCss; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Page scale factor. This is set to zero initially so that we don't attempt to do a layout if 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // we get the content size change notification first and a page scale change second. 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private float mPageScaleFactor = 0.0f; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether to postpone layout requests. 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private boolean mFreezeLayoutRequests; 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Did we try to request a layout since the last time mPostponeLayoutRequests was set to true. 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private boolean mFrozenLayoutRequestPending; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private double mDIPScale; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Was our height larger than the AT_MOST constraint the last time onMeasure was called? 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private boolean mHeightMeasurementLimited; 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // If mHeightMeasurementLimited is true then this contains the height limit. 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private int mHeightMeasurementLimit; 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Callback object for interacting with the View. 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private Delegate mDelegate; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) /** 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * Delegate interface through which the AwLayoutSizer communicates with the view it's sizing. 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public interface Delegate { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void requestLayout(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void setMeasuredDimension(int measuredWidth, int measuredHeight); 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) boolean isLayoutParamsHeightWrapContent(); 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void setForceZeroLayoutHeight(boolean forceZeroHeight); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Default constructor. Note: both setDelegate and setDIPScale must be called before the class 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * is ready for use. 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public AwLayoutSizer() { 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void setDelegate(Delegate delegate) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mDelegate = delegate; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void setDIPScale(double dipScale) { 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mDIPScale = dipScale; 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Postpone requesting layouts till unfreezeLayoutRequests is called. 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void freezeLayoutRequests() { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mFreezeLayoutRequests = true; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mFrozenLayoutRequestPending = false; 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Stop postponing layout requests and request layout if such a request would have been made 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * had the freezeLayoutRequests method not been called before. 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void unfreezeLayoutRequests() { 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mFreezeLayoutRequests = false; 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (mFrozenLayoutRequestPending) { 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mFrozenLayoutRequestPending = false; 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mDelegate.requestLayout(); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Update the contents size. 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This should be called whenever the content size changes (due to DOM manipulation or page 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * load, for example). 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * The width and height should be in CSS pixels. 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public void onContentSizeChanged(int widthCss, int heightCss) { 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) doUpdate(widthCss, heightCss, mPageScaleFactor); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Update the contents page scale. 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This should be called whenever the content page scale factor changes (due to pinch zoom, for 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * example). 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public void onPageScaleChanged(float pageScaleFactor) { 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) doUpdate(mContentWidthCss, mContentHeightCss, pageScaleFactor); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private void doUpdate(int widthCss, int heightCss, float pageScaleFactor) { 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // We want to request layout only if the size or scale change, however if any of the 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // measurements are 'fixed', then changing the underlying size won't have any effect, so we 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ignore changes to dimensions that are 'fixed'. 110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) final int heightPix = (int) (heightCss * mPageScaleFactor * mDIPScale); 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) boolean pageScaleChanged = mPageScaleFactor != pageScaleFactor; 112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) boolean contentHeightChangeMeaningful = !mHeightMeasurementIsFixed && 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) (!mHeightMeasurementLimited || heightPix < mHeightMeasurementLimit); 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) boolean pageScaleChangeMeaningful = 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) !mWidthMeasurementIsFixed || contentHeightChangeMeaningful; 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) boolean layoutNeeded = (mContentWidthCss != widthCss && !mWidthMeasurementIsFixed) || 117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) (mContentHeightCss != heightCss && contentHeightChangeMeaningful) || 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) (pageScaleChanged && pageScaleChangeMeaningful); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mContentWidthCss = widthCss; 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mContentHeightCss = heightCss; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mPageScaleFactor = pageScaleFactor; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (layoutNeeded) { 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (mFreezeLayoutRequests) { 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mFrozenLayoutRequestPending = true; 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mDelegate.requestLayout(); 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Calculate the size of the view. 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This is designed to be used to implement the android.view.View#onMeasure() method. 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int heightMode = MeasureSpec.getMode(heightMeasureSpec); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int heightSize = MeasureSpec.getSize(heightMeasureSpec); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int widthMode = MeasureSpec.getMode(widthMeasureSpec); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int widthSize = MeasureSpec.getSize(widthMeasureSpec); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int contentHeightPix = (int) (mContentHeightCss * mPageScaleFactor * mDIPScale); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int contentWidthPix = (int) (mContentWidthCss * mPageScaleFactor * mDIPScale); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int measuredHeight = contentHeightPix; 147d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) int measuredWidth = contentWidthPix; 148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Always use the given size unless unspecified. This matches WebViewClassic behavior. 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mWidthMeasurementIsFixed = (widthMode != MeasureSpec.UNSPECIFIED); 151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mHeightMeasurementIsFixed = (heightMode == MeasureSpec.EXACTLY); 152d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mHeightMeasurementLimited = 153d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) (heightMode == MeasureSpec.AT_MOST) && (contentHeightPix > heightSize); 154d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mHeightMeasurementLimit = heightSize; 155d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 156d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (mHeightMeasurementIsFixed || mHeightMeasurementLimited) { 157d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) measuredHeight = heightSize; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (mWidthMeasurementIsFixed) { 161d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) measuredWidth = widthSize; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (measuredHeight < contentHeightPix) { 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) measuredHeight |= View.MEASURED_STATE_TOO_SMALL; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (measuredWidth < contentWidthPix) { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) measuredWidth |= View.MEASURED_STATE_TOO_SMALL; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mDelegate.setMeasuredDimension(measuredWidth, measuredHeight); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Notify the AwLayoutSizer that the size of the view has changed. 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * This should be called by the Android view system after onMeasure if the view's size has 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * changed. 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 180d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public void onSizeChanged(int w, int h, int ow, int oh) { 1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) updateLayoutSettings(); 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) /** 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Notify the AwLayoutSizer that the layout pass requested via Delegate.requestLayout has 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * completed. 1874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * This should be called after onSizeChanged regardless of whether the size has changed or not. 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */ 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public void onLayoutChange() { 1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) updateLayoutSettings(); 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // This needs to be called every time either the physical size of the view is changed or layout 1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // params are updated. 1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private void updateLayoutSettings() { 1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mDelegate.setForceZeroLayoutHeight(mDelegate.isLayoutParamsHeightWrapContent()); 197d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 199