| Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchImageControl.java
 | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchImageControl.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchImageControl.java
 | 
| index fe9aff891948d508c487c1cd4a1956242b50f30f..4976b599dd13d2078d3e4c2b76e6a78e8e9050a9 100644
 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchImageControl.java
 | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchImageControl.java
 | 
| @@ -13,17 +13,15 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelAnimation;
 | 
|  import org.chromium.chrome.browser.compositor.layouts.ChromeAnimation;
 | 
|  
 | 
|  /**
 | 
| - * Controls the image shown in the Bar. Owns the {@link ContextualSearchIconSpriteControl} and
 | 
| - * details about the thumbnail, and handles animating between the two.
 | 
| + * Controls the image shown in the Bar. Owns animating between the search provider icon and
 | 
| + * custom image (either a thumbnail or quick action icon) for the current query.
 | 
|   */
 | 
|  public class ContextualSearchImageControl
 | 
|          implements ChromeAnimation.Animatable<ContextualSearchImageControl.AnimationType> {
 | 
|      /**
 | 
|        * Animation properties.
 | 
|        */
 | 
| -    protected enum AnimationType {
 | 
| -        STATIC_IMAGE_VISIBILITY
 | 
| -    }
 | 
| +    protected enum AnimationType { CUSTOM_IMAGE_VISIBILITY }
 | 
|  
 | 
|      /** The current context. */
 | 
|      private final Context mContext;
 | 
| @@ -48,37 +46,11 @@ public class ContextualSearchImageControl
 | 
|          mExpandedPercentage = percentage;
 | 
|  
 | 
|          if (mQuickActionIconVisible || mThumbnailVisible) {
 | 
| -
 | 
| -            mStaticImageVisibilityPercentage = 1.f - percentage;
 | 
| -            getIconSpriteControl().setIsVisible(mStaticImageVisibilityPercentage < 1.f);
 | 
| +            mCustomImageVisibilityPercentage = 1.f - percentage;
 | 
|          }
 | 
|      }
 | 
|  
 | 
|      // ============================================================================================
 | 
| -    // Search Provider Icon Sprite
 | 
| -    // ============================================================================================
 | 
| -
 | 
| -    private ContextualSearchIconSpriteControl mIconSpriteControl;
 | 
| -
 | 
| -    /**
 | 
| -     * @return The {@link ContextualSearchIconSpriteControl} for the panel.
 | 
| -     */
 | 
| -    public ContextualSearchIconSpriteControl getIconSpriteControl() {
 | 
| -        if (mIconSpriteControl == null) {
 | 
| -            mIconSpriteControl =
 | 
| -                    new ContextualSearchIconSpriteControl(mOverlayPanelAnimation, mContext);
 | 
| -        }
 | 
| -        return mIconSpriteControl;
 | 
| -    }
 | 
| -
 | 
| -    /**
 | 
| -     * @param shouldAnimateIconSprite Whether the search provider icon sprite should be animated.
 | 
| -     */
 | 
| -    public void setShouldAnimateIconSprite(boolean shouldAnimateIconSprite) {
 | 
| -        getIconSpriteControl().setShouldAnimateAppearance(shouldAnimateIconSprite);
 | 
| -    }
 | 
| -
 | 
| -    // ============================================================================================
 | 
|      // Quick Action Icon
 | 
|      // ============================================================================================
 | 
|  
 | 
| @@ -98,7 +70,7 @@ public class ContextualSearchImageControl
 | 
|      public void setQuickActionIconResourceId(int resId) {
 | 
|          mQuickActionIconResourceId = resId;
 | 
|          mQuickActionIconVisible = true;
 | 
| -        animateStaticImageVisibility(true);
 | 
| +        animateCustomImageVisibility(true);
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| @@ -164,115 +136,107 @@ public class ContextualSearchImageControl
 | 
|          mThumbnailVisible = success && !TextUtils.isEmpty(mThumbnailUrl);
 | 
|          if (!mThumbnailVisible) return;
 | 
|  
 | 
| -        // TODO(twellington): if the icon sprite is animating wait to start the thumbnail visibility
 | 
| -        //                    animation.
 | 
| -        animateStaticImageVisibility(true);
 | 
| +        animateCustomImageVisibility(true);
 | 
|      }
 | 
