1ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta/*
2ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * Copyright (C) 2015 The Android Open Source Project
3ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta *
4ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * Licensed under the Apache License, Version 2.0 (the "License");
5ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * you may not use this file except in compliance with the License.
6ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * You may obtain a copy of the License at
7ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta *
8ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta *      http://www.apache.org/licenses/LICENSE-2.0
9ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta *
10ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * Unless required by applicable law or agreed to in writing, software
11ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * distributed under the License is distributed on an "AS IS" BASIS,
12ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * See the License for the specific language governing permissions and
14ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta * limitations under the License.
15ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta */
16ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
17ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptapackage com.android.layoutlib.bridge.android.support;
18ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
19ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport com.android.ide.common.rendering.api.LayoutLog;
20ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport com.android.layoutlib.bridge.Bridge;
21ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport com.android.layoutlib.bridge.util.ReflectionUtils.ReflectionException;
22ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
23ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport android.annotation.Nullable;
24ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport android.view.View;
25ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
26ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport static android.view.Gravity.END;
27ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport static android.view.Gravity.LEFT;
28ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport static android.view.Gravity.RIGHT;
29ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport static android.view.Gravity.START;
30ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport static com.android.layoutlib.bridge.util.ReflectionUtils.getCause;
31ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport static com.android.layoutlib.bridge.util.ReflectionUtils.getMethod;
32ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptaimport static com.android.layoutlib.bridge.util.ReflectionUtils.invoke;
33ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
34ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Guptapublic class DrawerLayoutUtil {
35ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
36ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta    public static final String CN_DRAWER_LAYOUT = "android.support.v4.widget.DrawerLayout";
37ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
38ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta    public static void openDrawer(View drawerLayout, @Nullable String drawerGravity) {
39ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        int gravity = -1;
40ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        if ("left".equals(drawerGravity)) {
41ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta            gravity = LEFT;
42ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        } else if ("right".equals(drawerGravity)) {
43ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta            gravity = RIGHT;
44ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        } else if ("start".equals(drawerGravity)) {
45ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta            gravity = START;
46ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        } else if ("end".equals(drawerGravity)) {
47ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta            gravity = END;
48ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        }
49ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        if (gravity > 0) {
50ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta            openDrawer(drawerLayout, gravity);
51ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        }
52ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta    }
53ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta
54ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta    private static void openDrawer(View drawerLayout, int gravity) {
55ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        try {
56ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta            invoke(getMethod(drawerLayout.getClass(), "openDrawer", int.class), drawerLayout,
57ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta                    gravity);
58ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        } catch (ReflectionException e) {
59ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta            Bridge.getLog().error(LayoutLog.TAG_BROKEN, "Unable to open navigation drawer",
60ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta                    getCause(e), null);
61ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta        }
62ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta    }
63ccbc11770397888cf7780925bb4c7cf1d2f2f80eDeepanshu Gupta}
64