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);