Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java_staging/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa7e3acb3354a7f9d314dc6a221d283978b0c024
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/widget/findinpage/FindToolbarTablet.java
@@ -0,0 +1,189 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.widget.findinpage;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.animation.DecelerateInterpolator;
+import android.widget.FrameLayout;
+
+import com.google.android.apps.chrome.R;
+
+/**
+ * A tablet specific version of the {@link FindToolbar}.
+ */
+public class FindToolbarTablet extends FindToolbar {
+ private static final int ENTER_EXIT_ANIMATION_DURATION_MS = 200;
+ private static final int MAKE_ROOM_ANIMATION_DURATION_MS = 200;
+
+ private static final float Y_INSET_DP = 8.f;
+
+ private ObjectAnimator mCurrentAnimation;
+
+ private ObjectAnimator mAnimationEnter;
+ private ObjectAnimator mAnimationLeave;
+
+ private final int mYInsetPx;
+
+ /**
+ * Creates an instance of a {@link FindToolbarTablet}.
+ * @param context The Context to create the {@link FindToolbarTablet} under.
+ * @param attrs The AttributeSet used to create the {@link FindToolbarTablet}.
+ */
+ public FindToolbarTablet(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ mYInsetPx = (int) (context.getResources().getDisplayMetrics().density * Y_INSET_DP);
+ }
+
+ @Override
+ public void onFinishInflate() {
+ super.onFinishInflate();
+
+ setVisibility(View.GONE);
+
+ Resources resources = getContext().getResources();
+ int width = resources.getDimensionPixelSize(R.dimen.find_in_page_popup_width);
+ int endMargin = resources.getDimensionPixelOffset(R.dimen.find_in_page_popup_margin_end);
+ int translateWidth = width + endMargin;
+
+ mAnimationEnter = ObjectAnimator.ofFloat(this, "translationX", translateWidth, 0);
+ mAnimationEnter.setDuration(ENTER_EXIT_ANIMATION_DURATION_MS);
+ mAnimationEnter.setInterpolator(new DecelerateInterpolator());
+ mAnimationEnter.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ setVisibility(View.VISIBLE);
+ postInvalidateOnAnimation();
+ superActivate();
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mCurrentAnimation = null;
+ }
+ });
+
+ mAnimationLeave = ObjectAnimator.ofFloat(this, "translationX", 0, translateWidth);
+ mAnimationLeave.setDuration(ENTER_EXIT_ANIMATION_DURATION_MS);
+ mAnimationLeave.setInterpolator(new DecelerateInterpolator());
+ mAnimationLeave.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ setVisibility(View.VISIBLE);
+ postInvalidateOnAnimation();
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ setVisibility(View.GONE);
+ mCurrentAnimation = null;
+ }
+ });
+ }
+
+ @Override
+ public void activate() {
+ if (mCurrentAnimation == mAnimationEnter) return;
+
+ if (isViewAvailable()) setShowState(true);
+ }
+
+ @Override
+ public void deactivate() {
+ super.deactivate();
+
+ if (mCurrentAnimation == mAnimationLeave) return;
+
+ setShowState(false);
+ }
+
+ @Override
+ public boolean isAnimating() {
+ return mCurrentAnimation != null;
+ }
+
+ @Override
+ public void findResultSelected(Rect rect) {
+ super.findResultSelected(rect);
+
+ boolean makeRoom = false;
+ float density = getContext().getResources().getDisplayMetrics().density;
+
+ if (rect != null && rect.intersects((int) (getLeft() / density), 0,
+ (int) (getRight() / density), (int) (getHeight() / density))) {
+ makeRoom = true;
+ }
+
+ setMakeRoomForResults(makeRoom);
+ }
+
+ @Override
+ protected void clearResults() {
+ super.clearResults();
+ setMakeRoomForResults(false);
+ }
+
+ private void setMakeRoomForResults(boolean makeRoom) {
+ float translationY = makeRoom ? -(getHeight() - mYInsetPx) : 0.f;
+
+ if (translationY != getTranslationY()) {
+ mCurrentAnimation = ObjectAnimator.ofFloat(this, "translationY", getTranslationY(),
+ translationY);
+ mCurrentAnimation.setDuration(MAKE_ROOM_ANIMATION_DURATION_MS);
+ mAnimationLeave.setInterpolator(new DecelerateInterpolator());
+ mAnimationLeave.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ postInvalidateOnAnimation();
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mCurrentAnimation = null;
+ }
+ });
+ mTabModelSelector.getCurrentTab()
+ .getWindowAndroid()
+ .startAnimationOverContent(mCurrentAnimation);
+ }
+ }
+
+ private void setShowState(boolean show) {
+ ObjectAnimator nextAnimator = null;
+
+ if (show && getVisibility() != View.VISIBLE && mCurrentAnimation != mAnimationEnter) {
+ View anchorView = getRootView().findViewById(R.id.toolbar);
+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();
+ lp.topMargin = anchorView.getBottom() - mYInsetPx;
+ setLayoutParams(lp);
+ nextAnimator = mAnimationEnter;
+ } else if (!show && getVisibility() != View.GONE && mCurrentAnimation != mAnimationLeave) {
+ nextAnimator = mAnimationLeave;
+ onHideAnimationStart();
+ }
+
+ if (nextAnimator != null) {
+ mCurrentAnimation = nextAnimator;
+ mTabModelSelector.getCurrentTab()
+ .getWindowAndroid()
+ .startAnimationOverContent(nextAnimator);
+ postInvalidateOnAnimation();
+ }
+ }
+
+ /**
+ * This is here so that Animation inner classes can access the parent activate methods.
+ */
+ private void superActivate() {
+ super.activate();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698