content: package com.android.launcher3.graphics;
  
  import android.annotation.TargetApi;
  import android.content.res.Resources;
  import android.content.res.Resources.Theme;
  import android.graphics.Canvas;
  import android.graphics.drawable.ColorDrawable;
  import android.graphics.drawable.DrawableWrapper;
  import android.os.Build;
  import android.util.AttributeSet;
  
  import org.xmlpull.v1.XmlPullParser;
  
  /**
   * Extension of {@link DrawableWrapper} which scales the child drawables by a fixed amount.
   */
  @TargetApi(Build.VERSION_CODES.N)
  public class FixedScaleDrawable extends DrawableWrapper {
  
      // TODO b/33553066 use the constant defined in MaskableIconDrawable
      private static final float LEGACY_ICON_SCALE = .7f * .6667f;
      private float mScaleX, mScaleY;
  
      public FixedScaleDrawable() {
          super(new ColorDrawable());
          mScaleX = LEGACY_ICON_SCALE;
          mScaleY = LEGACY_ICON_SCALE;
      }
  
      @Override
      public void draw(Canvas canvas) {
          int saveCount = canvas.save(Canvas.MATRIX_SAVE_FLAG);
          canvas.scale(mScaleX, mScaleY,
                  getBounds().exactCenterX(), getBounds().exactCenterY());
          super.draw(canvas);
          canvas.restoreToCount(saveCount);
      }
  
      @Override
      public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) { }
  
      @Override
      public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme) { }
  
      public void setScale(float scale) {
          float h = getIntrinsicHeight();
          float w = getIntrinsicWidth();
          mScaleX = scale * LEGACY_ICON_SCALE;
          mScaleY = scale * LEGACY_ICON_SCALE;
          if (h > w && w > 0) {
              mScaleX *= w / h;
          } else if (w > h && h > 0) {
              mScaleY *= h / w;
          }
      }
  }
  