/**
  * Updates the given measure spec with respect to the aspect ratio.
  *
  * <p>Note: Measure spec is not changed if the aspect ratio is not greater than zero or if
  * layoutParams is null.
  *
  * <p>Measure spec of the layout dimension (width or height) specified as "0dp" is updated to
  * match the measure spec of the other dimension adjusted by the aspect ratio. Exactly one layout
  * dimension should be specified as "0dp".
  *
  * <p>Padding is taken into account so that the aspect ratio refers to the content without
  * padding: {@code aspectRatio == (viewWidth - widthPadding) / (viewHeight - heightPadding)}
  *
  * <p>Updated measure spec respects the parent's constraints. I.e. measure spec is not changed if
  * the parent has specified mode {@code EXACTLY}, and it doesn't exceed measure size if parent has
  * specified mode {@code AT_MOST}.
  *
  * @param spec in/out measure spec to be updated
  * @param aspectRatio desired aspect ratio
  * @param layoutParams view's layout params
  * @param widthPadding view's left + right padding
  * @param heightPadding view's top + bottom padding
  */
 public static void updateMeasureSpec(
     Spec spec,
     float aspectRatio,
     @Nullable ViewGroup.LayoutParams layoutParams,
     int widthPadding,
     int heightPadding) {
   if (aspectRatio <= 0 || layoutParams == null) {
     return;
   }
   if (shouldAdjust(layoutParams.height)) {
     int widthSpecSize = View.MeasureSpec.getSize(spec.width);
     int desiredHeight = (int) ((widthSpecSize - widthPadding) / aspectRatio + heightPadding);
     int resolvedHeight = View.resolveSize(desiredHeight, spec.height);
     spec.height = View.MeasureSpec.makeMeasureSpec(resolvedHeight, View.MeasureSpec.EXACTLY);
   } else if (shouldAdjust(layoutParams.width)) {
     int heightSpecSize = View.MeasureSpec.getSize(spec.height);
     int desiredWidth = (int) ((heightSpecSize - heightPadding) * aspectRatio + widthPadding);
     int resolvedWidth = View.resolveSize(desiredWidth, spec.width);
     spec.width = View.MeasureSpec.makeMeasureSpec(resolvedWidth, View.MeasureSpec.EXACTLY);
   }
 }