/*
 * Copyright (C) 2016 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 android.support.design.widget;

import android.os.Build;
import android.support.annotation.CallSuper;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
import android.support.design.test.R;
import android.support.design.testutils.Shakespeare;
import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.action.CoordinatesProvider;
import android.support.test.espresso.action.GeneralSwipeAction;
import android.support.test.espresso.action.Press;
import android.support.test.espresso.action.Swipe;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;

import static android.support.design.testutils.TestUtilsActions.setText;
import static android.support.design.testutils.TestUtilsActions.setTitle;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.matcher.ViewMatchers.withId;

import static org.junit.Assert.assertEquals;

public abstract class AppBarLayoutBaseTest extends BaseDynamicCoordinatorLayoutTest {

    protected AppBarLayout mAppBar;

    protected CollapsingToolbarLayout mCollapsingToolbar;

    protected Toolbar mToolbar;

    protected TextView mTextView;

    protected float mDefaultElevationValue;

    protected static void performVerticalSwipeUpGesture(@IdRes int containerId, final int swipeX,
            final int swipeStartY, final int swipeAmountY) {
        onView(withId(containerId)).perform(new GeneralSwipeAction(
                Swipe.SLOW,
                new CoordinatesProvider() {
                    @Override
                    public float[] calculateCoordinates(View view) {
                        return new float[] { swipeX, swipeStartY };
                    }
                },
                new CoordinatesProvider() {
                    @Override
                    public float[] calculateCoordinates(View view) {
                        return new float[] { swipeX, swipeStartY - swipeAmountY };
                    }
                }, Press.FINGER));
    }

    protected static void performVerticalSwipeDownGesture(@IdRes int containerId, final int swipeX,
            final int swipeStartY, final int swipeAmountY) {
        onView(withId(containerId)).perform(new GeneralSwipeAction(
                Swipe.SLOW,
                new CoordinatesProvider() {
                    @Override
                    public float[] calculateCoordinates(View view) {
                        return new float[] { swipeX, swipeStartY };
                    }
                },
                new CoordinatesProvider() {
                    @Override
                    public float[] calculateCoordinates(View view) {
                        return new float[] { swipeX, swipeStartY + swipeAmountY };
                    }
                }, Press.FINGER));
    }

    @CallSuper
    protected void configureContent(final @LayoutRes int layoutResId,
            final @StringRes int titleResId) {
        onView(withId(R.id.coordinator_stub)).perform(inflateViewStub(layoutResId));

        mAppBar = (AppBarLayout) mCoordinatorLayout.findViewById(R.id.app_bar);
        mCollapsingToolbar =
                (CollapsingToolbarLayout) mAppBar.findViewById(R.id.collapsing_app_bar);
        mToolbar = (Toolbar) mAppBar.findViewById(R.id.toolbar);

        final AppCompatActivity activity = mActivityTestRule.getActivity();
        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
            @Override
            public void run() {
                activity.setSupportActionBar(mToolbar);
            }
        });

        final CharSequence activityTitle = activity.getString(titleResId);
        activity.setTitle(activityTitle);
        if (mCollapsingToolbar != null) {
            onView(withId(R.id.collapsing_app_bar)).perform(setTitle(activityTitle));
        }

        TextView dialog = (TextView) mCoordinatorLayout.findViewById(R.id.textview_dialogue);
        if (dialog != null) {
            onView(withId(R.id.textview_dialogue)).perform(
                    setText(TextUtils.concat(Shakespeare.DIALOGUE)));
        }

        mDefaultElevationValue = mAppBar.getResources()
                .getDimensionPixelSize(R.dimen.design_appbar_elevation);
    }

    protected void assertAppBarElevation(float expectedValue) {
        if (Build.VERSION.SDK_INT >= 21) {
            assertEquals(expectedValue, ViewCompat.getElevation(mAppBar), 0.05f);
        }
    }
}

@@ -5063,17 +5063,8 @@
 sion
-PixelSize
 (R.d

Fix AppBarLayout elevation tests