1 // Copyright 2020 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.chrome.browser.compositor.overlays.toolbar; 6 7 import android.content.Context; 8 import android.graphics.RectF; 9 10 import org.chromium.base.Callback; 11 import org.chromium.base.supplier.Supplier; 12 import org.chromium.chrome.R; 13 import org.chromium.chrome.browser.ActivityTabProvider; 14 import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; 15 import org.chromium.chrome.browser.layouts.CompositorModelChangeProcessor; 16 import org.chromium.chrome.browser.layouts.EventFilter; 17 import org.chromium.chrome.browser.layouts.LayoutManager; 18 import org.chromium.chrome.browser.layouts.SceneOverlay; 19 import org.chromium.chrome.browser.layouts.components.VirtualView; 20 import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; 21 import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar; 22 import org.chromium.ui.modelutil.PropertyModel; 23 import org.chromium.ui.resources.ResourceManager; 24 25 import java.util.List; 26 27 /** The public interface for the top toolbar texture component. */ 28 public class TopToolbarOverlayCoordinator implements SceneOverlay { 29 /** The view state for this overlay. */ 30 private final PropertyModel mModel; 31 32 /** A handle to the 'view' for this component as the layout manager requires access to it. */ 33 private final TopToolbarSceneLayer mSceneLayer; 34 35 /** Handles processing updates to the model. */ 36 private final CompositorModelChangeProcessor mChangeProcessor; 37 38 /** Business logic for this overlay. */ 39 private final TopToolbarOverlayMediator mMediator; 40 TopToolbarOverlayCoordinator(Context context, LayoutManager layoutManager, Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback, ActivityTabProvider tabSupplier, BrowserControlsStateProvider browserControlsStateProvider, Supplier<ResourceManager> resourceManagerSupplier)41 public TopToolbarOverlayCoordinator(Context context, LayoutManager layoutManager, 42 Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback, 43 ActivityTabProvider tabSupplier, 44 BrowserControlsStateProvider browserControlsStateProvider, 45 Supplier<ResourceManager> resourceManagerSupplier) { 46 mModel = new PropertyModel.Builder(TopToolbarOverlayProperties.ALL_KEYS) 47 .with(TopToolbarOverlayProperties.RESOURCE_ID, R.id.control_container) 48 .with(TopToolbarOverlayProperties.URL_BAR_RESOURCE_ID, 49 R.drawable.modern_location_bar) 50 .with(TopToolbarOverlayProperties.VISIBLE, true) 51 .with(TopToolbarOverlayProperties.CONTENT_OFFSET, 52 browserControlsStateProvider.getContentOffset()) 53 .build(); 54 mSceneLayer = new TopToolbarSceneLayer(resourceManagerSupplier); 55 mChangeProcessor = 56 layoutManager.createCompositorMCP(mModel, mSceneLayer, TopToolbarSceneLayer::bind); 57 58 mMediator = new TopToolbarOverlayMediator(mModel, context, layoutManager, 59 progressInfoCallback, tabSupplier, browserControlsStateProvider); 60 } 61 62 /** 63 * Set whether the android view corresponding with this overlay is showing. 64 * @param isVisible Whether the android view is visible. 65 */ setIsAndroidViewVisible(boolean isVisible)66 public void setIsAndroidViewVisible(boolean isVisible) { 67 mMediator.setIsAndroidViewVisible(isVisible); 68 } 69 70 /** Clean up this component. */ destroy()71 public void destroy() { 72 mChangeProcessor.destroy(); 73 mMediator.destroy(); 74 mSceneLayer.destroy(); 75 } 76 77 @Override getUpdatedSceneOverlayTree( RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset)78 public SceneOverlayLayer getUpdatedSceneOverlayTree( 79 RectF viewport, RectF visibleViewport, ResourceManager resourceManager, float yOffset) { 80 return mSceneLayer; 81 } 82 83 @Override isSceneOverlayTreeShowing()84 public boolean isSceneOverlayTreeShowing() { 85 return mMediator.shouldBeAttachedToTree(); 86 } 87 88 @Override getEventFilter()89 public EventFilter getEventFilter() { 90 return null; 91 } 92 93 @Override onSizeChanged( float width, float height, float visibleViewportOffsetY, int orientation)94 public void onSizeChanged( 95 float width, float height, float visibleViewportOffsetY, int orientation) {} 96 97 @Override getVirtualViews(List<VirtualView> views)98 public void getVirtualViews(List<VirtualView> views) {} 99 100 @Override shouldHideAndroidBrowserControls()101 public boolean shouldHideAndroidBrowserControls() { 102 return false; 103 } 104 105 @Override updateOverlay(long time, long dt)106 public boolean updateOverlay(long time, long dt) { 107 return false; 108 } 109 110 @Override onBackPressed()111 public boolean onBackPressed() { 112 return false; 113 } 114 115 @Override handlesTabCreating()116 public boolean handlesTabCreating() { 117 return false; 118 } 119 } 120