@Nullable
  private Drawable buildActualImageBranch(
      Drawable drawable,
      @Nullable ScalingUtils.ScaleType scaleType,
      @Nullable PointF focusPoint,
      @Nullable ColorFilter colorFilter) {
    drawable.setColorFilter(colorFilter);
    drawable = WrappingUtils.maybeWrapWithScaleType(drawable, scaleType, focusPoint);
    return drawable;
  }
A SettableDraweeHierarchy that displays placeholder image until the actual image is set. If
provided, failure image will be used in case of failure (placeholder otherwise). If provided,
retry image will be used in case of failure when retrying is enabled. If provided, progressbar
will be displayed until fully loaded. Each image can be displayed with a different scale type (or
no scaling at all). Fading between the layers is supported. Rounding is supported.

<p>Example hierarchy with a placeholder, retry, failure and the actual image:

<pre>
 o RootDrawable (top level drawable)
 |
 +--o FadeDrawable
    |
    +--o ScaleTypeDrawable (placeholder branch, optional)
    |  |
    |  +--o Drawable (placeholder image)
    |
    +--o ScaleTypeDrawable (actual image branch)
    |  |
    |  +--o ForwardingDrawable (actual image wrapper)
    |     |
    |     +--o Drawable (actual image)
    |
    +--o null (progress bar branch, optional)
    |
    +--o Drawable (retry image branch, optional)
    |
    +--o ScaleTypeDrawable (failure image branch, optional)
       |
       +--o Drawable (failure image)
 </pre>

<p>Note:

<ul>
  <li>RootDrawable and FadeDrawable are always created.
  <li>All branches except the actual image branch are optional (placeholder, failure, retry,
      progress bar). If some branch is not specified it won't be created. Index in FadeDrawable
      will still be reserved though.
  <li>If overlays and/or background are specified, they are added to the same fade drawable, and
      are always being displayed.
  <li>ScaleType and Matrix transformations will be added only if specified. If both are
      unspecified, then the branch for that image is attached to FadeDrawable directly. Matrix
      transformation is only supported for the actual image, and it is not recommended to be
      used.
  <li>Rounding, if specified, is applied to all layers. Rounded drawable can either wrap
      FadeDrawable, or if leaf rounding is specified, each leaf drawable will be rounded
      separately.
  <li>A particular drawable instance should be used by only one DH. If more than one DH is being
      built with the same builder, different drawable instances must be specified for each DH.
</ul>
drawee/src/main/java/com/facebook/drawee/generic/GenericDraweeHierarchy.java