1909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov/* 2909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * Copyright (C) 2016 The Android Open Source Project 3909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * 4909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * you may not use this file except in compliance with the License. 6909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * You may obtain a copy of the License at 7909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * 8909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * http://www.apache.org/licenses/LICENSE-2.0 9909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * 10909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * Unless required by applicable law or agreed to in writing, software 11909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS, 12909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * See the License for the specific language governing permissions and 14909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov * limitations under the License. 15909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov */ 16909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 17909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovpackage android.support.design.widget; 18909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 191a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banesimport android.os.Build; 20123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikovimport android.support.annotation.CallSuper; 21123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikovimport android.support.annotation.IdRes; 22909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.support.annotation.LayoutRes; 23909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.support.annotation.StringRes; 24909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.support.design.test.R; 25909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.support.design.testutils.Shakespeare; 26909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.support.test.InstrumentationRegistry; 27123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikovimport android.support.test.espresso.action.CoordinatesProvider; 28123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikovimport android.support.test.espresso.action.GeneralSwipeAction; 29123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikovimport android.support.test.espresso.action.Press; 30123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikovimport android.support.test.espresso.action.Swipe; 311a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banesimport android.support.v4.view.ViewCompat; 32909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.support.v7.app.AppCompatActivity; 33909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.support.v7.widget.Toolbar; 34909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.text.TextUtils; 35123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikovimport android.view.View; 36909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport android.widget.TextView; 37909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 38909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport static android.support.design.testutils.TestUtilsActions.setText; 39909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport static android.support.design.testutils.TestUtilsActions.setTitle; 40909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport static android.support.test.espresso.Espresso.onView; 41909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.withId; 42909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 431a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banesimport static org.junit.Assert.assertEquals; 441a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes 45909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikovpublic abstract class AppBarLayoutBaseTest extends BaseDynamicCoordinatorLayoutTest { 46909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 47909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov protected AppBarLayout mAppBar; 48909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 49909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov protected CollapsingToolbarLayout mCollapsingToolbar; 50909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 51909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov protected Toolbar mToolbar; 52909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 53909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov protected TextView mTextView; 54909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 551a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes protected float mDefaultElevationValue; 561a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes 57c530cc115fddab8e1d9645b322424dd45f9ecd0dKirill Grouchnikov protected static void performVerticalSwipeUpGesture(@IdRes int containerId, final int swipeX, 58123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov final int swipeStartY, final int swipeAmountY) { 59123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov onView(withId(containerId)).perform(new GeneralSwipeAction( 60123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov Swipe.SLOW, 61123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov new CoordinatesProvider() { 62123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov @Override 63123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov public float[] calculateCoordinates(View view) { 64123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov return new float[] { swipeX, swipeStartY }; 65123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov } 66123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov }, 67123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov new CoordinatesProvider() { 68123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov @Override 69123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov public float[] calculateCoordinates(View view) { 70123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov return new float[] { swipeX, swipeStartY - swipeAmountY }; 71123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov } 72123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov }, Press.FINGER)); 73123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov } 74123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov 75123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov protected static void performVerticalSwipeDownGesture(@IdRes int containerId, final int swipeX, 76123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov final int swipeStartY, final int swipeAmountY) { 77123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov onView(withId(containerId)).perform(new GeneralSwipeAction( 78123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov Swipe.SLOW, 79123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov new CoordinatesProvider() { 80123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov @Override 81123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov public float[] calculateCoordinates(View view) { 82123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov return new float[] { swipeX, swipeStartY }; 83123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov } 84123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov }, 85123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov new CoordinatesProvider() { 86123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov @Override 87123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov public float[] calculateCoordinates(View view) { 88123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov return new float[] { swipeX, swipeStartY + swipeAmountY }; 89123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov } 90123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov }, Press.FINGER)); 91123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov } 92123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov 93123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov @CallSuper 94909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov protected void configureContent(final @LayoutRes int layoutResId, 95909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov final @StringRes int titleResId) { 96909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov onView(withId(R.id.coordinator_stub)).perform(inflateViewStub(layoutResId)); 97909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 98909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov mAppBar = (AppBarLayout) mCoordinatorLayout.findViewById(R.id.app_bar); 99909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov mCollapsingToolbar = 100909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov (CollapsingToolbarLayout) mAppBar.findViewById(R.id.collapsing_app_bar); 101123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov mToolbar = (Toolbar) mAppBar.findViewById(R.id.toolbar); 102909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 103909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov final AppCompatActivity activity = mActivityTestRule.getActivity(); 104909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 105909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov @Override 106909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov public void run() { 107909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov activity.setSupportActionBar(mToolbar); 108909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov } 109909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov }); 110909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 111123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov final CharSequence activityTitle = activity.getString(titleResId); 112123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov activity.setTitle(activityTitle); 113909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov if (mCollapsingToolbar != null) { 114123544eaa855a7734be92dd35901233a222f64a8Kirill Grouchnikov onView(withId(R.id.collapsing_app_bar)).perform(setTitle(activityTitle)); 115909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov } 116909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov 117909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov TextView dialog = (TextView) mCoordinatorLayout.findViewById(R.id.textview_dialogue); 118909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov if (dialog != null) { 119909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov onView(withId(R.id.textview_dialogue)).perform( 120909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov setText(TextUtils.concat(Shakespeare.DIALOGUE))); 121909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov } 1221a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes 1231a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes mDefaultElevationValue = mAppBar.getResources() 1246092f109a639c48d3da401ebfebefdbe37322301Chris Banes .getDimension(R.dimen.design_appbar_elevation); 1251a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes } 1261a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes 1271a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes protected void assertAppBarElevation(float expectedValue) { 1281a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes if (Build.VERSION.SDK_INT >= 21) { 1291a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes assertEquals(expectedValue, ViewCompat.getElevation(mAppBar), 0.05f); 1301a8e4886abbc35e479cddb7b4acd601cede2fd8aChris Banes } 131909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov } 132909009864c27baf78efb766990e507a16a1cf359Kirill Grouchnikov} 133