Remove lots of deprecated stuff from Piet Android.
PiperOrigin-RevId: 262128277
Change-Id: I6d1eda5d95a66b6c0ae094a35484fdc9eb7daf81
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java
index 5156be0..d75c352 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java
@@ -55,7 +55,6 @@
import com.google.search.now.ui.piet.ImagesProto.Image;
import com.google.search.now.ui.piet.LogDataProto.LogData;
import com.google.search.now.ui.piet.PietProto.Frame;
-import com.google.search.now.ui.piet.StylesProto.Font.FontWeight;
import com.google.search.now.ui.piet.TextProto.Chunk;
import com.google.search.now.ui.piet.TextProto.ChunkedText;
import com.google.search.now.ui.piet.TextProto.ParameterizedText;
@@ -238,13 +237,6 @@
spannable.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
- if (chunkStyle.getFont().getWeight() == FontWeight.BOLD) {
- spannable.setSpan(
- new StyleSpan(Typeface.BOLD),
- start,
- spannable.length(),
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- }
if (chunkStyle.getFont().hasSize()) {
spannable.setSpan(
new AbsoluteSizeSpan(
diff --git a/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java
index 29b89af..4394dea 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java
@@ -27,7 +27,6 @@
import com.google.search.now.ui.piet.ElementsProto.Element;
import com.google.search.now.ui.piet.ElementsProto.Visibility;
import com.google.search.now.ui.piet.ErrorsProto.ErrorCode;
-import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
/** Adapter that manages a custom view created by the host. */
class CustomElementAdapter extends ElementAdapter<FrameLayout, CustomElement> {
@@ -92,11 +91,6 @@
}
@Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return getModel().getStyleReferences();
- }
-
- @Override
void onUnbindModel() {
FrameLayout baseView = getBaseView();
// There should be a maximum of one child that was bound, so using the CustomElementData that
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
index 50a008d..12ffd23 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
@@ -34,7 +34,6 @@
import com.google.search.now.ui.piet.ActionsProto.VisibilityAction;
import com.google.search.now.ui.piet.ElementsProto.BindingValue;
import com.google.search.now.ui.piet.ElementsProto.Element;
-import com.google.search.now.ui.piet.ElementsProto.ElementStack;
import com.google.search.now.ui.piet.ElementsProto.Visibility;
import com.google.search.now.ui.piet.ElementsProto.VisibilityState;
import com.google.search.now.ui.piet.ErrorsProto.ErrorCode;
@@ -77,9 +76,6 @@
/*@Nullable*/ private FrameLayout wrapperView = null;
- // TODO: Remove support for overlays on Element
- @Deprecated @VisibleForTesting /*@Nullable*/ ElementStackAdapter overlayAdapter = null;
-
Actions actions = Actions.getDefaultInstance();
/** Set of actions that are currently active / triggered so they only get called once. */
private final Set<VisibilityAction> activeVisibilityActions = new HashSet<>();
@@ -147,7 +143,7 @@
// Initialize the wrapper view before checking visibility - we need to have it in place before
// the parent adds our outermost view to the hierarchy.
elementStyle = frameContext.makeStyleFor(getElementStyleIdsStack());
- initializeWrapperViewDependentFeatures(baseElement, frameContext);
+ initializeWrapperViewDependentFeatures();
Visibility visibility = getVisibilityForElement(baseElement, frameContext);
setVisibilityOnView(visibility);
@@ -165,14 +161,12 @@
created = true;
}
- private void initializeWrapperViewDependentFeatures(
- Element baseElement, FrameContext frameContext) {
+ private void initializeWrapperViewDependentFeatures() {
if (wrapperView != null) {
// We have already initialized the wrapper view.
return;
}
if (!elementStyle.hasRoundedCorners()
- && baseElement.getOverlaysCount() == 0
&& !elementStyle.hasBorders()) {
// We do not need a wrapper view.
return;
@@ -186,16 +180,6 @@
parameters.allowOutlineRoundedCornerImpl);
wrapper.addView(getBaseView());
- if (baseElement.getOverlaysCount() > 0) {
- overlayAdapter =
- getParameters()
- .elementAdapterFactory
- .createOverlayAdapter(baseElement.getOverlaysList(), frameContext);
- overlayAdapter.setLayoutParams(
- new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
- wrapper.addView(overlayAdapter.getView());
- }
-
if (!(wrapper instanceof RoundedCornerWrapperView)) {
elementStyle.addBordersWithoutRoundedCorners(wrapper, getContext());
}
@@ -247,8 +231,6 @@
return;
}
- bindOverlays(frameContext);
-
bindActions(frameContext);
// Reapply styles if we have style bindings
@@ -344,19 +326,6 @@
/** Performs child-adapter-specific binding logic; to be overridden. */
void onBindModel(M model, Element baseElement, FrameContext frameContext) {}
- // TODO: Remove this hacky method when overlays are transitioned to ElementStack.
- private void bindOverlays(FrameContext frameContext) {
- if (baseElement.getOverlaysCount() > 0) {
- checkNotNull(overlayAdapter, "Overlays not initialized")
- .bindModel(
- Element.newBuilder()
- .setElementStack(
- ElementStack.newBuilder().addAllContents(baseElement.getOverlaysList()))
- .build(),
- frameContext);
- }
- }
-
void bindActions(FrameContext frameContext) {
// Set up actions. On the server, they are defined either as the actual action, or an
// "actions_binding". That actions_binding is defined in a template, and the binding value is
@@ -411,26 +380,10 @@
/** Returns any styles associated with the bound Element. */
StyleIdsStack getElementStyleIdsStack() {
- if (baseElement.hasStyleReferences()) {
- return baseElement.getStyleReferences();
- } else {
- // TODO: Remove this branch.
- return getSubElementStyleIdsStack();
- }
+ return baseElement.getStyleReferences();
}
/**
- * Returns any styles associated with the bound sub-Element.
- *
- * <p>To be overridden by sub-Elements.
- *
- * @deprecated We are removing the sub-Element style.
- */
- // TODO: Remove this method.
- @Deprecated
- abstract StyleIdsStack getSubElementStyleIdsStack();
-
- /**
* Unbinds the current Model from the Adapter. The Adapter will unbind all contained Adapters
* recursively. Do not override; override {@link #onUnbindModel} instead.
*/
@@ -451,10 +404,6 @@
// Unset actions
ViewUtils.clearOnLongClickActions(getBaseView());
ViewUtils.clearOnClickActions(getBaseView());
-
- if (overlayAdapter != null) {
- overlayAdapter.unbindModel();
- }
}
/** Performs child-adapter-specific unbind logic; to be overridden. */
@@ -476,11 +425,6 @@
wrapperView.removeAllViews();
wrapperView = null;
}
- ElementAdapterFactory factory = getParameters().elementAdapterFactory;
- if (overlayAdapter != null) {
- factory.releaseAdapter(overlayAdapter);
- overlayAdapter = null;
- }
setVisibilityOnView(Visibility.VISIBLE);
@@ -575,12 +519,7 @@
if (model == null) {
return defaultGravity;
}
- int gravity = getElementStyle().getGravityVertical(defaultGravity);
- // TODO: Remove this fallback to legacy behavior
- if (!getElementStyle().hasGravityVertical() && baseElement.hasGravityVertical()) {
- gravity = ViewUtils.gravityVerticalToGravity(baseElement.getGravityVertical());
- }
- return gravity;
+ return getElementStyle().getGravityVertical(defaultGravity);
}
/** Return the Element's desired horizontal placement within its container. */
@@ -588,12 +527,7 @@
if (model == null) {
return defaultGravity;
}
- int gravity = getElementStyle().getGravityHorizontal(defaultGravity);
- // TODO: Remove this fallback to legacy behavior
- if (!getElementStyle().hasGravityHorizontal() && baseElement.hasGravityHorizontal()) {
- gravity = ViewUtils.gravityHorizontalToGravity(baseElement.getGravityHorizontal());
- }
- return gravity;
+ return getElementStyle().getGravityHorizontal(defaultGravity);
}
/** Return the Element's desired horizontal and vertical placement within its container. */
@@ -601,35 +535,7 @@
if (model == null) {
return defaultGravity;
}
- int gravity = getElementStyle().getGravity(defaultGravity);
- // TODO: Remove this fallback to legacy behavior
- if (!getElementStyle().hasGravityHorizontal() && !getElementStyle().hasGravityVertical()) {
- Integer deprecatedGravity = getDeprecatedElementGravity();
- if (deprecatedGravity != null) {
- gravity = deprecatedGravity;
- }
- }
- return gravity;
- }
-
- /**
- * In a previous implementation, TextElement used the Element gravity for text alignment; this was
- * messy as Element gravity was used for both text positioning and Element positioning. The
- * Element gravity is now deprecated, but we're going to use it for backwards-compatibility on
- * text to avoid breaking teams that currently rely on the old behavior. Going forward, no one
- * will look at Element gravity - this is replaced by gravity on Style and text alignment on
- * Style.
- */
- // TODO: Remove this method
- @Deprecated
- /*@Nullable*/
- Integer getDeprecatedElementGravity() {
- // Only return something if there's actually gravity on the Element.
- if (!baseElement.hasGravityHorizontal() && !baseElement.hasGravityVertical()) {
- return null;
- }
- return ViewUtils.pietGravityToGravity(
- baseElement.getGravityHorizontal(), baseElement.getGravityVertical());
+ return getElementStyle().getGravity(defaultGravity);
}
ParameterizedTextEvaluator getTemplatedStringEvaluator() {
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java b/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java
index 2365de0..7832e02 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java
@@ -19,14 +19,12 @@
import android.view.View;
import com.google.android.libraries.feed.piet.DebugLogger.MessageType;
import com.google.android.libraries.feed.piet.TemplateBinder.TemplateKey;
-import com.google.search.now.ui.piet.ElementsProto.Content;
import com.google.search.now.ui.piet.ElementsProto.CustomElement;
import com.google.search.now.ui.piet.ElementsProto.Element;
import com.google.search.now.ui.piet.ElementsProto.ElementList;
import com.google.search.now.ui.piet.ElementsProto.ElementStack;
import com.google.search.now.ui.piet.ElementsProto.GridRow;
import com.google.search.now.ui.piet.ElementsProto.ImageElement;
-import com.google.search.now.ui.piet.ElementsProto.TextElement;
import com.google.search.now.ui.piet.ErrorsProto.ErrorCode;
import java.util.Arrays;
import java.util.Collections;
@@ -35,8 +33,8 @@
/** Provides methods to create various adapter types based on bindings. */
class ElementAdapterFactory {
private final AdapterFactory<CustomElementAdapter, CustomElement> customElementFactory;
- private final AdapterFactory<ChunkedTextElementAdapter, TextElement> chunkedTextElementFactory;
- private final AdapterFactory<ParameterizedTextElementAdapter, TextElement>
+ private final AdapterFactory<ChunkedTextElementAdapter, Element> chunkedTextElementFactory;
+ private final AdapterFactory<ParameterizedTextElementAdapter, Element>
parameterizedTextElementFactory;
private final AdapterFactory<ImageElementAdapter, ImageElement> imageElementFactory;
private final AdapterFactory<GridRowAdapter, GridRow> gridRowFactory;
@@ -66,8 +64,8 @@
@VisibleForTesting
ElementAdapterFactory(
AdapterFactory<CustomElementAdapter, CustomElement> customElementFactory,
- AdapterFactory<ChunkedTextElementAdapter, TextElement> chunkedTextElementFactory,
- AdapterFactory<ParameterizedTextElementAdapter, TextElement> parameterizedTextElementFactory,
+ AdapterFactory<ChunkedTextElementAdapter, Element> chunkedTextElementFactory,
+ AdapterFactory<ParameterizedTextElementAdapter, Element> parameterizedTextElementFactory,
AdapterFactory<ImageElementAdapter, ImageElement> imageElementFactory,
AdapterFactory<GridRowAdapter, GridRow> gridRowFactory,
AdapterFactory<ElementListAdapter, ElementList> elementListFactory,
@@ -104,12 +102,11 @@
switch (element.getTextElement().getContentCase()) {
case CHUNKED_TEXT:
case CHUNKED_TEXT_BINDING:
- returnAdapter = chunkedTextElementFactory.get(element.getTextElement(), frameContext);
+ returnAdapter = chunkedTextElementFactory.get(element, frameContext);
break;
case PARAMETERIZED_TEXT:
case PARAMETERIZED_TEXT_BINDING:
- returnAdapter =
- parameterizedTextElementFactory.get(element.getTextElement(), frameContext);
+ returnAdapter = parameterizedTextElementFactory.get(element, frameContext);
break;
default:
throw new PietFatalException(
@@ -147,15 +144,6 @@
return returnAdapter;
}
- // TODO: Remove this hacky method when overlays are transitioned to ElementStack.
- @Deprecated
- ElementStackAdapter createOverlayAdapter(List<Content> overlays, FrameContext frameContext) {
- ElementStack model = ElementStack.newBuilder().addAllContents(overlays).build();
- ElementStackAdapter returnAdapter = elementStackFactory.get(model, frameContext);
- returnAdapter.createAdapter(Element.newBuilder().setElementStack(model).build(), frameContext);
- return returnAdapter;
- }
-
void releaseAdapter(ElementAdapter<? extends View, ?> adapter) {
adapter.unbindModel();
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java
index 48038d4..ab17de1 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java
@@ -29,7 +29,6 @@
import com.google.search.now.ui.piet.ElementsProto.Element;
import com.google.search.now.ui.piet.ElementsProto.ElementList;
import com.google.search.now.ui.piet.ErrorsProto.ErrorCode;
-import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import java.util.List;
/** An {@link ElementContainerAdapter} which manages vertical lists of elements. */
@@ -75,11 +74,6 @@
}
@Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return getModel().getStyleReferences();
- }
-
- @Override
void onUnbindModel() {
super.onUnbindModel();
this.frameContextForDebugLogsFromBind = null;
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java
index 86d0cb3..c56f317 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java
@@ -25,7 +25,6 @@
import com.google.search.now.ui.piet.ElementsProto.Content;
import com.google.search.now.ui.piet.ElementsProto.Element;
import com.google.search.now.ui.piet.ElementsProto.ElementStack;
-import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import java.util.List;
/** Container adapter that stacks its children in a FrameLayout. */
@@ -44,11 +43,6 @@
}
}
- @Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return StyleIdsStack.getDefaultInstance();
- }
-
private void updateChildLayoutParams(ElementAdapter<? extends View, ?> adapter) {
FrameLayout.LayoutParams childParams = new FrameLayout.LayoutParams(0, 0);
diff --git a/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java b/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
index b326121..fb66ea3 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
@@ -19,7 +19,6 @@
import static com.google.search.now.ui.piet.ErrorsProto.ErrorCode.ERR_DUPLICATE_STYLE;
import static com.google.search.now.ui.piet.ErrorsProto.ErrorCode.ERR_DUPLICATE_TEMPLATE;
import static com.google.search.now.ui.piet.ErrorsProto.ErrorCode.ERR_MISSING_BINDING_VALUE;
-import static com.google.search.now.ui.piet.ErrorsProto.ErrorCode.ERR_MISSING_STYLESHEET;
import static com.google.search.now.ui.piet.ErrorsProto.ErrorCode.ERR_MISSING_TEMPLATE;
import android.support.annotation.VisibleForTesting;
@@ -176,31 +175,21 @@
NoKeyOverwriteHashMap<String, Style> styleMap = null;
if (frame.hasStylesheets()) {
styleMap = pietStylesHelper.getStylesheetMap(frame.getStylesheets(), debugLogger);
- } else if (frame.hasStylesheetId()) {
- // TODO: Remove this deprecated branch
- styleMap = pietStylesHelper.getStylesheetMap(frame.getStylesheetId());
- } else if (frame.hasStylesheet()) {
- // TODO: Remove this deprecated branch
- styleMap = pietStylesHelper.createMapFromStylesheet(frame.getStylesheet());
}
if (styleMap == null) {
styleMap = new NoKeyOverwriteHashMap<>("Style", ERR_DUPLICATE_STYLE);
}
- FrameContext frameContext =
- new FrameContext(
- frame,
- styleMap,
- pietSharedStates,
- pietStylesHelper,
- debugBehavior,
- debugLogger,
- actionHandler,
- hostProviders,
- frameView);
- frameContext.computeErrors();
-
- return frameContext;
+ return new FrameContext(
+ frame,
+ styleMap,
+ pietSharedStates,
+ pietStylesHelper,
+ debugBehavior,
+ debugLogger,
+ actionHandler,
+ hostProviders,
+ frameView);
}
/** Return any of the template's stylesheets that could be affected by a MediaQuery. */
@@ -211,28 +200,15 @@
ArrayList<Stylesheet> mediaQueryStylesheets = new ArrayList<>();
- // TODO: remove this deprecated branch.
- if (template.getStylesheets().getStylesheetIdsList().isEmpty()) {
- if (template.getStylesheet().getConditionsCount() > 0) {
- mediaQueryStylesheets.add(template.getStylesheet());
+ for (Stylesheet stylesheet : template.getStylesheets().getStylesheetsList()) {
+ if (stylesheet.getConditionsCount() > 0) {
+ mediaQueryStylesheets.add(stylesheet);
}
- if (template.hasStylesheetId()) {
- Stylesheet stylesheet = stylesHelper.getStylesheet(template.getStylesheetId());
- if (stylesheet != null && stylesheet.getConditionsCount() > 0) {
- mediaQueryStylesheets.add(stylesheet);
- }
- }
- } else {
- for (Stylesheet stylesheet : template.getStylesheets().getStylesheetsList()) {
- if (stylesheet.getConditionsCount() > 0) {
- mediaQueryStylesheets.add(stylesheet);
- }
- }
- for (String stylesheetId : template.getStylesheets().getStylesheetIdsList()) {
- Stylesheet stylesheet = stylesHelper.getStylesheet(stylesheetId);
- if (stylesheet != null && stylesheet.getConditionsCount() > 0) {
- mediaQueryStylesheets.add(stylesheet);
- }
+ }
+ for (String stylesheetId : template.getStylesheets().getStylesheetIdsList()) {
+ Stylesheet stylesheet = stylesHelper.getStylesheet(stylesheetId);
+ if (stylesheet != null && stylesheet.getConditionsCount() > 0) {
+ mediaQueryStylesheets.add(stylesheet);
}
}
@@ -252,23 +228,8 @@
*/
FrameContext createTemplateContext(Template template, BindingContext bindingContext) {
Map<String, BindingValue> bindingValues = createBindingValueMap(bindingContext);
- Map<String, Style> localStylesheet;
-
- if (template.hasStylesheets()) {
- localStylesheet = stylesHelper.getStylesheetMap(template.getStylesheets(), getDebugLogger());
- } else {
- // TODO: Remove this deprecated branch
- switch (template.getTemplateStylesheetCase()) {
- case STYLESHEET:
- localStylesheet = stylesHelper.createMapFromStylesheet(template.getStylesheet());
- break;
- case STYLESHEET_ID:
- localStylesheet = stylesHelper.getStylesheetMap(template.getStylesheetId());
- break;
- default:
- localStylesheet = new HashMap<>();
- }
- }
+ Map<String, Style> localStylesheet =
+ stylesHelper.getStylesheetMap(template.getStylesheets(), getDebugLogger());
return new FrameContext(
currentFrame,
@@ -612,15 +573,6 @@
return e;
}
- private void computeErrors() {
- if (currentFrame.hasStylesheetId() && stylesheet.isEmpty()) {
- String error =
- String.format(
- "Stylesheet [%s] not found, no stylesheet used", currentFrame.getStylesheetId());
- Logger.w(TAG, reportMessage(MessageType.ERROR, ERR_MISSING_STYLESHEET, error));
- }
- }
-
private Map<String, BindingValue> createBindingValueMap(BindingContext bindingContext) {
Map<String, BindingValue> bindingValueMap =
new NoKeyOverwriteHashMap<>("BindingValue", ERR_DUPLICATE_BINDING_VALUE);
diff --git a/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java
index 5001a5b..3a28abb 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java
@@ -38,7 +38,6 @@
import com.google.search.now.ui.piet.ElementsProto.GridCellWidth;
import com.google.search.now.ui.piet.ElementsProto.GridCellWidth.WidthSpecCase;
import com.google.search.now.ui.piet.ElementsProto.GridRow;
-import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -96,11 +95,6 @@
}
}
- @Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return getModel().getStyleReferences();
- }
-
@SuppressWarnings("UnnecessaryDefaultInEnumSwitch")
private void setLayoutParamsOnCell(
ElementAdapter<? extends View, ?> cellAdapter, GridCell cell, FrameContext frameContext) {
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java
index 64f97b9..cfca2d4 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java
@@ -30,7 +30,6 @@
import com.google.search.now.ui.piet.ErrorsProto.ErrorCode;
import com.google.search.now.ui.piet.ImagesProto.Image;
import com.google.search.now.ui.piet.ImagesProto.ImageSource;
-import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
/** An {@link ElementAdapter} for {@code ImageElement} elements. */
class ImageElementAdapter extends ElementAdapter<AspectRatioScalingImageView, ImageElement> {
@@ -146,11 +145,6 @@
}
}
- @Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return getModel().getStyleReferences();
- }
-
@VisibleForTesting
LoadImageCallback createLoadImageCallback(
ScaleType scaleType, /*@Nullable*/ Integer overlayColor, FrameContext frameContext) {
diff --git a/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java b/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java
index b567152..ac1e337 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java
@@ -37,10 +37,6 @@
public class PietStylesHelper {
private static final String TAG = "PietStylesHelper";
- @Deprecated
- private final Map<String, NoKeyOverwriteHashMap<String, Style>> stylesheetScopes =
- new NoKeyOverwriteHashMap<>("Style", ErrorCode.ERR_DUPLICATE_STYLE);
-
private final Map<Stylesheets, NoKeyOverwriteHashMap<String, Style>> multiStylesheetScopes =
new NoKeyOverwriteHashMap<>("Style", ErrorCode.ERR_DUPLICATE_STYLESHEET);
private final Map<String, Stylesheet> stylesheets =
@@ -112,34 +108,6 @@
return styleMap;
}
- /** Returns a Map of style_id to Style. This represents the Stylesheet. */
- @Deprecated
- NoKeyOverwriteHashMap<String, Style> getStylesheetMap(String stylesheetId) {
- if (stylesheetScopes.containsKey(stylesheetId)) {
- return stylesheetScopes.get(stylesheetId);
- }
- Stylesheet stylesheet = getStylesheet(stylesheetId);
- if (stylesheet != null) {
- NoKeyOverwriteHashMap<String, Style> styleMap = createMapFromStylesheet(stylesheet);
- stylesheetScopes.put(stylesheet.getStylesheetId(), styleMap);
- return styleMap;
- }
- Logger.w(TAG, "Stylesheet [%s] was not found in the Stylesheet", stylesheetId);
- return createMapFromStylesheet(Stylesheet.getDefaultInstance());
- }
-
- @Deprecated
- NoKeyOverwriteHashMap<String, Style> createMapFromStylesheet(Stylesheet stylesheet) {
- NoKeyOverwriteHashMap<String, Style> styleMap =
- new NoKeyOverwriteHashMap<>("Style", ErrorCode.ERR_DUPLICATE_STYLE);
- for (Style style : stylesheet.getStylesList()) {
- if (mediaQueryHelper.areMediaQueriesMet(style.getConditionsList())) {
- styleMap.put(style.getStyleId(), style);
- }
- }
- return styleMap;
- }
-
/** Adds all styles from the Stylesheet to the Map, subject to MediaQueryCondition filtering. */
private void addStylesToMapIfMediaQueryConditionsMet(
Stylesheet stylesheet, NoKeyOverwriteHashMap<String, Style> styleMap) {
diff --git a/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java b/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java
index c7a7a9c..b47ed6b 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java
@@ -23,7 +23,6 @@
import android.support.v4.widget.TextViewCompat;
import android.text.Layout;
import android.text.TextUtils;
-import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import com.google.android.libraries.feed.common.functional.Consumer;
@@ -36,7 +35,6 @@
import com.google.search.now.ui.piet.ErrorsProto.ErrorCode;
import com.google.search.now.ui.piet.StylesProto;
import com.google.search.now.ui.piet.StylesProto.Font;
-import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import com.google.search.now.ui.piet.StylesProto.Typeface.CommonTypeface;
import java.util.List;
@@ -44,7 +42,7 @@
* Base {@link ElementAdapter} to extend to manage {@code ChunkedText} and {@code ParameterizedText}
* elements.
*/
-abstract class TextElementAdapter extends ElementAdapter<TextView, TextElement> {
+abstract class TextElementAdapter extends ElementAdapter<TextView, Element> {
private ExtraLineHeight extraLineHeight = ExtraLineHeight.builder().build();
TextElementAdapter(Context context, AdapterParameters parameters) {
@@ -52,17 +50,17 @@
}
@Override
- protected TextElement getModelFromElement(Element baseElement) {
+ protected Element getModelFromElement(Element baseElement) {
if (!baseElement.hasTextElement()) {
throw new PietFatalException(
ErrorCode.ERR_MISSING_ELEMENT_CONTENTS,
String.format("Missing TextElement; has %s", baseElement.getElementsCase()));
}
- return baseElement.getTextElement();
+ return baseElement;
}
@Override
- void onCreateAdapter(TextElement textLine, Element baseElement, FrameContext frameContext) {
+ void onCreateAdapter(Element textLine, Element baseElement, FrameContext frameContext) {
if (getKey() == null) {
TextElementKey key = createKey(getElementStyle().getFont());
setKey(key);
@@ -82,10 +80,6 @@
textView.setIncludeFontPadding(false);
ExtraLineHeight extraLineHeight = getExtraLineHeight();
textView.setLineSpacing(/* add= */ extraLineHeight.betweenLinesExtraPx(), /* mult= */ 1.0f);
- } else if (textStyle.getFont().hasLineHeightRatio()) {
- // TODO Remove this code once transition to line height is complete.
- textView.setIncludeFontPadding(false);
- textView.setLineSpacing(/* add= */ 0, textStyle.getFont().getLineHeightRatio());
}
setLetterSpacing(textView, textStyle);
if (textStyle.getMaxLines() > 0) {
@@ -96,18 +90,7 @@
textView.setMaxLines(Integer.MAX_VALUE);
}
- // TODO: Remove this if statement and always call this first method.
- if (textStyle.getTextAlignment() != (Gravity.START | Gravity.TOP)) {
- getBaseView().setGravity(textStyle.getTextAlignment());
- } else {
- // TODO: Remove this branch
- Integer legacyGravity = getDeprecatedElementGravity();
- if (legacyGravity != null) {
- getBaseView().setGravity(legacyGravity);
- } else {
- getBaseView().setGravity(textStyle.getTextAlignment());
- }
- }
+ getBaseView().setGravity(textStyle.getTextAlignment());
}
private void setLetterSpacing(TextView textView, StyleProvider textStyle) {
@@ -137,12 +120,12 @@
}
@Override
- void onBindModel(TextElement textLine, Element baseElement, FrameContext frameContext) {
+ void onBindModel(Element textLine, Element baseElement, FrameContext frameContext) {
// Set the initial state for the TextView
// No bindings found, so use the inlined value (or empty if not set)
- setTextOnView(frameContext, textLine);
+ setTextOnView(frameContext, textLine.getTextElement());
- if (textLine.getStyleReferences().hasStyleBinding()) {
+ if (getElementStyleIdsStack().hasStyleBinding()) {
updateTextStyle();
} else if (baseFontHeightChanged()) {
updateTextStyle();
@@ -150,11 +133,6 @@
}
}
- @Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return getModel().getStyleReferences();
- }
-
abstract void setTextOnView(FrameContext frameContext, TextElement textElement);
@Override
@@ -186,7 +164,7 @@
ExtraLineHeight getExtraLineHeight() {
Font font = getElementStyle().getFont();
- if (!font.hasLineHeight() && !font.hasLineHeightRatio()) {
+ if (!font.hasLineHeight()) {
return extraLineHeight;
}
@@ -205,11 +183,6 @@
// Adjust the rounding for the extra top and bottom padding, to make the total height of the
// text element a little more exact.
totalExtraPadding = adjustRounding(extraLineHeightBetweenLinesFloat);
- } else if (font.hasLineHeightRatio()) {
- // TODO Remove this code once transition to line height is complete.
- float textSize = getBaseView().getTextSize();
- float extraLineHeightRatio = (font.getLineHeightRatio() - 1.0f);
- totalExtraPadding = (int) (textSize * extraLineHeightRatio);
}
int extraPaddingForLineHeightTop = totalExtraPadding / 2;
int extraPaddingForLineHeightBottom = totalExtraPadding - extraPaddingForLineHeightTop;
@@ -218,13 +191,8 @@
// padding (so that only half the padding is on the bottom). That means
// extraPaddingForLineHeightBottom needs to be negative.
if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP) {
- if (font.hasLineHeight()) {
extraPaddingForLineHeightBottom =
-(extraLineHeightBetweenLines - extraPaddingForLineHeightBottom);
- } else if (font.hasLineHeightRatio()) {
- // TODO Remove this code once transition to line height is complete.
- extraPaddingForLineHeightBottom = -extraPaddingForLineHeightBottom;
- }
}
extraLineHeight =
@@ -382,9 +350,9 @@
}
abstract static class TextElementKeySupplier<A extends TextElementAdapter>
- implements AdapterKeySupplier<A, TextElement> {
+ implements AdapterKeySupplier<A, Element> {
@Override
- public TextElementKey getKey(FrameContext frameContext, TextElement model) {
+ public TextElementKey getKey(FrameContext frameContext, Element model) {
StyleProvider styleProvider = frameContext.makeStyleFor(model.getStyleReferences());
return new TextElementKey(styleProvider.getFont());
}
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ViewUtils.java b/src/main/java/com/google/android/libraries/feed/piet/ViewUtils.java
index be3ddf6..5386a43 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ViewUtils.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ViewUtils.java
@@ -20,7 +20,6 @@
import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.support.v4.view.ViewCompat;
-import android.view.Gravity;
import android.view.View;
import com.google.android.libraries.feed.piet.host.ActionHandler;
import com.google.android.libraries.feed.piet.host.ActionHandler.ActionType;
@@ -28,59 +27,12 @@
import com.google.search.now.ui.piet.ActionsProto.VisibilityAction;
import com.google.search.now.ui.piet.LogDataProto.LogData;
import com.google.search.now.ui.piet.PietProto.Frame;
-import com.google.search.now.ui.piet.StylesProto.GravityHorizontal;
-import com.google.search.now.ui.piet.StylesProto.GravityVertical;
import java.util.Set;
/** Utility class, providing useful methods to interact with Views. */
public class ViewUtils {
private static final String TAG = "ViewUtils";
- // TODO: Remove this method; it is only used by
- // ElementAdapter.getDeprecatedElementGravity
- @Deprecated
- static int pietGravityToGravity(
- GravityHorizontal gravityHorizontal, GravityVertical gravityVertical) {
- return gravityHorizontalToGravity(gravityHorizontal)
- | gravityVerticalToGravity(gravityVertical);
- }
-
- // TODO: Remove this method; it is only used by
- // ElementAdapter.getDeprecatedElementGravity
- @Deprecated
- @SuppressWarnings("UnnecessaryDefaultInEnumSwitch")
- static int gravityHorizontalToGravity(GravityHorizontal gravityHorizontal) {
- switch (gravityHorizontal) {
- case GRAVITY_START:
- return Gravity.START;
- case GRAVITY_CENTER:
- return Gravity.CENTER_HORIZONTAL;
- case GRAVITY_END:
- return Gravity.END;
- case GRAVITY_HORIZONTAL_UNSPECIFIED:
- default:
- return Gravity.START;
- }
- }
-
- // TODO: Remove this method; it is only used by
- // ElementAdapter.getDeprecatedElementGravity
- @Deprecated
- @SuppressWarnings("UnnecessaryDefaultInEnumSwitch")
- static int gravityVerticalToGravity(GravityVertical gravityVertical) {
- switch (gravityVertical) {
- case GRAVITY_TOP:
- return Gravity.TOP;
- case GRAVITY_MIDDLE:
- return Gravity.CENTER_VERTICAL;
- case GRAVITY_BOTTOM:
- return Gravity.BOTTOM;
- case GRAVITY_VERTICAL_UNSPECIFIED:
- default:
- return Gravity.NO_GRAVITY;
- }
- }
-
/**
* Attaches the onClick action from actions to the view, executed by the handler. In Android M+, a
* RippleDrawable is added to the foreground of the view, so that a ripple animation happens on
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerViewHelper.java b/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerViewHelper.java
index c6131aa..5271cc1 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerViewHelper.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerViewHelper.java
@@ -92,13 +92,11 @@
* is greater than zero.
*/
public static boolean hasValidRoundedCorners(RoundedCorners roundedCorners, int radiusOverride) {
- // TODO Remove deprecated radius code.
return ((roundedCorners.hasRadiusPercentageOfWidth()
&& (roundedCorners.getRadiusPercentageOfWidth() > 0))
|| (roundedCorners.hasRadiusPercentageOfHeight()
&& (roundedCorners.getRadiusPercentageOfHeight() > 0))
|| (roundedCorners.hasRadiusDp() && (roundedCorners.getRadiusDp() > 0))
- || (roundedCorners.hasRadius() && (roundedCorners.getRadius() > 0))
|| (radiusOverride > 0));
}
diff --git a/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java b/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java
index d90cedd..690574a 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java
@@ -333,7 +333,7 @@
/** Calculates the corner radius, clipping to width or height when necessary. */
private int makeRadius(int width, int height) {
- int radius = 0;
+ int radius;
RadiusOptionsCase radiusOptions = roundedCorners.getRadiusOptionsCase();
switch (radiusOptions) {
@@ -347,10 +347,7 @@
radius = roundedCorners.getRadiusPercentageOfWidth() * width / 100;
break;
default:
- // TODO Remove deprecated radius code.
- if (roundedCorners.hasRadius()) {
- radius = (int) LayoutUtils.dpToPx(roundedCorners.getRadius(), context);
- }
+ radius = 0;
}
roundedCornerRadius =
diff --git a/src/test/java/com/google/android/libraries/feed/piet/BUILD b/src/test/java/com/google/android/libraries/feed/piet/BUILD
index 27ead38..8286476 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/piet/BUILD
@@ -90,7 +90,6 @@
manifest_values = DEFAULT_ANDROID_LOCAL_TEST_MANIFEST,
deps = [
"//src/main/java/com/google/android/libraries/feed/common/functional",
- "//src/main/java/com/google/android/libraries/feed/common/testing",
"//src/main/java/com/google/android/libraries/feed/common/time/testing",
"//src/main/java/com/google/android/libraries/feed/piet",
"//src/main/java/com/google/android/libraries/feed/piet/host",
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapterTest.java
index cd6f003..b58322be 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapterTest.java
@@ -77,7 +77,6 @@
import com.google.search.now.ui.piet.PietProto.Frame;
import com.google.search.now.ui.piet.StylesProto.EdgeWidths;
import com.google.search.now.ui.piet.StylesProto.Font;
-import com.google.search.now.ui.piet.StylesProto.Font.FontWeight;
import com.google.search.now.ui.piet.StylesProto.Style;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import com.google.search.now.ui.piet.TextProto.Chunk;
@@ -532,7 +531,7 @@
public void testAddTextChunk_setsStyles() {
int color = 314159;
context.getResources().getDisplayMetrics().scaledDensity = 1.5f;
- Font font = Font.newBuilder().setItalic(true).setWeight(FontWeight.BOLD).setSize(20).build();
+ Font font = Font.newBuilder().setItalic(true).setSize(20).build();
// The text scales with accessibility settings: size (20) x scaledDensity (1.5) = final size 30
int expectedTextSize = 30;
@@ -542,7 +541,7 @@
adapter.addTextChunk(frameContext, spannable, TEXT_CHUNK);
- assertThat(spannable.getSpans(0, PROCESSED_TEXT.length(), Object.class)).hasLength(4);
+ assertThat(spannable.getSpans(0, PROCESSED_TEXT.length(), Object.class)).hasLength(3);
ForegroundColorSpan[] colorSpans =
spannable.getSpans(0, PROCESSED_TEXT.length(), ForegroundColorSpan.class);
@@ -554,7 +553,6 @@
StyleSpan[] styleSpans = spannable.getSpans(0, PROCESSED_TEXT.length(), StyleSpan.class);
assertThat(styleSpans[0].getStyle()).isEqualTo(Typeface.ITALIC);
- assertThat(styleSpans[1].getStyle()).isEqualTo(Typeface.BOLD);
}
@Test
diff --git a/src/test/java/com/google/android/libraries/feed/piet/CustomElementAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/CustomElementAdapterTest.java
index 66c83b9..f19bcd0 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/CustomElementAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/CustomElementAdapterTest.java
@@ -215,7 +215,6 @@
public void testGetModelFromElement() {
CustomElement model =
CustomElement.newBuilder()
- .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("custom"))
.build();
Element elementWithModel = Element.newBuilder().setCustomElement(model).build();
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterFactoryTest.java b/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterFactoryTest.java
index 60d44ee..110627e 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterFactoryTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterFactoryTest.java
@@ -30,7 +30,6 @@
import com.google.android.libraries.feed.piet.TemplateBinder.TemplateKey;
import com.google.search.now.ui.piet.BindingRefsProto.ChunkedTextBindingRef;
import com.google.search.now.ui.piet.BindingRefsProto.ParameterizedTextBindingRef;
-import com.google.search.now.ui.piet.ElementsProto.Content;
import com.google.search.now.ui.piet.ElementsProto.CustomElement;
import com.google.search.now.ui.piet.ElementsProto.Element;
import com.google.search.now.ui.piet.ElementsProto.ElementList;
@@ -68,11 +67,10 @@
@Mock private AdapterFactory<CustomElementAdapter, CustomElement> customElementFactory;
- @Mock private AdapterFactory<ChunkedTextElementAdapter, TextElement> chunkedTextElementFactory;
+ @Mock private AdapterFactory<ChunkedTextElementAdapter, Element> chunkedTextElementFactory;
@Mock
- private AdapterFactory<ParameterizedTextElementAdapter, TextElement>
- parameterizedTextElementFactory;
+ private AdapterFactory<ParameterizedTextElementAdapter, Element> parameterizedTextElementFactory;
@Mock private AdapterFactory<ImageElementAdapter, ImageElement> imageElementFactory;
@@ -105,9 +103,9 @@
templateRecyclerPool);
when(customElementFactory.get(any(CustomElement.class), eq(frameContext)))
.thenReturn(customElementAdapter);
- when(chunkedTextElementFactory.get(any(TextElement.class), eq(frameContext)))
+ when(chunkedTextElementFactory.get(any(Element.class), eq(frameContext)))
.thenReturn(chunkedTextElementAdapter);
- when(parameterizedTextElementFactory.get(any(TextElement.class), eq(frameContext)))
+ when(parameterizedTextElementFactory.get(any(Element.class), eq(frameContext)))
.thenReturn(parameterizedTextElementAdapter);
when(imageElementFactory.get(any(ImageElement.class), eq(frameContext)))
.thenReturn(imageElementAdapter);
@@ -141,7 +139,7 @@
Element element = Element.newBuilder().setTextElement(model).build();
assertThat(adapterFactory.createAdapterForElement(element, frameContext))
.isSameInstanceAs(chunkedTextElementAdapter);
- verify(chunkedTextElementFactory).get(model, frameContext);
+ verify(chunkedTextElementFactory).get(element, frameContext);
}
@Test
@@ -153,7 +151,7 @@
Element element = Element.newBuilder().setTextElement(model).build();
assertThat(adapterFactory.createAdapterForElement(element, frameContext))
.isSameInstanceAs(chunkedTextElementAdapter);
- verify(chunkedTextElementFactory).get(model, frameContext);
+ verify(chunkedTextElementFactory).get(element, frameContext);
}
@Test
@@ -165,7 +163,7 @@
Element element = Element.newBuilder().setTextElement(model).build();
assertThat(adapterFactory.createAdapterForElement(element, frameContext))
.isSameInstanceAs(parameterizedTextElementAdapter);
- verify(parameterizedTextElementFactory).get(model, frameContext);
+ verify(parameterizedTextElementFactory).get(element, frameContext);
}
@Test
@@ -177,7 +175,7 @@
Element element = Element.newBuilder().setTextElement(model).build();
assertThat(adapterFactory.createAdapterForElement(element, frameContext))
.isSameInstanceAs(parameterizedTextElementAdapter);
- verify(parameterizedTextElementFactory).get(model, frameContext);
+ verify(parameterizedTextElementFactory).get(element, frameContext);
}
@Test
@@ -293,15 +291,6 @@
}
@Test
- public void testCreateOverlayAdapter() {
- List<Content> overlays = Collections.emptyList();
- ElementStackAdapter adapter = adapterFactory.createOverlayAdapter(overlays, frameContext);
- verify(elementStackFactory)
- .get(ElementStack.newBuilder().addAllContents(overlays).build(), frameContext);
- assertThat(adapter).isSameInstanceAs(elementStackAdapter);
- }
-
- @Test
public void testPurgeRecyclerPools() {
adapterFactory.purgeRecyclerPools();
for (AdapterFactory<?, ?> adapterFactory : adapterFactories) {
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java
index 5ce849d..54b158b 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ElementAdapterTest.java
@@ -14,14 +14,12 @@
package com.google.android.libraries.feed.piet;
-import static com.google.android.libraries.feed.common.testing.RunnableSubject.assertThatRunnable;
import static com.google.android.libraries.feed.piet.StyleProvider.DIMENSION_NOT_SET;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.same;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
@@ -34,12 +32,10 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
-import android.view.ViewGroup.MarginLayoutParams;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.FrameLayout;
import com.google.android.libraries.feed.common.functional.Suppliers;
import com.google.android.libraries.feed.common.time.testing.FakeClock;
-import com.google.android.libraries.feed.piet.AdapterFactory.SingletonKeySupplier;
import com.google.android.libraries.feed.piet.host.ActionHandler;
import com.google.android.libraries.feed.piet.host.ActionHandler.ActionType;
import com.google.android.libraries.feed.piet.host.LogDataCallback;
@@ -52,29 +48,22 @@
import com.google.search.now.ui.piet.ActionsProto.Actions;
import com.google.search.now.ui.piet.ActionsProto.VisibilityAction;
import com.google.search.now.ui.piet.BindingRefsProto.ActionsBindingRef;
-import com.google.search.now.ui.piet.BindingRefsProto.ElementBindingRef;
import com.google.search.now.ui.piet.BindingRefsProto.LogDataBindingRef;
import com.google.search.now.ui.piet.BindingRefsProto.ParameterizedTextBindingRef;
import com.google.search.now.ui.piet.BindingRefsProto.VisibilityBindingRef;
import com.google.search.now.ui.piet.ElementsProto.BindingValue;
-import com.google.search.now.ui.piet.ElementsProto.Content;
import com.google.search.now.ui.piet.ElementsProto.Element;
-import com.google.search.now.ui.piet.ElementsProto.ElementList;
-import com.google.search.now.ui.piet.ElementsProto.ElementStack;
import com.google.search.now.ui.piet.ElementsProto.Visibility;
import com.google.search.now.ui.piet.ElementsProto.VisibilityState;
import com.google.search.now.ui.piet.LogDataProto.LogData;
import com.google.search.now.ui.piet.PietProto.Frame;
import com.google.search.now.ui.piet.RoundedCornersProto.RoundedCorners;
import com.google.search.now.ui.piet.StylesProto.Borders;
-import com.google.search.now.ui.piet.StylesProto.GravityHorizontal;
-import com.google.search.now.ui.piet.StylesProto.GravityVertical;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import com.google.search.now.ui.piet.TextProto.ParameterizedText;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
@@ -147,14 +136,26 @@
@Test
public void testGetters() {
+ // Pre-creation
+ assertThat(adapter.getHorizontalGravity(Gravity.CLIP_HORIZONTAL))
+ .isEqualTo(Gravity.CLIP_HORIZONTAL);
+ assertThat(adapter.getVerticalGravity(Gravity.CLIP_VERTICAL)).isEqualTo(Gravity.CLIP_VERTICAL);
+ assertThat(adapter.getGravity(Gravity.AXIS_Y_SHIFT)).isEqualTo(Gravity.AXIS_Y_SHIFT);
+
Element defaultElement =
Element.newBuilder()
- .setGravityHorizontal(GravityHorizontal.GRAVITY_CENTER)
.build();
Frame frame = Frame.newBuilder().setTag("FRAME").build();
when(frameContext.getFrame()).thenReturn(frame);
when(styleProvider.getGravityHorizontal(Gravity.CLIP_HORIZONTAL))
.thenReturn(Gravity.CENTER_HORIZONTAL);
+ when(styleProvider.hasGravityHorizontal()).thenReturn(true);
+ when(styleProvider.hasGravityVertical()).thenReturn(true);
+ when(styleProvider.getGravityHorizontal(anyInt())).thenReturn(Gravity.CENTER_HORIZONTAL);
+ when(styleProvider.getGravityVertical(anyInt())).thenReturn(Gravity.CENTER_VERTICAL);
+ // This should typically be CENTER_HORIZONTAL | CENTER_VERTICAL but I want to make sure that
+ // ElementAdapter is calling this method instead of OR'ing the H/V gravities itself.
+ when(styleProvider.getGravity(anyInt())).thenReturn(Gravity.FILL);
adapter.createAdapter(defaultElement, defaultElement, frameContext);
@@ -167,33 +168,7 @@
assertThat(adapter.getTemplatedStringEvaluator())
.isSameInstanceAs(parameters.templatedStringEvaluator);
assertThat(adapter.getElementStyle()).isSameInstanceAs(styleProvider);
- assertThat(adapter.getElementStyleIdsStack()).isEqualTo(TestElementAdapter.SUB_ELEMENT_STYLE);
- }
-
- // TODO: remove Element gravity and roll this test into the above testGetters
- @Test
- public void getGravity() {
- // Pre-creation
- assertThat(adapter.getHorizontalGravity(Gravity.CLIP_HORIZONTAL))
- .isEqualTo(Gravity.CLIP_HORIZONTAL);
- assertThat(adapter.getVerticalGravity(Gravity.CLIP_VERTICAL)).isEqualTo(Gravity.CLIP_VERTICAL);
- assertThat(adapter.getGravity(Gravity.AXIS_Y_SHIFT)).isEqualTo(Gravity.AXIS_Y_SHIFT);
-
- when(styleProvider.hasGravityHorizontal()).thenReturn(true);
- when(styleProvider.hasGravityVertical()).thenReturn(true);
- when(styleProvider.getGravityHorizontal(anyInt())).thenReturn(Gravity.CENTER_HORIZONTAL);
- when(styleProvider.getGravityVertical(anyInt())).thenReturn(Gravity.CENTER_VERTICAL);
- // This should typically be CENTER_HORIZONTAL | CENTER_VERTICAL but I want to make sure that
- // ElementAdapter is calling this method instead of OR'ing the H/V gravities itself.
- when(styleProvider.getGravity(anyInt())).thenReturn(Gravity.FILL);
-
- Element defaultElement =
- Element.newBuilder()
- .setGravityHorizontal(GravityHorizontal.GRAVITY_CENTER)
- .setGravityVertical(GravityVertical.GRAVITY_MIDDLE)
- .build();
-
- adapter.createAdapter(defaultElement, defaultElement, frameContext);
+ assertThat(adapter.getElementStyleIdsStack()).isEqualTo(StyleIdsStack.getDefaultInstance());
assertThat(adapter.getHorizontalGravity(Gravity.CLIP_VERTICAL))
.isEqualTo(Gravity.CENTER_HORIZONTAL);
@@ -211,64 +186,7 @@
}
@Test
- public void setLayoutParams_overlay() {
- Element elementWithOverlays =
- Element.newBuilder()
- .addOverlays(
- Content.newBuilder()
- .setElement(
- Element.newBuilder().setElementList(ElementList.getDefaultInstance())))
- .build();
-
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
-
- adapter.setLayoutParams(new LayoutParams(WIDTH, HEIGHT));
-
- assertThat(adapter.getBaseView()).isNotEqualTo(adapter.getView());
- assertThat(adapter.getView().getLayoutParams().width).isEqualTo(WIDTH);
- assertThat(adapter.getView().getLayoutParams().height).isEqualTo(HEIGHT);
- assertThat(adapter.getBaseView().getLayoutParams().width).isEqualTo(LayoutParams.MATCH_PARENT);
- assertThat(adapter.getBaseView().getLayoutParams().height).isEqualTo(LayoutParams.MATCH_PARENT);
-
- adapter.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
-
- assertThat(adapter.getBaseView()).isNotEqualTo(adapter.getView());
- assertThat(adapter.getView().getLayoutParams().width).isEqualTo(LayoutParams.WRAP_CONTENT);
- assertThat(adapter.getView().getLayoutParams().height).isEqualTo(LayoutParams.WRAP_CONTENT);
- assertThat(adapter.getBaseView().getLayoutParams().width).isEqualTo(LayoutParams.WRAP_CONTENT);
- assertThat(adapter.getBaseView().getLayoutParams().height).isEqualTo(LayoutParams.WRAP_CONTENT);
- }
-
- @Test
- public void setLayoutParams_resetsMarginsWithOverlay() {
- Element elementWithOverlays =
- Element.newBuilder()
- .addOverlays(
- Content.newBuilder()
- .setElement(
- Element.newBuilder().setElementList(ElementList.getDefaultInstance())))
- .build();
-
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
-
- MarginLayoutParams paramsWithMargins = new MarginLayoutParams(123, 456);
- paramsWithMargins.setMargins(1, 2, 3, 4);
- adapter.getBaseView().setLayoutParams(paramsWithMargins);
-
- adapter.setLayoutParams(new LayoutParams(WIDTH, HEIGHT));
-
- assertThat(((MarginLayoutParams) adapter.getBaseView().getLayoutParams()).leftMargin)
- .isEqualTo(0);
- assertThat(((MarginLayoutParams) adapter.getBaseView().getLayoutParams()).rightMargin)
- .isEqualTo(0);
- assertThat(((MarginLayoutParams) adapter.getBaseView().getLayoutParams()).topMargin)
- .isEqualTo(0);
- assertThat(((MarginLayoutParams) adapter.getBaseView().getLayoutParams()).bottomMargin)
- .isEqualTo(0);
- }
-
- @Test
- public void getComputedDimensions_defaults() {
+ public void testGetComputedDimensions_defaults() {
assertThat(adapter.getComputedWidthPx()).isEqualTo(DIMENSION_NOT_SET);
assertThat(adapter.getComputedHeightPx()).isEqualTo(DIMENSION_NOT_SET);
}
@@ -300,83 +218,7 @@
}
@Test
- public void createAdapter_createsOverlays() {
- Element elementWithOverlays =
- Element.newBuilder()
- .addOverlays(
- Content.newBuilder()
- .setElement(
- Element.newBuilder().setElementList(ElementList.getDefaultInstance())))
- .build();
-
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
-
- assertThat(adapter.getView()).isNotEqualTo(adapter.getBaseView());
- assertThat(adapter.getView()).isInstanceOf(FrameLayout.class);
- assertThat(adapter.overlayAdapter.childAdapters).isNotEmpty();
- }
-
- @Test
- public void createAdapter_setsOverlayLayoutParams() {
- Content overlayContent =
- Content.newBuilder()
- .setElement(Element.newBuilder().setElementList(ElementList.getDefaultInstance()))
- .build();
- Element elementWithOverlays = Element.newBuilder().addOverlays(overlayContent).build();
-
- ElementAdapterFactory mockFactory = mock(ElementAdapterFactory.class);
- ElementStackAdapter mockOverlayAdapter = mock(ElementStackAdapter.class);
- View overlayView = new View(context);
- when(mockFactory.createOverlayAdapter(elementWithOverlays.getOverlaysList(), frameContext))
- .thenReturn(mockOverlayAdapter);
- when(mockOverlayAdapter.getView()).thenReturn(overlayView);
- when(mockOverlayAdapter.getElementStyle()).thenReturn(styleProvider);
-
- parameters =
- new AdapterParameters(
- context,
- Suppliers.of((ViewGroup) null),
- hostProviders,
- new ParameterizedTextEvaluator(new FakeClock()),
- mockFactory,
- mock(TemplateBinder.class),
- new FakeClock());
- when(styleProvider.createWrapperView(
- context,
- parameters.roundedCornerMaskCache,
- parameters.allowLegacyRoundedCornerImpl,
- parameters.allowOutlineRoundedCornerImpl))
- .thenReturn(new FrameLayout(context));
- adapter = new TestElementAdapter(context, parameters, view);
-
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
-
- assertThat(((FrameLayout) adapter.getView()).getChildAt(1)).isSameInstanceAs(overlayView);
- ArgumentCaptor<LayoutParams> layoutParamsCaptor = ArgumentCaptor.forClass(LayoutParams.class);
- verify(mockOverlayAdapter).setLayoutParams(layoutParamsCaptor.capture());
- assertThat(layoutParamsCaptor.getValue().width).isEqualTo(LayoutParams.MATCH_PARENT);
- assertThat(layoutParamsCaptor.getValue().height).isEqualTo(LayoutParams.MATCH_PARENT);
- }
-
- @Test
- public void createAdapter_doesNothingForBoundOverlays() {
- ElementBindingRef bindingRef = ElementBindingRef.newBuilder().setBindingId("overlay").build();
- BindingValue bindingValue =
- BindingValue.newBuilder()
- .setElement(Element.newBuilder().setElementList(ElementList.getDefaultInstance()))
- .build();
- Content overlayContent = Content.newBuilder().setBoundElement(bindingRef).build();
- when(frameContext.getElementBindingValue(bindingRef)).thenReturn(bindingValue);
- Element elementWithOverlays = Element.newBuilder().addOverlays(overlayContent).build();
-
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
-
- // No overlays have been created yet, but adapter exists
- assertThat(adapter.overlayAdapter.childAdapters).isEmpty();
- }
-
- @Test
- public void createAdapter_addsBorders() {
+ public void testCreateAdapter_addsBorders() {
when(styleProvider.hasBorders()).thenReturn(true);
adapter.createAdapter(Element.getDefaultInstance(), Element.getDefaultInstance(), frameContext);
@@ -540,51 +382,7 @@
}
@Test
- public void bindModel_bindsOverlays() {
- Content overlayContent =
- Content.newBuilder()
- .setElement(
- Element.newBuilder()
- .setGravityVertical(GravityVertical.GRAVITY_MIDDLE)
- .setElementList(ElementList.getDefaultInstance()))
- .build();
- Element elementWithOverlays = Element.newBuilder().addOverlays(overlayContent).build();
-
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
- assertThat(adapter.overlayAdapter).isNotNull();
-
- ElementStackAdapter mockOverlayAdapter = mock(ElementStackAdapter.class);
- adapter.overlayAdapter = mockOverlayAdapter;
-
- adapter.bindModel(elementWithOverlays, elementWithOverlays, frameContext);
- verify(mockOverlayAdapter)
- .bindModel(
- Element.newBuilder()
- .setElementStack(
- ElementStack.newBuilder().addAllContents(elementWithOverlays.getOverlaysList()))
- .build(),
- frameContext);
- }
-
- @Test
- public void bindModel_bindsBoundOverlays() {
- ElementBindingRef bindingRef = ElementBindingRef.newBuilder().setBindingId("overlay").build();
- BindingValue bindingValue =
- BindingValue.newBuilder()
- .setElement(Element.newBuilder().setElementList(ElementList.getDefaultInstance()))
- .build();
- Content overlayContent = Content.newBuilder().setBoundElement(bindingRef).build();
- when(frameContext.getElementBindingValue(bindingRef)).thenReturn(bindingValue);
- Element elementWithOverlays = Element.newBuilder().addOverlays(overlayContent).build();
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
-
- adapter.bindModel(elementWithOverlays, elementWithOverlays, frameContext);
-
- assertThat(adapter.overlayAdapter.childAdapters.get(0)).isInstanceOf(ElementListAdapter.class);
- }
-
- @Test
- public void bindModel_setsActions() {
+ public void testBindModel_setsActions() {
Actions actions = Actions.newBuilder().setOnClickAction(Action.getDefaultInstance()).build();
Element elementWithActions = Element.newBuilder().setActions(actions).build();
@@ -599,11 +397,8 @@
Element elementWithActions =
Element.newBuilder()
.setActions(actions)
- .addOverlays(
- Content.newBuilder()
- .setElement(
- Element.newBuilder().setElementList(ElementList.getDefaultInstance())))
.build();
+ when(styleProvider.hasBorders()).thenReturn(true);
adapter.createAdapter(elementWithActions, elementWithActions, frameContext);
adapter.bindModel(elementWithActions, elementWithActions, frameContext);
@@ -646,13 +441,10 @@
Element elementWithActions =
Element.newBuilder()
.setActions(actions)
- .addOverlays(
- Content.newBuilder()
- .setElement(
- Element.newBuilder().setElementList(ElementList.getDefaultInstance())))
.build();
Element elementWithoutActions = elementWithActions.toBuilder().clearActions().build();
+ when(styleProvider.hasBorders()).thenReturn(true);
adapter.createAdapter(elementWithActions, elementWithActions, frameContext);
adapter.bindModel(elementWithActions, elementWithActions, frameContext);
assertThat(adapter.getView().hasOnClickListeners()).isFalse();
@@ -660,6 +452,8 @@
assertThat(adapter.actions).isSameInstanceAs(actions);
adapter.unbindModel();
+
+ when(styleProvider.hasBorders()).thenReturn(false);
adapter.bindModel(elementWithoutActions, elementWithoutActions, frameContext);
assertThat(adapter.getView().hasOnClickListeners()).isFalse();
assertThat(adapter.getBaseView().hasOnClickListeners()).isFalse();
@@ -667,31 +461,7 @@
}
@Test
- public void bindModel_failsWithIncompatibleOverlays() {
- Content overlayContent =
- Content.newBuilder()
- .setElement(
- Element.newBuilder()
- .setGravityVertical(GravityVertical.GRAVITY_MIDDLE)
- .setElementList(ElementList.getDefaultInstance()))
- .build();
- Element elementWithOverlays =
- Element.newBuilder().addOverlays(overlayContent).addOverlays(overlayContent).build();
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
-
- Element elementWithFewerOverlays = Element.newBuilder().addOverlays(overlayContent).build();
-
- assertThatRunnable(
- () ->
- adapter.bindModel(elementWithFewerOverlays, elementWithFewerOverlays, frameContext))
- .throwsAnExceptionOfType(IllegalStateException.class)
- .that()
- .hasMessageThat()
- .contains("Internal error in adapters per content");
- }
-
- @Test
- public void bindModel_setsVisibility() {
+ public void testBindModel_setsVisibility() {
Element visibleElement =
Element.newBuilder()
.setVisibilityState(
@@ -929,82 +699,26 @@
@Test
public void unbindModel_unsetsActions() {
- Element elementWithOverlaysAndActions =
+ Element elementWithWrapperAndActions =
Element.newBuilder()
- .addOverlays(
- Content.newBuilder()
- .setElement(
- Element.newBuilder()
- .setActions(
- Actions.newBuilder().setOnClickAction(Action.getDefaultInstance()))
- .setElementList(ElementList.getDefaultInstance())))
.setActions(Actions.newBuilder().setOnClickAction(Action.getDefaultInstance()))
.build();
- adapter.createAdapter(
- elementWithOverlaysAndActions, elementWithOverlaysAndActions, frameContext);
- adapter.bindModel(elementWithOverlaysAndActions, elementWithOverlaysAndActions, frameContext);
+ when(styleProvider.hasBorders()).thenReturn(true);
+
+ adapter.createAdapter(elementWithWrapperAndActions, elementWithWrapperAndActions, frameContext);
+ adapter.bindModel(elementWithWrapperAndActions, elementWithWrapperAndActions, frameContext);
View adapterView = adapter.getBaseView();
- View overlayView = adapter.getView();
+ View wrapperView = adapter.getView();
adapter.unbindModel();
assertThat(adapterView.hasOnClickListeners()).isFalse();
- assertThat(overlayView.hasOnClickListeners()).isFalse();
+ assertThat(wrapperView.hasOnClickListeners()).isFalse();
}
@Test
- public void unbindModel_unbindsOverlayAdapters() {
- Content overlayContent =
- Content.newBuilder()
- .setElement(
- Element.newBuilder()
- .setGravityVertical(GravityVertical.GRAVITY_MIDDLE)
- .setElementList(ElementList.getDefaultInstance()))
- .build();
- Element elementWithOverlays = Element.newBuilder().addOverlays(overlayContent).build();
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
- adapter.bindModel(elementWithOverlays, elementWithOverlays, frameContext);
- assertThat(adapter.overlayAdapter.getRawModel()).isNotNull();
-
- adapter.unbindModel();
- assertThat(adapter.overlayAdapter.getRawModel()).isNull();
- }
-
- @Test
- public void unbindModel_releasesBoundOverlays() {
- Element overlayElement =
- Element.newBuilder()
- .setGravityVertical(GravityVertical.GRAVITY_MIDDLE)
- .setElementList(ElementList.getDefaultInstance())
- .build();
- String overlayBindingId = "overlay";
- ElementBindingRef overlayBindingRef =
- ElementBindingRef.newBuilder().setBindingId(overlayBindingId).build();
- BindingValue overlayBindingValue =
- BindingValue.newBuilder().setBindingId(overlayBindingId).setElement(overlayElement).build();
- when(frameContext.getElementBindingValue(overlayBindingRef)).thenReturn(overlayBindingValue);
- Content overlayContent = Content.newBuilder().setBoundElement(overlayBindingRef).build();
- Element elementWithOverlays = Element.newBuilder().addOverlays(overlayContent).build();
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
- assertThat(adapter.overlayAdapter).isNotNull();
-
- adapter.bindModel(elementWithOverlays, elementWithOverlays, frameContext);
- assertThat(adapter.overlayAdapter).isNotNull();
- ElementStackAdapter overlayAdapter = adapter.overlayAdapter;
- assertThat(overlayAdapter.childAdapters).hasSize(1);
- assertThat(overlayAdapter.childAdapters.get(0)).isInstanceOf(ElementListAdapter.class);
- ElementListAdapter mockOverlayAdapter = mock(ElementListAdapter.class);
- overlayAdapter.childAdapters.set(0, mockOverlayAdapter);
-
- adapter.unbindModel();
- assertThat(adapter.overlayAdapter).isNotNull();
- assertThat(overlayAdapter.childAdapters).isEmpty();
- verify(mockOverlayAdapter).releaseAdapter();
- }
-
- @Test
- public void unbindModel_affectsVisibilityCalculations() {
+ public void testUnbindModel_affectsVisibilityCalculations() {
VisibilityBindingRef visibilityBinding =
VisibilityBindingRef.newBuilder().setBindingId("vis").build();
Element element =
@@ -1041,35 +755,7 @@
}
@Test
- public void releaseAdapter_removesOverlays() {
- Element elementWithOverlays =
- Element.newBuilder()
- .addOverlays(
- Content.newBuilder()
- .setElement(
- Element.newBuilder().setElementList(ElementList.getDefaultInstance())))
- .build();
-
- adapter.createAdapter(elementWithOverlays, elementWithOverlays, frameContext);
- adapter.bindModel(elementWithOverlays, elementWithOverlays, frameContext);
- View adapterView = adapter.getBaseView();
- FrameLayout overlayView = (FrameLayout) adapter.getView();
-
- ElementStackAdapter mockOverlayAdapter = mock(ElementStackAdapter.class);
- when(mockOverlayAdapter.getKey()).thenReturn(SingletonKeySupplier.SINGLETON_KEY);
- adapter.overlayAdapter = mockOverlayAdapter;
-
- adapter.releaseAdapter();
-
- assertThat(adapter.getView()).isSameInstanceAs(adapterView);
- assertThat(adapter.getView()).isSameInstanceAs(adapter.getBaseView());
- assertThat(overlayView.getChildCount()).isEqualTo(0);
- verify(mockOverlayAdapter).releaseAdapter();
- assertThat(adapter.overlayAdapter).isNull();
- }
-
- @Test
- public void releaseAdapter_resetsVisibility() {
+ public void testReleaseAdapter_resetsVisibility() {
Element defaultElement = Element.getDefaultInstance();
adapter.createAdapter(defaultElement, defaultElement, frameContext);
@@ -1437,14 +1123,12 @@
adapter.createAdapter(elementWithNoStyle, frameContext);
- assertThat(adapter.getElementStyleIdsStack()).isEqualTo(TestElementAdapter.SUB_ELEMENT_STYLE);
+ assertThat(adapter.getElementStyleIdsStack()).isEqualTo(StyleIdsStack.getDefaultInstance());
}
// Dummy implementation
static class TestElementAdapter extends ElementAdapter<View, Object> {
static final String DEFAULT_MODEL = "MODEL";
- static final StyleIdsStack SUB_ELEMENT_STYLE =
- StyleIdsStack.newBuilder().addStyleIds("deprecated").build();
boolean testAdapterCreated = false;
boolean testAdapterBound = false;
@@ -1472,11 +1156,6 @@
}
@Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return SUB_ELEMENT_STYLE;
- }
-
- @Override
protected void onUnbindModel() {
testAdapterBound = false;
}
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ElementContainerAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/ElementContainerAdapterTest.java
index f7b0688..202606f 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ElementContainerAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ElementContainerAdapterTest.java
@@ -659,10 +659,5 @@
List<Content> getModelFromElement(Element baseElement) {
throw new UnsupportedOperationException("Not used in this test");
}
-
- @Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return StyleIdsStack.getDefaultInstance();
- }
}
}
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ElementListAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/ElementListAdapterTest.java
index e62670c..f591264 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ElementListAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ElementListAdapterTest.java
@@ -51,7 +51,6 @@
import com.google.search.now.ui.piet.PietProto.Frame;
import com.google.search.now.ui.piet.RoundedCornersProto.RoundedCorners;
import com.google.search.now.ui.piet.StylesProto.EdgeWidths;
-import com.google.search.now.ui.piet.StylesProto.GravityHorizontal;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import org.junit.Before;
import org.junit.Test;
@@ -130,13 +129,12 @@
public void testOnCreateAdapter_makesList() {
ElementList listWithStyles =
ElementList.newBuilder()
- .setStyleReferences(LIST_STYLES)
.addContents(DEFAULT_CONTENT)
.addContents(DEFAULT_CONTENT)
.addContents(DEFAULT_CONTENT)
.build();
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElementWithDefaultStyle(listWithStyles), frameContext);
assertThat(adapter.getBaseView().getChildCount()).isEqualTo(3);
assertThat(adapter.getBaseView().getOrientation()).isEqualTo(LinearLayout.VERTICAL);
@@ -146,11 +144,10 @@
public void testOnCreateAdapter_setsStyles() {
ElementList listWithStyles =
ElementList.newBuilder()
- .setStyleReferences(LIST_STYLES)
.addContents(DEFAULT_CONTENT)
.build();
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElementWithDefaultStyle(listWithStyles), frameContext);
verify(styleProvider).applyElementStyles(adapter);
}
@@ -190,24 +187,15 @@
@Test
public void testOnBindModel_setsStylesOnlyIfBindingIsDefined() {
- ElementList listWithStyles =
- ElementList.newBuilder()
- .setStyleReferences(LIST_STYLES)
- .addContents(DEFAULT_CONTENT)
- .build();
+ ElementList list = ElementList.newBuilder().addContents(DEFAULT_CONTENT).build();
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElement(list, LIST_STYLES), frameContext);
verify(frameContext).makeStyleFor(LIST_STYLES);
// Binding an element with a different style will not apply the new style
StyleIdsStack otherStyles = StyleIdsStack.newBuilder().addStyleIds("bobcat").build();
- ElementList otherListWithStyles =
- ElementList.newBuilder()
- .setStyleReferences(otherStyles)
- .addContents(DEFAULT_CONTENT)
- .build();
- adapter.bindModel(asElement(otherListWithStyles), frameContext);
+ adapter.bindModel(asElement(list, otherStyles), frameContext);
verify(frameContext, never()).makeStyleFor(otherStyles);
// But binding an element with a style binding will re-apply the style
@@ -216,14 +204,9 @@
.addStyleIds("bobcat")
.setStyleBinding(StyleBindingRef.newBuilder().setBindingId("lynx"))
.build();
- ElementList otherListWithStyleBindings =
- ElementList.newBuilder()
- .setStyleReferences(otherStylesWithBinding)
- .addContents(DEFAULT_CONTENT)
- .build();
when(frameContext.makeStyleFor(otherStylesWithBinding)).thenReturn(styleProvider);
- adapter.bindModel(asElement(otherListWithStyleBindings), frameContext);
+ adapter.bindModel(asElement(list, otherStylesWithBinding), frameContext);
verify(frameContext).makeStyleFor(otherStylesWithBinding);
}
@@ -231,24 +214,23 @@
public void testOnBindModel_failsWithIncompatibleModel() {
ElementList listWithThreeElements =
ElementList.newBuilder()
- .setStyleReferences(LIST_STYLES)
.addContents(DEFAULT_CONTENT)
.addContents(DEFAULT_CONTENT)
.addContents(DEFAULT_CONTENT)
.build();
- adapter.createAdapter(asElement(listWithThreeElements), frameContext);
- adapter.bindModel(asElement(listWithThreeElements), frameContext);
+ adapter.createAdapter(asElementWithDefaultStyle(listWithThreeElements), frameContext);
+ adapter.bindModel(asElementWithDefaultStyle(listWithThreeElements), frameContext);
adapter.unbindModel();
ElementList listWithTwoElements =
ElementList.newBuilder()
- .setStyleReferences(LIST_STYLES)
.addContents(DEFAULT_CONTENT)
.addContents(DEFAULT_CONTENT)
.build();
- assertThatRunnable(() -> adapter.bindModel(asElement(listWithTwoElements), frameContext))
+ assertThatRunnable(
+ () -> adapter.bindModel(asElementWithDefaultStyle(listWithTwoElements), frameContext))
.throwsAnExceptionOfType(IllegalStateException.class)
.that()
.hasMessageThat()
@@ -356,24 +338,21 @@
}
@Test
- public void testOnBindModel_setsLayoutParams() {
- ElementList listWithStyles =
+ public void testOnBindModel_setsLayoutParamsOnChild() {
+ ElementList list =
ElementList.newBuilder()
.addContents(
Content.newBuilder()
- .setElement(
- DEFAULT_ELEMENT
- .toBuilder()
- .setStyleReferences(LIST_STYLES)
- .setGravityHorizontal(GravityHorizontal.GRAVITY_CENTER)))
+ .setElement(DEFAULT_ELEMENT.toBuilder().setStyleReferences(LIST_STYLES)))
.build();
+ when(styleProvider.getGravityHorizontal(anyInt())).thenReturn(Gravity.CENTER_HORIZONTAL);
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElement(list), frameContext);
adapter.childAdapters.get(0).widthPx = 123;
adapter.childAdapters.get(0).heightPx = 456;
- adapter.bindModel(asElement(listWithStyles), frameContext);
+ adapter.bindModel(asElement(list), frameContext);
assertThat(adapter.getBaseView().getChildCount()).isEqualTo(1);
assertThat(adapter.getBaseView().getChildAt(0).getLayoutParams())
@@ -395,14 +374,14 @@
.setStyleReferences(marginsStyles)
.setElementStack(ElementStack.getDefaultInstance())
.build();
- ElementList listWithStyles =
+ ElementList list =
ElementList.newBuilder()
.addContents(Content.newBuilder().setElement(elementWithMargins))
.build();
when(frameContext.makeStyleFor(marginsStyles)).thenReturn(styleProvider);
- adapter.createAdapter(asElement(listWithStyles), frameContext);
- adapter.bindModel(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElement(list), frameContext);
+ adapter.bindModel(asElement(list), frameContext);
// Assert that applyMargins is called on the child's layout params
ArgumentCaptor<MarginLayoutParams> capturedLayoutParams =
@@ -420,14 +399,13 @@
public void testReleaseAdapter() {
ElementList listWithStyles =
ElementList.newBuilder()
- .setStyleReferences(LIST_STYLES)
.addContents(DEFAULT_CONTENT)
.addContents(DEFAULT_CONTENT)
.addContents(DEFAULT_CONTENT)
.build();
- adapter.createAdapter(asElement(listWithStyles), frameContext);
- adapter.bindModel(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElementWithDefaultStyle(listWithStyles), frameContext);
+ adapter.bindModel(asElementWithDefaultStyle(listWithStyles), frameContext);
adapter.releaseAdapter();
assertThat(adapter.getBaseView().getChildCount()).isEqualTo(0);
@@ -443,21 +421,17 @@
public void testGetStyleIdsStack() {
ElementList listWithStyles =
ElementList.newBuilder()
- .setStyleReferences(LIST_STYLES)
.addContents(DEFAULT_CONTENT)
.build();
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElement(listWithStyles, LIST_STYLES), frameContext);
assertThat(adapter.getElementStyleIdsStack()).isEqualTo(LIST_STYLES);
}
@Test
public void testGetModelFromElement() {
- ElementList model =
- ElementList.newBuilder()
- .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("spacer"))
- .build();
+ ElementList model = ElementList.newBuilder().addContents(DEFAULT_CONTENT).build();
Element elementWithModel = Element.newBuilder().setElementList(model).build();
assertThat(adapter.getModelFromElement(elementWithModel)).isSameInstanceAs(model);
@@ -479,21 +453,18 @@
}
@Test
- public void testSetLayoutParams() {
- ElementList listWithStyles =
+ public void testSetLayoutParamsOnChild() {
+ ElementList list =
ElementList.newBuilder()
.addContents(
Content.newBuilder()
- .setElement(
- DEFAULT_ELEMENT
- .toBuilder()
- .setStyleReferences(LIST_STYLES)
- .setGravityHorizontal(GravityHorizontal.GRAVITY_CENTER)))
+ .setElement(DEFAULT_ELEMENT.toBuilder().setStyleReferences(LIST_STYLES)))
.build();
when(styleProvider.getWidthSpecPx(context)).thenReturn(123);
when(styleProvider.getHeightSpecPx(context)).thenReturn(456);
+ when(styleProvider.getGravityHorizontal(anyInt())).thenReturn(Gravity.CENTER_HORIZONTAL);
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElement(list), frameContext);
LayoutParams layoutParams =
new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -511,12 +482,12 @@
public void testSetLayoutParams_childWidthSet() {
int childWidth = 5;
- ElementList listWithStyles =
+ ElementList list =
ElementList.newBuilder()
.addContents(Content.newBuilder().setElement(IMAGE_ELEMENT))
.build();
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElement(list), frameContext);
StyleProvider childStyleProvider = mock(StyleProvider.class);
ImageElementAdapter mockChildAdapter = mock(ImageElementAdapter.class);
when(mockChildAdapter.getComputedWidthPx()).thenReturn(childWidth);
@@ -543,12 +514,12 @@
@Test
public void testSetLayoutParams_widthSetOnList() {
- ElementList listWithStyles =
+ ElementList list =
ElementList.newBuilder()
.addContents(Content.newBuilder().setElement(IMAGE_ELEMENT))
.build();
- adapter.createAdapter(asElement(listWithStyles), frameContext);
+ adapter.createAdapter(asElement(list), frameContext);
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -567,4 +538,12 @@
private static Element asElement(ElementList elementList) {
return Element.newBuilder().setElementList(elementList).build();
}
+
+ private static Element asElement(ElementList elementList, StyleIdsStack styles) {
+ return Element.newBuilder().setStyleReferences(styles).setElementList(elementList).build();
+ }
+
+ private static Element asElementWithDefaultStyle(ElementList elementList) {
+ return Element.newBuilder().setStyleReferences(LIST_STYLES).setElementList(elementList).build();
+ }
}
diff --git a/src/test/java/com/google/android/libraries/feed/piet/FrameAdapterImplTest.java b/src/test/java/com/google/android/libraries/feed/piet/FrameAdapterImplTest.java
index 3f7d335..2b76774 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/FrameAdapterImplTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/FrameAdapterImplTest.java
@@ -70,6 +70,7 @@
import com.google.search.now.ui.piet.PietProto.Frame;
import com.google.search.now.ui.piet.PietProto.PietSharedState;
import com.google.search.now.ui.piet.PietProto.Stylesheet;
+import com.google.search.now.ui.piet.PietProto.Stylesheets;
import com.google.search.now.ui.piet.PietProto.Template;
import com.google.search.now.ui.piet.RoundedCornersProto.RoundedCorners;
import com.google.search.now.ui.piet.ShadowsProto.ElevationShadow;
@@ -314,7 +315,7 @@
adapterParameters.pietStylesHelperFactory.get(pietSharedStates, mediaQueryHelper);
FrameContext frameContext =
FrameContext.createFrameContext(
- Frame.newBuilder().setStylesheet(Stylesheet.getDefaultInstance()).build(),
+ Frame.newBuilder().setStylesheets(Stylesheets.getDefaultInstance()).build(),
pietSharedStates,
stylesHelper,
debugBehavior,
@@ -386,7 +387,9 @@
Shadow.newBuilder()
.setElevationShadow(
ElevationShadow.newBuilder().setElevation(1)))
- .setOpacity(0.5f))
+ .setOpacity(0.5f)
+ .setGravityHorizontal(GravityHorizontal.GRAVITY_START)
+ .setGravityVertical(GravityVertical.GRAVITY_BOTTOM))
.addStyles(
Style.newBuilder()
.setStyleId("style2")
@@ -403,7 +406,8 @@
.setOpacity(0.25f)
// Rounded corners will introduce an overlay.
.setRoundedCorners(
- RoundedCorners.newBuilder().setRadius(2).setBitmask(2))))
+ RoundedCorners.newBuilder().setRadiusDp(2).setBitmask(2))
+ .setGravityHorizontal(GravityHorizontal.GRAVITY_END)))
.build();
pietSharedStates.add(pietSharedState);
@@ -422,13 +426,9 @@
Content.newBuilder()
.setElement(
Element.newBuilder()
- .setGravityHorizontal(GravityHorizontal.GRAVITY_START)
- .setGravityVertical(GravityVertical.GRAVITY_BOTTOM)
- .setImageElement(
- defaultImage.toBuilder()
- .setStyleReferences(
- StyleIdsStack.newBuilder()
- .addStyleIds("style1")))))))
+ .setStyleReferences(
+ StyleIdsStack.newBuilder().addStyleIds("style1"))
+ .setImageElement(defaultImage)))))
.build();
Content content2 =
Content.newBuilder()
@@ -440,17 +440,17 @@
Content.newBuilder()
.setElement(
Element.newBuilder()
- .setGravityHorizontal(GravityHorizontal.GRAVITY_END)
- .setImageElement(
- defaultImage.toBuilder()
- .setStyleReferences(
- StyleIdsStack.newBuilder()
- .addStyleIds("style2")))))))
+ .setStyleReferences(
+ StyleIdsStack.newBuilder().addStyleIds("style2"))
+ .setImageElement(defaultImage)))))
.build();
// Bind to a Frame with no wrapper view
frameAdapter.bindModel(
- Frame.newBuilder().setStylesheetId("stylesheet").addContents(content1).build(),
+ Frame.newBuilder()
+ .setStylesheets(Stylesheets.newBuilder().addStylesheetIds("stylesheet"))
+ .addContents(content1)
+ .build(),
0,
null,
pietSharedStates);
@@ -478,7 +478,10 @@
// This will recycle the ImageView, but it will be within a wrapper view.
// Ensure that the properties on the ImageView get unset correctly.
frameAdapter.bindModel(
- Frame.newBuilder().setStylesheetId("stylesheet").addContents(content2).build(),
+ Frame.newBuilder()
+ .setStylesheets(Stylesheets.newBuilder().addStylesheetIds("stylesheet"))
+ .addContents(content2)
+ .build(),
0,
null,
Collections.singletonList(pietSharedState));
@@ -701,7 +704,6 @@
public void testRecycling_inlineSlice() {
Element element =
Element.newBuilder()
- .setGravityVertical(GravityVertical.GRAVITY_MIDDLE)
.setElementList(ElementList.getDefaultInstance())
.build();
Frame inlineSliceFrame =
diff --git a/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java b/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java
index 9de507d..2a3dca5 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java
@@ -72,8 +72,6 @@
import com.google.search.now.ui.piet.PietProto.Template;
import com.google.search.now.ui.piet.StylesProto.BoundStyle;
import com.google.search.now.ui.piet.StylesProto.Font;
-import com.google.search.now.ui.piet.StylesProto.Font.FontWeight;
-import com.google.search.now.ui.piet.StylesProto.GravityVertical;
import com.google.search.now.ui.piet.StylesProto.Style;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import com.google.search.now.ui.piet.TextProto.Chunk;
@@ -542,7 +540,9 @@
@Test
public void testGetElement() {
Element element =
- Element.newBuilder().setGravityVertical(GravityVertical.GRAVITY_MIDDLE).build();
+ Element.newBuilder()
+ .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("el"))
+ .build();
BindingValue elementBindingValue = defaultBinding().setElement(element).build();
ElementBindingRef elementBindingRef =
ElementBindingRef.newBuilder().setBindingId(BINDING_ID).build();
@@ -589,7 +589,9 @@
@Test
public void testGetElement_hostBinding() {
Element element =
- Element.newBuilder().setGravityVertical(GravityVertical.GRAVITY_MIDDLE).build();
+ Element.newBuilder()
+ .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("el"))
+ .build();
BindingValue elementBindingValue = defaultBinding().setElement(element).build();
BindingValue hostListBindingValue =
defaultBinding()
@@ -983,20 +985,6 @@
assertThat(frameContext.getChunkedTextBindingValue(textBindingRef)).isEqualTo(textBindingValue);
}
- // TODO: Remove; this is now reported by PietStylesHelper.
- @Deprecated
- @Test
- public void testError_stylesheetNotFound() {
- Frame frame =
- Frame.newBuilder()
- .setStylesheetId(STYLESHEET_ID)
- .setStyleReferences(SAMPLE_STYLE_IDS)
- .build();
- FrameContext frameContext = makeFrameContextFromFrame(frame);
- assertThat(frameContext).isNotNull();
- assertThat(frameContext.getDebugLogger().getMessages(MessageType.ERROR)).hasSize(1);
- }
-
@Test
public void testCreateWithoutError() {
Frame frame = getWorkingFrame();
@@ -1139,7 +1127,7 @@
Style.newBuilder()
.setColor(12345) // Not overridden
.setMaxLines(54321) // Overridden
- .setFont(Font.newBuilder().setSize(11).setWeight(FontWeight.MEDIUM))
+ .setFont(Font.newBuilder().setSize(11).setItalic(true))
.setBackground(
Fill.newBuilder()
.setLinearGradient(
@@ -1182,7 +1170,7 @@
assertThat(defaultFrameStyle.getMaxLines()).isEqualTo(22222);
assertThat(defaultFrameStyle.getMinHeight()).isEqualTo(33333);
assertThat(defaultFrameStyle.getFont())
- .isEqualTo(Font.newBuilder().setSize(13).setWeight(FontWeight.MEDIUM).build());
+ .isEqualTo(Font.newBuilder().setSize(13).setItalic(true).build());
assertThat(defaultFrameStyle.getBackground())
.isEqualTo(
Fill.newBuilder()
@@ -1233,7 +1221,10 @@
.build();
assertThat(frameContext.getMediaQueryStylesheets(inlineStylesheetTemplate)).isEmpty();
- Template notFoundStylesheetTemplate = Template.newBuilder().setStylesheetId("NotFound").build();
+ Template notFoundStylesheetTemplate =
+ Template.newBuilder()
+ .setStylesheets(Stylesheets.newBuilder().addStylesheetIds("NotFound"))
+ .build();
assertThat(frameContext.getMediaQueryStylesheets(notFoundStylesheetTemplate)).isEmpty();
Template noConditionsTemplate =
diff --git a/src/test/java/com/google/android/libraries/feed/piet/GridRowAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/GridRowAdapterTest.java
index 86657b2..1381a11 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/GridRowAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/GridRowAdapterTest.java
@@ -64,7 +64,6 @@
import com.google.search.now.ui.piet.PietProto.Frame;
import com.google.search.now.ui.piet.RoundedCornersProto.RoundedCorners;
import com.google.search.now.ui.piet.StylesProto.EdgeWidths;
-import com.google.search.now.ui.piet.StylesProto.GravityVertical;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import com.google.search.now.ui.piet.TextProto.ParameterizedText;
import java.util.Collections;
@@ -185,7 +184,6 @@
GridRow model =
GridRow.newBuilder()
.addCells(GridCell.newBuilder().setContent(DEFAULT_CONTENT))
- .setStyleReferences(GRID_STYLES)
.build();
adapter.createAdapter(asElement(model), frameContext);
@@ -319,9 +317,9 @@
Content.newBuilder()
.setElement(
Element.newBuilder()
+ .setStyleReferences(childStyles)
.setImageElement(
ImageElement.newBuilder()
- .setStyleReferences(childStyles)
.setImage(Image.getDefaultInstance())))))
.build();
@@ -355,9 +353,9 @@
Content.newBuilder()
.setElement(
Element.newBuilder()
+ .setStyleReferences(childStyles)
.setImageElement(
ImageElement.newBuilder()
- .setStyleReferences(childStyles)
.setImage(Image.getDefaultInstance())))))
.build();
@@ -443,6 +441,11 @@
@Test
public void testOnBindModel_setsLayoutParamsOnCell_verticalGravityCenter() {
+ StyleIdsStack centerVertical =
+ StyleIdsStack.newBuilder().addStyleIds("center_vertical").build();
+ StyleProvider centerVerticalProvider = mock(StyleProvider.class);
+ when(frameContext.makeStyleFor(centerVertical)).thenReturn(centerVerticalProvider);
+ when(centerVerticalProvider.getGravityVertical(anyInt())).thenReturn(Gravity.CENTER_VERTICAL);
GridRow gridRowTop =
GridRow.newBuilder()
.addCells(
@@ -450,9 +453,7 @@
.setContent(
Content.newBuilder()
.setElement(
- DEFAULT_ELEMENT
- .toBuilder()
- .setGravityVertical(GravityVertical.GRAVITY_MIDDLE))))
+ DEFAULT_ELEMENT.toBuilder().setStyleReferences(centerVertical))))
.build();
adapter.createAdapter(asElement(gridRowTop), frameContext);
@@ -708,24 +709,16 @@
@Test
public void testOnBindModel_setsStylesOnlyIfBindingIsDefined() {
- GridRow gridRowWithStyle =
- GridRow.newBuilder()
- .addCells(GridCell.newBuilder().setContent(DEFAULT_CONTENT))
- .setStyleReferences(GRID_STYLES)
- .build();
+ GridRow gridRow =
+ GridRow.newBuilder().addCells(GridCell.newBuilder().setContent(DEFAULT_CONTENT)).build();
- adapter.createAdapter(asElement(gridRowWithStyle), frameContext);
+ adapter.createAdapter(asElement(gridRow, GRID_STYLES), frameContext);
verify(frameContext).makeStyleFor(GRID_STYLES);
// When we bind a new model, the style does not change.
StyleIdsStack otherStyles = StyleIdsStack.newBuilder().addStyleIds("ignored").build();
- GridRow gridRowWithOtherStyle =
- GridRow.newBuilder()
- .addCells(GridCell.newBuilder().setContent(DEFAULT_CONTENT))
- .setStyleReferences(otherStyles)
- .build();
- adapter.bindModel(asElement(gridRowWithOtherStyle), frameContext);
+ adapter.bindModel(asElement(gridRow, otherStyles), frameContext);
verify(frameContext, never()).makeStyleFor(otherStyles);
// If we bind a model that has a style binding, then the style does get re-applied.
@@ -733,15 +726,10 @@
StyleIdsStack.newBuilder()
.setStyleBinding(StyleBindingRef.newBuilder().setBindingId("homewardbound"))
.build();
- GridRow gridRowWithBoundStyle =
- GridRow.newBuilder()
- .addCells(GridCell.newBuilder().setContent(DEFAULT_CONTENT))
- .setStyleReferences(styleWithBinding)
- .build();
StyleProvider otherStyleProvider = mock(StyleProvider.class);
when(frameContext.makeStyleFor(styleWithBinding)).thenReturn(otherStyleProvider);
- adapter.bindModel(asElement(gridRowWithBoundStyle), frameContext);
+ adapter.bindModel(asElement(gridRow, styleWithBinding), frameContext);
verify(frameContext).makeStyleFor(styleWithBinding);
verify(otherStyleProvider).applyElementStyles(adapter);
}
@@ -984,8 +972,7 @@
@Test
public void testGetStyleIdsStack() {
- adapter.createAdapter(
- asElement(GridRow.newBuilder().setStyleReferences(GRID_STYLES).build()), frameContext);
+ adapter.createAdapter(asElement(GridRow.getDefaultInstance(), GRID_STYLES), frameContext);
assertThat(adapter.getElementStyleIdsStack()).isEqualTo(GRID_STYLES);
}
@@ -999,12 +986,13 @@
@Test
public void testGetModelFromElement() {
- GridRow model =
- GridRow.newBuilder()
- .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("spacer"))
- .build();
+ GridRow model = GridRow.newBuilder().build();
- Element elementWithModel = Element.newBuilder().setGridRow(model).build();
+ Element elementWithModel =
+ Element.newBuilder()
+ .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("spacer"))
+ .setGridRow(model)
+ .build();
assertThat(adapter.getModelFromElement(elementWithModel)).isSameInstanceAs(model);
Element elementWithWrongModel =
@@ -1023,7 +1011,11 @@
.contains("Missing GridRow");
}
+ private static Element asElement(GridRow gridRow, StyleIdsStack styles) {
+ return Element.newBuilder().setStyleReferences(styles).setGridRow(gridRow).build();
+ }
+
private static Element asElement(GridRow gridRow) {
- return Element.newBuilder().setGridRow(gridRow).build();
+ return Element.newBuilder().setStyleReferences(GRID_STYLES).setGridRow(gridRow).build();
}
}
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ImageElementAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/ImageElementAdapterTest.java
index a9ab42a..db19829 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ImageElementAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ImageElementAdapterTest.java
@@ -75,7 +75,7 @@
private static final EdgeWidths PADDING =
EdgeWidths.newBuilder().setBottom(1).setTop(2).setStart(3).setEnd(4).build();
private static final RoundedCorners CORNERS =
- RoundedCorners.newBuilder().setBitmask(Corners.BOTTOM_START_VALUE).setRadius(34).build();
+ RoundedCorners.newBuilder().setBitmask(Corners.BOTTOM_START_VALUE).setRadiusDp(34).build();
private static final Image DEFAULT_IMAGE =
Image.newBuilder().addSources(ImageSource.newBuilder().setUrl("icanhas.chz")).build();
private static final Element DEFAULT_MODEL =
@@ -224,8 +224,10 @@
public void testBindModel_image() {
StyleIdsStack styles = StyleIdsStack.newBuilder().addStyleIds("stylecat").build();
Element model =
- asElement(
- ImageElement.newBuilder().setImage(DEFAULT_IMAGE).setStyleReferences(styles).build());
+ Element.newBuilder()
+ .setStyleReferences(styles)
+ .setImageElement(ImageElement.newBuilder().setImage(DEFAULT_IMAGE))
+ .build();
adapter.createAdapter(model, frameContext);
adapter.bindModel(model, frameContext);
@@ -362,12 +364,7 @@
// Styles do not change when a different model is bound
StyleIdsStack otherStyle = StyleIdsStack.newBuilder().addStyleIds("ignored").build();
- Element imageWithOtherStyle =
- asElement(
- ImageElement.newBuilder()
- .setStyleReferences(otherStyle)
- .setImage(Image.getDefaultInstance())
- .build());
+ Element imageWithOtherStyle = DEFAULT_MODEL.toBuilder().setStyleReferences(otherStyle).build();
adapter.bindModel(imageWithOtherStyle, frameContext);
adapter.unbindModel();
@@ -378,12 +375,7 @@
StyleIdsStack.newBuilder()
.setStyleBinding(StyleBindingRef.newBuilder().setBindingId("tuna"))
.build();
- Element imageWithBoundStyle =
- asElement(
- ImageElement.newBuilder()
- .setStyleReferences(boundStyle)
- .setImage(Image.getDefaultInstance())
- .build());
+ Element imageWithBoundStyle = DEFAULT_MODEL.toBuilder().setStyleReferences(boundStyle).build();
adapter.bindModel(imageWithBoundStyle, frameContext);
verify(frameContext).makeStyleFor(boundStyle);
diff --git a/src/test/java/com/google/android/libraries/feed/piet/KeyedRecyclerPoolTest.java b/src/test/java/com/google/android/libraries/feed/piet/KeyedRecyclerPoolTest.java
index dfc623c..9f726ec 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/KeyedRecyclerPoolTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/KeyedRecyclerPoolTest.java
@@ -22,7 +22,6 @@
import android.content.Context;
import android.view.View;
import com.google.search.now.ui.piet.ElementsProto.Element;
-import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -194,10 +193,5 @@
protected Object getModelFromElement(Element baseElement) {
return null;
}
-
- @Override
- StyleIdsStack getSubElementStyleIdsStack() {
- return StyleIdsStack.getDefaultInstance();
- }
}
}
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterFactoryTest.java b/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterFactoryTest.java
index 43bd595..793ee8f 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterFactoryTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterFactoryTest.java
@@ -30,7 +30,6 @@
import com.google.search.now.ui.piet.ElementsProto.Element;
import com.google.search.now.ui.piet.ElementsProto.TextElement;
import com.google.search.now.ui.piet.StylesProto.Font;
-import com.google.search.now.ui.piet.StylesProto.Font.FontWeight;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import com.google.search.now.ui.piet.TextProto.ParameterizedText;
import org.junit.Before;
@@ -53,8 +52,6 @@
private AdapterParameters adapterParameters;
private Context context;
- private AdapterFactory<ParameterizedTextElementAdapter, TextElement> textElementFactory;
-
@Before
public void setUp() throws Exception {
initMocks(this);
@@ -76,8 +73,12 @@
public void testKeySupplier() {
String styleId = "text";
StyleIdsStack style = StyleIdsStack.newBuilder().addStyleIds(styleId).build();
- Font font = Font.newBuilder().setSize(123).setItalic(true).setWeight(FontWeight.BLACK).build();
- TextElement model = TextElement.newBuilder().setStyleReferences(style).build();
+ Font font = Font.newBuilder().setSize(123).setItalic(true).build();
+ Element model =
+ Element.newBuilder()
+ .setStyleReferences(style)
+ .setTextElement(TextElement.getDefaultInstance())
+ .build();
StyleProvider styleProvider = mock(StyleProvider.class);
when(frameContext.makeStyleFor(style)).thenReturn(styleProvider);
when(styleProvider.getFont()).thenReturn(font);
@@ -94,8 +95,9 @@
@Test
public void testGetAdapterFromFactory() {
- textElementFactory = new AdapterFactory<>(context, adapterParameters, keySupplier);
- TextElement textElement = getBaseTextElement(null);
+ AdapterFactory<ParameterizedTextElementAdapter, Element> textElementFactory =
+ new AdapterFactory<>(context, adapterParameters, keySupplier);
+ Element textElement = getBaseTextElementModel(null);
ParameterizedTextElementAdapter textElementAdapter =
textElementFactory.get(textElement, frameContext);
@@ -108,8 +110,9 @@
@Test
public void testReleaseAndRecycling() {
- textElementFactory = new AdapterFactory<>(context, adapterParameters, keySupplier);
- TextElement textElement = getBaseTextElement(null);
+ AdapterFactory<ParameterizedTextElementAdapter, Element> textElementFactory =
+ new AdapterFactory<>(context, adapterParameters, keySupplier);
+ Element textElement = getBaseTextElementModel(null);
TextElementKey adapterKey =
new TextElementKey(adapterParameters.defaultStyleProvider.getFont());
when(adapter.getKey()).thenReturn(adapterKey);
@@ -118,8 +121,7 @@
ParameterizedTextElementAdapter textElementAdapter =
textElementFactory.get(textElement, frameContext);
assertThat(textElementAdapter).isSameInstanceAs(adapter);
- textElementAdapter.createAdapter(
- Element.newBuilder().setTextElement(textElement).build(), frameContext);
+ textElementAdapter.createAdapter(textElement, frameContext);
// Ensure that releasing in the factory releases the adapter.
textElementFactory.release(textElementAdapter);
@@ -138,6 +140,10 @@
assertThat(textElementAdapter3).isNotSameInstanceAs(textElementAdapter);
}
+ private Element getBaseTextElementModel(/*@Nullable*/ StyleProvider styleProvider) {
+ return Element.newBuilder().setTextElement(getBaseTextElement(styleProvider)).build();
+ }
+
private TextElement getBaseTextElement(/*@Nullable*/ StyleProvider styleProvider) {
StyleProvider sp =
styleProvider != null ? styleProvider : adapterParameters.defaultStyleProvider;
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterTest.java
index 29d0d41..dcf97bd 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapterTest.java
@@ -197,11 +197,7 @@
@Test
public void testStyles_padding() {
- Element model =
- asElement(
- TextElement.newBuilder()
- .setStyleReferences(StyleIdsStack.getDefaultInstance())
- .build());
+ Element model = asElement(TextElement.getDefaultInstance());
when(frameContext.makeStyleFor(any(StyleIdsStack.class))).thenReturn(mockStyleProvider);
diff --git a/src/test/java/com/google/android/libraries/feed/piet/PietStylesHelperTest.java b/src/test/java/com/google/android/libraries/feed/piet/PietStylesHelperTest.java
index 79fd3b9..438b856 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/PietStylesHelperTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/PietStylesHelperTest.java
@@ -34,10 +34,10 @@
import com.google.search.now.ui.piet.MediaQueriesProto.MediaQueryCondition;
import com.google.search.now.ui.piet.PietProto.PietSharedState;
import com.google.search.now.ui.piet.PietProto.Stylesheet;
+import com.google.search.now.ui.piet.PietProto.Stylesheets;
import com.google.search.now.ui.piet.PietProto.Template;
import com.google.search.now.ui.piet.StylesProto.BoundStyle;
import com.google.search.now.ui.piet.StylesProto.Font;
-import com.google.search.now.ui.piet.StylesProto.Font.FontWeight;
import com.google.search.now.ui.piet.StylesProto.Style;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
import java.util.ArrayList;
@@ -162,16 +162,34 @@
when(assetProvider.isDarkTheme()).thenReturn(true);
helper = helperFactory.get(Collections.singletonList(sharedState), newMediaQueryHelper());
- assertThat(helper.getStylesheetMap("DARK")).containsExactly(STYLE_ID_1, STYLE_1);
- assertThat(helper.getStylesheetMap("LIGHT")).isEmpty();
- assertThat(helper.getStylesheetMap("SWITCH")).containsExactly("dark", darkStyle);
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds("DARK").build(), debugLogger))
+ .containsExactly(STYLE_ID_1, STYLE_1);
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds("LIGHT").build(), debugLogger))
+ .isEmpty();
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds("SWITCH").build(), debugLogger))
+ .containsExactly("dark", darkStyle);
when(assetProvider.isDarkTheme()).thenReturn(false);
helper = helperFactory.get(Collections.singletonList(sharedState), newMediaQueryHelper());
- assertThat(helper.getStylesheetMap("DARK")).isEmpty();
- assertThat(helper.getStylesheetMap("LIGHT")).containsExactly(STYLE_ID_2, STYLE_2);
- assertThat(helper.getStylesheetMap("SWITCH")).containsExactly("light", lightStyle);
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds("DARK").build(), debugLogger))
+ .isEmpty();
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds("LIGHT").build(), debugLogger))
+ .containsExactly(STYLE_ID_2, STYLE_2);
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds("SWITCH").build(), debugLogger))
+ .containsExactly("light", lightStyle);
}
@Test
@@ -210,15 +228,25 @@
@Test
public void testGetStylesheet() {
- Map<String, Style> resultMap1 = helper.getStylesheetMap(STYLESHEET_ID_1);
+ Map<String, Style> resultMap1 =
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds(STYLESHEET_ID_1).build(), debugLogger);
assertThat(resultMap1).containsExactly(STYLE_ID_1, STYLE_1);
// Retrieve map again to test caching
- assertThat(helper.getStylesheetMap(STYLESHEET_ID_1)).isSameInstanceAs(resultMap1);
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds(STYLESHEET_ID_1).build(), debugLogger))
+ .isSameInstanceAs(resultMap1);
- Map<String, Style> resultMap2 = helper.getStylesheetMap(STYLESHEET_ID_2);
+ Map<String, Style> resultMap2 =
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds(STYLESHEET_ID_2).build(), debugLogger);
assertThat(resultMap2).containsExactly(STYLE_ID_2, STYLE_2);
- assertThat(helper.getStylesheetMap(STYLESHEET_ID_2)).isSameInstanceAs(resultMap2);
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds(STYLESHEET_ID_2).build(), debugLogger))
+ .isSameInstanceAs(resultMap2);
}
@Test
@@ -243,7 +271,10 @@
@Test
public void testGetStylesheet_notExist() {
- assertThat(helper.getStylesheetMap("NOT EXIST")).isEmpty();
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheetIds("NOT EXIST").build(), debugLogger))
+ .isEmpty();
}
@Test
@@ -254,7 +285,9 @@
Style eighties = Style.newBuilder().setStyleId("80s").build();
myStyles.addStyles(eighties);
- assertThat(helper.createMapFromStylesheet(myStyles.build()))
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheets(myStyles.build()).build(), debugLogger))
.containsExactly("60s", sixties, "80s", eighties);
}
@@ -266,7 +299,10 @@
Style sixtiesAgain = Style.newBuilder().setStyleId("60s").build();
myStyles.addStyles(sixtiesAgain);
- assertThatRunnable(() -> helper.createMapFromStylesheet(myStyles.build()))
+ assertThatRunnable(
+ () ->
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheets(myStyles.build()).build(), debugLogger))
.throwsAnExceptionOfType(PietFatalException.class)
.that()
.hasMessageThat()
@@ -295,12 +331,16 @@
when(assetProvider.isDarkTheme()).thenReturn(true);
helper = helperFactory.get(sharedStates, newMediaQueryHelper());
- assertThat(helper.createMapFromStylesheet(myStyles.build()))
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheets(myStyles.build()).build(), debugLogger))
.containsExactly("theme", darkStyle);
when(assetProvider.isDarkTheme()).thenReturn(false);
helper = helperFactory.get(sharedStates, newMediaQueryHelper());
- assertThat(helper.createMapFromStylesheet(myStyles.build()))
+ assertThat(
+ helper.getStylesheetMap(
+ Stylesheets.newBuilder().addStylesheets(myStyles.build()).build(), debugLogger))
.containsExactly("theme", lightStyle);
}
@@ -320,9 +360,9 @@
// These constants are in the final output and are not overridden
int baseWidth = 999;
int style1Color = 12345;
+ boolean style1Italic = true;
int style2MaxLines = 22222;
int style2MinHeight = 33333;
- FontWeight style1FontWeight = FontWeight.MEDIUM;
int style2FontSize = 13;
int style1GradientColor = 1234;
int style2GradientDirection = 321;
@@ -342,7 +382,7 @@
Style.newBuilder()
.setColor(style1Color) // Not overridden
.setMaxLines(54321) // Overridden
- .setFont(Font.newBuilder().setSize(11).setWeight(style1FontWeight))
+ .setFont(Font.newBuilder().setSize(11).setItalic(style1Italic))
.setBackground(
Fill.newBuilder()
.setLinearGradient(
@@ -378,7 +418,7 @@
.setColor(style1Color)
.setMaxLines(style2MaxLines)
.setMinHeight(style2MinHeight)
- .setFont(Font.newBuilder().setSize(style2FontSize).setWeight(style1FontWeight))
+ .setFont(Font.newBuilder().setSize(style2FontSize).setItalic(style1Italic))
.setBackground(
Fill.newBuilder()
.setLinearGradient(
@@ -415,7 +455,7 @@
.setColor(boundStyleColor)
.setMaxLines(style2MaxLines)
.setMinHeight(style2MinHeight)
- .setFont(Font.newBuilder().setSize(style2FontSize).setWeight(style1FontWeight))
+ .setFont(Font.newBuilder().setSize(style2FontSize).setItalic(style1Italic))
.setBackground(
Fill.newBuilder()
.setLinearGradient(
diff --git a/src/test/java/com/google/android/libraries/feed/piet/StyleProviderTest.java b/src/test/java/com/google/android/libraries/feed/piet/StyleProviderTest.java
index 4dd7acf..9488689 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/StyleProviderTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/StyleProviderTest.java
@@ -110,7 +110,7 @@
.setPreLoadFill(Fill.newBuilder().setColor(9))
.setFadeInImageOnLoad(true)
.build())
- .setRoundedCorners(RoundedCorners.newBuilder().setRadius(3))
+ .setRoundedCorners(RoundedCorners.newBuilder().setRadiusDp(3))
.setFont(Font.newBuilder().setSize(4))
.setMaxLines(5)
.setMinHeight(6)
@@ -448,7 +448,7 @@
public void testElementStyles_backgroundAndCorners() {
int color = 0xffffffff;
Fill background = Fill.newBuilder().setColor(color).build();
- RoundedCorners corners = RoundedCorners.newBuilder().setRadius(4).setBitmask(3).build();
+ RoundedCorners corners = RoundedCorners.newBuilder().setRadiusDp(4).setBitmask(3).build();
Style style =
Style.newBuilder()
@@ -690,7 +690,7 @@
public void testCreateBackground() {
int color = 12345;
Fill fill = Fill.newBuilder().setColor(color).build();
- RoundedCorners roundedCorners = RoundedCorners.newBuilder().setRadius(4321).build();
+ RoundedCorners roundedCorners = RoundedCorners.newBuilder().setRadiusDp(4321).build();
StyleProvider styleProvider;
styleProvider = new StyleProvider(Style.getDefaultInstance(), mockAssetProvider);
@@ -711,7 +711,7 @@
public void testCreatePreLoadFill() {
int color = 12345;
Fill fill = Fill.newBuilder().setColor(color).build();
- RoundedCorners roundedCorners = RoundedCorners.newBuilder().setRadius(4321).build();
+ RoundedCorners roundedCorners = RoundedCorners.newBuilder().setRadiusDp(4321).build();
StyleProvider styleProvider;
styleProvider = new StyleProvider(Style.getDefaultInstance(), mockAssetProvider);
diff --git a/src/test/java/com/google/android/libraries/feed/piet/TemplateBinderTest.java b/src/test/java/com/google/android/libraries/feed/piet/TemplateBinderTest.java
index 4751f3c..e4f443f 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/TemplateBinderTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/TemplateBinderTest.java
@@ -52,6 +52,7 @@
import com.google.search.now.ui.piet.PietProto.Frame;
import com.google.search.now.ui.piet.PietProto.PietSharedState;
import com.google.search.now.ui.piet.PietProto.Stylesheet;
+import com.google.search.now.ui.piet.PietProto.Stylesheets;
import com.google.search.now.ui.piet.PietProto.Template;
import com.google.search.now.ui.piet.StylesProto.Style;
import com.google.search.now.ui.piet.StylesProto.StyleIdsStack;
@@ -85,9 +86,9 @@
.setTemplateId(TEMPLATE_ID)
.setElement(
Element.newBuilder()
+ .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds(TEXT_STYLE_ID))
.setTextElement(
TextElement.newBuilder()
- .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds(TEXT_STYLE_ID))
.setParameterizedTextBinding(
ParameterizedTextBindingRef.newBuilder()
.setBindingId(TEXT_BINDING_ID))))
@@ -100,10 +101,13 @@
private static final Frame DEFAULT_FRAME =
Frame.newBuilder()
- .setStylesheet(
- Stylesheet.newBuilder()
- .setStylesheetId(FRAME_STYLESHEET_ID)
- .addStyles(Style.newBuilder().setStyleId(TEXT_STYLE_ID).setColor(FRAME_COLOR)))
+ .setStylesheets(
+ Stylesheets.newBuilder()
+ .addStylesheets(
+ Stylesheet.newBuilder()
+ .setStylesheetId(FRAME_STYLESHEET_ID)
+ .addStyles(
+ Style.newBuilder().setStyleId(TEXT_STYLE_ID).setColor(FRAME_COLOR))))
.addTemplates(MODEL_TEMPLATE)
.addTemplates(OTHER_TEMPLATE)
.build();
@@ -239,7 +243,9 @@
// respectively.
Template template =
Template.newBuilder()
- .setStylesheet(Stylesheet.newBuilder().addStyles(templateStyle))
+ .setStylesheets(
+ Stylesheets.newBuilder()
+ .addStylesheets(Stylesheet.newBuilder().addStyles(templateStyle)))
.setElement(
Element.newBuilder()
.setElementList(
@@ -248,29 +254,26 @@
Content.newBuilder()
.setElement(
Element.newBuilder()
- .setElementList(
- ElementList.newBuilder()
- .setStyleReferences(
- StyleIdsStack.newBuilder()
- .addStyleIds(templateStyleId)))))
+ .setStyleReferences(
+ StyleIdsStack.newBuilder()
+ .addStyleIds(templateStyleId))
+ .setElementList(ElementList.getDefaultInstance())))
.addContents(
Content.newBuilder()
.setElement(
Element.newBuilder()
- .setElementList(
- ElementList.newBuilder()
- .setStyleReferences(
- StyleIdsStack.newBuilder()
- .addStyleIds(frameStyleId)))))
+ .setStyleReferences(
+ StyleIdsStack.newBuilder()
+ .addStyleIds(frameStyleId))
+ .setElementList(ElementList.getDefaultInstance())))
.addContents(
Content.newBuilder()
.setElement(
Element.newBuilder()
- .setElementList(
- ElementList.newBuilder()
- .setStyleReferences(
- StyleIdsStack.newBuilder()
- .addStyleIds(globalStyleId)))))))
+ .setStyleReferences(
+ StyleIdsStack.newBuilder()
+ .addStyleIds(globalStyleId))
+ .setElementList(ElementList.getDefaultInstance())))))
.build();
PietSharedState pietSharedState =
@@ -282,8 +285,12 @@
// Frame defines style IDs that are also defined in the template
Frame frame =
Frame.newBuilder()
- .setStylesheet(
- Stylesheet.newBuilder().addStyles(frameStyle).addStyles(frameTemplateStyle))
+ .setStylesheets(
+ Stylesheets.newBuilder()
+ .addStylesheets(
+ Stylesheet.newBuilder()
+ .addStyles(frameStyle)
+ .addStyles(frameTemplateStyle)))
.build();
// Set up a "real" frameContext, adapterParameters, factory
diff --git a/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java b/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java
index 9033a0f..9049f3f 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java
@@ -59,6 +59,7 @@
import com.google.search.now.ui.piet.StylesProto.TextAlignmentHorizontal;
import com.google.search.now.ui.piet.StylesProto.TextAlignmentVertical;
import com.google.search.now.ui.piet.StylesProto.Typeface.CommonTypeface;
+import com.google.search.now.ui.piet.TextProto.ParameterizedText;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -338,33 +339,6 @@
.isEqualTo(GoogleSansTypeface.UNDEFINED);
}
- // TODO Remove this test once transition to line height is complete.
- @Test
- public void testSetLineHeightRatio() {
- float ratioToSet1 = 4.5f;
- Style lineHeightStyle1 =
- Style.newBuilder().setFont(Font.newBuilder().setLineHeightRatio(ratioToSet1)).build();
- StyleProvider styleProvider1 = new StyleProvider(lineHeightStyle1, mockAssetProvider);
- Element firstTextElement = getBaseTextElement(styleProvider1);
-
- adapter.createAdapter(firstTextElement, frameContext);
- float lineHeightRatio1 = adapter.getBaseView().getLineSpacingMultiplier();
- assertThat(lineHeightRatio1).isEqualTo(ratioToSet1);
-
- adapter.releaseAdapter();
-
- // test that the line height ratio is updated when the adapter is created a second time
- float ratioToSet2 = 2.1f;
- Style lineHeightStyle2 =
- Style.newBuilder().setFont(Font.newBuilder().setLineHeightRatio(ratioToSet2)).build();
- StyleProvider styleProvider2 = new StyleProvider(lineHeightStyle2, mockAssetProvider);
- Element secondTextElement = getBaseTextElement(styleProvider2);
-
- adapter.createAdapter(secondTextElement, frameContext);
- float lineHeightRatio2 = adapter.getBaseView().getLineSpacingMultiplier();
- assertThat(lineHeightRatio2).isEqualTo(ratioToSet2);
- }
-
@Test
public void testSetLineHeight() {
int lineHeightToSetSp = 18;
@@ -478,102 +452,6 @@
adapter.createAdapter(textElement, frameContext);
}
- // TODO Remove this test once transition to line height is complete.
- @Test
- public void testGetExtraLineHeight_lineHeightAndLineHeightRatioSet() {
- // Even with line height ratio set, the code should use the line height code path, which means
- // the line height should be line height (10) x scaledDensity (1.01) = 10.1.
- context.getResources().getDisplayMetrics().scaledDensity = 1.01f;
- Style lineHeightStyle1 =
- Style.newBuilder()
- .setFont(
- Font.newBuilder()
- .setLineHeight(10 + emptyTextElementLineHeight)
- .setLineHeightRatio(2.0f))
- .build();
- StyleProvider styleProvider1 = new StyleProvider(lineHeightStyle1, mockAssetProvider);
- Element textElement = getBaseTextElement(styleProvider1);
- adapter.createAdapter(textElement, frameContext);
-
- TextElementAdapter.ExtraLineHeight extraLineHeight = adapter.getExtraLineHeight();
-
- assertThat(extraLineHeight.betweenLinesExtraPx()).isEqualTo(10);
- assertThat(extraLineHeight.bottomPaddingPx()).isEqualTo(6);
- assertThat(extraLineHeight.topPaddingPx()).isEqualTo(5);
- }
-
- // TODO Remove all these line height ratio tests when ratio is no longer used
- @Test
- public void testGetLineHeight_lineHeightRatio_currentVersion() {
- // The line spacing is 150%. The extra 50% gets split between padding at the top and bottom of
- // the view, so since the text size is 100, there is an extra 25 at top and bottom.
- Style lineHeightStyle1 =
- Style.newBuilder().setFont(Font.newBuilder().setSize(100).setLineHeightRatio(1.5f)).build();
- StyleProvider styleProvider1 = new StyleProvider(lineHeightStyle1, mockAssetProvider);
- Element textElement = getBaseTextElement(styleProvider1);
- adapter.createAdapter(textElement, frameContext);
-
- TextElementAdapter.ExtraLineHeight extraLineHeight = adapter.getExtraLineHeight();
-
- assertThat(extraLineHeight.topPaddingPx()).isEqualTo(25);
- assertThat(extraLineHeight.bottomPaddingPx()).isEqualTo(25);
- }
-
- @Config(sdk = VERSION_CODES.KITKAT)
- @Test
- public void testGetLineHeight_lineHeightRatio_kitkat() {
- // The line spacing is 150%. The extra 50% gets split between padding at the top and bottom of
- // the view, so since the text size is 100, there is an extra 25 at top and bottom. In KitKat
- // and lower, extra line spacing equal to that extra 50% is already added to the bottom. That
- // means padding needs to be taken away from the bottom, to make bottom padding the same as top.
- Style lineHeightStyle1 =
- Style.newBuilder().setFont(Font.newBuilder().setSize(100).setLineHeightRatio(1.5f)).build();
- StyleProvider styleProvider1 = new StyleProvider(lineHeightStyle1, mockAssetProvider);
- Element textElement = getBaseTextElement(styleProvider1);
- adapter.createAdapter(textElement, frameContext);
-
- TextElementAdapter.ExtraLineHeight extraLineHeight = adapter.getExtraLineHeight();
-
- assertThat(extraLineHeight.topPaddingPx()).isEqualTo(25);
- assertThat(extraLineHeight.bottomPaddingPx()).isEqualTo(-25);
- }
-
- @Test
- public void testGetLineHeight_lineHeightRatio_lessThanOne() {
- // The line spacing is 50%. The 50% deficit gets split between padding at the top and bottom of
- // the view, so since the text size is 100, we take away an extra 25 at top and bottom, making
- // top and bottom padding negative.
- Style lineHeightStyle1 =
- Style.newBuilder().setFont(Font.newBuilder().setSize(100).setLineHeightRatio(0.5f)).build();
- StyleProvider styleProvider1 = new StyleProvider(lineHeightStyle1, mockAssetProvider);
- Element textElement = getBaseTextElement(styleProvider1);
- adapter.createAdapter(textElement, frameContext);
-
- TextElementAdapter.ExtraLineHeight extraLineHeight = adapter.getExtraLineHeight();
-
- assertThat(extraLineHeight.topPaddingPx()).isEqualTo(-25);
- assertThat(extraLineHeight.bottomPaddingPx()).isEqualTo(-25);
- }
-
- @Config(sdk = VERSION_CODES.KITKAT)
- @Test
- public void testGetLineHeight_lineHeightRatio_lessThanOne_kitkat() {
- // The line spacing is 50%. The 50% deficit gets split between padding at the top and bottom of
- // the view, so since the text size is 100, there is a negative 25 at top and bottom. In KitKat
- // and lower, line spacing equal to that 50% deficit is already taken away from the bottom. That
- // means padding needs to be added to the bottom, to make bottom padding the same as top.
- Style lineHeightStyle1 =
- Style.newBuilder().setFont(Font.newBuilder().setSize(100).setLineHeightRatio(0.5f)).build();
- StyleProvider styleProvider1 = new StyleProvider(lineHeightStyle1, mockAssetProvider);
- Element textElement = getBaseTextElement(styleProvider1);
- adapter.createAdapter(textElement, frameContext);
-
- TextElementAdapter.ExtraLineHeight extraLineHeight = adapter.getExtraLineHeight();
-
- assertThat(extraLineHeight.topPaddingPx()).isEqualTo(-25);
- assertThat(extraLineHeight.bottomPaddingPx()).isEqualTo(25);
- }
-
@Test
public void testBind_setsTextAlignment_horizontal() {
Style style =
@@ -643,11 +521,7 @@
// Styles should not change on a re-bind
adapter.unbindModel();
StyleIdsStack otherStyle = StyleIdsStack.newBuilder().addStyleIds("ignored").build();
- textElement =
- getBaseTextElement()
- .toBuilder()
- .setTextElement(TextElement.newBuilder().setStyleReferences(otherStyle))
- .build();
+ textElement = getBaseTextElement().toBuilder().setStyleReferences(otherStyle).build();
adapter.bindModel(textElement, frameContext);
assertThat(adapter.getBaseView().getMaxLines()).isEqualTo(maxLines);
@@ -660,10 +534,7 @@
.setStyleBinding(StyleBindingRef.newBuilder().setBindingId("prionailurus"))
.build();
textElement =
- getBaseTextElement()
- .toBuilder()
- .setTextElement(TextElement.newBuilder().setStyleReferences(otherStyleWithBinding))
- .build();
+ getBaseTextElement().toBuilder().setStyleReferences(otherStyleWithBinding).build();
adapter.bindModel(textElement, frameContext);
verify(frameContext).makeStyleFor(otherStyleWithBinding);
@@ -721,10 +592,7 @@
StyleIdsStack elementStyles = StyleIdsStack.newBuilder().addStyleIds("hair").build();
when(mockStyleProvider.getFont()).thenReturn(Font.getDefaultInstance());
Element textElement =
- getBaseTextElement(mockStyleProvider)
- .toBuilder()
- .setTextElement(TextElement.newBuilder().setStyleReferences(elementStyles))
- .build();
+ getBaseTextElement(mockStyleProvider).toBuilder().setStyleReferences(elementStyles).build();
adapter.createAdapter(textElement, frameContext);
@@ -735,11 +603,15 @@
public void testGetModelFromElement() {
TextElement model =
TextElement.newBuilder()
- .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("spacer"))
+ .setParameterizedText(ParameterizedText.newBuilder().setText("text"))
.build();
- Element elementWithModel = Element.newBuilder().setTextElement(model).build();
- assertThat(adapter.getModelFromElement(elementWithModel)).isSameInstanceAs(model);
+ Element elementWithModel =
+ Element.newBuilder()
+ .setStyleReferences(StyleIdsStack.newBuilder().addStyleIds("spacer"))
+ .setTextElement(model)
+ .build();
+ assertThat(adapter.getModelFromElement(elementWithModel)).isSameInstanceAs(elementWithModel);
Element elementWithWrongModel =
Element.newBuilder().setCustomElement(CustomElement.getDefaultInstance()).build();
diff --git a/src/test/java/com/google/android/libraries/feed/piet/ViewUtilsTest.java b/src/test/java/com/google/android/libraries/feed/piet/ViewUtilsTest.java
index 5daa1e6..be725de 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/ViewUtilsTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/ViewUtilsTest.java
@@ -31,7 +31,6 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.RippleDrawable;
-import android.view.Gravity;
import android.view.View;
import com.google.android.libraries.feed.piet.host.ActionHandler;
import com.google.android.libraries.feed.piet.host.ActionHandler.ActionType;
@@ -41,8 +40,6 @@
import com.google.search.now.ui.piet.ActionsProto.VisibilityAction;
import com.google.search.now.ui.piet.LogDataProto.LogData;
import com.google.search.now.ui.piet.PietProto.Frame;
-import com.google.search.now.ui.piet.StylesProto.GravityHorizontal;
-import com.google.search.now.ui.piet.StylesProto.GravityVertical;
import java.util.HashSet;
import java.util.Set;
import org.junit.Before;
@@ -114,47 +111,6 @@
}
@Test
- public void testGravity() {
- assertThat(
- ViewUtils.pietGravityToGravity(
- GravityHorizontal.GRAVITY_CENTER, GravityVertical.GRAVITY_BOTTOM))
- .isEqualTo(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
- assertThat(
- ViewUtils.pietGravityToGravity(
- GravityHorizontal.GRAVITY_END, GravityVertical.GRAVITY_VERTICAL_UNSPECIFIED))
- .isEqualTo(Gravity.END);
- assertThat(
- ViewUtils.pietGravityToGravity(
- GravityHorizontal.GRAVITY_HORIZONTAL_UNSPECIFIED, GravityVertical.GRAVITY_MIDDLE))
- .isEqualTo(Gravity.START | Gravity.CENTER_VERTICAL);
- }
-
- @Test
- public void testHorizontalGravity() {
- assertThat(ViewUtils.gravityHorizontalToGravity(GravityHorizontal.GRAVITY_START))
- .isEqualTo(Gravity.START);
- assertThat(ViewUtils.gravityHorizontalToGravity(GravityHorizontal.GRAVITY_CENTER))
- .isEqualTo(Gravity.CENTER_HORIZONTAL);
- assertThat(ViewUtils.gravityHorizontalToGravity(GravityHorizontal.GRAVITY_END))
- .isEqualTo(Gravity.END);
- assertThat(
- ViewUtils.gravityHorizontalToGravity(GravityHorizontal.GRAVITY_HORIZONTAL_UNSPECIFIED))
- .isEqualTo(Gravity.START);
- }
-
- @Test
- public void testVerticalGravity() {
- assertThat(ViewUtils.gravityVerticalToGravity(GravityVertical.GRAVITY_TOP))
- .isEqualTo(Gravity.TOP);
- assertThat(ViewUtils.gravityVerticalToGravity(GravityVertical.GRAVITY_MIDDLE))
- .isEqualTo(Gravity.CENTER_VERTICAL);
- assertThat(ViewUtils.gravityVerticalToGravity(GravityVertical.GRAVITY_BOTTOM))
- .isEqualTo(Gravity.BOTTOM);
- assertThat(ViewUtils.gravityVerticalToGravity(GravityVertical.GRAVITY_VERTICAL_UNSPECIFIED))
- .isEqualTo(Gravity.NO_GRAVITY);
- }
-
- @Test
public void testSetOnClickActions_success() {
LogData logData = LogData.newBuilder().build();
ViewUtils.setOnClickActions(DEFAULT_ACTIONS, view, mockFrameContext, logData);