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> ...@@ -399,6 +399,12 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
try (TraceEvent te = TraceEvent.scoped("ChromeActivity.postInflationStartup")) { try (TraceEvent te = TraceEvent.scoped("ChromeActivity.postInflationStartup")) {
super.postInflationStartup(); super.postInflationStartup();
ViewGroup coordinator = findViewById(R.id.coordinator);
mScrimView = new ScrimView(this, (fraction) -> {
mStatusBarScrimFraction = fraction;
setStatusBarColor(null, mBaseStatusBarColor);
}, coordinator);
Intent intent = getIntent(); Intent intent = getIntent();
if (intent != null && getSavedInstanceState() == null) { if (intent != null && getSavedInstanceState() == null) {
VrModuleProvider.getDelegate().maybeHandleVrIntentPreNative(this, intent); VrModuleProvider.getDelegate().maybeHandleVrIntentPreNative(this, intent);
...@@ -1434,11 +1440,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -1434,11 +1440,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
super.finishNativeInitialization(); super.finishNativeInitialization();
ViewGroup coordinator = findViewById(R.id.coordinator); 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 accessoryBarStub = findViewById(R.id.keyboard_accessory_stub);
ViewStub accessorySheetStub = findViewById(R.id.keyboard_accessory_sheet_stub); ViewStub accessorySheetStub = findViewById(R.id.keyboard_accessory_sheet_stub);
if (accessoryBarStub != null && accessorySheetStub != null) { if (accessoryBarStub != null && accessorySheetStub != null) {
...@@ -1453,10 +1454,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -1453,10 +1454,6 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
// to setup. // to setup.
mPageViewTimer = createPageViewTimer(); mPageViewTimer = createPageViewTimer();
if (mToolbarManager != null && mToolbarManager.getToolbar() != null) {
mToolbarManager.getToolbar().setScrim(mScrimView);
}
if (supportsContextualSuggestionsBottomSheet() if (supportsContextualSuggestionsBottomSheet()
&& FeatureUtilities.areContextualSuggestionsEnabled(this)) { && FeatureUtilities.areContextualSuggestionsEnabled(this)) {
getLayoutInflater().inflate(R.layout.bottom_sheet, coordinator); getLayoutInflater().inflate(R.layout.bottom_sheet, coordinator);
......
...@@ -17,7 +17,6 @@ import org.chromium.chrome.browser.tab.Tab; ...@@ -17,7 +17,6 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.Toolbar; import org.chromium.chrome.browser.toolbar.Toolbar;
import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback; import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback;
import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.base.WindowAndroid;
/** /**
...@@ -167,11 +166,6 @@ public interface LocationBar extends UrlBarDelegate { ...@@ -167,11 +166,6 @@ public interface LocationBar extends UrlBarDelegate {
*/ */
int getUrlContainerMarginEnd(); 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. * Called to set the width of the location bar when the url bar is not focused.
* *
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
package org.chromium.chrome.browser.omnibox; package org.chromium.chrome.browser.omnibox;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.content.res.Configuration; import android.content.res.Configuration;
...@@ -32,7 +31,6 @@ import org.chromium.base.ObserverList; ...@@ -32,7 +31,6 @@ import org.chromium.base.ObserverList;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.WindowDelegate; import org.chromium.chrome.browser.WindowDelegate;
...@@ -58,8 +56,6 @@ import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback; ...@@ -58,8 +56,6 @@ import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback;
import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; import org.chromium.chrome.browser.toolbar.ToolbarDataProvider;
import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.chrome.browser.toolbar.ToolbarManager;
import org.chromium.chrome.browser.util.ColorUtils; 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.content_public.browser.LoadUrlParams;
import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.PageTransition;
...@@ -74,15 +70,9 @@ import java.util.List; ...@@ -74,15 +70,9 @@ import java.util.List;
*/ */
public class LocationBarLayout extends FrameLayout public class LocationBarLayout extends FrameLayout
implements OnClickListener, LocationBar, AutocompleteDelegate, FakeboxDelegate, implements OnClickListener, LocationBar, AutocompleteDelegate, FakeboxDelegate,
ScrimView.ScrimObserver, LocationBarVoiceRecognitionHandler.Delegate, LocationBarVoiceRecognitionHandler.Delegate, StatusViewCoordinator.Delegate {
StatusViewCoordinator.Delegate {
private static final String TAG = "cr_LocationBar"; 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 mDeleteButton;
protected AppCompatImageButton mMicButton; protected AppCompatImageButton mMicButton;
protected View mUrlBar; protected View mUrlBar;
...@@ -105,8 +95,6 @@ public class LocationBarLayout extends FrameLayout ...@@ -105,8 +95,6 @@ public class LocationBarLayout extends FrameLayout
private WindowAndroid mWindowAndroid; private WindowAndroid mWindowAndroid;
private WindowDelegate mWindowDelegate; private WindowDelegate mWindowDelegate;
private ScrimView mScrim;
private boolean mUrlHasFocus; private boolean mUrlHasFocus;
protected boolean mUrlFocusChangeInProgress; protected boolean mUrlFocusChangeInProgress;
private boolean mUrlFocusedFromFakebox; private boolean mUrlFocusedFromFakebox;
...@@ -163,8 +151,6 @@ public class LocationBarLayout extends FrameLayout ...@@ -163,8 +151,6 @@ public class LocationBarLayout extends FrameLayout
LayoutInflater.from(context).inflate(layoutId, this, true); LayoutInflater.from(context).inflate(layoutId, this, true);
mLightScrimColor = ApiCompatibilityUtils.getColor(
context.getResources(), R.color.omnibox_focused_fading_background_color_light);
mIsTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(context); mIsTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(context);
mDeleteButton = (AppCompatImageButton) findViewById(R.id.delete_button); mDeleteButton = (AppCompatImageButton) findViewById(R.id.delete_button);
...@@ -481,8 +467,6 @@ public class LocationBarLayout extends FrameLayout ...@@ -481,8 +467,6 @@ public class LocationBarLayout extends FrameLayout
for (UrlFocusChangeListener listener : mUrlFocusChangeListeners) { for (UrlFocusChangeListener listener : mUrlFocusChangeListeners) {
listener.onUrlFocusChange(hasFocus); listener.onUrlFocusChange(hasFocus);
} }
updateFadingBackgroundView(hasFocus, false);
} }
@Override @Override
...@@ -982,67 +966,6 @@ public class LocationBarLayout extends FrameLayout ...@@ -982,67 +966,6 @@ public class LocationBarLayout extends FrameLayout
return !mToolbarDataProvider.isIncognito(); 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 @Override
public void setUnfocusedWidth(float unfocusedWidth) { public void setUnfocusedWidth(float unfocusedWidth) {
mStatusViewCoordinator.setUnfocusedLocationBarWidth(unfocusedWidth); mStatusViewCoordinator.setUnfocusedLocationBarWidth(unfocusedWidth);
......
...@@ -14,7 +14,6 @@ import android.view.WindowManager; ...@@ -14,7 +14,6 @@ import android.view.WindowManager;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.WindowDelegate; import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.ntp.NewTabPage;
/** /**
* A location bar implementation specific for smaller/phone screens. * A location bar implementation specific for smaller/phone screens.
...@@ -137,11 +136,6 @@ public class LocationBarPhone extends LocationBarLayout { ...@@ -137,11 +136,6 @@ public class LocationBarPhone extends LocationBarLayout {
getWindowAndroid().getKeyboardDelegate().showKeyboard(mUrlBar); getWindowAndroid().getKeyboardDelegate().showKeyboard(mUrlBar);
} }
setUrlFocusChangeInProgress(false); setUrlFocusChangeInProgress(false);
NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab();
if (hasFocus && ntp != null && ntp.isLocationBarShownInNTP()) {
updateFadingBackgroundView(true, true);
}
} }
@Override @Override
......
...@@ -181,8 +181,6 @@ public class AutocompleteCoordinator ...@@ -181,8 +181,6 @@ public class AutocompleteCoordinator
@Override @Override
public void onUrlFocusChange(boolean hasFocus) { public void onUrlFocusChange(boolean hasFocus) {
if (hasFocus) { if (hasFocus) {
// TODO(mdjones): Move init into visibility update method as it's only caller.
initOmniboxResultsContainer();
if (mNativeInitialized) { if (mNativeInitialized) {
startZeroSuggest(); startZeroSuggest();
} else { } else {
...@@ -289,13 +287,6 @@ public class AutocompleteCoordinator ...@@ -289,13 +287,6 @@ public class AutocompleteCoordinator
return mSuggestionModalShown; return mSuggestionModalShown;
} }
/**
* @return The view containing the suggestions list.
*/
public View getSuggestionContainerView() {
return mOmniboxResultsContainer;
}
/** /**
* @see AutocompleteController#onVoiceResults(List) * @see AutocompleteController#onVoiceResults(List)
*/ */
...@@ -468,7 +459,8 @@ public class AutocompleteCoordinator ...@@ -468,7 +459,8 @@ public class AutocompleteCoordinator
* Update whether the omnibox suggestions are visible. * Update whether the omnibox suggestions are visible.
*/ */
private void updateOmniboxSuggestionsVisibility() { private void updateOmniboxSuggestionsVisibility() {
if (mOmniboxResultsContainer == null || mSuggestionList == null) return; initOmniboxResultsContainer();
if (mSuggestionList == null) return;
boolean isContainerVisible = mOmniboxResultsContainer.getVisibility() == View.VISIBLE; boolean isContainerVisible = mOmniboxResultsContainer.getVisibility() == View.VISIBLE;
boolean shouldBeVisible = mCanShowSuggestions && getSuggestionCount() > 0; boolean shouldBeVisible = mCanShowSuggestions && getSuggestionCount() > 0;
......
...@@ -59,7 +59,6 @@ import org.chromium.chrome.browser.profiles.Profile; ...@@ -59,7 +59,6 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.chrome.browser.util.AccessibilityUtil;
import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.TintedDrawable; import org.chromium.chrome.browser.widget.TintedDrawable;
import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.common.ContentUrlConstants; import org.chromium.content_public.common.ContentUrlConstants;
...@@ -829,9 +828,6 @@ public class CustomTabToolbar ...@@ -829,9 +828,6 @@ public class CustomTabToolbar
return 0; return 0;
} }
@Override
public void setScrim(ScrimView scrim) {}
@Override @Override
public void setUnfocusedWidth(float unfocusedWidth) {} public void setUnfocusedWidth(float unfocusedWidth) {}
} }
...@@ -8,7 +8,6 @@ import android.graphics.Rect; ...@@ -8,7 +8,6 @@ import android.graphics.Rect;
import android.view.View; import android.view.View;
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; 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 * An interface for outside packages to interact with ToolbarLayout. Other than for testing purposes
...@@ -104,9 +103,4 @@ public interface Toolbar { ...@@ -104,9 +103,4 @@ public interface Toolbar {
* @return height of the tab strip in px. * @return height of the tab strip in px.
*/ */
int getTabStripHeight(); 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; ...@@ -44,7 +44,6 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.browser.util.ViewUtils; import org.chromium.chrome.browser.util.ViewUtils;
import org.chromium.chrome.browser.widget.PulseDrawable; import org.chromium.chrome.browser.widget.PulseDrawable;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.ToolbarProgressBar; import org.chromium.chrome.browser.widget.ToolbarProgressBar;
import org.chromium.components.security_state.ConnectionSecurityLevel; import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.ui.UiUtils; import org.chromium.ui.UiUtils;
...@@ -987,9 +986,4 @@ public abstract class ToolbarLayout extends FrameLayout implements Toolbar { ...@@ -987,9 +986,4 @@ public abstract class ToolbarLayout extends FrameLayout implements Toolbar {
if (FeatureUtilities.isNewTabPageButtonEnabled()) if (FeatureUtilities.isNewTabPageButtonEnabled())
ntpButton.setImageResource(R.drawable.ic_home); ntpButton.setImageResource(R.drawable.ic_home);
} }
@Override
public void setScrim(ScrimView scrim) {
getLocationBar().setScrim(scrim);
}
} }
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.toolbar; package org.chromium.chrome.browser.toolbar;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
...@@ -92,6 +93,9 @@ import org.chromium.chrome.browser.toolbar.ActionModeController.ActionBarDelegat ...@@ -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.toolbar.ToolbarButtonSlotData.ToolbarButtonData;
import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.util.FeatureUtilities; 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.ViewHighlighter;
import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager; import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager;
import org.chromium.chrome.browser.widget.findinpage.FindToolbarObserver; import org.chromium.chrome.browser.widget.findinpage.FindToolbarObserver;
...@@ -105,6 +109,7 @@ import org.chromium.content_public.browser.NavigationEntry; ...@@ -105,6 +109,7 @@ import org.chromium.content_public.browser.NavigationEntry;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.AsyncViewProvider; import org.chromium.ui.AsyncViewProvider;
import org.chromium.ui.UiUtils; import org.chromium.ui.UiUtils;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.PageTransition;
import org.chromium.ui.widget.ViewRectProvider; import org.chromium.ui.widget.ViewRectProvider;
...@@ -117,8 +122,7 @@ import java.util.concurrent.TimeUnit; ...@@ -117,8 +122,7 @@ import java.util.concurrent.TimeUnit;
* Contains logic for managing the toolbar visual component. This class manages the interactions * 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. * 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. * Handle UI updates of menu icons. Only applicable for phones.
*/ */
...@@ -195,6 +199,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe ...@@ -195,6 +199,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
private final Callback<Boolean> mUrlFocusChangedCallback; private final Callback<Boolean> mUrlFocusChangedCallback;
private final Handler mHandler = new Handler(); private final Handler mHandler = new Handler();
private final ChromeActivity mActivity; private final ChromeActivity mActivity;
private UrlFocusChangeListener mLocationBarFocusObserver;
private BrowserStateBrowserControlsVisibilityDelegate mControlsVisibilityDelegate; private BrowserStateBrowserControlsVisibilityDelegate mControlsVisibilityDelegate;
private int mFullscreenFocusToken = FullscreenManager.INVALID_TOKEN; private int mFullscreenFocusToken = FullscreenManager.INVALID_TOKEN;
...@@ -249,12 +254,73 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe ...@@ -249,12 +254,73 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
mToolbarActionModeCallback = new ToolbarActionModeCallback(); 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 = AsyncViewProvider.of(controlContainer, R.id.toolbar_stub, R.id.toolbar);
mToolbarProvider.whenLoaded((toolbar) mToolbarProvider.whenLoaded((toolbar)
-> onToolbarInflationComplete(toolbar, menuHandler, -> onToolbarInflationComplete(toolbar, menuHandler,
appMenuPropertiesDelegate, invalidator)); 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, private void onToolbarInflationComplete(ToolbarLayout toolbar, final AppMenuHandler menuHandler,
AppMenuPropertiesDelegate appMenuPropertiesDelegate, Invalidator invalidator) { AppMenuPropertiesDelegate appMenuPropertiesDelegate, Invalidator invalidator) {
mToolbar = toolbar; mToolbar = toolbar;
...@@ -281,6 +347,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe ...@@ -281,6 +347,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
mActionModeController.getActionModeCallback()); mActionModeController.getActionModeCallback());
mLocationBar.initializeControls( mLocationBar.initializeControls(
new WindowDelegate(mActivity.getWindow()), mActivity.getWindowAndroid()); new WindowDelegate(mActivity.getWindow()), mActivity.getWindowAndroid());
mLocationBar.addUrlFocusChangeListener(mLocationBarFocusObserver);
setMenuHandler(menuHandler); setMenuHandler(menuHandler);
toolbar.initialize(mLocationBarModel, this, mAppMenuButtonHelper); toolbar.initialize(mLocationBarModel, this, mAppMenuButtonHelper);
...@@ -1169,6 +1236,10 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe ...@@ -1169,6 +1236,10 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe
} }
mLocationBarModel.destroy(); mLocationBarModel.destroy();
mHandler.removeCallbacksAndMessages(null); // Cancel delayed tasks. 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