Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelBase.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelBase.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelBase.java |
| index d08874dbf6936e08edc6cdfe4a8ecb26cbb26151..76f58a85a49efe3f64f7d403db88c2901c09b581 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelBase.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanelBase.java |
| @@ -5,6 +5,7 @@ |
| package org.chromium.chrome.browser.compositor.bottombar.contextualsearch; |
| import android.content.Context; |
| +import android.content.res.TypedArray; |
| import android.os.Handler; |
| import android.view.LayoutInflater; |
| import android.view.View; |
| @@ -23,6 +24,8 @@ import org.chromium.chrome.browser.util.MathUtils; |
| import org.chromium.ui.base.LocalizationUtils; |
| import org.chromium.ui.resources.dynamics.DynamicResourceLoader; |
| +import java.util.ArrayList; |
| + |
| /** |
| * Base abstract class for the Contextual Search Panel. |
| */ |
| @@ -760,6 +763,165 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
| } |
| // -------------------------------------------------------------------------------------------- |
| + // Search provider icon states |
| + // -------------------------------------------------------------------------------------------- |
| + |
| + private static final int SEARCH_PROVIDER_ICON_LAST_SPRITE_FRAME = 18; |
| + |
| + private boolean mIsSearchProviderIconSpriteVisible; |
| + private boolean mShouldAnimateSearchProviderIconSprite; |
| + private int mSearchProviderIconSpriteFrame; |
| + private int mSearchProviderIconSpritePreviousFrame; |
| + private TypedArray mSearchProviderIconSpriteFrameRectsArray; |
| + |
| + /** |
| + * @return Whether the search provider icon sprite is visible. |
| + */ |
| + public boolean isSearchProviderIconSpriteVisible() { |
| + return mIsSearchProviderIconSpriteVisible; |
| + } |
| + |
| + /** |
| + * @param isSearchProviderIconSpriteVisible Whether the search provider icon sprite should be |
| + * visible. |
| + */ |
| + public void setIsSearchProviderIconSpriteVisible(boolean isSearchProviderIconSpriteVisible) { |
| + mIsSearchProviderIconSpriteVisible = isSearchProviderIconSpriteVisible; |
| + } |
| + |
| + /** |
| + * @return Whether the search provider icon sprite should be animated. |
| + */ |
| + public boolean shouldAnimateSearchProviderIconSprite() { |
| + return mShouldAnimateSearchProviderIconSprite; |
| + } |
| + |
| + /** |
| + * @param shouldAnimateSearchProviderIconSprite Whether the search provider icon sprite should |
| + * be animated. |
| + */ |
| + public void setShouldAnimateSearchProviderIconSprite( |
| + boolean shouldAnimateSearchProviderIconSprite) { |
| + mSearchProviderIconSpritePreviousFrame = 0; |
| + if (shouldAnimateSearchProviderIconSprite) { |
| + mIsSearchProviderIconSpriteVisible = false; |
| + mSearchProviderIconSpriteFrame = 0; |
| + } else { |
| + mIsSearchProviderIconSpriteVisible = true; |
| + mSearchProviderIconSpriteFrame = SEARCH_PROVIDER_ICON_LAST_SPRITE_FRAME; |
| + } |
| + mShouldAnimateSearchProviderIconSprite = shouldAnimateSearchProviderIconSprite; |
| + } |
| + |
| + /** |
| + * @return The size of the search provider icon sprite in px. |
| + */ |
| + public float getSearchProviderIconSpriteSize() { |
| + return mContext.getResources().getDimension(R.dimen.contextual_search_sprite_size); |
| + } |
| + |
| + /** |
| + * Each search provider icon sprite frame is represented by a set of rectangles. Most frames |
| + * consist of small rectangles representing the change from the previous frame. |
| + * Each rectangle is represented using six consecutive values that specify the values to be used |
| + * when creating the destination and source rectangles that get painted: |
| + * 0: destination x 1: destination y 2: source x 3: source y 4: width 5: height |
| + * |
| + * @return The rectangles that need to be painted for the current sprite frame. |
| + */ |
| + public int[] getSearchProviderIconSpriteFrameRects() { |
| + int[] results = null; |
| + |
| + if (mSearchProviderIconSpriteFrame != mSearchProviderIconSpritePreviousFrame |
| + || !getSearchProviderIconSpritePaintPreviousFrames()) { |
| + |
| + // Initialize mSearchProviderIconSpriteFrameRectsArray if necessary. |
| + if (mSearchProviderIconSpriteFrameRectsArray == null) { |
| + mSearchProviderIconSpriteFrameRectsArray = mContext.getResources().obtainTypedArray( |
| + R.array.contextual_search_sprite_frame_rects); |
| + } |
| + |
| + // Get the rectangles for the current frame. |
| + int[] currentFrameRects = null; |
| + int currentFrameRectsId = mSearchProviderIconSpriteFrameRectsArray.getResourceId( |
| + mSearchProviderIconSpriteFrame, 0); |
| + if (currentFrameRectsId != 0) { |
| + currentFrameRects = mContext.getResources().getIntArray(currentFrameRectsId); |
| + } |
| + |
| + // If we skipped some frames in the animation, we need to paint the rectangles |
| + // for those frames if getSearchProviderIconSpritePaintPreviousFrames() is true. |
| + if (mSearchProviderIconSpriteFrame != mSearchProviderIconSpritePreviousFrame + 1 |
| + && getSearchProviderIconSpritePaintPreviousFrames()) { |
| + ArrayList<int[]> allFrameRects = new ArrayList<int[]>(); |
| + int totalNumberOfRects = 0; |
| + |
| + // For each frame that was skipped, get the frame's rectangles from |
| + // mSearchProviderIconSpriteFrameRectsArray and append them to the list of |
| + // allFrameRects. |
| + for (int frame = mSearchProviderIconSpritePreviousFrame + 1; |
| + frame < mSearchProviderIconSpriteFrame; frame++) { |
| + int frameRectsId = |
| + mSearchProviderIconSpriteFrameRectsArray.getResourceId(frame, 0); |
| + if (frameRectsId != 0) { |
| + int[] frameRects = mContext.getResources().getIntArray(frameRectsId); |
| + allFrameRects.add(frameRects); |
| + totalNumberOfRects += frameRects.length; |
| + } |
| + } |
| + |
| + // Append the rectangles for the current frame. |
| + if (currentFrameRects != null) { |
| + allFrameRects.add(currentFrameRects); |
| + totalNumberOfRects += currentFrameRects.length; |
| + } |
| + |
| + // Merge the rectangles for each frame into one int[]. |
| + results = new int[totalNumberOfRects]; |
| + int index = 0; |
| + for (int[] frameRects : allFrameRects) { |
| + System.arraycopy(frameRects, 0, results, index, frameRects.length); |
| + index = frameRects.length; |
| + } |
| + } else { |
| + results = currentFrameRects; |
| + } |
| + } |
| + |
| + mSearchProviderIconSpritePreviousFrame = mSearchProviderIconSpriteFrame; |
| + return (results != null) ? results : new int[] {}; |
| + } |
| + |
| + /** |
| + * Sets the sprite frame to display based on the completion percentage. |
| + * |
| + * @param percentage The completion percentage. |
| + */ |
| + public void setSearchProviderIconAnimationCompletion(float percentage) { |
| + mSearchProviderIconSpriteFrame = |
| + (int) (percentage * SEARCH_PROVIDER_ICON_LAST_SPRITE_FRAME); |
| + } |
| + |
| + /** |
| + * The sprite frames in the search provider icon sprite are created by painting a |
| + * set of rectangles on top of the previous frames, with the exception of the first and last |
| + * frame. |
| + * |
| + * @return Whether the previous sprite frames should be painted. |
| + */ |
| + public boolean getSearchProviderIconSpritePaintPreviousFrames() { |
|
pedro (no code reviews)
2015/09/29 01:14:39
Nit: As we've discussed offline, we should move as
Theresa
2015/10/01 01:57:31
Done.
|
| + return mSearchProviderIconSpriteFrame != 0 |
| + && mSearchProviderIconSpriteFrame != SEARCH_PROVIDER_ICON_LAST_SPRITE_FRAME; |
| + } |
| + |
| + /** |
| + * @return The number of frames in the search provider icon sprite. |
| + */ |
| + public int getSearchProviderIconSpriteFrameCount() { |
| + return SEARCH_PROVIDER_ICON_LAST_SPRITE_FRAME + 1; |
| + } |
| + |
| + // -------------------------------------------------------------------------------------------- |
| // Promo states |
| // -------------------------------------------------------------------------------------------- |