OLD | NEW |
---|---|
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 Loading... | |
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) { |
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 Loading... | |
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 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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. |
1103 float offset = calculateBasePageDesiredOffset(); | 1094 float offset = calculateBasePageDesiredOffset(); |
1104 | 1095 |
1105 // Make sure offset is negative to prevent Base Page from moving down, | 1096 // Make sure offset is negative to prevent Base Page from moving down, |
1106 // because there's nothing to render above the Page. | 1097 // because there's nothing to render above the Page. |
1107 offset = Math.min(offset, 0.f); | 1098 offset = Math.min(offset, 0.f); |
1108 // If visible, the Toolbar will be hidden. Therefore, we need to adjust | 1099 // Adjust for viewport offset. |
1109 // the offset to account for this difference. | 1100 offset -= mLayoutYOffset; |
Donn Denman
2016/06/23 23:47:00
Shouldn't this be moved up to before the Math.min?
mdjones
2016/06/24 01:30:26
Done, I also joined a few of these lines for brevi
| |
1110 offset -= (mToolbarHeight - getTopControlsOffsetDp()); | |
1111 // Make sure the offset is not greater than the expanded height, because | 1101 // Make sure the offset is not greater than the expanded height, because |
1112 // there's nothing to render below the Page. | 1102 // there's nothing to render below the Page. |
1113 offset = Math.max(offset, -getExpandedHeight()); | 1103 offset = Math.max(offset, -getExpandedHeight()); |
1114 | 1104 |
1115 return offset; | 1105 return offset; |
1116 } | 1106 } |
1117 | 1107 |
1118 /** | 1108 /** |
1119 * @return The Y coordinate to apply to the Base Page in order to keep the s election | 1109 * @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. | 1110 * in view when the Overlay Panel is in EXPANDED state. |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1188 * Overrides the FullWidthSizePanel state for testing. | 1178 * Overrides the FullWidthSizePanel state for testing. |
1189 * | 1179 * |
1190 * @param isFullWidthSizePanel Whether the Panel has a full width size. | 1180 * @param isFullWidthSizePanel Whether the Panel has a full width size. |
1191 */ | 1181 */ |
1192 @VisibleForTesting | 1182 @VisibleForTesting |
1193 public void setIsFullWidthSizePanelForTesting(boolean isFullWidthSizePanel) { | 1183 public void setIsFullWidthSizePanelForTesting(boolean isFullWidthSizePanel) { |
1194 mOverrideIsFullWidthSizePanelForTesting = true; | 1184 mOverrideIsFullWidthSizePanelForTesting = true; |
1195 mIsFullWidthSizePanelForTesting = isFullWidthSizePanel; | 1185 mIsFullWidthSizePanelForTesting = isFullWidthSizePanel; |
1196 } | 1186 } |
1197 } | 1187 } |
OLD | NEW |