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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/widget/SmoothProgressBar.java

Issue 2586643002: [Downloads] Add a horizontal material-styled ProgressBar (Closed)
Patch Set: Get rid of specialized throbber color Created 4 years 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/src/org/chromium/chrome/browser/widget/SmoothProgressBar.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/SmoothProgressBar.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/SmoothProgressBar.java
deleted file mode 100644
index 2f9f47f89f85a2bcc9367d53107fd2ec706203e1..0000000000000000000000000000000000000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/SmoothProgressBar.java
+++ /dev/null
@@ -1,154 +0,0 @@
-// 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;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.ProgressBar;
-
-import org.chromium.base.ObserverList;
-import org.chromium.base.ObserverList.RewindableIterator;
-
-/**
- * A progress bar that smoothly animates incremental updates.
- * <p>
- * Consumers of this class need to be aware that calls to {@link #getProgress()} will return
- * the currently visible progress value and not the one set in the last call to
- * {@link #setProgress(int)}.
- */
-public class SmoothProgressBar extends ProgressBar {
-
- /**
- * Allows observation of visual changes to the progress bar.
- */
- public interface ProgressChangeListener {
- /**
- * Triggered when the visible progress has changed.
- * @param progress The current progress value.
- */
- void onProgressChanged(int progress);
-
- /**
- * Triggered when the visibility of the progress bar has changed.
- * @param visibility The visibility of the progress bar.
- */
- void onProgressVisibilityChanged(int visibility);
- }
-
- private static final int MAX = 100;
-
- // The amount of time between subsequent progress updates. 16ms is chosen to make 60fps.
- private static final long PROGRESS_UPDATE_DELAY_MS = 16;
-
- private final ObserverList<ProgressChangeListener> mObservers;
- private final RewindableIterator<ProgressChangeListener> mObserversIterator;
-
- private boolean mIsAnimated;
- private int mTargetProgress;
-
- // Since the progress bar is being animated, the internal progress bar resolution should be
- // at least fine as the width, not MAX. This multiplier will be applied to input progress
- // to convert to a finer scale.
- private int mResolutionMutiplier = 1;
-
- private Runnable mUpdateProgressRunnable = new Runnable() {
- @Override
- public void run() {
- if (getProgress() == mTargetProgress) return;
- if (!mIsAnimated) {
- setProgressInternal(mTargetProgress);
- return;
- }
- // Every time, the progress bar get's at least 20% closer to mTargetProcess.
- // Add 3 to guarantee progressing even if they only differ by 1.
- setProgressInternal(getProgress() + (mTargetProgress - getProgress() + 3) / 4);
- postOnAnimationDelayed(this, PROGRESS_UPDATE_DELAY_MS);
- }
- };
-
- /**
- * Create a new progress bar with range 0...100 and initial progress of 0.
- * @param context the application environment.
- * @param attrs the xml attributes that should be used to initialize this view.
- */
- public SmoothProgressBar(Context context, AttributeSet attrs) {
- super(context, attrs);
- setMax(MAX * mResolutionMutiplier);
-
- mObservers = new ObserverList<ProgressChangeListener>();
- mObserversIterator = mObservers.rewindableIterator();
-
- }
-
- /**
- * Adds an observer to be notified of progress changes.
- * @param observer The observer to be added.
- */
- public void addProgressChangeListener(ProgressChangeListener observer) {
- mObservers.addObserver(observer);
- }
-
- /**
- * Removes an observer to be notified of progress changes.
- * @param observer The observer to be removed.
- */
- public void removeProgressChangeListener(ProgressChangeListener observer) {
- mObservers.removeObserver(observer);
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
-
- int normalizedProgress = getProgress() / mResolutionMutiplier;
-
- // Choose an integer resolution multiplier that makes the scale at least fine as the width.
- mResolutionMutiplier = Math.max(1, (w + MAX - 1) / MAX);
- setMax(mResolutionMutiplier * MAX);
- setProgressInternal(normalizedProgress * mResolutionMutiplier);
- }
-
- @Override
- public void setProgress(int progress) {
- final int targetProgress = progress * mResolutionMutiplier;
- if (mTargetProgress == targetProgress) return;
- mTargetProgress = targetProgress;
- removeCallbacks(mUpdateProgressRunnable);
- postOnAnimation(mUpdateProgressRunnable);
- }
-
- /**
- * Sets whether to animate incremental updates or not.
- * @param isAnimated True if it is needed to animate incremental updates.
- */
- public void setAnimated(boolean isAnimated) {
- mIsAnimated = isAnimated;
- }
-
- /**
- * Called to update the progress visuals.
- * @param progress The progress value to set the visuals to.
- */
- protected void setProgressInternal(int progress) {
- super.setProgress(progress);
-
- if (mObserversIterator != null) {
- for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
- mObserversIterator.next().onProgressChanged(progress);
- }
- }
- }
-
- @Override
- public void setVisibility(int visibility) {
- super.setVisibility(visibility);
-
- if (mObserversIterator != null) {
- for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
- mObserversIterator.next().onProgressVisibilityChanged(visibility);
- }
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698