content: /*
   * Copyright (C) 2015 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.setupwizardlib.util;
  
  import android.annotation.SuppressLint;
  import android.content.Context;
  import android.graphics.drawable.Drawable;
  import android.graphics.drawable.InsetDrawable;
  import android.os.Build;
  import android.view.View;
  
  /** Provides convenience methods to handle drawable layout directions in different SDK versions. */
  public class DrawableLayoutDirectionHelper {
  
    /**
     * Creates an {@link android.graphics.drawable.InsetDrawable} according to the layout direction of
     * {@code view}.
     */
    @SuppressLint("InlinedApi") // Use of View.LAYOUT_DIRECTION_RTL is guarded by version check
    public static InsetDrawable createRelativeInsetDrawable(
        Drawable drawable, int insetStart, int insetTop, int insetEnd, int insetBottom, View view) {
      boolean isRtl =
          Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1
              && view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
      return createRelativeInsetDrawable(
          drawable, insetStart, insetTop, insetEnd, insetBottom, isRtl);
    }
  
    /**
     * Creates an {@link android.graphics.drawable.InsetDrawable} according to the layout direction of
     * {@code context}.
     */
    @SuppressLint("InlinedApi") // Use of View.LAYOUT_DIRECTION_RTL is guarded by version check
    public static InsetDrawable createRelativeInsetDrawable(
        Drawable drawable,
        int insetStart,
        int insetTop,
        int insetEnd,
        int insetBottom,
        Context context) {
      boolean isRtl = false;
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        final int layoutDirection = context.getResources().getConfiguration().getLayoutDirection();
        isRtl = layoutDirection == View.LAYOUT_DIRECTION_RTL;
      }
      return createRelativeInsetDrawable(
          drawable, insetStart, insetTop, insetEnd, insetBottom, isRtl);
    }
  
    /**
     * Creates an {@link android.graphics.drawable.InsetDrawable} according to {@code
     * layoutDirection}.
     */
    @SuppressLint("InlinedApi") // Given layoutDirection will not be View.LAYOUT_DIRECTION_RTL if
    // SDK version doesn't support it.
    public static InsetDrawable createRelativeInsetDrawable(
        Drawable drawable,
        int insetStart,
        int insetTop,
        int insetEnd,
        int insetBottom,
        int layoutDirection) {
      return createRelativeInsetDrawable(
          drawable,
          insetStart,
          insetTop,
          insetEnd,
          insetBottom,
          layoutDirection == View.LAYOUT_DIRECTION_RTL);
    }
  
    private static InsetDrawable createRelativeInsetDrawable(
        Drawable drawable,
        int insetStart,
        int insetTop,
        int insetEnd,
        int insetBottom,
        boolean isRtl) {
      if (isRtl) {
        return new InsetDrawable(drawable, insetEnd, insetTop, insetStart, insetBottom);
      } else {
        return new InsetDrawable(drawable, insetStart, insetTop, insetEnd, insetBottom);
      }
    }
  }
  