1058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar/* 2058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Copyright (C) 2014 The Android Open Source Project 3058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 4058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * you may not use this file except in compliance with the License. 6058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * You may obtain a copy of the License at 7058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 8058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 10058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * See the License for the specific language governing permissions and 14058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * limitations under the License. 15058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 16058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarpackage android.support.v7.app; 17058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 18239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyarimport android.app.ActionBar; 19b01b01dddd64c945dd8dfa896648aa36dc47dde3Chris Banesimport android.app.Activity; 20239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyarimport android.content.Context; 21058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.content.res.Configuration; 22239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyarimport android.content.res.TypedArray; 23058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.graphics.drawable.Drawable; 24058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.os.Build; 25065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikasimport android.support.annotation.NonNull; 26058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.support.annotation.Nullable; 27058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.support.annotation.StringRes; 28058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.support.v4.view.GravityCompat; 29058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.support.v4.widget.DrawerLayout; 3093011d6b0ca0622a6b098d3c3670ac7cc7bf9632Chris Banesimport android.support.v7.graphics.drawable.DrawerArrowDrawable; 31058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.support.v7.widget.Toolbar; 326aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyarimport android.util.Log; 33058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.view.MenuItem; 34058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarimport android.view.View; 35058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 36058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar/** 37058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * This class provides a handy way to tie together the functionality of 38058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link android.support.v4.widget.DrawerLayout} and the framework <code>ActionBar</code> to 39058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * implement the recommended design for navigation drawers. 40058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 41058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p>To use <code>ActionBarDrawerToggle</code>, create one in your Activity and call through 42058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * to the following methods corresponding to your Activity callbacks:</p> 43058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 44058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <ul> 45058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <li>{@link android.app.Activity#onConfigurationChanged(android.content.res.Configuration) 46058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * onConfigurationChanged} 47058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <li>{@link android.app.Activity#onOptionsItemSelected(android.view.MenuItem) 48058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * onOptionsItemSelected}</li> 49058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * </ul> 50058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 51058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p>Call {@link #syncState()} from your <code>Activity</code>'s 52058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link android.app.Activity#onPostCreate(android.os.Bundle) onPostCreate} to synchronize the 53058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * indicator with the state of the linked DrawerLayout after <code>onRestoreInstanceState</code> 54058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * has occurred.</p> 55058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 56058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p><code>ActionBarDrawerToggle</code> can be used directly as a 57058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link android.support.v4.widget.DrawerLayout.DrawerListener}, or if you are already providing 58058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * your own listener, call through to each of the listener methods from your own.</p> 594973e7230c02dbdce093ab33a209f742d3f27e7cYigit Boyar * 604973e7230c02dbdce093ab33a209f742d3f27e7cYigit Boyar * <p> 614973e7230c02dbdce093ab33a209f742d3f27e7cYigit Boyar * You can customize the the animated toggle by defining the 624973e7230c02dbdce093ab33a209f742d3f27e7cYigit Boyar * {@link android.support.v7.appcompat.R.styleable#DrawerArrowToggle drawerArrowStyle} in your 634973e7230c02dbdce093ab33a209f742d3f27e7cYigit Boyar * ActionBar theme. 64058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 65058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyarpublic class ActionBarDrawerToggle implements DrawerLayout.DrawerListener { 66058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 67058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 68058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Allows an implementing Activity to return an {@link ActionBarDrawerToggle.Delegate} to use 69058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * with ActionBarDrawerToggle. 70058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 71058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public interface DelegateProvider { 72058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 73058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 74058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @return Delegate to use for ActionBarDrawableToggles, or null if the Activity 75058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * does not wish to override the default behavior. 76058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 77058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Nullable 78058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar Delegate getDrawerToggleDelegate(); 79058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 80058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 81058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public interface Delegate { 82058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 83058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 84058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Set the Action Bar's up indicator drawable and content description. 85058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 86058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param upDrawable - Drawable to set as up indicator 87058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param contentDescRes - Content description to set 88058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 89058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar void setActionBarUpIndicator(Drawable upDrawable, @StringRes int contentDescRes); 90058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 91058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 92058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Set the Action Bar's up indicator content description. 93058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 94058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param contentDescRes - Content description to set 95058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 96058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar void setActionBarDescription(@StringRes int contentDescRes); 97239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 98239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 99239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Returns the drawable to be set as up button when DrawerToggle is disabled 100239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 101239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar Drawable getThemeUpIndicator(); 102239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 103239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 104239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Returns the context of ActionBar 105239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 106239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar Context getActionBarThemedContext(); 1076aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar 1086aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar /** 1096aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar * Returns whether navigation icon is visible or not. 1106aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar * Used to print warning messages in case developer forgets to set displayHomeAsUp to true 1116aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar */ 1126aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar boolean isNavigationVisible(); 113058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 114058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 115058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar private final Delegate mActivityImpl; 116058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar private final DrawerLayout mDrawerLayout; 117058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 118065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas private DrawerArrowDrawable mSlider; 119239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar private Drawable mHomeAsUpIndicator; 1202c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas boolean mDrawerIndicatorEnabled = true; 121239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar private boolean mHasCustomUpIndicator; 122058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar private final int mOpenDrawerContentDescRes; 123058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar private final int mCloseDrawerContentDescRes; 124239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar // used in toolbar mode when DrawerToggle is disabled 1252c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas View.OnClickListener mToolbarNavigationClickListener; 1266aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar // If developer does not set displayHomeAsUp, DrawerToggle won't show up. 1276aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar // DrawerToggle logs a warning if this case is detected 1286aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar private boolean mWarnedForDisplayHomeAsUp = false; 129058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 130058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 131058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Construct a new ActionBarDrawerToggle. 132058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 133058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p>The given {@link Activity} will be linked to the specified {@link DrawerLayout} and 134058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * its Actionbar's Up button will be set to a custom drawable. 135058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p>This drawable shows a Hamburger icon when drawer is closed and an arrow when drawer 136058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * is open. It animates between these two states as the drawer opens.</p> 137058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 138058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p>String resources must be provided to describe the open/close drawer actions for 139058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * accessibility services.</p> 140058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 141058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param activity The Activity hosting the drawer. Should have an ActionBar. 142058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param drawerLayout The DrawerLayout to link to the given Activity's ActionBar 143058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param openDrawerContentDescRes A String resource to describe the "open drawer" action 144058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * for accessibility 145058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param closeDrawerContentDescRes A String resource to describe the "close drawer" action 146058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * for accessibility 147058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 148058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, 149058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @StringRes int openDrawerContentDescRes, 150058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @StringRes int closeDrawerContentDescRes) { 151239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar this(activity, null, drawerLayout, null, openDrawerContentDescRes, 152239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar closeDrawerContentDescRes); 153058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 154058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 155058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 156058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Construct a new ActionBarDrawerToggle with a Toolbar. 157058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p> 158058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * The given {@link Activity} will be linked to the specified {@link DrawerLayout} and 159058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * the Toolbar's navigation icon will be set to a custom drawable. Using this constructor 160058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * will set Toolbar's navigation click listener to toggle the drawer when it is clicked. 161058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p> 162058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * This drawable shows a Hamburger icon when drawer is closed and an arrow when drawer 163058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * is open. It animates between these two states as the drawer opens. 164058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p> 165058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * String resources must be provided to describe the open/close drawer actions for 166058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * accessibility services. 167058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p> 168058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Please use {@link #ActionBarDrawerToggle(Activity, DrawerLayout, int, int)} if you are 169058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * setting the Toolbar as the ActionBar of your activity. 170058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 171058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param activity The Activity hosting the drawer. 172058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param toolbar The toolbar to use if you have an independent Toolbar. 173058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param drawerLayout The DrawerLayout to link to the given Activity's ActionBar 174058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param openDrawerContentDescRes A String resource to describe the "open drawer" action 175058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * for accessibility 176058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param closeDrawerContentDescRes A String resource to describe the "close drawer" action 177058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * for accessibility 178058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 179058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, 180058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar Toolbar toolbar, @StringRes int openDrawerContentDescRes, 181058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @StringRes int closeDrawerContentDescRes) { 182239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar this(activity, toolbar, drawerLayout, null, openDrawerContentDescRes, 183239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar closeDrawerContentDescRes); 184058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 185058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 186058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 187058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * In the future, we can make this constructor public if we want to let developers customize 188058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * the 189058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * animation. 190058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 191065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas ActionBarDrawerToggle(Activity activity, Toolbar toolbar, DrawerLayout drawerLayout, 192065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas DrawerArrowDrawable slider, @StringRes int openDrawerContentDescRes, 193058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @StringRes int closeDrawerContentDescRes) { 194058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar if (toolbar != null) { 195058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mActivityImpl = new ToolbarCompatDelegate(toolbar); 196058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar toolbar.setNavigationOnClickListener(new View.OnClickListener() { 197058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 198058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void onClick(View v) { 199239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (mDrawerIndicatorEnabled) { 200239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar toggle(); 201239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } else if (mToolbarNavigationClickListener != null) { 202239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mToolbarNavigationClickListener.onClick(v); 203239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 204058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 205058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar }); 206058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } else if (activity instanceof DelegateProvider) { // Allow the Activity to provide an impl 207058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mActivityImpl = ((DelegateProvider) activity).getDrawerToggleDelegate(); 208239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { 209239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mActivityImpl = new JellybeanMr2Delegate(activity); 210058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 211058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mActivityImpl = new HoneycombDelegate(activity); 212058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } else { 213239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mActivityImpl = new DummyDelegate(activity); 214058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 215058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 216058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mDrawerLayout = drawerLayout; 217058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mOpenDrawerContentDescRes = openDrawerContentDescRes; 218058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mCloseDrawerContentDescRes = closeDrawerContentDescRes; 219239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (slider == null) { 220065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas mSlider = new DrawerArrowDrawable(mActivityImpl.getActionBarThemedContext()); 221239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } else { 222239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mSlider = slider; 223239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 224239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 225239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mHomeAsUpIndicator = getThemeUpIndicator(); 226058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 227058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 228058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 229058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * Synchronize the state of the drawer indicator/affordance with the linked DrawerLayout. 230058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 231058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * <p>This should be called from your <code>Activity</code>'s 232058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link Activity#onPostCreate(android.os.Bundle) onPostCreate} method to synchronize after 233058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * the DrawerLayout's instance state has been restored, and any other time when the state 234058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * may have diverged in such a way that the ActionBarDrawerToggle was not notified. 235058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * (For example, if you stop forwarding appropriate drawer events for a period of time.)</p> 236058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 237058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void syncState() { 238058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { 239065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas setPosition(1); 240058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } else { 241065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas setPosition(0); 242058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 243239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (mDrawerIndicatorEnabled) { 244239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar setActionBarUpIndicator((Drawable) mSlider, 245239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mDrawerLayout.isDrawerOpen(GravityCompat.START) ? 246239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mCloseDrawerContentDescRes : mOpenDrawerContentDescRes); 247239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 248058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 249058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 250058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 251058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * This method should always be called by your <code>Activity</code>'s 252058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link Activity#onConfigurationChanged(android.content.res.Configuration) 253058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * onConfigurationChanged} 254058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * method. 255058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 256058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param newConfig The new configuration 257058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 258058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void onConfigurationChanged(Configuration newConfig) { 259239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar // Reload drawables that can change with configuration 260239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (!mHasCustomUpIndicator) { 261239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mHomeAsUpIndicator = getThemeUpIndicator(); 262239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 263058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar syncState(); 264058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 265058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 266058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 267058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * This method should be called by your <code>Activity</code>'s 268058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link Activity#onOptionsItemSelected(android.view.MenuItem) onOptionsItemSelected} method. 269058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * If it returns true, your <code>onOptionsItemSelected</code> method should return true and 270058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * skip further processing. 271058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 272058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param item the MenuItem instance representing the selected menu item 273058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @return true if the event was handled and further processing should not occur 274058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 275058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public boolean onOptionsItemSelected(MenuItem item) { 276239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (item != null && item.getItemId() == android.R.id.home && mDrawerIndicatorEnabled) { 277058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar toggle(); 278058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar return true; 279058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 280058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar return false; 281058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 282058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 2832c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas void toggle() { 2847b69fc37eed8a2c6a1680fa2b7d2735752e34d1dKirill Grouchnikov int drawerLockMode = mDrawerLayout.getDrawerLockMode(GravityCompat.START); 2857b69fc37eed8a2c6a1680fa2b7d2735752e34d1dKirill Grouchnikov if (mDrawerLayout.isDrawerVisible(GravityCompat.START) 2867b69fc37eed8a2c6a1680fa2b7d2735752e34d1dKirill Grouchnikov && (drawerLockMode != DrawerLayout.LOCK_MODE_LOCKED_OPEN)) { 287058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mDrawerLayout.closeDrawer(GravityCompat.START); 2887b69fc37eed8a2c6a1680fa2b7d2735752e34d1dKirill Grouchnikov } else if (drawerLockMode != DrawerLayout.LOCK_MODE_LOCKED_CLOSED) { 289058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mDrawerLayout.openDrawer(GravityCompat.START); 290058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 291058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 292058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 293058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 294239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Set the up indicator to display when the drawer indicator is not 295239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * enabled. 296239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * <p> 297239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * If you pass <code>null</code> to this method, the default drawable from 298239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * the theme will be used. 299239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * 300239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @param indicator A drawable to use for the up indicator, or null to use 301239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * the theme's default 302239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @see #setDrawerIndicatorEnabled(boolean) 303239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 304239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setHomeAsUpIndicator(Drawable indicator) { 305239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (indicator == null) { 306239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mHomeAsUpIndicator = getThemeUpIndicator(); 307239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mHasCustomUpIndicator = false; 308239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } else { 309239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mHomeAsUpIndicator = indicator; 310239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mHasCustomUpIndicator = true; 311239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 312239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 313239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (!mDrawerIndicatorEnabled) { 314239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar setActionBarUpIndicator(mHomeAsUpIndicator, 0); 315239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 316239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 317239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 318239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 319239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Set the up indicator to display when the drawer indicator is not 320239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * enabled. 321239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * <p> 322239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * If you pass 0 to this method, the default drawable from the theme will 323239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * be used. 324239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * 325239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @param resId Resource ID of a drawable to use for the up indicator, or 0 326239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * to use the theme's default 327239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @see #setDrawerIndicatorEnabled(boolean) 328239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 329239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setHomeAsUpIndicator(int resId) { 330239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar Drawable indicator = null; 331239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (resId != 0) { 332239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar indicator = mDrawerLayout.getResources().getDrawable(resId); 333239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 334239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar setHomeAsUpIndicator(indicator); 335239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 336239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 337239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 338239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @return true if the enhanced drawer indicator is enabled, false otherwise 339239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @see #setDrawerIndicatorEnabled(boolean) 340239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 341239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public boolean isDrawerIndicatorEnabled() { 342239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return mDrawerIndicatorEnabled; 343239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 344239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 345239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 346239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Enable or disable the drawer indicator. The indicator defaults to enabled. 347239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * 348239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * <p>When the indicator is disabled, the <code>ActionBar</code> will revert to displaying 349239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * the home-as-up indicator provided by the <code>Activity</code>'s theme in the 350239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * <code>android.R.attr.homeAsUpIndicator</code> attribute instead of the animated 351239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * drawer glyph.</p> 352239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * 353239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @param enable true to enable, false to disable 354239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 355239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setDrawerIndicatorEnabled(boolean enable) { 356239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (enable != mDrawerIndicatorEnabled) { 357239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (enable) { 358239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar setActionBarUpIndicator((Drawable) mSlider, 359239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mDrawerLayout.isDrawerOpen(GravityCompat.START) ? 360239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mCloseDrawerContentDescRes : mOpenDrawerContentDescRes); 361239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } else { 362239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar setActionBarUpIndicator(mHomeAsUpIndicator, 0); 363239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 364239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mDrawerIndicatorEnabled = enable; 365239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 366239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 367239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 368065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas /** 369065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas * @return DrawerArrowDrawable that is currently shown by the ActionBarDrawerToggle. 370065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas */ 371065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas @NonNull 372065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas public DrawerArrowDrawable getDrawerArrowDrawable() { 373065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas return mSlider; 374065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas } 375065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas 376065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas /** 377065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas * Sets the DrawerArrowDrawable that should be shown by this ActionBarDrawerToggle. 378065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas * 379065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas * @param drawable DrawerArrowDrawable that should be shown by this ActionBarDrawerToggle. 380065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas */ 381065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas public void setDrawerArrowDrawable(@NonNull DrawerArrowDrawable drawable) { 382065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas mSlider = drawable; 383065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas syncState(); 384065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas } 385239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 386239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 387058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link DrawerLayout.DrawerListener} callback method. If you do not use your 388058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * ActionBarDrawerToggle instance directly as your DrawerLayout's listener, you should call 389058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * through to this method from your own listener object. 390058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 391058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param drawerView The child view that was moved 392058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param slideOffset The new offset of this drawer within its range, from 0-1 393058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 394058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 395058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void onDrawerSlide(View drawerView, float slideOffset) { 396065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas setPosition(Math.min(1f, Math.max(0, slideOffset))); 397058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 398058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 399058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 400058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link DrawerLayout.DrawerListener} callback method. If you do not use your 401058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * ActionBarDrawerToggle instance directly as your DrawerLayout's listener, you should call 402058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * through to this method from your own listener object. 403058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 404058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param drawerView Drawer view that is now open 405058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 406058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 407058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void onDrawerOpened(View drawerView) { 408065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas setPosition(1); 409239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (mDrawerIndicatorEnabled) { 410239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar setActionBarDescription(mCloseDrawerContentDescRes); 411239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 412058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 413058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 414058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 415058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link DrawerLayout.DrawerListener} callback method. If you do not use your 416058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * ActionBarDrawerToggle instance directly as your DrawerLayout's listener, you should call 417058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * through to this method from your own listener object. 418058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 419058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param drawerView Drawer view that is now closed 420058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 421058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 422058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void onDrawerClosed(View drawerView) { 423065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas setPosition(0); 424239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (mDrawerIndicatorEnabled) { 425239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar setActionBarDescription(mOpenDrawerContentDescRes); 426239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 427058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 428058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 429058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 430058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * {@link DrawerLayout.DrawerListener} callback method. If you do not use your 431058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * ActionBarDrawerToggle instance directly as your DrawerLayout's listener, you should call 432058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * through to this method from your own listener object. 433058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * 434058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar * @param newState The new drawer motion state 435058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 436058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 437058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void onDrawerStateChanged(int newState) { 438058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 439058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 440239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 441239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Returns the fallback listener for Navigation icon click events. 442239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * 443239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @return The click listener which receives Navigation click events from Toolbar when 444239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * drawer indicator is disabled. 445239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @see #setToolbarNavigationClickListener(android.view.View.OnClickListener) 446239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @see #setDrawerIndicatorEnabled(boolean) 447239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @see #isDrawerIndicatorEnabled() 448239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 449239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public View.OnClickListener getToolbarNavigationClickListener() { 450239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return mToolbarNavigationClickListener; 451239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 452239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 453239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 454239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * When DrawerToggle is constructed with a Toolbar, it sets the click listener on 455239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * the Navigation icon. If you want to listen for clicks on the Navigation icon when 456239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * DrawerToggle is disabled ({@link #setDrawerIndicatorEnabled(boolean)}, you should call this 457239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * method with your listener and DrawerToggle will forward click events to that listener 458239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * when drawer indicator is disabled. 459239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * 460239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * @see #setDrawerIndicatorEnabled(boolean) 461239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 462239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setToolbarNavigationClickListener( 463239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar View.OnClickListener onToolbarNavigationClickListener) { 464239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mToolbarNavigationClickListener = onToolbarNavigationClickListener; 465239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 466239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 467058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar void setActionBarUpIndicator(Drawable upDrawable, int contentDescRes) { 4686aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar if (!mWarnedForDisplayHomeAsUp && !mActivityImpl.isNavigationVisible()) { 4696aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar Log.w("ActionBarDrawerToggle", "DrawerToggle may not show up because NavigationIcon" 4706aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar + " is not visible. You may need to call " 4716aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar + "actionbar.setDisplayHomeAsUpEnabled(true);"); 4726aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar mWarnedForDisplayHomeAsUp = true; 4736aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar } 474058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mActivityImpl.setActionBarUpIndicator(upDrawable, contentDescRes); 475058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 476058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 477058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar void setActionBarDescription(int contentDescRes) { 478058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mActivityImpl.setActionBarDescription(contentDescRes); 479058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 480058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 481239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar Drawable getThemeUpIndicator() { 482239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return mActivityImpl.getThemeUpIndicator(); 483239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 484058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 485065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas private void setPosition(float position) { 486065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas if (position == 1f) { 487065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas mSlider.setVerticalMirror(true); 488065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas } else if (position == 0f) { 489065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas mSlider.setVerticalMirror(false); 490058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 491065099c327b2262317028f4d6c5004b7bf41d2f5Aurimas Liutikas mSlider.setProgress(position); 492058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 493058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 494058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 495239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Delegate if SDK version is between honeycomb and JBMR2 496058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 497239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar private static class HoneycombDelegate implements Delegate { 498058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 499239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final Activity mActivity; 500239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar ActionBarDrawerToggleHoneycomb.SetIndicatorInfo mSetIndicatorInfo; 501058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 5022c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas HoneycombDelegate(Activity activity) { 503058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mActivity = activity; 504058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 505058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 506058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 507239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Drawable getThemeUpIndicator() { 508239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return ActionBarDrawerToggleHoneycomb.getThemeUpIndicator(mActivity); 509058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 510058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 511058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 512239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Context getActionBarThemedContext() { 513239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final ActionBar actionBar = mActivity.getActionBar(); 514239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final Context context; 515239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (actionBar != null) { 516239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar context = actionBar.getThemedContext(); 517239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } else { 518239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar context = mActivity; 519239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 520239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return context; 521239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 522239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 523239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 5246aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar public boolean isNavigationVisible() { 5256aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar final ActionBar actionBar = mActivity.getActionBar(); 5266aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar return actionBar != null 5276aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar && (actionBar.getDisplayOptions() & ActionBar.DISPLAY_HOME_AS_UP) != 0; 5286aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar } 5296aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar 5306aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar @Override 531239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setActionBarUpIndicator(Drawable themeImage, int contentDescRes) { 5329d61fd41d558d1a7eb70a83ef23f3336fa9fa9ebGrigory Novikov final ActionBar actionBar = mActivity.getActionBar(); 5339d61fd41d558d1a7eb70a83ef23f3336fa9fa9ebGrigory Novikov if (actionBar != null) { 5349d61fd41d558d1a7eb70a83ef23f3336fa9fa9ebGrigory Novikov actionBar.setDisplayShowHomeEnabled(true); 5359d61fd41d558d1a7eb70a83ef23f3336fa9fa9ebGrigory Novikov mSetIndicatorInfo = ActionBarDrawerToggleHoneycomb.setActionBarUpIndicator( 5369d61fd41d558d1a7eb70a83ef23f3336fa9fa9ebGrigory Novikov mSetIndicatorInfo, mActivity, themeImage, contentDescRes); 5379d61fd41d558d1a7eb70a83ef23f3336fa9fa9ebGrigory Novikov actionBar.setDisplayShowHomeEnabled(false); 5389d61fd41d558d1a7eb70a83ef23f3336fa9fa9ebGrigory Novikov } 539239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 540239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 541239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 542239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setActionBarDescription(int contentDescRes) { 543239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mSetIndicatorInfo = ActionBarDrawerToggleHoneycomb.setActionBarDescription( 544239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mSetIndicatorInfo, mActivity, contentDescRes); 545058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 546058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 547058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 548058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 549239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Delegate if SDK version is JB MR2 or newer 550058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 551239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar private static class JellybeanMr2Delegate implements Delegate { 552058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 553058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar final Activity mActivity; 554058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 5552c1bad7ecd5879bf0f29ce2ce1bc5bd67a3f4682Aurimas Liutikas JellybeanMr2Delegate(Activity activity) { 556058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mActivity = activity; 557058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 558058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 559058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 560239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Drawable getThemeUpIndicator() { 561239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final TypedArray a = getActionBarThemedContext().obtainStyledAttributes(null, 562239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar new int[]{android.R.attr.homeAsUpIndicator}, android.R.attr.actionBarStyle, 0); 563239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final Drawable result = a.getDrawable(0); 564239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar a.recycle(); 565239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return result; 566239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 567239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 568239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 569239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Context getActionBarThemedContext() { 570239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final ActionBar actionBar = mActivity.getActionBar(); 571239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final Context context; 572058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar if (actionBar != null) { 573239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar context = actionBar.getThemedContext(); 574239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } else { 575239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar context = mActivity; 576239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 577239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return context; 578239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 579239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 580239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 5816aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar public boolean isNavigationVisible() { 5826aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar final ActionBar actionBar = mActivity.getActionBar(); 5836aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar return actionBar != null && 5846aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar (actionBar.getDisplayOptions() & ActionBar.DISPLAY_HOME_AS_UP) != 0; 5856aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar } 5866aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar 5876aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar @Override 588239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setActionBarUpIndicator(Drawable drawable, int contentDescRes) { 589239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final ActionBar actionBar = mActivity.getActionBar(); 590239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar if (actionBar != null) { 591239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar actionBar.setHomeAsUpIndicator(drawable); 592058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar actionBar.setHomeActionContentDescription(contentDescRes); 593058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 594058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 595058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 596058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 597239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public void setActionBarDescription(int contentDescRes) { 598239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final ActionBar actionBar = mActivity.getActionBar(); 599058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar if (actionBar != null) { 600058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar actionBar.setHomeActionContentDescription(contentDescRes); 601058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 602058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 603058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 604058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 605239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar /** 606239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Used when DrawerToggle is initialized with a Toolbar 607239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar */ 608058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar static class ToolbarCompatDelegate implements Delegate { 609239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 610058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar final Toolbar mToolbar; 611b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar final Drawable mDefaultUpIndicator; 612b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar final CharSequence mDefaultContentDescription; 613058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 614058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar ToolbarCompatDelegate(Toolbar toolbar) { 615058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mToolbar = toolbar; 616b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar mDefaultUpIndicator = toolbar.getNavigationIcon(); 617b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar mDefaultContentDescription = toolbar.getNavigationContentDescription(); 618058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 619058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 620058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 621058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void setActionBarUpIndicator(Drawable upDrawable, @StringRes int contentDescRes) { 622058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar mToolbar.setNavigationIcon(upDrawable); 623b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar setActionBarDescription(contentDescRes); 624058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 625058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 626058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 627058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void setActionBarDescription(@StringRes int contentDescRes) { 628b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar if (contentDescRes == 0) { 629b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar mToolbar.setNavigationContentDescription(mDefaultContentDescription); 630b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar } else { 631b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar mToolbar.setNavigationContentDescription(contentDescRes); 632b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar } 633058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 634239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 635239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 636239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Drawable getThemeUpIndicator() { 637b05853eced17425de1b914d0d5e1c44c12c17454Yigit Boyar return mDefaultUpIndicator; 638239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 639239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 640239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 641239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Context getActionBarThemedContext() { 642239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return mToolbar.getContext(); 643239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 6446aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar 6456aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar @Override 6466aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar public boolean isNavigationVisible() { 6476aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar return true; 6486aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar } 649058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 650058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 651058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar /** 652239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar * Fallback delegate 653058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar */ 654058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar static class DummyDelegate implements Delegate { 655239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar final Activity mActivity; 656239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 657239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar DummyDelegate(Activity activity) { 658239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar mActivity = activity; 659239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 660058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 661058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 662058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void setActionBarUpIndicator(Drawable upDrawable, @StringRes int contentDescRes) { 663058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 664058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 665058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 666058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar @Override 667058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar public void setActionBarDescription(@StringRes int contentDescRes) { 668058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar 669058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 670239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 671239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 672239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Drawable getThemeUpIndicator() { 673239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return null; 674239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 675239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar 676239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar @Override 677239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar public Context getActionBarThemedContext() { 678239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar return mActivity; 679239e759c480945ee5c164c7c75cb30ff164caa91Yigit Boyar } 6806aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar 6816aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar @Override 6826aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar public boolean isNavigationVisible() { 6836aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar return true; 6846aadbd39814a5ae41e1fadfab06657cdf901e625Yigit Boyar } 685058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar } 686058467cbd6dd0acdfaec61e65ab9e352868ec5c9Yigit Boyar} 687