summaryrefslogtreecommitdiffstats
path: root/core/java/android/widget/ProgressBar.java
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:43 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:43 -0800
commitf013e1afd1e68af5e3b868c26a653bbfb39538f8 (patch)
tree7ad6c8fd9c7b55f4b4017171dec1cb760bbd26bf /core/java/android/widget/ProgressBar.java
parente70cfafe580c6f2994c4827cd8a534aabf3eb05c (diff)
downloadframeworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.zip
frameworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.tar.gz
frameworks_base-f013e1afd1e68af5e3b868c26a653bbfb39538f8.tar.bz2
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'core/java/android/widget/ProgressBar.java')
-rw-r--r--core/java/android/widget/ProgressBar.java98
1 files changed, 88 insertions, 10 deletions
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index c1de010..abba6d0 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -22,6 +22,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Shader;
+import android.graphics.Rect;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ClipDrawable;
@@ -40,6 +41,8 @@ import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.view.animation.Transformation;
import android.widget.RemoteViews.RemoteView;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.os.SystemClock;
import com.android.internal.R;
@@ -427,7 +430,7 @@ public class ProgressBar extends View {
Drawable getCurrentDrawable() {
return mCurrentDrawable;
}
-
+
@Override
protected boolean verifyDrawable(Drawable who) {
return who == mProgressDrawable || who == mIndeterminateDrawable
@@ -700,7 +703,7 @@ public class ProgressBar extends View {
mAnimation = null;
mTransformation = null;
if (mIndeterminateDrawable instanceof AnimationDrawable) {
- ((AnimationDrawable)mIndeterminateDrawable).stop();
+ ((AnimationDrawable) mIndeterminateDrawable).stop();
mShouldStartAnimationDrawable = false;
}
}
@@ -754,17 +757,31 @@ public class ProgressBar extends View {
@Override
public void invalidateDrawable(Drawable dr) {
if (!mInDrawing) {
- super.invalidateDrawable(dr);
+ if (dr == mProgressDrawable || dr == mIndeterminateDrawable) {
+ final Rect dirty = dr.getBounds();
+ final int scrollX = mScrollX + mPaddingLeft;
+ final int scrollY = mScrollY + mPaddingRight;
+
+ invalidate(dirty.left + scrollX, dirty.top + scrollY,
+ dirty.right + scrollX, dirty.bottom + scrollY);
+ } else {
+ super.invalidateDrawable(dr);
+ }
}
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- Drawable d = mCurrentDrawable;
- if (d != null) {
- // onDraw will translate the canvas so we draw starting at 0,0
- d.setBounds(0, 0, w - mPaddingRight - mPaddingLeft,
- h - mPaddingBottom - mPaddingTop);
+ // onDraw will translate the canvas so we draw starting at 0,0
+ int right = w - mPaddingRight - mPaddingLeft;
+ int bottom = h - mPaddingBottom - mPaddingTop;
+
+ if (mIndeterminateDrawable != null) {
+ mIndeterminateDrawable.setBounds(0, 0, right, bottom);
+ }
+
+ if (mProgressDrawable != null) {
+ mProgressDrawable.setBounds(0, 0, right, bottom);
}
}
@@ -795,8 +812,9 @@ public class ProgressBar extends View {
}
d.draw(canvas);
canvas.restore();
- if (mShouldStartAnimationDrawable && mCurrentDrawable instanceof AnimationDrawable) {
- ((AnimationDrawable)mCurrentDrawable).start();
+ if (mShouldStartAnimationDrawable && d instanceof AnimationDrawable) {
+ ((AnimationDrawable) d).start();
+ mShouldStartAnimationDrawable = false;
}
}
}
@@ -817,4 +835,64 @@ public class ProgressBar extends View {
setMeasuredDimension(resolveSize(dw, widthMeasureSpec),
resolveSize(dh, heightMeasureSpec));
}
+
+ static class SavedState extends BaseSavedState {
+ int progress;
+ int secondaryProgress;
+
+ /**
+ * Constructor called from {@link ProgressBar#onSaveInstanceState()}
+ */
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ /**
+ * Constructor called from {@link #CREATOR}
+ */
+ private SavedState(Parcel in) {
+ super(in);
+ progress = in.readInt();
+ secondaryProgress = in.readInt();
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(progress);
+ out.writeInt(secondaryProgress);
+ }
+
+ public static final Parcelable.Creator<SavedState> CREATOR
+ = new Parcelable.Creator<SavedState>() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ // Force our ancestor class to save its state
+ Parcelable superState = super.onSaveInstanceState();
+ SavedState ss = new SavedState(superState);
+
+ ss.progress = mProgress;
+ ss.secondaryProgress = mSecondaryProgress;
+
+ return ss;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ SavedState ss = (SavedState) state;
+ super.onRestoreInstanceState(ss.getSuperState());
+
+ setProgress(ss.progress);
+ setSecondaryProgress(ss.secondaryProgress);
+ }
}