Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBase.java

Issue 2098683002: Refactor OverlayPanel height calculations (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address donnd comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.compositor.bottombar; 5 package org.chromium.chrome.browser.compositor.bottombar;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.graphics.Color; 8 import android.graphics.Color;
9 import android.view.ViewGroup; 9 import android.view.ViewGroup;
10 10
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 */ 152 */
153 protected abstract void closePanel(StateChangeReason reason, boolean animate ); 153 protected abstract void closePanel(StateChangeReason reason, boolean animate );
154 154
155 /** 155 /**
156 * Event notification that the Panel did get closed. 156 * Event notification that the Panel did get closed.
157 * @param reason The reason the panel is closing. 157 * @param reason The reason the panel is closing.
158 */ 158 */
159 protected abstract void onClosed(StateChangeReason reason); 159 protected abstract void onClosed(StateChangeReason reason);
160 160
161 /** 161 /**
162 * @return The absolute amount in DP that the top controls have shifted off screen.
163 */
164 protected abstract float getTopControlsOffsetDp();
165
166 /**
167 * TODO(mdjones): This method should be removed from this class. 162 * TODO(mdjones): This method should be removed from this class.
168 * @return The resource id that contains how large the top controls are. 163 * @return The resource id that contains how large the top controls are.
169 */ 164 */
170 protected abstract int getControlContainerHeightResource(); 165 protected abstract int getControlContainerHeightResource();
171 166
172 /** 167 /**
173 * Handles when the Panel's container view size changes. 168 * Handles when the Panel's container view size changes.
174 * @param width The new width of the Panel's container view. 169 * @param width The new width of the Panel's container view.
175 * @param height The new height of the Panel's container view. 170 * @param height The new height of the Panel's container view.
176 * @param previousWidth The previous width of the Panel's container view. 171 * @param previousWidth The previous width of the Panel's container view.
177 */ 172 */
178 protected abstract void handleSizeChanged(float width, float height, float p reviousWidth); 173 protected abstract void handleSizeChanged(float width, float height, float p reviousWidth);
179 174
180 // ========================================================================= =================== 175 // ========================================================================= ===================
181 // Layout Integration 176 // Layout Integration
182 // ========================================================================= =================== 177 // ========================================================================= ===================
183 178
184 private float mLayoutWidth; 179 private float mLayoutWidth;
185 private float mLayoutHeight; 180 private float mLayoutHeight;
181 private float mLayoutYOffset;
186 182
187 private float mMaximumWidth; 183 private float mMaximumWidth;
188 private float mMaximumHeight; 184 private float mMaximumHeight;
189 185
190 private boolean mIsFullWidthSizePanelForTesting; 186 private boolean mIsFullWidthSizePanelForTesting;
191 private boolean mOverrideIsFullWidthSizePanelForTesting; 187 private boolean mOverrideIsFullWidthSizePanelForTesting;
192 188
193 /** 189 /**
194 * Called when the size of the view has changed. 190 * Called when the size of the view has changed.
195 * 191 *
196 * @param width The new width in dp. 192 * @param width The new width in dp.
197 * @param height The new width in dp. 193 * @param height The new width in dp.
194 * @param visibleViewportOffsetY The Y offset of the content in dp.
198 */ 195 */
199 public void onSizeChanged(float width, float height) { 196 public void onSizeChanged(float width, float height, float visibleViewportOf fsetY) {
Changwan Ryu 2016/07/07 03:29:32 How about renaming it as onLayoutChanged? I don't
mdjones 2016/07/07 18:33:40 I renamed this method up to the SceneOverlay inter
200 if (width == mLayoutWidth && height == mLayoutHeight) return; 197 if (width == mLayoutWidth && height == mLayoutHeight
198 && visibleViewportOffsetY == mLayoutYOffset) {
199 return;
200 }
201 201
202 float previousLayoutWidth = mLayoutWidth; 202 float previousLayoutWidth = mLayoutWidth;
203 203
204 mLayoutWidth = width; 204 mLayoutWidth = width;
205 mLayoutHeight = height; 205 mLayoutHeight = height;
206 mLayoutYOffset = visibleViewportOffsetY;
206 207
207 mMaximumWidth = calculateOverlayPanelWidth(); 208 mMaximumWidth = calculateOverlayPanelWidth();
208 mMaximumHeight = getPanelHeightFromState(PanelState.MAXIMIZED); 209 mMaximumHeight = getPanelHeightFromState(PanelState.MAXIMIZED);
209 210
210 handleSizeChanged(width, height, previousLayoutWidth); 211 handleSizeChanged(width, height, previousLayoutWidth);
211 } 212 }
212 213
213 /** 214 /**
214 * @return Whether the Panel is in full width size. 215 * @return Whether the Panel is in full width size.
215 */ 216 */
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 } 252 }
252 253
253 /** 254 /**
254 * @return The height of the Chrome toolbar in dp. 255 * @return The height of the Chrome toolbar in dp.
255 */ 256 */
256 public float getToolbarHeight() { 257 public float getToolbarHeight() {
257 return mToolbarHeight; 258 return mToolbarHeight;
258 } 259 }
259 260
260 /** 261 /**
261 * @param y The y coordinate.
262 * @return The Y coordinate relative the fullscreen height.
263 */
264 public float getFullscreenY(float y) {
265 return y + (mToolbarHeight - getTopControlsOffsetDp()) / mPxToDp;
266 }
267
268 /**
269 * @return Whether the Panel is showing. 262 * @return Whether the Panel is showing.
270 */ 263 */
271 public boolean isShowing() { 264 public boolean isShowing() {
272 return mHeight > 0; 265 return mHeight > 0;
273 } 266 }
274 267
275 /** 268 /**
276 * @return Whether the Overlay Panel is opened. That is, whether the current height is greater 269 * @return Whether the Overlay Panel is opened. That is, whether the current height is greater
277 * than the peeking height. 270 * than the peeking height.
278 */ 271 */
279 public boolean isPanelOpened() { 272 public boolean isPanelOpened() {
280 return mHeight > getBarContainerHeight(); 273 return mHeight > getBarContainerHeight();
281 } 274 }
282 275
283 /** 276 /**
284 * @return The fullscreen width. 277 * @return The fullscreen width.
285 */ 278 */
286 private float getFullscreenWidth() { 279 private float getFullscreenWidth() {
287 return mLayoutWidth; 280 return mLayoutWidth;
288 } 281 }
289 282
290 /** 283 /**
291 * @return The height of the tab the panel is displayed on top of. 284 * @return The height of the tab the panel is displayed on top of.
292 */ 285 */
293 public float getTabHeight() { 286 public float getTabHeight() {
294 // NOTE(mdjones): This value will always be the same for a particular or ientation; it is 287 return mLayoutHeight;
295 // the content height + visible toolbar height.
296 return mLayoutHeight + (getToolbarHeight() - getTopControlsOffsetDp());
297 } 288 }
298 289
299 /** 290 /**
300 * @return The maximum width of the Overlay Panel in pixels. 291 * @return The maximum width of the Overlay Panel in pixels.
301 */ 292 */
302 public int getMaximumWidthPx() { 293 public int getMaximumWidthPx() {
303 return Math.round(mMaximumWidth / mPxToDp); 294 return Math.round(mMaximumWidth / mPxToDp);
304 } 295 }
305 296
306 /** 297 /**
(...skipping 785 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 * consideration the Toolbar height, and adjust the offset accordingly, in o rder to 1083 * consideration the Toolbar height, and adjust the offset accordingly, in o rder to
1093 * move the Toolbar out of the view as the Panel expands. 1084 * move the Toolbar out of the view as the Panel expands.
1094 * 1085 *
1095 * @return The target offset Y. 1086 * @return The target offset Y.
1096 */ 1087 */
1097 private float calculateBasePageTargetY() { 1088 private float calculateBasePageTargetY() {
1098 // Only a fullscreen wide Panel should offset the base page. A small pan el should 1089 // Only a fullscreen wide Panel should offset the base page. A small pan el should
1099 // always return zero to ensure the Base Page remains in the same positi on. 1090 // always return zero to ensure the Base Page remains in the same positi on.
1100 if (!isFullWidthSizePanel()) return 0.f; 1091 if (!isFullWidthSizePanel()) return 0.f;
1101 1092
1102 // Start with the desired offset. 1093 // Start with the desired offset taking viewport offset into considerati on and make sure
1103 float offset = calculateBasePageDesiredOffset(); 1094 // the result is <= 0 so the page moves up and not down.
1095 float offset = Math.min(calculateBasePageDesiredOffset() - mLayoutYOffse t, 0.0f);
1104 1096
1105 // Make sure offset is negative to prevent Base Page from moving down,
1106 // because there's nothing to render above the Page.
1107 offset = Math.min(offset, 0.f);
1108 // If visible, the Toolbar will be hidden. Therefore, we need to adjust
1109 // the offset to account for this difference.
1110 offset -= (mToolbarHeight - getTopControlsOffsetDp());
1111 // Make sure the offset is not greater than the expanded height, because 1097 // Make sure the offset is not greater than the expanded height, because
1112 // there's nothing to render below the Page. 1098 // there's nothing to render below the Page.
1113 offset = Math.max(offset, -getExpandedHeight()); 1099 offset = Math.max(offset, -getExpandedHeight());
1114 1100
1115 return offset; 1101 return offset;
1116 } 1102 }
1117 1103
1118 /** 1104 /**
1119 * @return The Y coordinate to apply to the Base Page in order to keep the s election 1105 * @return The Y coordinate to apply to the Base Page in order to keep the s election
1120 * in view when the Overlay Panel is in EXPANDED state. 1106 * in view when the Overlay Panel is in EXPANDED state.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 * Overrides the FullWidthSizePanel state for testing. 1174 * Overrides the FullWidthSizePanel state for testing.
1189 * 1175 *
1190 * @param isFullWidthSizePanel Whether the Panel has a full width size. 1176 * @param isFullWidthSizePanel Whether the Panel has a full width size.
1191 */ 1177 */
1192 @VisibleForTesting 1178 @VisibleForTesting
1193 public void setIsFullWidthSizePanelForTesting(boolean isFullWidthSizePanel) { 1179 public void setIsFullWidthSizePanelForTesting(boolean isFullWidthSizePanel) {
1194 mOverrideIsFullWidthSizePanelForTesting = true; 1180 mOverrideIsFullWidthSizePanelForTesting = true;
1195 mIsFullWidthSizePanelForTesting = isFullWidthSizePanel; 1181 mIsFullWidthSizePanelForTesting = isFullWidthSizePanel;
1196 } 1182 }
1197 } 1183 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698