Commit 51e04fde authored by Peter Wen's avatar Peter Wen Committed by Commit Bot

Android: Create AutocompleteCoordinator interface

Convert AutocompleteCoordinator into an interface and move existing code
into AutocompleteCoordinatorImpl. Isolate its creation to
AutocompleteCoordinatorFactory.

Move several inner interfaces out as top-level interfaces. This allows
fewer intra-package imports, especially important for making the factory
as simple as possible.

Reduce visibility of test-only methods to package-private, and create
AutocompleteCoordinatorTestUtils for test support to access these test-
only methods.

Bug: 961368
Change-Id: I37e2f04e8fe1dd76fc754ee67d8ef504525d85ea
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1603093Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Peter Wen <wnwen@chromium.org>
Auto-Submit: Peter Wen <wnwen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#662229}
parent 42be71d2
......@@ -1067,15 +1067,20 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/omnibox/status/StatusProperties.java",
"java/src/org/chromium/chrome/browser/omnibox/status/StatusViewCoordinator.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/AnswersImageFetcher.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorFactory.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteController.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteDelegate.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestion.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionListEmbedder.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionUiType.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionsList.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionCommonProperties.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionListProperties.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionListViewBinder.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionProcessor.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/VoiceSuggestionProvider.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/answer/AnswerSuggestionProcessor.java",
"java/src/org/chromium/chrome/browser/omnibox/suggestions/answer/AnswerSuggestionView.java",
......
......@@ -45,8 +45,9 @@ import org.chromium.chrome.browser.omnibox.UrlBarCoordinator.SelectionState;
import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader;
import org.chromium.chrome.browser.omnibox.status.StatusViewCoordinator;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator.AutocompleteDelegate;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsList;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinatorFactory;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionListEmbedder;
import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferencesManager;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.search_engines.TemplateUrlService;
......@@ -159,8 +160,8 @@ public class LocationBarLayout extends FrameLayout
mUrlCoordinator = new UrlBarCoordinator((UrlBar) mUrlBar);
mUrlCoordinator.setDelegate(this);
OmniboxSuggestionsList.OmniboxSuggestionListEmbedder embedder =
new OmniboxSuggestionsList.OmniboxSuggestionListEmbedder() {
OmniboxSuggestionListEmbedder embedder =
new OmniboxSuggestionListEmbedder() {
@Override
public boolean isTablet() {
return mIsTablet;
......@@ -181,8 +182,8 @@ public class LocationBarLayout extends FrameLayout
return mIsTablet ? LocationBarLayout.this : null;
}
};
mAutocompleteCoordinator =
new AutocompleteCoordinator(this, this, embedder, mUrlCoordinator);
mAutocompleteCoordinator = AutocompleteCoordinatorFactory.createAutocompleteCoordinator(
this, this, embedder, mUrlCoordinator);
addUrlFocusChangeListener(mAutocompleteCoordinator);
mUrlCoordinator.setUrlTextChangeListener(mAutocompleteCoordinator);
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.omnibox.suggestions;
import android.view.ViewGroup;
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
/**
* Factory to create AutocompleteCoordinator instances.
*/
public class AutocompleteCoordinatorFactory {
private AutocompleteCoordinatorFactory() {}
/**
* Constructs a coordinator for the autocomplete system.
*
* @param parent The UI parent component for the autocomplete UI.
* @param delegate The delegate to fulfill additional autocomplete requirements.
* @param listEmbedder The embedder for controlling the display constraints of the suggestions
* list.
* @param urlBarEditingTextProvider Provider of editing text state from the UrlBar.
*/
public static AutocompleteCoordinator createAutocompleteCoordinator(ViewGroup parent,
AutocompleteDelegate delegate, OmniboxSuggestionListEmbedder listEmbedder,
UrlBarEditingTextStateProvider urlBarEditingTextProvider) {
return new AutocompleteCoordinatorImpl(
parent, delegate, listEmbedder, urlBarEditingTextProvider);
}
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.omnibox.suggestions;
import org.chromium.chrome.browser.omnibox.suggestions.editurl.EditUrlSuggestionProcessor;
import org.chromium.ui.base.PageTransition;
/**
* Provides the additional functionality to trigger and interact with autocomplete suggestions.
*/
public interface AutocompleteDelegate extends EditUrlSuggestionProcessor.LocationBarDelegate {
/**
* Notified that the URL text has changed.
*/
void onUrlTextChanged();
/**
* Notified that suggestions have changed.
* @param autocompleteText The inline autocomplete text that can be appended to the
* currently entered user text.
*/
void onSuggestionsChanged(String autocompleteText);
/**
* Notified that the suggestions have been hidden.
*/
void onSuggestionsHidden();
/**
* Requests the keyboard be hidden.
*/
void hideKeyboard();
/**
* Requests that the given URL be loaded in the current tab.
*
* @param url The URL to be loaded.
* @param transition The transition type associated with the url load.
* @param inputStart The time the input started for the load request.
*/
void loadUrl(String url, @PageTransition int transition, long inputStart);
/**
* @return Whether the omnibox was focused via the NTP fakebox.
*/
boolean didFocusUrlFromFakebox();
/**
* @return Whether the URL currently has focus.
*/
boolean isUrlBarFocused();
}
......@@ -30,8 +30,6 @@ import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController.OnSuggestionsReceivedListener;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator.AutocompleteDelegate;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.answer.AnswerSuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.basic.BasicSuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionHost;
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.omnibox.suggestions;
import android.support.annotation.Nullable;
import android.view.View;
import org.chromium.chrome.browser.WindowDelegate;
/**
* Provides the capabilities required to embed the omnibox suggestion list into the UI.
*/
public interface OmniboxSuggestionListEmbedder {
/** Return the anchor view the suggestion list should be drawn below. */
View getAnchorView();
/**
* Return the view that the omnibox suggestions should be aligned horizontally to. The
* view must be a descendant of {@link #getAnchorView()}. If null, the suggestions will
* be aligned to the start of {@link #getAnchorView()}.
*/
@Nullable
View getAlignmentView();
/** Return the delegate used to interact with the Window. */
WindowDelegate getWindowDelegate();
/** Return whether the suggestions are being rendered in the tablet UI. */
boolean isTablet();
}
......@@ -9,7 +9,6 @@ import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
import android.view.KeyEvent;
import android.view.View;
......@@ -20,7 +19,6 @@ import android.widget.ListView;
import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.util.KeyNavigationUtil;
import org.chromium.chrome.browser.util.ViewUtils;
......@@ -43,28 +41,6 @@ public class OmniboxSuggestionsList extends ListView {
private OnGlobalLayoutListener mAnchorViewLayoutListener;
private OnLayoutChangeListener mAlignmentViewLayoutListener;
/**
* Provides the capabilities required to embed the omnibox suggestion list into the UI.
*/
public interface OmniboxSuggestionListEmbedder {
/** Return the anchor view the suggestion list should be drawn below. */
View getAnchorView();
/**
* Return the view that the omnibox suggestions should be aligned horizontally to. The
* view must be a descendant of {@link #getAnchorView()}. If null, the suggestions will
* be aligned to the start of {@link #getAnchorView()}.
*/
@Nullable
View getAlignmentView();
/** Return the delegate used to interact with the Window. */
WindowDelegate getWindowDelegate();
/** Return whether the suggestions are being rendered in the tablet UI. */
boolean isTablet();
}
/**
* Constructs a new list designed for containing omnibox suggestions.
* @param context Context used for contained views.
......
......@@ -6,7 +6,6 @@ package org.chromium.chrome.browser.omnibox.suggestions;
import android.util.Pair;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsList.OmniboxSuggestionListEmbedder;
import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey;
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.omnibox.suggestions;
import org.chromium.ui.modelutil.PropertyModel;
/**
* A processor of omnibox suggestions. Implementers are provided the opportunity to analyze a
* suggestion and create a custom model.
*/
public interface SuggestionProcessor {
/**
* @param suggestion The suggestion to process.
* @return Whether this suggestion processor handles this type of suggestion.
*/
boolean doesProcessSuggestion(OmniboxSuggestion suggestion);
/**
* @return The type of view the models created by this processor represent.
*/
int getViewTypeId();
/**
* @see org.chromium.chrome.browser.omnibox.UrlFocusChangeListener#onUrlFocusChange(boolean)
*/
void onUrlFocusChange(boolean hasFocus);
/**
* Signals that native initialization has completed.
*/
void onNativeInitialized();
/**
* Create a model for a suggestion at the specified position.
* @param suggestion The suggestion to create the model for.
* @return A model for the suggestion.
*/
PropertyModel createModelForSuggestion(OmniboxSuggestion suggestion);
/**
* Populate a model for the given suggestion.
* @param suggestion The suggestion to populate the model for.
* @param model The model to populate.
* @param position The position of the suggestion in the list.
*/
void populateModel(OmniboxSuggestion suggestion, PropertyModel model, int position);
}
......@@ -15,9 +15,9 @@ import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
import org.chromium.chrome.browser.omnibox.suggestions.AnswersImageFetcher;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionUiType;
import org.chromium.chrome.browser.omnibox.suggestions.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.answer.AnswerSuggestionViewProperties.AnswerIcon;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionHost;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionViewDelegate;
......
......@@ -21,10 +21,10 @@ import org.chromium.chrome.browser.favicon.LargeIconBridge;
import org.chromium.chrome.browser.omnibox.MatchClassificationStyle;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionUiType;
import org.chromium.chrome.browser.omnibox.suggestions.SuggestionCommonProperties;
import org.chromium.chrome.browser.omnibox.suggestions.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionViewProperties.SuggestionIcon;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionViewProperties.SuggestionTextContainer;
import org.chromium.chrome.browser.profiles.Profile;
......
......@@ -19,9 +19,9 @@ import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.UrlBar;
import org.chromium.chrome.browser.omnibox.UrlBar.OmniboxAction;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionUiType;
import org.chromium.chrome.browser.omnibox.suggestions.SuggestionProcessor;
import org.chromium.chrome.browser.share.ShareMenuActionHandler;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.ui.base.Clipboard;
......
......@@ -7,9 +7,9 @@ package org.chromium.chrome.browser.omnibox.suggestions.entity;
import android.content.Context;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionUiType;
import org.chromium.chrome.browser.omnibox.suggestions.SuggestionProcessor;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionHost;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionViewDelegate;
import org.chromium.ui.modelutil.PropertyModel;
......
......@@ -28,7 +28,10 @@ import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler.Vo
import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler.VoiceResult;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController.OnSuggestionsReceivedListener;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinator;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinatorImpl;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteDelegate;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionListEmbedder;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBuilder;
......@@ -261,23 +264,35 @@ public class LocationBarVoiceRecognitionHandlerTest {
}
}
/**
* TODO(crbug.com/962527): Remove this dependency on {@link AutocompleteCoordinatorImpl}.
*/
private class TestAutocompleteCoordinatorImpl extends AutocompleteCoordinatorImpl {
public TestAutocompleteCoordinatorImpl(ViewGroup parent, AutocompleteDelegate delegate,
OmniboxSuggestionListEmbedder listEmbedder,
UrlBarEditingTextStateProvider urlBarEditingTextProvider) {
super(parent, delegate, listEmbedder, urlBarEditingTextProvider);
}
@Override
public void onVoiceResults(List<VoiceResult> results) {
mAutocompleteVoiceResults = results;
}
}
/**
* Test implementation of {@link LocationBarVoiceRecognitionHandler.Delegate}.
*/
private class TestDelegate implements LocationBarVoiceRecognitionHandler.Delegate {
private boolean mUpdatedMicButtonState;
private AutocompleteCoordinator mCoordinator;
private AutocompleteCoordinator mAutocompleteCoordinator;
TestDelegate() {
ViewGroup parent =
(ViewGroup) mActivityTestRule.getActivity().findViewById(android.R.id.content);
Assert.assertNotNull(parent);
mCoordinator = new AutocompleteCoordinator(parent, null, null, null) {
@Override
public void onVoiceResults(List<VoiceResult> results) {
mAutocompleteVoiceResults = results;
}
};
mAutocompleteCoordinator =
new TestAutocompleteCoordinatorImpl(parent, null, null, null);
}
@Override
......@@ -298,7 +313,7 @@ public class LocationBarVoiceRecognitionHandlerTest {
@Override
public AutocompleteCoordinator getAutocompleteCoordinator() {
return mCoordinator;
return mAutocompleteCoordinator;
}
@Override
......
......@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.omnibox.status.StatusViewCoordinator;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController.OnSuggestionsReceivedListener;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinatorTestUtils;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionView;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
......@@ -184,7 +185,8 @@ public class OmniboxTest {
sEmptySuggestionListener, new HashMap<String, List<SuggestionsResult>>());
TestThreadUtils.runOnUiThreadBlocking(() -> {
locationBar.getAutocompleteCoordinator().setAutocompleteController(controller);
AutocompleteCoordinatorTestUtils.setAutocompleteController(
locationBar.getAutocompleteCoordinator(), controller);
});
Assert.assertEquals("Should not have any zero suggest requests yet", 0,
controller.numZeroSuggestRequests());
......@@ -222,7 +224,8 @@ public class OmniboxTest {
OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
TestThreadUtils.runOnUiThreadBlocking(() -> {
locationBar.getAutocompleteCoordinator().setAutocompleteController(controller);
AutocompleteCoordinatorTestUtils.setAutocompleteController(
locationBar.getAutocompleteCoordinator(), controller);
urlBar.setText("g");
});
......@@ -264,7 +267,8 @@ public class OmniboxTest {
OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
TestThreadUtils.runOnUiThreadBlocking(() -> {
locationBar.getAutocompleteCoordinator().setAutocompleteController(controller);
AutocompleteCoordinatorTestUtils.setAutocompleteController(
locationBar.getAutocompleteCoordinator(), controller);
urlBar.setText("g");
urlBar.setSelection(1);
});
......@@ -491,8 +495,9 @@ public class OmniboxTest {
public void onSuggestionsReceived(
List<OmniboxSuggestion> suggestions,
String inlineAutocompleteText) {
locationBar.getAutocompleteCoordinator()
.getSuggestionsReceivedListenerForTest()
AutocompleteCoordinatorTestUtils
.getSuggestionsReceivedListenerForTest(
locationBar.getAutocompleteCoordinator())
.onSuggestionsReceived(suggestions, inlineAutocompleteText);
synchronized (suggestionsProcessedSignal) {
int remaining = suggestionsLeft.decrementAndGet();
......@@ -508,7 +513,8 @@ public class OmniboxTest {
locationBar, suggestionsListener, suggestionsMap);
TestThreadUtils.runOnUiThreadBlocking(() -> {
locationBar.getAutocompleteCoordinator().setAutocompleteController(controller);
AutocompleteCoordinatorTestUtils.setAutocompleteController(
locationBar.getAutocompleteCoordinator(), controller);
});
KeyUtils.typeTextIntoView(
......@@ -812,11 +818,13 @@ public class OmniboxTest {
.addGeneratedSuggestion(OmniboxSuggestionType.SEARCH_HISTORY,
"fac", null)));
final TestAutocompleteController controller = new TestAutocompleteController(locationBar,
locationBar.getAutocompleteCoordinator().getSuggestionsReceivedListenerForTest(),
AutocompleteCoordinatorTestUtils.getSuggestionsReceivedListenerForTest(
locationBar.getAutocompleteCoordinator()),
suggestionsMap);
TestThreadUtils.runOnUiThreadBlocking(() -> {
locationBar.getAutocompleteCoordinator().setAutocompleteController(controller);
AutocompleteCoordinatorTestUtils.setAutocompleteController(
locationBar.getAutocompleteCoordinator(), controller);
});
TestThreadUtils.runOnUiThreadBlocking(() -> { urlBarView.setText("ل"); });
......@@ -833,7 +841,8 @@ public class OmniboxTest {
final int expectedSuggestionCount, final int expectedLayoutDirection) {
OmniboxTestUtils.waitForOmniboxSuggestions(locationBar, expectedSuggestionCount);
TestThreadUtils.runOnUiThreadBlocking(() -> {
ListView suggestionsList = locationBar.getAutocompleteCoordinator().getSuggestionList();
ListView suggestionsList = AutocompleteCoordinatorTestUtils.getSuggestionList(
locationBar.getAutocompleteCoordinator());
Assert.assertEquals(expectedSuggestionCount, suggestionsList.getChildCount());
for (int i = 0; i < suggestionsList.getChildCount(); i++) {
SuggestionView suggestionView = (SuggestionView) suggestionsList.getChildAt(i);
......
......@@ -27,6 +27,7 @@ android_library("chrome_java_test_pagecontroller") {
android_library("chrome_java_test_support") {
testonly = true
java_files = [
"javatests/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorTestUtils.java",
"javatests/src/org/chromium/chrome/test/BottomSheetTestRule.java",
"javatests/src/org/chromium/chrome/test/ChromeActivityTestRule.java",
"javatests/src/org/chromium/chrome/test/ChromeJUnit4ClassRunner.java",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.omnibox.suggestions;
import android.widget.ListView;
/**
* Utility methods providing access to package-private methods in {@link AutocompleteCoordinator}
* for tests.
*/
public class AutocompleteCoordinatorTestUtils {
/**
* Sets the autocomplete controller for the location bar.
*
* @param controller The controller that will handle autocomplete/omnibox suggestions.
* @note Only used for testing.
*/
public static void setAutocompleteController(
AutocompleteCoordinator coordinator, AutocompleteController controller) {
((AutocompleteCoordinatorImpl) coordinator).setAutocompleteController(controller);
}
/** Allows injecting autocomplete suggestions for testing. */
public static AutocompleteController.OnSuggestionsReceivedListener
getSuggestionsReceivedListenerForTest(AutocompleteCoordinator coordinator) {
return ((AutocompleteCoordinatorImpl) coordinator).getSuggestionsReceivedListenerForTest();
}
/**
* @return The suggestion list popup containing the omnibox results (or null if it has not yet
* been created).
*/
public static ListView getSuggestionList(AutocompleteCoordinator coordinator) {
return ((AutocompleteCoordinatorImpl) coordinator).getSuggestionList();
}
}
......@@ -16,6 +16,7 @@ import org.chromium.chrome.browser.omnibox.MatchClassificationStyle;
import org.chromium.chrome.browser.omnibox.UrlBar;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController.OnSuggestionsReceivedListener;
import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteCoordinatorTestUtils;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion.MatchClassification;
import org.chromium.chrome.browser.profiles.Profile;
......@@ -332,8 +333,8 @@ public class OmniboxTestUtils {
CriteriaHelper.pollUiThread(new Criteria() {
@Override
public boolean isSatisfied() {
ListView suggestionsList =
locationBar.getAutocompleteCoordinator().getSuggestionList();
ListView suggestionsList = AutocompleteCoordinatorTestUtils.getSuggestionList(
locationBar.getAutocompleteCoordinator());
if (suggestionsList == null) {
updateFailureReason("suggestionList is null");
return false;
......@@ -361,8 +362,8 @@ public class OmniboxTestUtils {
CriteriaHelper.pollUiThread(new Criteria() {
@Override
public boolean isSatisfied() {
ListView suggestionsList =
locationBar.getAutocompleteCoordinator().getSuggestionList();
ListView suggestionsList = AutocompleteCoordinatorTestUtils.getSuggestionList(
locationBar.getAutocompleteCoordinator());
return suggestionsList != null
&& suggestionsList.isShown()
&& suggestionsList.getCount() == expectedCount;
......
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