|  
 | 
|      // ============================================================================================
 | 
| -    // Static Image -- either a thumbnail or quick action icon
 | 
| +    // Custom image -- either a thumbnail or quick action icon
 | 
|      // ============================================================================================
 | 
|  
 | 
| -    /**
 | 
| -     * The height and width of the static image.
 | 
| -     */
 | 
| -    private int mStaticImageSize;
 | 
| +    /** The height and width of the image displayed at the start of the bar in px. */
 | 
| +    private int mBarImageSize;
 | 
|  
 | 
|      /**
 | 
| -     * The static image visibility percentage, which dictates how and where to draw the static
 | 
| -     * image. The static image is not visible at all at 0.f and completely visible at 1.f.
 | 
| +     * The custom image visibility percentage, which dictates how and where to draw the custom
 | 
| +     * image. The custom image is not visible at all at 0.f and completely visible at 1.f.
 | 
|       */
 | 
| -    private float mStaticImageVisibilityPercentage;
 | 
| +    private float mCustomImageVisibilityPercentage;
 | 
|  
 | 
|      /**
 | 
| -     * Hides the static image if it is visible and makes the icon sprite visible. Also resets the
 | 
| -     * thumbnail URL and quick action icon resource id.
 | 
| +     * Hides the custom image if it is visible. Also resets the thumbnail URL and quick action icon
 | 
| +     * resource id.
 | 
|       * @param animate Whether hiding the thumbnail should be animated.
 | 
|       */
 | 
