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