Commit 1dc74a7e authored by Matthew Jones's avatar Matthew Jones Committed by Commit Bot

Move omnibox scrim logic to ToolbarManager

This patch moves the responsibility of updating the scrim for the
toolbar over to the ToolbarManager. This allows for the removal of
a fair amount of plumbing for the scrim and some questionable casting.

Change-Id: I3ee397c2444d96da9e9a32bb7652134989ffedad
Reviewed-on: https://chromium-review.googlesource.com/c/1313115
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#604983}
parent dcb738f9
......@@ -399,6 +399,12 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
try (TraceEvent te = TraceEvent.scoped("ChromeActivity.postInflationStartup")) {
super.postInflationStartup();
ViewGroup coordinator = findViewById(R.id.coordinator);
mScrimView = new ScrimView(this, (fraction) -> {
mStatusBarScrimFraction = fraction;
setStatusBarColor(null, mBaseStatusBarColor);
}, coordinator);
Intent intent = getIntent();
if (intent != null && getSavedInstanceState() == null) {
VrModuleProvider.getDelegate().maybeHandleVrIntentPreNative(this, intent);
......@@ -1434,11 +1440,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
super.finishNativeInitialization();
ViewGroup coordinator = findViewById(R.id.coordinator);
mScrimView = new ScrimView(this, (fraction) -> {
mStatusBarScrimFraction = fraction;
setStatusBarColor(null, mBaseStatusBarColor);
}, coordinator);
ViewStub accessoryBarStub = findViewById(R.id.keyboard_accessory_stub);
ViewStub accessorySheetStub = findViewById(R.id.keyboard_accessory_sheet_stub);
if (accessoryBarStub != null && accessorySheetStub != null) {
......@@ -1453,10 +1454,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
// to setup.
mPageViewTimer = createPageViewTimer();
if (mToolbarManager != null && mToolbarManager.getToolbar() != null) {
mToolbarManager.getToolbar().setScrim(mScrimView);
}
if (supportsContextualSuggestionsBottomSheet()
&& FeatureUtilities.areContextualSuggestionsEnabled(this)) {
getLayoutInflater().inflate(R.layout.bottom_sheet, coordinator);
......
......@@ -17,7 +17,6 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.Toolbar;
import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback;
import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.ui.base.WindowAndroid;
/**
......@@ -167,11 +166,6 @@ public interface LocationBar extends UrlBarDelegate {
*/
int getUrlContainerMarginEnd();
/**
* @param scrim The scrim for this location bar to use.
*/
void setScrim(ScrimView scrim);
/**
* Called to set the width of the location bar when the url bar is not focused.
*
......
......@@ -4,7 +4,6 @@
package org.chromium.chrome.browser.omnibox;
import android.app.Activity;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
......@@ -32,7 +31,6 @@ import org.chromium.base.ObserverList;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.WindowDelegate;
......@@ -58,8 +56,6 @@ import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback;
import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
import org.chromium.chrome.browser.toolbar.ToolbarManager;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.ScrimView.ScrimParams;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.base.PageTransition;
......@@ -74,15 +70,9 @@ import java.util.List;
*/
public class LocationBarLayout extends FrameLayout
implements OnClickListener, LocationBar, AutocompleteDelegate, FakeboxDelegate,
ScrimView.ScrimObserver, LocationBarVoiceRecognitionHandler.Delegate,
StatusViewCoordinator.Delegate {
LocationBarVoiceRecognitionHandler.Delegate, StatusViewCoordinator.Delegate {
private static final String TAG = "cr_LocationBar";
private final int mLightScrimColor;
/** Params that control how the location bar interacts with the scrim. */
private ScrimParams mScrimParams;
protected AppCompatImageButton mDeleteButton;
protected AppCompatImageButton mMicButton;
protected View mUrlBar;
......@@ -105,8 +95,6 @@ public class LocationBarLayout extends FrameLayout
private WindowAndroid mWindowAndroid;
private WindowDelegate mWindowDelegate;
private ScrimView mScrim;
private boolean mUrlHasFocus;
protected boolean mUrlFocusChangeInProgress;
private boolean mUrlFocusedFromFakebox;
......@@ -163,8 +151,6 @@ public class LocationBarLayout extends FrameLayout
LayoutInflater.from(context).inflate(layoutId, this, true);
mLightScrimColor = ApiCompatibilityUtils.getColor(
context.getResources(), R.color.omnibox_focused_fading_background_color_light);
mIsTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(context);
mDeleteButton = (AppCompatImageButton) findViewById(R.id.delete_button);
......@@ -481,8 +467,6 @@ public class LocationBarLayout extends FrameLayout
for (UrlFocusChangeListener listener : mUrlFocusChangeListeners) {
listener.onUrlFocusChange(hasFocus);
}
updateFadingBackgroundView(hasFocus, false);
}
@Override
......@@ -982,67 +966,6 @@ public class LocationBarLayout extends FrameLayout
return !mToolbarDataProvider.isIncognito();
}
@Override
public void onScrimClick() {
setUrlBarFocus(false);
updateFadingBackgroundView(false, false);
}
@Override
public void onScrimVisibilityChanged(boolean visible) {
Activity activity = mWindowAndroid.getActivity().get();
if (!(activity instanceof ChromeActivity)) return;
ChromeActivity chromeActivity = (ChromeActivity) activity;
if (visible) {
chromeActivity.addViewObscuringAllTabs(mScrim);
} else {
chromeActivity.removeViewObscuringAllTabs(mScrim);
}
}
@Override
public void setScrim(ScrimView scrim) {
mScrim = scrim;
// In some cases, users can start chrome and immediately start tapping the omnibox. In that
// case, the omnibox will focus, but there is no scrim. This checks if the scrim needs to
// be visible and updates it accordingly.
updateFadingBackgroundView(isUrlBarFocused(), true);
}
/**
* Update the fading background view that shows when the omnibox is focused. If Chrome Home is
* enabled, this method is a no-op.
* @param visible Whether the background should be made visible.
* @param ignoreNtpChecks Whether the checks for the ntp should be considered when updating the
* scrim.
*/
protected void updateFadingBackgroundView(boolean visible, boolean ignoreNtpChecks) {
if (mScrim == null) return;
NewTabPage ntp = mToolbarDataProvider.getNewTabPageForCurrentTab();
boolean locationBarShownInNTP = ntp != null && ntp.isLocationBarShownInNTP();
if (visible && (!locationBarShownInNTP || ignoreNtpChecks)) {
if (mScrimParams == null) {
int topMargin = getResources().getDimensionPixelSize(R.dimen.tab_strip_height);
View omniboxSuggestionsContainer =
mAutocompleteCoordinator.getSuggestionContainerView();
if (omniboxSuggestionsContainer == null) return;
mScrimParams =
new ScrimParams(omniboxSuggestionsContainer, false, false, topMargin, this);
}
mScrimParams.backgroundColor =
!mIsTablet && !mToolbarDataProvider.isIncognito() ? mLightScrimColor : null;
// If the location bar is shown in the NTP, the toolbar will eventually trigger a
// fade in.
mScrim.showScrim(mScrimParams);
} else {
mScrim.hideScrim(!locationBarShownInNTP);
}
}
@Override
public void setUnfocusedWidth(float unfocusedWidth) {
mStatusViewCoordinator.setUnfocusedLocationBarWidth(unfocusedWidth);
......
......@@ -14,7 +14,6 @@ import android.view.WindowManager;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.ntp.NewTabPage;
/**
* A location bar implementation specific for smaller/phone screens.
......@@ -137,11 +136,6 @@ public class LocationBarPhone extends LocationBarLayout {
getWindowAndroid().getKeyboardDelegate().showKeyboard(mUrlBar);
}
setUrlFocusChangeInProgress(false);
NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab();
if (hasFocus && ntp != null && ntp.isLocationBarShownInNTP()) {
updateFadingBackgroundView(true, true);
}
}
@Override
......
......@@ -181,8 +181,6 @@ public class AutocompleteCoordinator
@Override
public void onUrlFocusChange(boolean hasFocus) {
if (hasFocus) {
// TODO(mdjones): Move init into visibility update method as it's only caller.
initOmniboxResultsContainer();
if (mNativeInitialized) {
startZeroSuggest();
} else {
......@@ -289,13 +287,6 @@ public class AutocompleteCoordinator
return mSuggestionModalShown;
}
/**
* @return The view containing the suggestions list.
*/
public View getSuggestionContainerView() {
return mOmniboxResultsContainer;
}
/**
* @see AutocompleteController#onVoiceResults(List)
*/
......@@ -468,7 +459,8 @@ public class AutocompleteCoordinator
* Update whether the omnibox suggestions are visible.
*/
private void updateOmniboxSuggestionsVisibility() {
if (mOmniboxResultsContainer == null || mSuggestionList == null) return;
initOmniboxResultsContainer();
if (mSuggestionList == null) return;
boolean isContainerVisible = mOmniboxResultsContainer.getVisibility() == View.VISIBLE;
boolean shouldBeVisible = mCanShowSuggestions && getSuggestionCount() > 0;
......
......@@ -59,7 +59,6 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.util.AccessibilityUtil;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.TintedDrawable;
import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.common.ContentUrlConstants;
......@@ -829,9 +828,6 @@ public class CustomTabToolbar
return 0;
}
@Override
public void setScrim(ScrimView scrim) {}
@Override
public void setUnfocusedWidth(float unfocusedWidth) {}
}
......@@ -8,7 +8,6 @@ import android.graphics.Rect;
import android.view.View;
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.widget.ScrimView;
/**
* An interface for outside packages to interact with ToolbarLayout. Other than for testing purposes
......@@ -104,9 +103,4 @@ public interface Toolbar {
* @return height of the tab strip in px.
*/
int getTabStripHeight();
/**
* @param scrim The scrim for this location bar to use.
*/
void setScrim(ScrimView scrim);
}
......@@ -44,7 +44,6 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.browser.util.ViewUtils;
import org.chromium.chrome.browser.widget.PulseDrawable;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.ToolbarProgressBar;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.ui.UiUtils;
......@@ -987,9 +986,4 @@ public abstract class ToolbarLayout extends FrameLayout implements Toolbar {
if (FeatureUtilities.isNewTabPageButtonEnabled())
ntpButton.setImageResource(R.drawable.ic_home);
}
@Override
public void setScrim(ScrimView scrim) {
getLocationBar().setScrim(scrim);
}
}
......@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.toolbar;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
......@@ -92,6 +93,9 @@ import org.chromium.chrome.browser.toolbar.ActionModeController.ActionBarDelegat
import org.chromium.chrome.browser.toolbar.ToolbarButtonSlotData.ToolbarButtonData;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.ScrimView.ScrimObserver;
import org.chromium.chrome.browser.widget.ScrimView.ScrimParams;
import org.chromium.chrome.browser.widget.ViewHighlighter;
import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager;
import org.chromium.chrome.browser.widget.findinpage.FindToolbarObserver;
......@@ -105,6 +109,7 @@ import org.chromium.content_public.browser.NavigationEntry;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.AsyncViewProvider;
import org.chromium.ui.UiUtils;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.base.PageTransition;
import org.chromium.ui.widget.ViewRectProvider;
......@@ -117,8 +122,7 @@ import java.util.concurrent.TimeUnit;
* Contains logic for managing the toolbar visual component. This class manages the interactions
* with the rest of the application to ensure the toolbar is always visually up to date.
*/
public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListener {
public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlFocusChangeListener {
/**
* Handle UI updates of menu icons. Only applicable for phones.
*/
......@@ -195,6 +199,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
private final Callback<Boolean> mUrlFocusChangedCallback;
private final Handler mHandler = new Handler();
private final ChromeActivity mActivity;
private UrlFocusChangeListener mLocationBarFocusObserver;
private BrowserStateBrowserControlsVisibilityDelegate mControlsVisibilityDelegate;
private int mFullscreenFocusToken = FullscreenManager.INVALID_TOKEN;
......@@ -249,12 +254,73 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
mToolbarActionModeCallback = new ToolbarActionModeCallback();
mLocationBarFocusObserver = new UrlFocusChangeListener() {
/** The params used to control how the scrim behaves when shown for the omnibox. */
private ScrimParams mScrimParams;
/** The light color to use for the scrim on the NTP. */
private int mLightScrimColor;
@Override
public void onUrlFocusChange(boolean hasFocus) {
if (mScrimParams == null) {
Resources res = mActivity.getResources();
int topMargin = res.getDimensionPixelSize(R.dimen.tab_strip_height);
mLightScrimColor = ApiCompatibilityUtils.getColor(
res, R.color.omnibox_focused_fading_background_color_light);
View scrimTarget = mActivity.getCompositorViewHolder();
mScrimParams = new ScrimView.ScrimParams(
scrimTarget, true, false, topMargin, ToolbarManager.this);
}
boolean isTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity);
mScrimParams.backgroundColor =
!isTablet && !mLocationBarModel.isIncognito() ? mLightScrimColor : null;
if (hasFocus && !showScrimAfterAnimationCompletes()) {
mActivity.getScrim().showScrim(mScrimParams);
} else if (!hasFocus) {
mActivity.getScrim().hideScrim(true);
}
}
@Override
public void onUrlAnimationFinished(boolean hasFocus) {
if (hasFocus && showScrimAfterAnimationCompletes()) {
mActivity.getScrim().showScrim(mScrimParams);
}
}
/**
* @return Whether the scrim should wait to be shown until after the omnibox is done
* animating.
*/
private boolean showScrimAfterAnimationCompletes() {
if (mLocationBarModel.getNewTabPageForCurrentTab() == null) return false;
return mLocationBarModel.getNewTabPageForCurrentTab().isLocationBarShownInNTP();
}
};
mToolbarProvider = AsyncViewProvider.of(controlContainer, R.id.toolbar_stub, R.id.toolbar);
mToolbarProvider.whenLoaded((toolbar)
-> onToolbarInflationComplete(toolbar, menuHandler,
appMenuPropertiesDelegate, invalidator));
}
@Override
public void onScrimClick() {
setUrlBarFocus(false);
}
@Override
public void onScrimVisibilityChanged(boolean visible) {
if (visible) {
mActivity.addViewObscuringAllTabs(mActivity.getScrim());
} else {
mActivity.removeViewObscuringAllTabs(mActivity.getScrim());
}
}
private void onToolbarInflationComplete(ToolbarLayout toolbar, final AppMenuHandler menuHandler,
AppMenuPropertiesDelegate appMenuPropertiesDelegate, Invalidator invalidator) {
mToolbar = toolbar;
......@@ -281,6 +347,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
mActionModeController.getActionModeCallback());
mLocationBar.initializeControls(
new WindowDelegate(mActivity.getWindow()), mActivity.getWindowAndroid());
mLocationBar.addUrlFocusChangeListener(mLocationBarFocusObserver);
setMenuHandler(menuHandler);
toolbar.initialize(mLocationBarModel, this, mAppMenuButtonHelper);
......@@ -1169,6 +1236,10 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
}
mLocationBarModel.destroy();
mHandler.removeCallbacksAndMessages(null); // Cancel delayed tasks.
if (mLocationBar != null) {
mLocationBar.removeUrlFocusChangeListener(mLocationBarFocusObserver);
mLocationBarFocusObserver = null;
}
}
/**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment