Index: chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkLoadingView.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkLoadingView.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkLoadingView.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..44440b55953cffa23a07137455c546eedc1c6ca6 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkLoadingView.java |
@@ -0,0 +1,97 @@ |
+// 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.enhancedbookmarks; |
+ |
+import android.animation.Animator; |
+import android.animation.AnimatorListenerAdapter; |
+import android.content.Context; |
+import android.util.AttributeSet; |
+import android.view.View; |
+import android.widget.FrameLayout; |
+import android.widget.ProgressBar; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import org.chromium.ui.interpolators.BakedBezierInterpolator; |
+ |
+/** |
+ * View for showing loading content animation. The animation logic follows the Android loading |
+ * content UI guideline. |
+ */ |
+public class EnhancedBookmarkLoadingView extends FrameLayout { |
+ private static final int LOADING_ANIMATION_DELAY_MS = 500; |
+ private static final int MINIMUM_ANIMATION_SHOW_TIME_MS = 500; |
+ |
+ private long mStartTime = -1; |
+ |
+ private ProgressBar mLoadingProgressBar; |
+ |
+ private final Runnable mDelayedShow = new Runnable() { |
+ @Override |
+ public void run() { |
+ mStartTime = System.currentTimeMillis(); |
+ mLoadingProgressBar.setAlpha(1.0f); |
+ mLoadingProgressBar.setVisibility(View.VISIBLE); |
+ } |
+ }; |
+ |
+ // Material loading design spec requires us to show progress spinner at least 500ms, so we need |
+ // this delayed runnable to implement that. |
+ private final Runnable mDelayedHide = new Runnable() { |
+ @Override |
+ public void run() { |
+ animate().alpha(0.0f).setInterpolator(BakedBezierInterpolator.TRANSFORM_CURVE) |
+ .setListener(new AnimatorListenerAdapter() { |
+ @Override |
+ public void onAnimationEnd(Animator animation) { |
+ setVisibility(GONE); |
+ } |
+ }); |
+ } |
+ }; |
+ |
+ /** |
+ * Constructor for inflating from XML. |
+ */ |
+ public EnhancedBookmarkLoadingView(Context context, AttributeSet attrs) { |
+ super(context, attrs); |
+ } |
+ |
+ @Override |
+ protected void onFinishInflate() { |
+ super.onFinishInflate(); |
+ mLoadingProgressBar = (ProgressBar) findViewById(R.id.eb_loading_circle); |
+ } |
+ |
+ /** |
+ * Show loading UI. It shows the loading animation 500ms after. |
+ */ |
+ public void showLoadingUI() { |
+ removeCallbacks(mDelayedShow); |
+ removeCallbacks(mDelayedHide); |
+ |
+ setVisibility(VISIBLE); |
+ setAlpha(1.0f); |
+ mLoadingProgressBar.setVisibility(GONE); |
+ |
+ postDelayed(mDelayedShow, LOADING_ANIMATION_DELAY_MS); |
+ } |
+ |
+ /** |
+ * Hide loading UI. If progress bar is not shown, it disappears immediately. If so, it smoothly |
+ * fades out. |
+ */ |
+ public void hideLoadingUI() { |
+ removeCallbacks(mDelayedShow); |
+ removeCallbacks(mDelayedHide); |
+ |
+ if (mLoadingProgressBar.getVisibility() == VISIBLE) { |
+ postDelayed(mDelayedHide, Math.max(0, |
+ mStartTime + MINIMUM_ANIMATION_SHOW_TIME_MS - System.currentTimeMillis())); |
+ } else { |
+ setVisibility(GONE); |
+ } |
+ } |
+} |