/*
 * Copyright 2018 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.google.android.material.theme;

import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;

import android.content.Context;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appcompat.app.AppCompatViewInflater;
import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
import androidx.appcompat.widget.AppCompatButton;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatRadioButton;
import androidx.appcompat.widget.AppCompatTextView;
import android.util.AttributeSet;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.radiobutton.MaterialRadioButton;
import com.google.android.material.textfield.MaterialAutoCompleteTextView;
import com.google.android.material.textview.MaterialTextView;

/**
 * An extension of {@link AppCompatViewInflater} that replaces some framework widgets with Material
 * Components ones at inflation time, provided a Material Components theme is in use.
 */
public class MaterialComponentsViewInflater extends AppCompatViewInflater {

  // Cached background resource ID used for workaround to not inflate MaterialButton in
  // API 23-25 FloatingToolbar. Technically 0 is the only invalid resource ID, but we are assuming
  // it's safe to use -1 as a sentinel here.
  private static int floatingToolbarItemBackgroundResId = -1;

  @NonNull
  @Override
  protected AppCompatButton createButton(@NonNull Context context, @NonNull AttributeSet attrs) {
    if (shouldInflateAppCompatButton(context, attrs)) {
      return new AppCompatButton(context, attrs);
    }

    return new MaterialButton(context, attrs);
  }

  /** @hide */
  @RestrictTo(LIBRARY_GROUP)
  protected boolean shouldInflateAppCompatButton(
      @NonNull Context context, @NonNull AttributeSet attrs) {
    // Workaround for FloatingToolbar inflating floating_popup_menu_button.xml on API 23-25, which
    // should not have MaterialButton styling.

    if (!(VERSION.SDK_INT == VERSION_CODES.M
        || VERSION.SDK_INT == VERSION_CODES.N
        || VERSION.SDK_INT == VERSION_CODES.N_MR1)) {
      return false;
    }

    if (floatingToolbarItemBackgroundResId == -1) {
      floatingToolbarItemBackgroundResId =
          context
              .getResources()
              .getIdentifier("floatingToolbarItemBackgroundDrawable", "^attr-private", "android");
    }

    if (floatingToolbarItemBackgroundResId != 0 && floatingToolbarItemBackgroundResId != -1) {
      for (int i = 0; i < attrs.getAttributeCount(); i++) {
        if (attrs.getAttributeNameResource(i) == android.R.attr.background) {
          int backgroundResourceId = attrs.getAttributeListValue(i, null, 0);
          if (floatingToolbarItemBackgroundResId == backgroundResourceId) {
            return true;
          }
        }
      }
    }

    return false;
  }

  @NonNull
  @Override
  protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {
    return new MaterialCheckBox(context, attrs);
  }

  @NonNull
  @Override
  protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {
    return new MaterialRadioButton(context, attrs);
  }

  @NonNull
  @Override
  protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {
    return new MaterialTextView(context, attrs);
  }

  @NonNull
  @Override
  protected AppCompatAutoCompleteTextView createAutoCompleteTextView(
      @NonNull Context context, @Nullable AttributeSet attrs) {
    return new MaterialAutoCompleteTextView(context, attrs);
  }
}

@@ -664,170 +664,31 @@
 ort 
-static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;%0A%0Aimport android.content.Context;%0Aimport android.os.Build.VERSION;%0Aimport android.os.Build.VERSION_CODES
+android.content.Context
 ;%0Aim
@@ -762,47 +762,8 @@
 le;%0A
-import androidx.annotation.RestrictTo;%0A
 impo
@@ -1718,1780 +1718,174 @@
 r %7B%0A
-%0A  // Cached background resource ID used for workaround to not inflate MaterialButton in%0A  // API 23-25 FloatingToolbar. Technically 0 is the only invalid resource ID, but we are assuming%0A  // it's safe to use -1 as a sentinel here.%0A  private static int floatingToolbarItemBackgroundResId = -1;%0A%0A  @NonNull%0A  @Override%0A  protected AppCompatButton createButton(@NonNull Context context, @NonNull AttributeSet attrs) %7B%0A    if (shouldInflateAppCompatButton(context, attrs)) %7B%0A      return new AppCompatButton(context, attrs);%0A    %7D%0A%0A    return new MaterialButton(context, attrs);%0A  %7D%0A%0A  /** @hide */%0A  @RestrictTo(LIBRARY_GROUP)%0A  protected boolean shouldInflateAppCompatButton(%0A      @NonNull Context context, @NonNull AttributeSet attrs) %7B%0A    // Workaround for FloatingToolbar inflating floating_popup_menu_button.xml on API 23-25, which%0A    // should not have MaterialButton styling.%0A%0A    if (!(VERSION.SDK_INT == VERSION_CODES.M%0A        %7C%7C VERSION.SDK_INT == VERSION_CODES.N%0A        %7C%7C VERSION.SDK_INT == VERSION_CODES.N_MR1)) %7B%0A      return false;%0A    %7D%0A%0A    if (floatingToolbarItemBackgroundResId == -1) %7B%0A      floatingToolbarItemBackgroundResId =%0A          context%0A              .getResources()%0A              .getIdentifier(%22floatingToolbarItemBackgroundDrawable%22, %22%5Eattr-private%22, %22android%22);%0A    %7D%0A%0A    if (floatingToolbarItemBackgroundResId != 0 && floatingToolbarItemBackgroundResId != -1) %7B%0A      for (int i = 0; i %3C attrs.getAttributeCount(); i++) %7B%0A        if (attrs.getAttributeNameResource(i) == android.R.attr.background) %7B%0A          int backgroundResourceId = attrs.getAttributeListValue(i, null, 0);%0A          if (floatingToolbarItemBackgroundResId == backgroundResourceId) %7B%0A            return true;%0A          %7D%0A        %7D%0A      %7D%0A    %7D%0A%0A    return false
+  @NonNull%0A  @Override%0A  protected AppCompatButton createButton(@NonNull Context context, @NonNull AttributeSet attrs) %7B%0A    return new MaterialButton(context, attrs)
 ;%0A  

Remove AppCompatButton workaround for FloatingToolbar in API 23-25 now that MaterialButton supports android:background.