Commit 9472e8d1 authored by Tomasz Wiszkowski's avatar Tomasz Wiszkowski Committed by Commit Bot

Implement compact omnibox suggestions.

This change pushes the Vertical padding out of the suggestion definition and
into the DecoratedSuggestionView.
Two variants are available:
- Default (10dp paddings, giving 60dp suggestion height) and
- Compact (6dp paddings, giving 52dp suggestion height).

the 60 and 52 variants were suggested by jpor@.

Bug: 1050813
Change-Id: I6e967e0d53d6c485b7feb5773c6981a4eb8d6da4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079298Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Ender <ender@google.com>
Cr-Commit-Position: refs/heads/master@{#746091}
parent 0e8f9776
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:minHeight="@dimen/omnibox_suggestion_height" android:minHeight="@dimen/omnibox_suggestion_height">
android:paddingVertical="10dp">
<TextView <TextView
android:id="@+id/omnibox_answer_line_1" android:id="@+id/omnibox_answer_line_1"
......
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="@dimen/omnibox_suggestion_height" android:minHeight="@dimen/omnibox_suggestion_height"
android:gravity="center" android:gravity="center"
android:orientation="vertical" android:orientation="vertical">
android:paddingVertical="10dp">
<TextView <TextView
android:id="@+id/line_1" android:id="@+id/line_1"
......
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:orientation="vertical" android:orientation="vertical"
android:minHeight="@dimen/omnibox_suggestion_height" android:minHeight="@dimen/omnibox_suggestion_height">
android:paddingVertical="10dp">
<TextView <TextView
android:id="@+id/entity_subject" android:id="@+id/entity_subject"
......
...@@ -311,9 +311,9 @@ ...@@ -311,9 +311,9 @@
<dimen name="start_surface_toolbar_button_padding_to_edge">16dp</dimen> <dimen name="start_surface_toolbar_button_padding_to_edge">16dp</dimen>
<!-- Omnibox suggestions --> <!-- Omnibox suggestions -->
<dimen name="omnibox_suggestion_height">60dp</dimen> <dimen name="omnibox_suggestion_height">40dp</dimen>
<dimen name="omnibox_suggestion_answer_height">72dp</dimen> <dimen name="omnibox_suggestion_comfortable_padding">10dp</dimen>
<dimen name="omnibox_suggestion_max_height">144dp</dimen> <dimen name="omnibox_suggestion_compact_padding">6dp</dimen>
<dimen name="omnibox_suggestion_list_padding_bottom">8dp</dimen> <dimen name="omnibox_suggestion_list_padding_bottom">8dp</dimen>
<dimen name="omnibox_suggestion_first_line_text_size">16sp</dimen> <dimen name="omnibox_suggestion_first_line_text_size">16sp</dimen>
<dimen name="omnibox_suggestion_second_line_text_size">14sp</dimen> <dimen name="omnibox_suggestion_second_line_text_size">14sp</dimen>
......
...@@ -49,6 +49,8 @@ public final class BaseSuggestionViewBinder<T extends View> ...@@ -49,6 +49,8 @@ public final class BaseSuggestionViewBinder<T extends View>
updateContentViewPadding(model, view.getDecoratedSuggestionView()); updateContentViewPadding(model, view.getDecoratedSuggestionView());
} else if (BaseSuggestionViewProperties.ACTION_ICON == propertyKey) { } else if (BaseSuggestionViewProperties.ACTION_ICON == propertyKey) {
updateActionIcon(model, view); updateActionIcon(model, view);
} else if (BaseSuggestionViewProperties.IS_COMPACT == propertyKey) {
updateContentViewPadding(model, view.getDecoratedSuggestionView());
} else if (SuggestionCommonProperties.LAYOUT_DIRECTION == propertyKey) { } else if (SuggestionCommonProperties.LAYOUT_DIRECTION == propertyKey) {
ViewCompat.setLayoutDirection( ViewCompat.setLayoutDirection(
view, model.get(SuggestionCommonProperties.LAYOUT_DIRECTION)); view, model.get(SuggestionCommonProperties.LAYOUT_DIRECTION));
...@@ -120,8 +122,14 @@ public final class BaseSuggestionViewBinder<T extends View> ...@@ -120,8 +122,14 @@ public final class BaseSuggestionViewBinder<T extends View>
// centered with the omnibox "Clear" button. // centered with the omnibox "Clear" button.
final int endSpace = view.getResources().getDimensionPixelSize( final int endSpace = view.getResources().getDimensionPixelSize(
R.dimen.omnibox_suggestion_refine_view_modern_end_padding); R.dimen.omnibox_suggestion_refine_view_modern_end_padding);
view.setPaddingRelative(startSpace, 0, endSpace, 0); view.setPaddingRelative(startSpace, 0, endSpace, 0);
// Compact suggestion handling: apply additional padding to the suggestion content.
final boolean isCompact = model.get(BaseSuggestionViewProperties.IS_COMPACT);
final int verticalPad = view.getResources().getDimensionPixelSize(isCompact
? R.dimen.omnibox_suggestion_compact_padding
: R.dimen.omnibox_suggestion_comfortable_padding);
view.getContentView().setPaddingRelative(0, verticalPad, 0, verticalPad);
} }
/** Update image view using supplied drawable state object. */ /** Update image view using supplied drawable state object. */
......
...@@ -10,6 +10,7 @@ import android.text.Spannable; ...@@ -10,6 +10,7 @@ import android.text.Spannable;
import android.text.style.StyleSpan; import android.text.style.StyleSpan;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.omnibox.MatchClassificationStyle; import org.chromium.chrome.browser.omnibox.MatchClassificationStyle;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion.MatchClassification; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion.MatchClassification;
...@@ -26,6 +27,7 @@ import java.util.List; ...@@ -26,6 +27,7 @@ import java.util.List;
public abstract class BaseSuggestionViewProcessor implements SuggestionProcessor { public abstract class BaseSuggestionViewProcessor implements SuggestionProcessor {
private final Context mContext; private final Context mContext;
private final SuggestionHost mSuggestionHost; private final SuggestionHost mSuggestionHost;
private boolean mEnableCompactSuggestions;
@Override @Override
public void onUrlFocusChange(boolean hasFocus) {} public void onUrlFocusChange(boolean hasFocus) {}
...@@ -37,7 +39,10 @@ public abstract class BaseSuggestionViewProcessor implements SuggestionProcessor ...@@ -37,7 +39,10 @@ public abstract class BaseSuggestionViewProcessor implements SuggestionProcessor
public void recordSuggestionUsed(OmniboxSuggestion suggestion, PropertyModel model) {} public void recordSuggestionUsed(OmniboxSuggestion suggestion, PropertyModel model) {}
@Override @Override
public void onNativeInitialized() {} public void onNativeInitialized() {
mEnableCompactSuggestions =
ChromeFeatureList.isEnabled(ChromeFeatureList.OMNIBOX_COMPACT_SUGGESTIONS);
}
@Override @Override
public void onSuggestionsReceived() {} public void onSuggestionsReceived() {}
...@@ -82,6 +87,7 @@ public abstract class BaseSuggestionViewProcessor implements SuggestionProcessor ...@@ -82,6 +87,7 @@ public abstract class BaseSuggestionViewProcessor implements SuggestionProcessor
mSuggestionHost.createSuggestionViewDelegate(suggestion, position); mSuggestionHost.createSuggestionViewDelegate(suggestion, position);
model.set(BaseSuggestionViewProperties.SUGGESTION_DELEGATE, delegate); model.set(BaseSuggestionViewProperties.SUGGESTION_DELEGATE, delegate);
model.set(BaseSuggestionViewProperties.IS_COMPACT, mEnableCompactSuggestions);
if (canRefine(suggestion)) { if (canRefine(suggestion)) {
setActionDrawableState(model, setActionDrawableState(model,
......
...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.omnibox.suggestions.SuggestionCommonPropertie ...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.omnibox.suggestions.SuggestionCommonPropertie
import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionViewDelegate; import org.chromium.chrome.browser.omnibox.suggestions.basic.SuggestionViewDelegate;
import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey;
import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey; import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey;
/** The base set of properties for most omnibox suggestions. */ /** The base set of properties for most omnibox suggestions. */
...@@ -24,8 +25,11 @@ public class BaseSuggestionViewProperties { ...@@ -24,8 +25,11 @@ public class BaseSuggestionViewProperties {
public static final WritableObjectPropertyKey<SuggestionViewDelegate> SUGGESTION_DELEGATE = public static final WritableObjectPropertyKey<SuggestionViewDelegate> SUGGESTION_DELEGATE =
new WritableObjectPropertyKey<>(); new WritableObjectPropertyKey<>();
/** Whether suggestion should be compact. */
public static final WritableBooleanPropertyKey IS_COMPACT = new WritableBooleanPropertyKey();
public static final PropertyKey[] ALL_UNIQUE_KEYS = public static final PropertyKey[] ALL_UNIQUE_KEYS =
new PropertyKey[] {ICON, ACTION_ICON, SUGGESTION_DELEGATE}; new PropertyKey[] {ICON, IS_COMPACT, ACTION_ICON, SUGGESTION_DELEGATE};
public static final PropertyKey[] ALL_KEYS = public static final PropertyKey[] ALL_KEYS =
PropertyModel.concatKeys(ALL_UNIQUE_KEYS, SuggestionCommonProperties.ALL_KEYS); PropertyModel.concatKeys(ALL_UNIQUE_KEYS, SuggestionCommonProperties.ALL_KEYS);
......
...@@ -115,6 +115,8 @@ class SimpleHorizontalLayoutView extends ViewGroup { ...@@ -115,6 +115,8 @@ class SimpleHorizontalLayoutView extends ViewGroup {
getChildMeasureSpec(heightSpec, 0, v.getLayoutParams().height)); getChildMeasureSpec(heightSpec, 0, v.getLayoutParams().height));
} }
setMeasuredDimension(widthPx, heightPx); setMeasuredDimension(widthPx,
MeasureSpec.makeMeasureSpec(
heightPx + getPaddingTop() + getPaddingBottom(), MeasureSpec.EXACTLY));
} }
} }
...@@ -30,6 +30,7 @@ import org.robolectric.annotation.Config; ...@@ -30,6 +30,7 @@ import org.robolectric.annotation.Config;
import org.chromium.chrome.browser.favicon.LargeIconBridge; import org.chromium.chrome.browser.favicon.LargeIconBridge;
import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback; import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType; import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType;
import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider; import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion;
...@@ -169,6 +170,7 @@ public class BasicSuggestionProcessorTest { ...@@ -169,6 +170,7 @@ public class BasicSuggestionProcessorTest {
} }
@Test @Test
@Features.DisableFeatures(ChromeFeatureList.OMNIBOX_COMPACT_SUGGESTIONS)
public void getSuggestionIconTypeForSearch_Default() { public void getSuggestionIconTypeForSearch_Default() {
int[][] testCases = { int[][] testCases = {
{OmniboxSuggestionType.URL_WHAT_YOU_TYPED, SuggestionIcon.MAGNIFIER}, {OmniboxSuggestionType.URL_WHAT_YOU_TYPED, SuggestionIcon.MAGNIFIER},
...@@ -203,6 +205,7 @@ public class BasicSuggestionProcessorTest { ...@@ -203,6 +205,7 @@ public class BasicSuggestionProcessorTest {
} }
@Test @Test
@Features.DisableFeatures(ChromeFeatureList.OMNIBOX_COMPACT_SUGGESTIONS)
public void getSuggestionIconTypeForUrl_Default() { public void getSuggestionIconTypeForUrl_Default() {
int[][] testCases = { int[][] testCases = {
{OmniboxSuggestionType.URL_WHAT_YOU_TYPED, SuggestionIcon.GLOBE}, {OmniboxSuggestionType.URL_WHAT_YOU_TYPED, SuggestionIcon.GLOBE},
...@@ -235,6 +238,7 @@ public class BasicSuggestionProcessorTest { ...@@ -235,6 +238,7 @@ public class BasicSuggestionProcessorTest {
} }
@Test @Test
@Features.DisableFeatures(ChromeFeatureList.OMNIBOX_COMPACT_SUGGESTIONS)
public void getSuggestionIconTypeForBookmarks_Default() { public void getSuggestionIconTypeForBookmarks_Default() {
int[][] testCases = { int[][] testCases = {
{OmniboxSuggestionType.URL_WHAT_YOU_TYPED, SuggestionIcon.BOOKMARK}, {OmniboxSuggestionType.URL_WHAT_YOU_TYPED, SuggestionIcon.BOOKMARK},
...@@ -290,6 +294,7 @@ public class BasicSuggestionProcessorTest { ...@@ -290,6 +294,7 @@ public class BasicSuggestionProcessorTest {
} }
@Test @Test
@Features.DisableFeatures(ChromeFeatureList.OMNIBOX_COMPACT_SUGGESTIONS)
public void suggestionFavicons_showFaviconWhenAvailable() { public void suggestionFavicons_showFaviconWhenAvailable() {
final ArgumentCaptor<LargeIconCallback> callback = final ArgumentCaptor<LargeIconCallback> callback =
ArgumentCaptor.forClass(LargeIconCallback.class); ArgumentCaptor.forClass(LargeIconCallback.class);
...@@ -309,6 +314,7 @@ public class BasicSuggestionProcessorTest { ...@@ -309,6 +314,7 @@ public class BasicSuggestionProcessorTest {
} }
@Test @Test
@Features.DisableFeatures(ChromeFeatureList.OMNIBOX_COMPACT_SUGGESTIONS)
public void suggestionFavicons_doNotReplaceFallbackIconWhenNoFaviconIsAvailable() { public void suggestionFavicons_doNotReplaceFallbackIconWhenNoFaviconIsAvailable() {
final ArgumentCaptor<LargeIconCallback> callback = final ArgumentCaptor<LargeIconCallback> callback =
ArgumentCaptor.forClass(LargeIconCallback.class); ArgumentCaptor.forClass(LargeIconCallback.class);
......
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