summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/PreloadIconDrawable.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/PreloadIconDrawable.java')
-rw-r--r--src/com/android/launcher3/PreloadIconDrawable.java252
1 files changed, 0 insertions, 252 deletions
diff --git a/src/com/android/launcher3/PreloadIconDrawable.java b/src/com/android/launcher3/PreloadIconDrawable.java
deleted file mode 100644
index 973e688d9..000000000
--- a/src/com/android/launcher3/PreloadIconDrawable.java
+++ /dev/null
@@ -1,252 +0,0 @@
-package com.android.launcher3;
-
-import android.animation.ObjectAnimator;
-import android.content.res.Resources.Theme;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Paint;
-import android.graphics.PixelFormat;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-
-public class PreloadIconDrawable extends Drawable {
-
- private static final float ANIMATION_PROGRESS_STOPPED = -1.0f;
- private static final float ANIMATION_PROGRESS_STARTED = 0f;
- private static final float ANIMATION_PROGRESS_COMPLETED = 1.0f;
-
- private static final float MIN_SATURATION = 0.2f;
- private static final float MIN_LIGHTNESS = 0.6f;
-
- private static final float ICON_SCALE_FACTOR = 0.5f;
- private static final int DEFAULT_COLOR = 0xFF009688;
-
- private static final Rect sTempRect = new Rect();
-
- private final RectF mIndicatorRect = new RectF();
- private boolean mIndicatorRectDirty;
-
- private final Paint mPaint;
- public final Drawable mIcon;
-
- private Drawable mBgDrawable;
- private int mRingOutset;
-
- private int mIndicatorColor = 0;
-
- /**
- * Indicates the progress of the preloader [0-100]. If it goes above 100, only the icon
- * is shown with no progress bar.
- */
- private int mProgress = 0;
-
- private float mAnimationProgress = ANIMATION_PROGRESS_STOPPED;
- private ObjectAnimator mAnimator;
-
- public PreloadIconDrawable(Drawable icon, Theme theme) {
- mIcon = icon;
-
- mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setStrokeCap(Paint.Cap.ROUND);
-
- setBounds(icon.getBounds());
- applyPreloaderTheme(theme);
- onLevelChange(0);
- }
-
- public void applyPreloaderTheme(Theme t) {
- TypedArray ta = t.obtainStyledAttributes(R.styleable.PreloadIconDrawable);
- mBgDrawable = ta.getDrawable(R.styleable.PreloadIconDrawable_background);
- mBgDrawable.setFilterBitmap(true);
- mPaint.setStrokeWidth(ta.getDimension(R.styleable.PreloadIconDrawable_indicatorSize, 0));
- mRingOutset = ta.getDimensionPixelSize(R.styleable.PreloadIconDrawable_ringOutset, 0);
- ta.recycle();
- onBoundsChange(getBounds());
- invalidateSelf();
- }
-
- @Override
- protected void onBoundsChange(Rect bounds) {
- mIcon.setBounds(bounds);
- if (mBgDrawable != null) {
- sTempRect.set(bounds);
- sTempRect.inset(-mRingOutset, -mRingOutset);
- mBgDrawable.setBounds(sTempRect);
- }
- mIndicatorRectDirty = true;
- }
-
- public int getOutset() {
- return mRingOutset;
- }
-
- /**
- * The size of the indicator is same as the content region of the {@link #mBgDrawable} minus
- * half the stroke size to accommodate the indicator.
- */
- private void initIndicatorRect() {
- Drawable d = mBgDrawable;
- Rect bounds = d.getBounds();
-
- d.getPadding(sTempRect);
- // Amount by which padding has to be scaled
- float paddingScaleX = ((float) bounds.width()) / d.getIntrinsicWidth();
- float paddingScaleY = ((float) bounds.height()) / d.getIntrinsicHeight();
- mIndicatorRect.set(
- bounds.left + sTempRect.left * paddingScaleX,
- bounds.top + sTempRect.top * paddingScaleY,
- bounds.right - sTempRect.right * paddingScaleX,
- bounds.bottom - sTempRect.bottom * paddingScaleY);
-
- float inset = mPaint.getStrokeWidth() / 2;
- mIndicatorRect.inset(inset, inset);
- mIndicatorRectDirty = false;
- }
-
- @Override
- public void draw(Canvas canvas) {
- final Rect r = new Rect(getBounds());
- if (canvas.getClipBounds(sTempRect) && !Rect.intersects(sTempRect, r)) {
- // The draw region has been clipped.
- return;
- }
- if (mIndicatorRectDirty) {
- initIndicatorRect();
- }
- final float iconScale;
-
- if ((mAnimationProgress >= ANIMATION_PROGRESS_STARTED)
- && (mAnimationProgress < ANIMATION_PROGRESS_COMPLETED)) {
- mPaint.setAlpha((int) ((1 - mAnimationProgress) * 255));
- mBgDrawable.setAlpha(mPaint.getAlpha());
- mBgDrawable.draw(canvas);
- canvas.drawOval(mIndicatorRect, mPaint);
-
- iconScale = ICON_SCALE_FACTOR + (1 - ICON_SCALE_FACTOR) * mAnimationProgress;
- } else if (mAnimationProgress == ANIMATION_PROGRESS_STOPPED) {
- mPaint.setAlpha(255);
- iconScale = ICON_SCALE_FACTOR;
- mBgDrawable.setAlpha(255);
- mBgDrawable.draw(canvas);
-
- if (mProgress >= 100) {
- canvas.drawOval(mIndicatorRect, mPaint);
- } else if (mProgress > 0) {
- canvas.drawArc(mIndicatorRect, -90, mProgress * 3.6f, false, mPaint);
- }
- } else {
- iconScale = 1;
- }
-
- canvas.save();
- canvas.scale(iconScale, iconScale, r.exactCenterX(), r.exactCenterY());
- mIcon.draw(canvas);
- canvas.restore();
- }
-
- @Override
- public int getOpacity() {
- return PixelFormat.TRANSLUCENT;
- }
-
- @Override
- public void setAlpha(int alpha) {
- mIcon.setAlpha(alpha);
- }
-
- @Override
- public void setColorFilter(ColorFilter cf) {
- mIcon.setColorFilter(cf);
- }
-
- @Override
- protected boolean onLevelChange(int level) {
- mProgress = level;
-
- // Stop Animation
- if (mAnimator != null) {
- mAnimator.cancel();
- mAnimator = null;
- }
- mAnimationProgress = ANIMATION_PROGRESS_STOPPED;
- if (level > 0) {
- // Set the paint color only when the level changes, so that the dominant color
- // is only calculated when needed.
- mPaint.setColor(getIndicatorColor());
- }
- if (mIcon instanceof FastBitmapDrawable) {
- ((FastBitmapDrawable) mIcon).setIsDisabled(level < 100);
- }
-
- invalidateSelf();
- return true;
- }
-
- /**
- * Runs the finish animation if it is has not been run after last level change.
- */
- public void maybePerformFinishedAnimation() {
- if (mAnimationProgress > ANIMATION_PROGRESS_STOPPED) {
- return;
- }
- if (mAnimator != null) {
- mAnimator.cancel();
- }
- setAnimationProgress(ANIMATION_PROGRESS_STARTED);
- mAnimator = ObjectAnimator.ofFloat(this, "animationProgress",
- ANIMATION_PROGRESS_STARTED, ANIMATION_PROGRESS_COMPLETED);
- mAnimator.start();
- }
-
- public void setAnimationProgress(float progress) {
- if (progress != mAnimationProgress) {
- mAnimationProgress = progress;
- invalidateSelf();
- }
- }
-
- public float getAnimationProgress() {
- return mAnimationProgress;
- }
-
- public boolean hasNotCompleted() {
- return mAnimationProgress < ANIMATION_PROGRESS_COMPLETED;
- }
-
- @Override
- public int getIntrinsicHeight() {
- return mIcon.getIntrinsicHeight();
- }
-
- @Override
- public int getIntrinsicWidth() {
- return mIcon.getIntrinsicWidth();
- }
-
- private int getIndicatorColor() {
- if (mIndicatorColor != 0) {
- return mIndicatorColor;
- }
- if (!(mIcon instanceof FastBitmapDrawable)) {
- mIndicatorColor = DEFAULT_COLOR;
- return mIndicatorColor;
- }
- mIndicatorColor = Utilities.findDominantColorByHue(
- ((FastBitmapDrawable) mIcon).getBitmap(), 20);
-
- // Make sure that the dominant color has enough saturation to be visible properly.
- float[] hsv = new float[3];
- Color.colorToHSV(mIndicatorColor, hsv);
- if (hsv[1] < MIN_SATURATION) {
- mIndicatorColor = DEFAULT_COLOR;
- return mIndicatorColor;
- }
- hsv[2] = Math.max(MIN_LIGHTNESS, hsv[2]);
- mIndicatorColor = Color.HSVToColor(hsv);
- return mIndicatorColor;
- }
-}