| -    public void hideStaticImage(boolean animate) {
 | 
| -        getIconSpriteControl().setIsVisible(true);
 | 
| +    public void hideCustomImage(boolean animate) {
 | 
|          if ((mThumbnailVisible || mQuickActionIconVisible) && animate) {
 | 
| -            animateStaticImageVisibility(false);
 | 
| +            animateCustomImageVisibility(false);
 | 
|          } else {
 | 
| -            mOverlayPanelAnimation.cancelAnimation(this, AnimationType.STATIC_IMAGE_VISIBILITY);
 | 
| -            onStaticImageHidden();
 | 
| +            mOverlayPanelAnimation.cancelAnimation(this, AnimationType.CUSTOM_IMAGE_VISIBILITY);
 | 
| +            onCustomImageHidden();
 | 
|          }
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| -     * @return The height and width of the static image in px.
 | 
| +     * @return The height and width of the image displayed at the start of the bar in px.
 | 
|       */
 | 
| -    public int getStaticImageSize() {
 | 
| -        if (mStaticImageSize == 0) {
 | 
| -            mStaticImageSize = mContext.getResources().getDimensionPixelSize(
 | 
| -                    R.dimen.contextual_search_static_image_size);
 | 
| +    public int getBarImageSize() {
 | 
| +        if (mBarImageSize == 0) {
 | 
| +            mBarImageSize = mContext.getResources().getDimensionPixelSize(
 | 
| +                    R.dimen.contextual_search_bar_image_size);
 | 
|          }
 | 
| -        return mStaticImageSize;
 | 
| +        return mBarImageSize;
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| -     * @return The static image visibility percentage, which dictates how and where to draw the
 | 
| -     *         static image. The static image is not visible at all at 0.f and completely visible at
 | 
| -     *         1.f. The static image may be either a thumbnail or quick action icon.
 | 
| +     * @return The custom image visibility percentage, which dictates how and where to draw the
 | 
| +     *         custom image. The custom image is not visible at all at 0.f and completely visible at
 | 
| +     *         1.f. The custom image may be either a thumbnail or quick action icon.
 | 
|       */
 | 
| -    public float getStaticImageVisibilityPercentage() {
 | 
| -        return mStaticImageVisibilityPercentage;
 | 
| +    public float getCustomImageVisibilityPercentage() {
 | 
| +        return mCustomImageVisibilityPercentage;
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| -     * Called when the static image finishes hiding to reset thumbnail and quick action icon values.
 | 
| +     * Called when the custom image finishes hiding to reset thumbnail and quick action icon values.
 | 
|       */
 | 
| -    private void onStaticImageHidden() {
 | 
| +    private void onCustomImageHidden() {
 | 
|          mQuickActionIconResourceId = 0;
 | 
|          mQuickActionIconVisible = false;
 | 
|  
 | 
|          mThumbnailUrl = "";
 | 
|          mThumbnailVisible = false;
 | 
| -        getIconSpriteControl().setIsVisible(true);
 | 
| -        mStaticImageVisibilityPercentage = 0.f;
 | 
| +        mCustomImageVisibilityPercentage = 0.f;
 | 
|      }
 | 
|  
 | 
|      // ============================================================================================
 | 
|      // Thumbnail Animation
 | 
|      // ============================================================================================
 | 
|  
 | 
| -    private Interpolator mStaticImageVisibilityInterpolator;
 | 
| +    private Interpolator mCustomImageVisibilityInterpolator;
 | 
|  
 | 
| -    private void animateStaticImageVisibility(boolean visible) {
 | 
| +    private void animateCustomImageVisibility(boolean visible) {
 | 
|          // If the panel is expanded then #onUpdateFromPeekToExpand() is responsible for setting
 | 
| -        // mStaticImageVisibility and the static image appearance should not be animated.
 | 
| +        // mCustomImageVisibility and the custom image appearance should not be animated.
 | 
|          if (visible && mExpandedPercentage > 0.f) return;
 | 
|  
 | 
| -        if (mStaticImageVisibilityInterpolator == null) {
 | 
| -            mStaticImageVisibilityInterpolator =
 | 
| +        if (mCustomImageVisibilityInterpolator == null) {
 | 
| +            mCustomImageVisibilityInterpolator =
 | 
|                      PathInterpolatorCompat.create(0.4f, 0.f, 0.6f, 1.f);
 | 
|          }
 | 
|  
 | 
| -        mOverlayPanelAnimation.cancelAnimation(this, AnimationType.STATIC_IMAGE_VISIBILITY);
 | 
| +        mOverlayPanelAnimation.cancelAnimation(this, AnimationType.CUSTOM_IMAGE_VISIBILITY);
 | 
|  
 | 
|          float endValue = visible ? 1.f : 0.f;
 | 
| -        mOverlayPanelAnimation.addToAnimation(this, AnimationType.STATIC_IMAGE_VISIBILITY,
 | 
| -                mStaticImageVisibilityPercentage, endValue,
 | 
| +        mOverlayPanelAnimation.addToAnimation(this, AnimationType.CUSTOM_IMAGE_VISIBILITY,
 | 
| +                mCustomImageVisibilityPercentage, endValue,
 | 
|                  OverlayPanelAnimation.BASE_ANIMATION_DURATION_MS, 0, false,
 | 
| -                mStaticImageVisibilityInterpolator);
 | 
| +                mCustomImageVisibilityInterpolator);
 | 
|      }
 | 
|  
 | 
|      @Override
 | 
|      public void setProperty(AnimationType prop, float val) {
 | 
| -        if (prop == AnimationType.STATIC_IMAGE_VISIBILITY) {
 | 
| +        if (prop == AnimationType.CUSTOM_IMAGE_VISIBILITY) {
 | 
|              // If the panel is expanded, #onUpdateFromPeekedToExpanded() is responsible for setting
 | 
| -            // mStaticImageVisiblityPercentage.
 | 
| -            if (mExpandedPercentage == 0.f) mStaticImageVisibilityPercentage = val;
 | 
| +            // mCustomImageVisiblityPercentage.
 | 
| +            if (mExpandedPercentage == 0.f) mCustomImageVisibilityPercentage = val;
 | 
|          }
 | 
|      }
 | 
|  
 | 
|      @Override
 | 
|      public void onPropertyAnimationFinished(AnimationType prop) {
 | 
| -        if (prop == AnimationType.STATIC_IMAGE_VISIBILITY) {
 | 
| -            if (mStaticImageVisibilityPercentage == 0.f) {
 | 
| -                onStaticImageHidden();
 | 
| -            } else if (mStaticImageVisibilityPercentage == 1.f) {
 | 
| -                getIconSpriteControl().setIsVisible(false);
 | 
| +        if (prop == AnimationType.CUSTOM_IMAGE_VISIBILITY) {
 | 
| +            if (mCustomImageVisibilityPercentage == 0.f) {
 | 
| +                onCustomImageHidden();
 | 
|              }
 | 
|          }
 | 
|      }
 | 
| 
 |