SwipeDismissFrameLayoutTest.java revision 0bb1bb33c39fa5eef545f8513753a8e3b8dfede7
10bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska/* 20bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * Copyright (C) 2017 The Android Open Source Project 30bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * 40bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * Licensed under the Apache License, Version 2.0 (the "License"); 50bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * you may not use this file except in compliance with the License. 60bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * You may obtain a copy of the License at 70bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * 80bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * http://www.apache.org/licenses/LICENSE-2.0 90bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * 100bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * Unless required by applicable law or agreed to in writing, software 110bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * distributed under the License is distributed on an "AS IS" BASIS, 120bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * See the License for the specific language governing permissions and 140bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * limitations under the License. 150bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska */ 160bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 170bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskapackage android.support.wearable.view; 180bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 190bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static android.support.test.espresso.Espresso.onView; 200bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static android.support.test.espresso.action.ViewActions.swipeRight; 210bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static android.support.test.espresso.matcher.ViewMatchers.withEffectiveVisibility; 220bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static android.support.test.espresso.matcher.ViewMatchers.withId; 230bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static android.support.wearable.view.util.AsyncViewActions.waitForMatchingView; 240bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static android.support.wearable.view.util.MoreViewAssertions.withTranslationX; 250bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 260bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static org.hamcrest.Matchers.allOf; 270bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static org.junit.Assert.assertFalse; 280bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport static org.junit.Assert.assertTrue; 290bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 300bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.app.Activity; 310bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.content.Intent; 320bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.annotation.IdRes; 330bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.InstrumentationRegistry; 340bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.espresso.ViewAction; 350bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.espresso.action.GeneralLocation; 360bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.espresso.action.GeneralSwipeAction; 370bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.espresso.action.Press; 380bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.espresso.action.Swipe; 390bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.espresso.matcher.ViewMatchers; 400bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.filters.SmallTest; 410bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.rule.ActivityTestRule; 420bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.test.runner.AndroidJUnit4; 430bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.wearable.test.R; 440bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.support.wearable.view.util.WakeLockRule; 450bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport android.view.View; 460bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 470bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport org.junit.Rule; 480bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport org.junit.Test; 490bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskaimport org.junit.runner.RunWith; 500bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 510bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska@RunWith(AndroidJUnit4.class) 520bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurskapublic class SwipeDismissFrameLayoutTest { 530bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 540bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private static final long MAX_WAIT_TIME = 4000; //ms 550bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private final SwipeDismissFrameLayout.Callback mDismissCallback = new DismissCallback(); 560bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 570bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Rule 580bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public final WakeLockRule wakeLock = new WakeLockRule(); 590bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 600bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Rule 610bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public final ActivityTestRule<SwipeDismissFrameLayoutTestActivity> activityRule = 620bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska new ActivityTestRule<>( 630bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska SwipeDismissFrameLayoutTestActivity.class, 640bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska true, /** initial touch mode */ 650bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska false /** launchActivity */ 660bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska ); 670bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 680bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private int mLayoutWidth; 690bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 700bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 710bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 720bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testCanScrollHorizontally() { 730bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout 740bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSimpleLayout(); 750bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 760bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska SwipeDismissFrameLayout testLayout = 770bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); 780bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we check that the layout is horizontally scrollable from left to right. 790bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is found to be horizontally swipeable from left to right. 800bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertTrue(testLayout.canScrollHorizontally(-20)); 810bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // AND the layout is found to NOT be horizontally swipeable from right to left. 820bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertFalse(testLayout.canScrollHorizontally(20)); 830bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 840bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we switch off the swipe-to-dismiss functionality for the layout 850bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska testLayout.setSwipeable(false); 860bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is found NOT to be horizontally swipeable from left to right. 870bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertFalse(testLayout.canScrollHorizontally(-20)); 880bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // AND the layout is found to NOT be horizontally swipeable from right to left. 890bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertFalse(testLayout.canScrollHorizontally(20)); 900bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 910bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 920bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 930bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 940bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void canScrollHorizontallyShouldBeFalseWhenInvisible() { 950bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout 960bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSimpleLayout(); 970bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 980bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska final SwipeDismissFrameLayout testLayout = 990bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); 1000bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN the layout is invisible 1010bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // Note: We have to run this on the main thread, because of thread checks in View.java. 1020bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 1030bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 1040bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void run() { 1050bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska testLayout.setVisibility(View.INVISIBLE); 1060bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1070bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska }); 1080bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we check that the layout is horizontally scrollable 1090bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is found to be NOT horizontally swipeable from left to right. 1100bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertFalse(testLayout.canScrollHorizontally(-20)); 1110bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // AND the layout is found to NOT be horizontally swipeable from right to left. 1120bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertFalse(testLayout.canScrollHorizontally(20)); 1130bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1140bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 1150bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 1160bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 1170bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void canScrollHorizontallyShouldBeFalseWhenGone() { 1180bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout 1190bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSimpleLayout(); 1200bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 1210bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska final SwipeDismissFrameLayout testLayout = 1220bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); 1230bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN the layout is gone 1240bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // Note: We have to run this on the main thread, because of thread checks in View.java. 1250bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 1260bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 1270bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void run() { 1280bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska testLayout.setVisibility(View.GONE); 1290bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1300bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska }); 1310bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we check that the layout is horizontally scrollable 1320bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is found to be NOT horizontally swipeable from left to right. 1330bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertFalse(testLayout.canScrollHorizontally(-20)); 1340bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // AND the layout is found to NOT be horizontally swipeable from right to left. 1350bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertFalse(testLayout.canScrollHorizontally(20)); 1360bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1370bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 1380bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 1390bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 1400bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testSwipeDismissEnabledByDefault() { 1410bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout 1420bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSimpleLayout(); 1430bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 1440bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska SwipeDismissFrameLayout testLayout = 1450bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); 1460bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we check that the layout is dismissible 1470bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is find to be dismissible 1480bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertTrue(testLayout.isSwipeable()); 1490bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1500bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 1510bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 1520bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 1530bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testSwipeDismissesViewIfEnabled() { 1540bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout 1550bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSimpleLayout(); 1560bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we perform a swipe to dismiss 1570bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.swipe_dismiss_root)).perform(swipeRight()); 1580bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is dismissed 1590bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertDismissed(R.id.swipe_dismiss_root); 1600bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertHidden(R.id.swipe_dismiss_root); 1610bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1620bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 1630bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 1640bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 1650bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testSwipeDoesNotDismissViewIfDisabled() { 1660bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout with dismiss turned off. 1670bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSimpleLayout(); 1680bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 1690bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska SwipeDismissFrameLayout testLayout = 1700bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); 1710bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska testLayout.setSwipeable(false); 1720bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we perform a swipe to dismiss 1730bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.swipe_dismiss_root)).perform(swipeRight()); 1740bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is not dismissed and not hidden 1750bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertNotHidden(R.id.swipe_dismiss_root); 1760bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1770bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 1780bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 1790bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 1800bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testAddRemoveCallback() { 1810bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout 1820bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSimpleLayout(); 1830bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 1840bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska SwipeDismissFrameLayout testLayout = 1850bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); 1860bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we remove the swipe callback 1870bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska testLayout.removeCallback(mDismissCallback); 1880bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.swipe_dismiss_root)).perform(swipeRight()); 1890bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is dismissed, but no hidden 1900bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertDismissed(R.id.swipe_dismiss_root); 1910bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertNotHidden(R.id.swipe_dismiss_root); 1920bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 1930bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 1940bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 1950bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 1960bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testSwipeDoesNotDismissViewIfScrollable() { 1970bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout with dismiss turned off. 1980bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSwipeDismissWithRecyclerView(); 1990bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we perform a swipe to dismiss from the center of the screen. 2000bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.swipe_dismiss_root)).perform(swipeRightFromCenter()); 2010bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is not dismissed and not hidden 2020bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertNotHidden(R.id.swipe_dismiss_root); 2030bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 2040bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 2050bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 2060bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 2070bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testEdgeSwipeDoesDismissViewIfScrollable() { 2080bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout with dismiss turned off. 2090bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSwipeDismissWithRecyclerView(); 2100bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we perform a swipe to dismiss from the left edge of the screen. 2110bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.swipe_dismiss_root)).perform(swipeRightFromLeftEdge()); 2120bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is dismissed and hidden 2130bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertHidden(R.id.swipe_dismiss_root); 2140bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertDismissed(R.id.swipe_dismiss_root); 2150bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 2160bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 2170bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 2180bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 2190bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testSwipeDoesNotDismissViewIfStartsInWrongPosition() { 2200bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout with dismiss turned on, but only for an 2210bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // inner 2220bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // circle. 2230bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSwipeableRegion(); 2240bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we perform a swipe to dismiss from the left edge of the screen. 2250bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.swipe_dismiss_root)).perform(swipeRightFromLeftEdge()); 2260bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is not dismissed and not hidden 2270bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertNotHidden(R.id.swipe_dismiss_root); 2280bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 2290bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 2300bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test 2310bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @SmallTest 2320bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void testSwipeDoesDismissViewIfStartsInRightPosition() { 2330bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout with dismiss turned on, but only for an 2340bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // inner 2350bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // circle. 2360bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpSwipeableRegion(); 2370bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we perform a swipe to dismiss from the center of the screen. 2380bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.swipe_dismiss_root)).perform(swipeRightFromCenter()); 2390bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the layout is dismissed and hidden 2400bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertHidden(R.id.swipe_dismiss_root); 2410bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertDismissed(R.id.swipe_dismiss_root); 2420bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 2430bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 2440bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /** 2450bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Test public void testSwipeInPreferenceFragmentAndNavDrawer() { 2460bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // GIVEN a freshly setup SwipeDismissFrameLayout with dismiss turned on, but only for an inner 2470bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // circle. 2480bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setUpPreferenceFragmentAndNavDrawer(); 2490bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // WHEN we perform a swipe to dismiss from the center of the screen to the bottom. 2500bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(R.id.drawer_layout)).perform(swipeBottomFromCenter()); 2510bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // THEN the navigation drawer is shown. 2520bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska assertPeeking(R.id.top_drawer); 2530bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska }*/ 2540bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 2550bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /** 2560bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * Set ups the simplest possible layout for test cases - a {@link SwipeDismissFrameLayout} with 2570bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * a single static child. 2580bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska */ 2590bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void setUpSimpleLayout() { 2600bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska activityRule.launchActivity( 2610bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska new Intent() 2620bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska .putExtra( 2630bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska LayoutTestActivity.EXTRA_LAYOUT_RESOURCE_ID, 2640bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska R.layout.swipe_dismiss_layout_testcase_1)); 2650bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setDismissCallback(); 2660bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 2670bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 2680bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /** 2690bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * Sets up a slightly more involved layout for testing swipe-to-dismiss with scrollable 2700bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * containers. This layout contains a {@link SwipeDismissFrameLayout} with a 2710bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * {@link android.support.v7.widget.RecyclerView} as a child, ready to accept an adapter. 2720bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska */ 2730bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void setUpSwipeDismissWithRecyclerView() { 2740bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska activityRule.launchActivity( 2750bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska new Intent() 2760bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska .putExtra( 2770bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska LayoutTestActivity.EXTRA_LAYOUT_RESOURCE_ID, 2780bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska R.layout.swipe_dismiss_layout_testcase_2)); 2790bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setDismissCallback(); 2800bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 2810bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 2820bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /** 2830bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * Sets up a {@link SwipeDismissFrameLayout} in which only a certain region is allowed to react 2840bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * to swipe-dismiss gestures. 2850bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska */ 2860bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void setUpSwipeableRegion() { 2870bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska activityRule.launchActivity( 2880bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska new Intent() 2890bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska .putExtra( 2900bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska LayoutTestActivity.EXTRA_LAYOUT_RESOURCE_ID, 2910bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska R.layout.swipe_dismiss_layout_testcase_1)); 2920bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setCallback( 2930bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska new DismissCallback() { 2940bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 2950bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public boolean onPreSwipeStart(float x, float y) { 2960bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska float normalizedX = x - mLayoutWidth / 2; 2970bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska float normalizedY = y - mLayoutWidth / 2; 2980bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska float squareX = normalizedX * normalizedX; 2990bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska float squareY = normalizedY * normalizedY; 3000bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska // 30 is an arbitrary number limiting the circle. 3010bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return Math.sqrt(squareX + squareY) < (mLayoutWidth / 2 - 30); 3020bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3030bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska }); 3040bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3050bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3060bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /** 3070bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * Sets up a more involved test case where the layout consists of a 3080bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * {@link WearableNavigationDrawer} and a 3090bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * {@link android.support.wearable.internal.view.SwipeDismissPreferenceFragment} 3100bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska */ 3110bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /* 3120bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void setUpPreferenceFragmentAndNavDrawer() { 3130bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska activityRule.launchActivity( 3140bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska new Intent() 3150bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska .putExtra( 3160bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska LayoutTestActivity.EXTRA_LAYOUT_RESOURCE_ID, 3170bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska R.layout.swipe_dismiss_layout_testcase_3)); 3180bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 3190bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { 3200bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska WearableNavigationDrawer wearableNavigationDrawer = 3210bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (WearableNavigationDrawer) activity.findViewById(R.id.top_drawer); 3220bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska wearableNavigationDrawer.setAdapter( 3230bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska new WearableNavigationDrawer.WearableNavigationDrawerAdapter() { 3240bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 3250bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public String getItemText(int pos) { 3260bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return "test"; 3270bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3280bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3290bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 3300bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public Drawable getItemDrawable(int pos) { 3310bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return null; 3320bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3330bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3340bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 3350bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void onItemSelected(int pos) { 3360bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return; 3370bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3380bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3390bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 3400bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public int getCount() { 3410bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return 3; 3420bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3430bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska }); 3440bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska }); 3450bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska }*/ 3460bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void setDismissCallback() { 3470bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska setCallback(mDismissCallback); 3480bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3490bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3500bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void setCallback(SwipeDismissFrameLayout.Callback callback) { 3510bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Activity activity = activityRule.getActivity(); 3520bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska SwipeDismissFrameLayout testLayout = 3530bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root); 3540bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska mLayoutWidth = testLayout.getWidth(); 3550bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska testLayout.addCallback(callback); 3560bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3570bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3580bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void assertDismissed(@IdRes int layoutId) { 3590bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(layoutId)) 3600bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska .perform( 3610bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska waitForMatchingView( 3620bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska allOf(withId(layoutId), withTranslationX(mLayoutWidth)), 3630bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska MAX_WAIT_TIME)); 3640bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3650bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3660bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /** 3670bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * private void assertPeeking(@IdRes int layoutId) { 3680bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * onView(withId(layoutId)) 3690bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * .perform( 3700bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * waitForMatchingView( 3710bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * allOf(withId(layoutId), isOpened(true)), MAX_WAIT_TIME)); 3720bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska * } 3730bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska */ 3740bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3750bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void assertHidden(@IdRes int layoutId) { 3760bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(layoutId)) 3770bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska .perform( 3780bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska waitForMatchingView( 3790bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska allOf(withId(layoutId), 3800bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska withEffectiveVisibility(ViewMatchers.Visibility.GONE)), 3810bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska MAX_WAIT_TIME)); 3820bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3830bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3840bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private void assertNotHidden(@IdRes int layoutId) { 3850bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska onView(withId(layoutId)) 3860bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska .perform( 3870bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska waitForMatchingView( 3880bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska allOf(withId(layoutId), 3890bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)), 3900bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska MAX_WAIT_TIME)); 3910bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3920bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3930bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private static ViewAction swipeRightFromCenter() { 3940bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return new GeneralSwipeAction( 3950bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Swipe.SLOW, GeneralLocation.CENTER, GeneralLocation.CENTER_RIGHT, Press.FINGER); 3960bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 3970bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 3980bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private static ViewAction swipeRightFromLeftEdge() { 3990bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return new GeneralSwipeAction( 4000bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Swipe.SLOW, GeneralLocation.CENTER_LEFT, GeneralLocation.CENTER_RIGHT, 4010bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Press.FINGER); 4020bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 4030bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 4040bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private static ViewAction swipeBottomFromCenter() { 4050bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska return new GeneralSwipeAction( 4060bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Swipe.SLOW, GeneralLocation.TOP_CENTER, GeneralLocation.BOTTOM_CENTER, 4070bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska Press.FINGER); 4080bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 4090bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 4100bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 4110bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska /** Helper class hiding the view after a successful swipe-to-dismiss. */ 4120bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska private static class DismissCallback extends SwipeDismissFrameLayout.Callback { 4130bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska 4140bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska @Override 4150bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska public void onDismissed(SwipeDismissFrameLayout layout) { 4160bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska layout.setVisibility(View.GONE); 4170bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 4180bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska } 4190bb1bb33c39fa5eef545f8513753a8e3b8dfede7Aga Madurska} 420