content: /*
   * Copyright (C) 2014 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 androidx.test.ui.app;
  
  import android.content.Context;
  import android.util.AttributeSet;
  import android.widget.FrameLayout;
  
  /**
   * {@link android.widget.FrameLayout} which forces itself to be laid out as square.
   */
  public class TransitionActivitySquareFrameLayout extends FrameLayout {
  
    public TransitionActivitySquareFrameLayout(Context context) {
      super(context);
    }
  
    public TransitionActivitySquareFrameLayout(Context context, AttributeSet attrs) {
      super(context, attrs);
    }
  
    public TransitionActivitySquareFrameLayout(Context context, AttributeSet attrs,
      int defStyleAttr) {
      super(context, attrs, defStyleAttr);
    }
  
    public TransitionActivitySquareFrameLayout(Context context, AttributeSet attrs,
     int defStyleAttr, int defStyleRes) {
      super(context, attrs, defStyleAttr, defStyleRes);
    }
  
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
      final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
      final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
  
      if (widthSize == 0 && heightSize == 0) {
              // If there are no constraints on size, let FrameLayout measure
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  
              // Now use the smallest of the measured dimensions for both dimensions
        final int minSize = Math.min(getMeasuredWidth(), getMeasuredHeight());
        setMeasuredDimension(minSize, minSize);
        return;
      }
  
      final int size;
      if (widthSize == 0 || heightSize == 0) {
              // If one of the dimensions has no restriction on size, set both dimensions to be the
              // on that does
        size = Math.max(widthSize, heightSize);
      } else {
              // Both dimensions have restrictions on size, set both dimensions to be the
              // smallest of the two
        size = Math.min(widthSize, heightSize);
      }
  
      final int newMeasureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
      super.onMeasure(newMeasureSpec, newMeasureSpec);
    }
  }
  