Commit 2197aac0 authored by Brandon Wylie's avatar Brandon Wylie Committed by Chromium LUCI CQ

Move color/tint methods from LocationBarLayout to LocationBarMediator

Bug: 1147581
Change-Id: I291f529cbb1686c6135791b99268f3cb310d4c98
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2587562Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Commit-Queue: Brandon Wylie <wylieb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#844193}
parent 513226bd
......@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.omnibox.status.StatusView;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsDropdownEmbedder;
import org.chromium.chrome.browser.omnibox.voice.AssistantVoiceSearchService;
import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
import org.chromium.chrome.browser.profiles.Profile;
......@@ -117,15 +116,12 @@ public final class LocationBarCoordinator implements LocationBar, NativeInitObse
mAutocompleteAnchorView = autocompleteAnchorView;
mUrlBar = mLocationBarLayout.findViewById(R.id.url_bar);
OneshotSupplierImpl<AssistantVoiceSearchService> assistantVoiceSearchSupplier =
new OneshotSupplierImpl();
// TODO(crbug.com/1151513): Inject LocaleManager instance to LocationBarCoordinator instead
// of using the singleton.
mLocationBarMediator = new LocationBarMediator(mLocationBarLayout, locationBarDataProvider,
assistantVoiceSearchSupplier, profileObservableSupplier,
mLocationBarMediator = new LocationBarMediator(mLocationBarLayout.getContext(),
mLocationBarLayout, locationBarDataProvider, profileObservableSupplier,
PrivacyPreferencesManagerImpl.getInstance(), overrideUrlLoadingDelegate,
LocaleManager.getInstance(), mTemplateUrlServiceSupplier);
mUrlCoordinator =
new UrlBarCoordinator((UrlBar) mUrlBar, windowDelegate, actionModeCallback,
mCallbackController.makeCancelable(mLocationBarMediator::onUrlFocusChange),
......@@ -155,7 +151,7 @@ public final class LocationBarCoordinator implements LocationBar, NativeInitObse
mLocationBarLayout.addUrlFocusChangeListener(mUrlCoordinator);
mLocationBarLayout.initialize(mAutocompleteCoordinator, mUrlCoordinator, mStatusCoordinator,
locationBarDataProvider, windowDelegate, windowAndroid,
mLocationBarMediator.getVoiceRecognitionHandler(), assistantVoiceSearchSupplier);
mLocationBarMediator.getVoiceRecognitionHandler());
if (locationBarLayout instanceof LocationBarPhone) {
mSubCoordinator = new LocationBarCoordinatorPhone(
......
......@@ -5,6 +5,8 @@
package org.chromium.chrome.browser.omnibox;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
......@@ -28,7 +30,6 @@ import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ObserverList;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.omnibox.UrlBar.ScrollType;
......@@ -37,15 +38,12 @@ import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader;
import org.chromium.chrome.browser.omnibox.status.StatusCoordinator;
import org.chromium.chrome.browser.omnibox.status.StatusView;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator;
import org.chromium.chrome.browser.omnibox.voice.AssistantVoiceSearchService;
import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
import org.chromium.components.browser_ui.styles.ChromeColors;
import org.chromium.components.browser_ui.widget.CompositeTouchDelegate;
import org.chromium.components.embedder_support.util.UrlUtilities;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.util.ColorUtils;
import java.util.ArrayList;
import java.util.List;
......@@ -91,8 +89,6 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
protected CompositeTouchDelegate mCompositeTouchDelegate;
private OneshotSupplier<AssistantVoiceSearchService> mAssistantVoiceSearchServiceSupplier;
public LocationBarLayout(Context context, AttributeSet attrs) {
this(context, attrs, R.layout.location_bar);
......@@ -158,17 +154,13 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
@NonNull UrlBarCoordinator urlCoordinator, @NonNull StatusCoordinator statusCoordinator,
@NonNull LocationBarDataProvider locationBarDataProvider,
@NonNull WindowDelegate windowDelegate, @NonNull WindowAndroid windowAndroid,
@NonNull VoiceRecognitionHandler voiceRecognitionHandler,
@NonNull OneshotSupplier<AssistantVoiceSearchService> assistantVoiceSearchSupplier) {
@NonNull VoiceRecognitionHandler voiceRecognitionHandler) {
mAutocompleteCoordinator = autocompleteCoordinator;
mUrlCoordinator = urlCoordinator;
mStatusCoordinator = statusCoordinator;
mWindowAndroid = windowAndroid;
mLocationBarDataProvider = locationBarDataProvider;
mVoiceRecognitionHandler = voiceRecognitionHandler;
mAssistantVoiceSearchServiceSupplier = assistantVoiceSearchSupplier;
mAssistantVoiceSearchServiceSupplier.onAvailable(
(assistantVoiceSearchService) -> onAssistantVoiceSearchServiceChanged());
updateButtonVisibility();
updateShouldAnimateIconChanges();
......@@ -194,8 +186,6 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
}
mDeferredNativeRunnables.clear();
onPrimaryColorChanged();
updateMicButtonVisibility();
}
......@@ -211,6 +201,18 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
mUrlFocusedWithoutAnimations = isUrlFocusedWithoutAnimations;
}
/* package */ void setMicButtonDrawable(Drawable drawable) {
mMicButton.setImageDrawable(drawable);
}
/* package */ void setMicButtonTint(ColorStateList colorStateList) {
ApiCompatibilityUtils.setImageTintList(mMicButton, colorStateList);
}
/* package */ void setDeleteButtonTint(ColorStateList colorStateList) {
ApiCompatibilityUtils.setImageTintList(mDeleteButton, colorStateList);
}
/**
* Override the default LocationBarDataProvider in tests. Production code should use the
* {@link #initialize} method instead.
......@@ -312,48 +314,6 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
if (visibility == View.VISIBLE) updateMicButtonState();
}
/** Updates visuals after the primary color has changed. */
@CallSuper
public void onPrimaryColorChanged() {
updateAssistantVoiceSearchDrawableAndColors();
updateUseDarkColors();
}
/**
* Update visuals to use a correct light or dark color scheme depending on the primary color.
*/
private void updateUseDarkColors() {
// TODO(crbug.com/1114183): Unify light and dark color logic in chrome and make it clear
// whether the foreground or background color is dark.
final boolean useDarkColors =
!ColorUtils.shouldUseLightForegroundOnBackground(getPrimaryBackgroundColor());
ApiCompatibilityUtils.setImageTintList(
mDeleteButton, ChromeColors.getPrimaryIconTint(getContext(), !useDarkColors));
// If the URL changed colors and is not focused, update the URL to account for the new
// color scheme.
if (mUrlCoordinator.setUseDarkTextColors(useDarkColors) && !mUrlBar.hasFocus()) {
setUrl(mLocationBarDataProvider.getCurrentUrl());
}
mStatusCoordinator.setUseDarkColors(useDarkColors);
if (mAutocompleteCoordinator != null) {
mAutocompleteCoordinator.updateVisualsForState(
useDarkColors, mLocationBarDataProvider.isIncognito());
}
}
/** Returns the primary color based on the url focus, and incognito state. */
private int getPrimaryBackgroundColor() {
// If the url bar is focused, the toolbar background color is the default color regardless
// of whether it is branded or not.
if (mUrlHasFocus) {
return ChromeColors.getDefaultThemeColor(
getResources(), mLocationBarDataProvider.isIncognito());
} else {
return mLocationBarDataProvider.getPrimaryColor();
}
}
protected void onNtpStartedLoading() {}
public View getContainerView() {
......@@ -368,21 +328,6 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
return mWindowAndroid;
}
/* package */ void onAssistantVoiceSearchServiceChanged() {
updateAssistantVoiceSearchDrawableAndColors();
}
private void updateAssistantVoiceSearchDrawableAndColors() {
AssistantVoiceSearchService assistantVoiceSearchService =
mAssistantVoiceSearchServiceSupplier.get();
if (assistantVoiceSearchService == null) return;
ApiCompatibilityUtils.setImageTintList(mMicButton,
assistantVoiceSearchService.getMicButtonColorStateList(
getPrimaryBackgroundColor(), getContext()));
mMicButton.setImageDrawable(assistantVoiceSearchService.getCurrentMicDrawable());
}
/**
* Call to notify the location bar that the state of the voice search microphone button may
* need to be updated.
......@@ -498,7 +443,6 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
mUrlHasFocus = hasFocus;
updateButtonVisibility();
updateShouldAnimateIconChanges();
onPrimaryColorChanged();
if (mUrlHasFocus) {
if (mNativeInitialized) RecordUserAction.record("FocusLocation");
......@@ -781,6 +725,9 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener {
updateShouldAnimateIconChanges();
}
/** Update the status visibility according to the current state held in LocationBar. */
/* package */ void updateStatusVisibility() {}
public void setVoiceRecognitionHandlerForTesting(
VoiceRecognitionHandler voiceRecognitionHandler) {
mVoiceRecognitionHandler = voiceRecognitionHandler;
......
......@@ -41,6 +41,7 @@ import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImp
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.util.KeyNavigationUtil;
import org.chromium.components.browser_ui.styles.ChromeColors;
import org.chromium.components.embedder_support.util.UrlUtilities;
import org.chromium.components.externalauth.ExternalAuthUtils;
import org.chromium.components.search_engines.TemplateUrl;
......@@ -50,6 +51,7 @@ import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.common.ResourceRequestBody;
import org.chromium.ui.base.PageTransition;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.util.ColorUtils;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -66,8 +68,8 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
private final LocationBarLayout mLocationBarLayout;
private VoiceRecognitionHandler mVoiceRecognitionHandler;
private final LocationBarDataProvider mLocationBarDataProvider;
private AssistantVoiceSearchService mAssistantVoiceSearchService;
private final OneshotSupplierImpl<AssistantVoiceSearchService> mAssistantVoiceSearchSupplier;
private final OneshotSupplierImpl<AssistantVoiceSearchService>
mAssistantVoiceSearchServiceSupplier = new OneshotSupplierImpl<>();
private StatusCoordinator mStatusCoordinator;
private AutocompleteCoordinator mAutocompleteCoordinator;
private OmniboxPrerender mOmniboxPrerender;
......@@ -80,24 +82,26 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
private final List<Runnable> mDeferredNativeRunnables = new ArrayList<>();
private final OneshotSupplier<TemplateUrlService> mTemplateUrlServiceSupplier;
private TemplateUrl mSearchEngine;
private final Context mContext;
private boolean mNativeInitialized;
/*package */ LocationBarMediator(@NonNull LocationBarLayout locationBarLayout,
/*package */ LocationBarMediator(@NonNull Context context,
@NonNull LocationBarLayout locationBarLayout,
@NonNull LocationBarDataProvider locationBarDataProvider,
@NonNull OneshotSupplierImpl<AssistantVoiceSearchService> assistantVoiceSearchSupplier,
@NonNull ObservableSupplier<Profile> profileSupplier,
@NonNull PrivacyPreferencesManagerImpl privacyPreferencesManager,
@NonNull OverrideUrlLoadingDelegate overrideUrlLoadingDelegate,
@NonNull LocaleManager localeManager,
@NonNull OneshotSupplier<TemplateUrlService> templateUrlServiceSupplier) {
mContext = context;
mLocationBarLayout = locationBarLayout;
mLocationBarDataProvider = locationBarDataProvider;
mLocationBarDataProvider.addObserver(this);
mAssistantVoiceSearchSupplier = assistantVoiceSearchSupplier;
mOverrideUrlLoadingDelegate = overrideUrlLoadingDelegate;
mLocaleManager = localeManager;
mVoiceRecognitionHandler = new VoiceRecognitionHandler(this, mAssistantVoiceSearchSupplier);
mVoiceRecognitionHandler =
new VoiceRecognitionHandler(this, mAssistantVoiceSearchServiceSupplier);
mProfileSupplier = profileSupplier;
mProfileSupplier.addObserver(mCallbackController.makeCancelable(this::setProfile));
mPrivacyPreferencesManager = privacyPreferencesManager;
......@@ -120,9 +124,8 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
}
/*package */ void destroy() {
if (mAssistantVoiceSearchService != null) {
mAssistantVoiceSearchService.destroy();
mAssistantVoiceSearchService = null;
if (mAssistantVoiceSearchServiceSupplier.get() != null) {
mAssistantVoiceSearchServiceSupplier.get().destroy();
}
mStatusCoordinator = null;
mAutocompleteCoordinator = null;
......@@ -140,19 +143,22 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
/*package */ void onUrlFocusChange(boolean hasFocus) {
mLocationBarLayout.onUrlFocusChange(hasFocus);
onPrimaryColorChanged();
mLocationBarLayout.updateStatusVisibility();
}
/*package */ void onFinishNativeInitialization() {
mNativeInitialized = true;
mTemplateUrlServiceSupplier.get().runWhenLoaded(this::registerTemplateUrlObserver);
mOmniboxPrerender = new OmniboxPrerender();
Context context = mLocationBarLayout.getContext();
mAssistantVoiceSearchService = new AssistantVoiceSearchService(context,
mAssistantVoiceSearchServiceSupplier.set(new AssistantVoiceSearchService(mContext,
ExternalAuthUtils.getInstance(), mTemplateUrlServiceSupplier.get(),
GSAState.getInstance(context), this, SharedPreferencesManager.getInstance());
mAssistantVoiceSearchSupplier.set(mAssistantVoiceSearchService);
GSAState.getInstance(mContext), this, SharedPreferencesManager.getInstance()));
onAssistantVoiceSearchServiceChanged();
mLocationBarLayout.onFinishNativeInitialization();
setProfile(mProfileSupplier.get());
onPrimaryColorChanged();
mLocationBarLayout.updateStatusVisibility();
for (Runnable deferredRunnable : mDeferredNativeRunnables) {
mLocationBarLayout.post(deferredRunnable);
......@@ -174,8 +180,19 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
mLocationBarLayout.setVoiceRecognitionHandlerForTesting(voiceRecognitionHandler);
}
/* package */ void setAssistantVoiceSearchServiceForTesting(
AssistantVoiceSearchService assistantVoiceSearchService) {
mAssistantVoiceSearchServiceSupplier.set(assistantVoiceSearchService);
onAssistantVoiceSearchServiceChanged();
}
/* package */ OneshotSupplier<AssistantVoiceSearchService>
getAssistantVoiceSearchServiceSupplierForTesting() {
return mAssistantVoiceSearchServiceSupplier;
}
/*package */ void updateVisualsForState() {
mLocationBarLayout.onPrimaryColorChanged();
onPrimaryColorChanged();
}
/*package */ void setShowTitle(boolean showTitle) {
......@@ -350,6 +367,54 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
}
}
@VisibleForTesting
/* package */ void updateAssistantVoiceSearchDrawableAndColors() {
AssistantVoiceSearchService assistantVoiceSearchService =
mAssistantVoiceSearchServiceSupplier.get();
if (assistantVoiceSearchService == null) return;
mLocationBarLayout.setMicButtonTint(assistantVoiceSearchService.getMicButtonColorStateList(
getPrimaryBackgroundColor(), mContext));
mLocationBarLayout.setMicButtonDrawable(
assistantVoiceSearchService.getCurrentMicDrawable());
}
/**
* Update visuals to use a correct light or dark color scheme depending on the primary color.
*/
@VisibleForTesting
/* package */ void updateUseDarkColors() {
// TODO(crbug.com/1114183): Unify light and dark color logic in chrome and make it clear
// whether the foreground or background color is dark.
final boolean useDarkColors =
!ColorUtils.shouldUseLightForegroundOnBackground(getPrimaryBackgroundColor());
mLocationBarLayout.setDeleteButtonTint(
ChromeColors.getPrimaryIconTint(mContext, !useDarkColors));
// If the URL changed colors and is not focused, update the URL to account for the new
// color scheme.
if (mUrlCoordinator.setUseDarkTextColors(useDarkColors) && !isUrlBarFocused()) {
mLocationBarLayout.setUrl(mLocationBarDataProvider.getCurrentUrl());
}
mStatusCoordinator.setUseDarkColors(useDarkColors);
if (mAutocompleteCoordinator != null) {
mAutocompleteCoordinator.updateVisualsForState(
useDarkColors, mLocationBarDataProvider.isIncognito());
}
}
/** Returns the primary color based on the url focus, and incognito state. */
private int getPrimaryBackgroundColor() {
// If the url bar is focused, the toolbar background color is the default color regardless
// of whether it is branded or not.
if (isUrlBarFocused()) {
return ChromeColors.getDefaultThemeColor(
mContext.getResources(), mLocationBarDataProvider.isIncognito());
} else {
return mLocationBarDataProvider.getPrimaryColor();
}
}
// LocationBarData.Observer implementation
// Using the default empty onSecurityStateChanged.
// Using the default empty onTitleChanged.
......@@ -366,7 +431,9 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
@Override
public void onPrimaryColorChanged() {
mLocationBarLayout.onPrimaryColorChanged();
updateAssistantVoiceSearchDrawableAndColors();
updateUseDarkColors();
mLocationBarLayout.updateStatusVisibility();
}
@Override
......@@ -443,7 +510,7 @@ class LocationBarMediator implements LocationBarDataProvider.Observer, FakeboxDe
@Override
public void onAssistantVoiceSearchServiceChanged() {
mLocationBarLayout.onAssistantVoiceSearchServiceChanged();
updateAssistantVoiceSearchDrawableAndColors();
}
// VoiceRecognitionHandler.Delegate implementation.
......
......@@ -171,14 +171,6 @@ class LocationBarPhone extends LocationBarLayout {
mStatusCoordinator.setShowIconsWhenUrlFocused(showIcon);
}
@Override
public void onPrimaryColorChanged() {
super.onPrimaryColorChanged();
boolean isIncognito = mLocationBarDataProvider.isIncognito();
setShowIconsWhenUrlFocused(SearchEngineLogoUtils.shouldShowSearchEngineLogo(isIncognito));
updateStatusVisibility();
}
@Override
protected void onNtpStartedLoading() {
super.onNtpStartedLoading();
......@@ -219,8 +211,11 @@ class LocationBarPhone extends LocationBarLayout {
}
/** Update the status visibility according to the current state held in LocationBar. */
private void updateStatusVisibility() {
@Override
/* package */ void updateStatusVisibility() {
boolean incognito = mLocationBarDataProvider.isIncognito();
setShowIconsWhenUrlFocused(SearchEngineLogoUtils.shouldShowSearchEngineLogo(incognito));
if (!SearchEngineLogoUtils.shouldShowSearchEngineLogo(incognito)) {
return;
}
......
......@@ -16,13 +16,11 @@ import android.view.View;
import androidx.annotation.NonNull;
import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.download.DownloadUtils;
import org.chromium.chrome.browser.omnibox.status.StatusCoordinator;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator;
import org.chromium.chrome.browser.omnibox.voice.AssistantVoiceSearchService;
import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.top.ToolbarTablet;
......@@ -119,11 +117,9 @@ class LocationBarTablet extends LocationBarLayout {
@NonNull UrlBarCoordinator urlCoordinator, @NonNull StatusCoordinator statusCoordinator,
@NonNull LocationBarDataProvider locationBarDataProvider,
@NonNull WindowDelegate windowDelegate, @NonNull WindowAndroid windowAndroid,
@NonNull VoiceRecognitionHandler voiceRecognitionHandler,
@NonNull OneshotSupplier<AssistantVoiceSearchService> assistantVoiceSearchSupplier) {
@NonNull VoiceRecognitionHandler voiceRecognitionHandler) {
super.initialize(autocompleteCoordinator, urlCoordinator, statusCoordinator,
locationBarDataProvider, windowDelegate, windowAndroid, voiceRecognitionHandler,
assistantVoiceSearchSupplier);
locationBarDataProvider, windowDelegate, windowAndroid, voiceRecognitionHandler);
mStatusCoordinator.setShowIconsWhenUrlFocused(true);
if (SearchEngineLogoUtils.shouldShowSearchEngineLogo(
mLocationBarDataProvider.isIncognito())) {
......
......@@ -12,7 +12,6 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.locale.LocaleManager;
......@@ -24,7 +23,6 @@ import org.chromium.chrome.browser.omnibox.UrlBarCoordinator.SelectionState;
import org.chromium.chrome.browser.omnibox.UrlBarData;
import org.chromium.chrome.browser.omnibox.status.StatusCoordinator;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator;
import org.chromium.chrome.browser.omnibox.voice.AssistantVoiceSearchService;
import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
import org.chromium.chrome.browser.toolbar.top.ToolbarPhone;
import org.chromium.ui.base.WindowAndroid;
......@@ -60,12 +58,9 @@ public class SearchActivityLocationBarLayout extends LocationBarLayout {
@NonNull UrlBarCoordinator urlCoordinator, @NonNull StatusCoordinator statusCoordinator,
@NonNull LocationBarDataProvider locationBarDataProvider,
@NonNull WindowDelegate windowDelegate, @NonNull WindowAndroid windowAndroid,
@NonNull VoiceRecognitionHandler voiceRecognitionHandler,
@NonNull OneshotSupplier<AssistantVoiceSearchService>
assistantVoiceSearchServiceSupplier) {
@NonNull VoiceRecognitionHandler voiceRecognitionHandler) {
super.initialize(autocompleteCoordinator, urlCoordinator, statusCoordinator,
locationBarDataProvider, windowDelegate, windowAndroid, voiceRecognitionHandler,
assistantVoiceSearchServiceSupplier);
locationBarDataProvider, windowDelegate, windowAndroid, voiceRecognitionHandler);
mPendingSearchPromoDecision = LocaleManager.getInstance().needToCheckForSearchEnginePromo();
getAutocompleteCoordinator().setShouldPreventOmniboxAutocomplete(
mPendingSearchPromoDecision);
......
......@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.omnibox;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
......@@ -13,17 +14,17 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.notNull;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.text.TextUtils;
import android.view.KeyEvent;
......@@ -39,8 +40,10 @@ import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatcher;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.chromium.base.BuildConfig;
......@@ -85,9 +88,7 @@ public class LocationBarMediatorTest {
public JniMocker mJniMocker = new JniMocker();
@Mock
LocationBarLayout mLocationBarLayout;
@Mock
Context mContext;
private LocationBarLayout mLocationBarLayout;
@Mock
private TemplateUrlService mTemplateUrlService;
@Mock
......@@ -137,14 +138,14 @@ public class LocationBarMediatorTest {
@Before
public void setUp() {
doReturn(mContext).when(mLocationBarLayout).getContext();
doReturn(mTemplateUrlService).when(mTemplateUrlServiceSupplier).get();
mJniMocker.mock(ProfileJni.TEST_HOOKS, mProfileNativesJniMock);
mJniMocker.mock(OmniboxPrerenderJni.TEST_HOOKS, mPrerenderJni);
SearchEngineLogoUtils.setDelegateForTesting(mSearchEngineDelegate);
mMediator = new LocationBarMediator(mLocationBarLayout, mLocationBarDataProvider,
mAssistantVoiceSearchSupplier, mProfileSupplier, mPrivacyPreferencesManager,
mOverrideUrlLoadingDelegate, mLocaleManager, mTemplateUrlServiceSupplier);
mMediator = new LocationBarMediator(/* context= */ RuntimeEnvironment.application,
mLocationBarLayout, mLocationBarDataProvider, mProfileSupplier,
mPrivacyPreferencesManager, mOverrideUrlLoadingDelegate, mLocaleManager,
mTemplateUrlServiceSupplier);
mMediator.setCoordinators(mUrlCoordinator, mAutocompleteCoordinator, mStatusCoordinator);
SearchEngineLogoUtils.setDelegateForTesting(mSearchEngineDelegate);
}
......@@ -152,14 +153,14 @@ public class LocationBarMediatorTest {
@Test
public void testVoiceSearchService_initializedWithNative() {
mMediator.onFinishNativeInitialization();
verify(mAssistantVoiceSearchSupplier).set(notNull());
assertNotNull(mMediator.getAssistantVoiceSearchServiceSupplierForTesting().get());
}
@Test
@Features.DisableFeatures(ChromeFeatureList.OMNIBOX_ASSISTANT_VOICE_SEARCH)
public void testVoiceSearchService_initializedWithNative_featureDisabled() {
mMediator.onFinishNativeInitialization();
verify(mAssistantVoiceSearchSupplier).set(notNull());
assertNotNull(mMediator.getAssistantVoiceSearchServiceSupplierForTesting().get());
}
@Test
......@@ -542,6 +543,45 @@ public class LocationBarMediatorTest {
false, SearchEngineLogoUtils.getSearchLogoUrl(mTemplateUrlService));
}
@Test
public void testUpdateAssistantVoiceSearchDrawablesAndColors() {
AssistantVoiceSearchService avs = Mockito.mock(AssistantVoiceSearchService.class);
ColorStateList csl = Mockito.mock(ColorStateList.class);
doReturn(csl).when(avs).getMicButtonColorStateList(anyInt(), anyObject());
mMediator.setAssistantVoiceSearchServiceForTesting(avs);
verify(mLocationBarLayout).setMicButtonTint(csl);
}
@Test
public void testUpdateAssistantVoiceSearchDrawablesAndColors_serviceNull() {
mMediator.updateAssistantVoiceSearchDrawableAndColors();
// If the service is null, the update method bails out.
verify(mLocationBarLayout, Mockito.times(0)).setMicButtonTint(/* arbitrary value */ null);
}
@Test
public void testUpdateUseDarkColors() {
mMediator.updateUseDarkColors();
verify(mLocationBarLayout).setDeleteButtonTint(anyObject());
verify(mStatusCoordinator).setUseDarkColors(false);
verify(mAutocompleteCoordinator)
.updateVisualsForState(/* useDarkColors= */ false, /* incognito= */ false);
}
@Test
public void testUpdateUseDarkColors_setUseDarkTextColors() {
doReturn("https://www.google.com").when(mLocationBarDataProvider).getCurrentUrl();
doReturn(true).when(mUrlCoordinator).setUseDarkTextColors(false);
mMediator.updateUseDarkColors();
verify(mLocationBarLayout).setDeleteButtonTint(anyObject());
verify(mLocationBarLayout).setUrl("https://www.google.com");
verify(mStatusCoordinator).setUseDarkColors(false);
verify(mAutocompleteCoordinator)
.updateVisualsForState(/* useDarkColors= */ false, /* incognito= */ false);
}
private ArgumentMatcher<UrlBarData> matchesUrlBarDataForQuery(String query) {
return actual -> {
UrlBarData expected = UrlBarData.forNonUrlText(query);
......
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