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 d12b5de9eef047271d7338d2b8a9107a0997fbf4..ffa11e8ee6a47cfa9392076d4e03825c5971ac01 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 |
@@ -10,6 +10,7 @@ import android.view.LayoutInflater; |
import android.view.View; |
import android.view.ViewGroup; |
+import org.chromium.base.ApiCompatibilityUtils; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.chrome.R; |
import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.ContextualSearchOptOutPromo.ContextualSearchPromoHost; |
@@ -18,6 +19,7 @@ import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context |
import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
import org.chromium.chrome.browser.preferences.privacy.ContextualSearchPreferenceFragment; |
import org.chromium.chrome.browser.util.MathUtils; |
+import org.chromium.ui.base.LocalizationUtils; |
import org.chromium.ui.resources.dynamics.DynamicResourceLoader; |
/** |
@@ -123,6 +125,26 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
private static final float ARROW_ICON_ROTATION_STATE_EXPANDED = -270.f; |
/** |
+ * The opacity of the close icon when the Panel is peeking. |
+ */ |
+ private static final float CLOSE_ICON_OPACITY_STATE_PEEKED = 0.f; |
+ |
+ /** |
+ * The opacity of the close icon when the Panel is expanded. |
+ */ |
+ private static final float CLOSE_ICON_OPACITY_STATE_EXPANDED = 0.f; |
+ |
+ /** |
+ * The opacity of the close icon when the Panel is maximized. |
+ */ |
+ private static final float CLOSE_ICON_OPACITY_STATE_MAXIMIZED = 1.f; |
+ |
+ /** |
+ * The id of the close icon drawable. |
+ */ |
+ public static final int CLOSE_ICON_DRAWABLE_ID = R.drawable.btn_close; |
+ |
+ /** |
* The height of the Progress Bar in dps. |
*/ |
private static final float PROGRESS_BAR_HEIGHT_DP = 2.f; |
@@ -435,6 +457,9 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
private float mArrowIconOpacity; |
private float mArrowIconRotation; |
+ private float mCloseIconOpacity; |
+ private float mCloseIconWidth; |
+ |
/** |
* @return The top margin of the Contextual Search Bar. |
*/ |
@@ -547,6 +572,42 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
return mArrowIconRotation; |
} |
+ /** |
+ * @return The opacity of the close icon. |
+ */ |
+ public float getCloseIconOpacity() { |
+ return mCloseIconOpacity; |
+ } |
+ |
+ /** |
+ * @return The width/height of the close icon. |
+ */ |
+ public float getCloseIconDimension() { |
+ if (mCloseIconWidth == 0) { |
+ mCloseIconWidth = ApiCompatibilityUtils.getDrawable(mContext.getResources(), |
+ CLOSE_ICON_DRAWABLE_ID).getIntrinsicWidth() * mPxToDp; |
+ } |
+ return mCloseIconWidth; |
+ } |
+ |
+ /** |
+ * @return The Y coordinate of the close icon. |
+ */ |
+ public float getCloseIconY() { |
+ return (getSearchBarHeight() - getCloseIconDimension()) / 2; |
+ } |
+ |
+ /** |
+ * @return The X coordinate of the close icon. |
+ */ |
+ public float getCloseIconX() { |
+ if (LocalizationUtils.isLayoutRtl()) { |
+ return getSearchBarMarginSide(); |
+ } else { |
+ return getWidth() - getSearchBarMarginSide() - getCloseIconDimension(); |
+ } |
+ } |
+ |
// -------------------------------------------------------------------------------------------- |
// Base Page states |
// -------------------------------------------------------------------------------------------- |
@@ -926,6 +987,9 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
mArrowIconOpacity = ARROW_ICON_OPACITY_STATE_PEEKED; |
mArrowIconRotation = ARROW_ICON_ROTATION_STATE_PEEKED; |
+ // Close icon opacity. |
+ mCloseIconOpacity = CLOSE_ICON_OPACITY_STATE_PEEKED; |
+ |
// Progress Bar. |
mProgressBarOpacity = 0.f; |
@@ -984,6 +1048,9 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
ARROW_ICON_ROTATION_STATE_EXPANDED, |
percentage)); |
+ // Close icon opacity. |
+ mCloseIconOpacity = CLOSE_ICON_OPACITY_STATE_EXPANDED; |
+ |
// Progress Bar. |
float peekedHeight = getPanelHeightFromState(PanelState.PEEKED); |
float threshold = PROGRESS_BAR_VISIBILITY_THRESHOLD_DP / mPxToDp; |
@@ -1032,6 +1099,17 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
// Search Bar text opacity. |
mSearchBarTextOpacity = 1.f; |
+ // Determine fading element opacities. If both the arrow icon and close |
+ // icon are visible, the arrow icon needs to finish fading out before |
+ // the close icon starts fading in. Any other elements fading in or |
+ // fading out should use the same percentage. |
+ float fadingOutPercentage = percentage; |
+ float fadingInPercentage = percentage; |
+ if (isArrowIconVisible() && ContextualSearchPanelFeatures.isCloseButtonAvailable()) { |
+ fadingOutPercentage = Math.min(percentage, .5f) / .5f; |
+ fadingInPercentage = Math.max(percentage - .5f, 0.f) / .5f; |
+ } |
+ |
// Search provider icon opacity. |
float searchProviderIconOpacity; |
if (isSideSearchProviderIconVisible()) { |
@@ -1040,7 +1118,7 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
searchProviderIconOpacity = MathUtils.interpolate( |
SEARCH_PROVIDER_ICON_OPACITY_STATE_EXPANDED, |
SEARCH_PROVIDER_ICON_OPACITY_STATE_MAXIMIZED, |
- percentage); |
+ fadingOutPercentage); |
} |
mSearchProviderIconOpacity = searchProviderIconOpacity; |
@@ -1048,16 +1126,22 @@ abstract class ContextualSearchPanelBase extends ContextualSearchPanelStateHandl |
float searchIconOpacity = MathUtils.interpolate( |
SEARCH_ICON_OPACITY_STATE_EXPANDED, |
SEARCH_ICON_OPACITY_STATE_MAXIMIZED, |
- percentage); |
+ fadingInPercentage); |
mSearchIconOpacity = searchIconOpacity; |
// Arrow Icon. |
mArrowIconOpacity = MathUtils.interpolate( |
ARROW_ICON_OPACITY_STATE_EXPANDED, |
ARROW_ICON_OPACITY_STATE_MAXIMIZED, |
- percentage); |
+ fadingOutPercentage); |
mArrowIconRotation = ARROW_ICON_ROTATION_STATE_EXPANDED; |
+ // Close icon opacity. |
+ mCloseIconOpacity = MathUtils.interpolate( |
+ CLOSE_ICON_OPACITY_STATE_EXPANDED, |
+ CLOSE_ICON_OPACITY_STATE_MAXIMIZED, |
+ fadingInPercentage); |
+ |
// Progress Bar. |
mProgressBarOpacity = 1.f; |
mProgressBarY = searchBarHeight - PROGRESS_BAR_HEIGHT_DP + 1; |