DrawerLayoutActions.java revision 30c25a404365719cbe21a0886ddbe8be544c8e90
130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov/*
230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * Copyright (C) 2015 The Android Open Source Project
330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov *
430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License");
530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * you may not use this file except in compliance with the License.
630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * You may obtain a copy of the License at
730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov *
830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov *      http://www.apache.org/licenses/LICENSE-2.0
930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov *
1030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * Unless required by applicable law or agreed to in writing, software
1130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS,
1230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * See the License for the specific language governing permissions and
1430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * limitations under the License.
1530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov */
1630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
1730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovpackage android.support.v7.app;
1830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
1930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
2030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
2130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.test.espresso.UiController;
2230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.test.espresso.ViewAction;
2330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.v4.widget.DrawerLayout;
2430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.view.View;
2530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
2630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport org.hamcrest.Matcher;
2730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
2830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovpublic class DrawerLayoutActions {
2930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov    /**
3030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov     * Opens the drawer.
3130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov     */
3230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov    public static ViewAction openDrawer(final int drawerEdgeGravity) {
3330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov        return new ViewAction() {
3430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            @Override
3530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            public Matcher<View> getConstraints() {
3630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                return isAssignableFrom(DrawerLayout.class);
3730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            }
3830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
3930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            @Override
4030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            public String getDescription() {
4130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                return "Opens the drawer";
4230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            }
4330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
4430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            @Override
4530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            public void perform(UiController uiController, View view) {
4630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
4730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
4830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                DrawerLayout drawerLayout = (DrawerLayout) view;
4930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                drawerLayout.openDrawer(drawerEdgeGravity);
5030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
5130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                // Wait for a full second to let the inner ViewDragHelper complete the operation
5230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                uiController.loopMainThreadForAtLeast(1000);
5330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            }
5430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov        };
5530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov    }
5630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
5730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov    /**
5830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov     * Closes the drawer.
5930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov     */
6030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov    public static ViewAction closeDrawer(final int drawerEdgeGravity) {
6130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov        return new ViewAction() {
6230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            @Override
6330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            public Matcher<View> getConstraints() {
6430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                return isAssignableFrom(DrawerLayout.class);
6530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            }
6630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
6730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            @Override
6830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            public String getDescription() {
6930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                return "Closes the drawer";
7030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            }
7130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
7230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            @Override
7330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            public void perform(UiController uiController, View view) {
7430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                uiController.loopMainThreadUntilIdle();
7530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
7630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                DrawerLayout drawerLayout = (DrawerLayout) view;
7730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                drawerLayout.closeDrawer(drawerEdgeGravity);
7830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov
7930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                // Wait for a full second to let the inner ViewDragHelper complete the operation
8030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov                uiController.loopMainThreadForAtLeast(1000);
8130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov            }
8230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov        };
8330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov    }
8430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov}
85