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 android.content.res.Configuration; 203eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banesimport android.content.res.Resources; 213eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banesimport android.content.res.TypedArray; 2230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.os.Bundle; 2330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.v4.view.GravityCompat; 2430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.v4.widget.DrawerLayout; 2530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.v7.appcompat.test.R; 26a37e9311de7ff4407104965ff66146f87e55ba5cKirill Grouchnikovimport android.support.v7.testutils.BaseTestActivity; 2730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.v7.testutils.Shakespeare; 2830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.support.v7.widget.Toolbar; 2930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.view.MenuItem; 3030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.view.View; 313eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banesimport android.view.ViewTreeObserver; 3230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.widget.AdapterView; 3330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.widget.ArrayAdapter; 3430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.widget.ListView; 3530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovimport android.widget.TextView; 3630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 3730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov/** 3830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * Test activity for testing various APIs and interactions for DrawerLayout. It follows 3930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * a common usage of the DrawerLayout widget combined with Toolbar in the Android support library 4030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * that respect the 4130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * <a href="https://www.google.com/design/spec/patterns/navigation-drawer.html">Material design 4230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * guidelines</a> for the drawer component. 4330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov */ 4430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikovpublic class DrawerLayoutActivity extends BaseTestActivity { 4530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov private DrawerLayout mDrawerLayout; 4630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov private ListView mDrawer; 4730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov private TextView mContent; 4830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 4930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov private ActionBarDrawerToggle mDrawerToggle; 5030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov private Toolbar mToolbar; 5130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 5230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 5330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov protected int getContentViewLayoutResId() { 5430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov return R.layout.drawer_layout; 5530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 5630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 5730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 5830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov protected void onContentViewSet() { 5930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov super.onContentViewSet(); 6030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 61fa2e2acf79d791a90410025daad438968550d18cAlan Viverette mDrawerLayout = findViewById(R.id.drawer_layout); 62fa2e2acf79d791a90410025daad438968550d18cAlan Viverette mDrawer = findViewById(R.id.start_drawer); 63fa2e2acf79d791a90410025daad438968550d18cAlan Viverette mContent = findViewById(R.id.content_text); 6430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 6530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 6630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 6730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // The drawer title must be set in order to announce state changes when 6830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // accessibility is turned on. This is typically a simple description, 6930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // e.g. "Navigation". 7030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerLayout.setDrawerTitle(GravityCompat.START, getString(R.string.drawer_title)); 7130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 7230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawer.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 7330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov Shakespeare.TITLES)); 7430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawer.setOnItemClickListener(new DrawerItemClickListener()); 7530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 7630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // Find the toolbar in our layout and set it as the support action bar on the activity. 7730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // This is required to have the drawer slide "over" the toolbar. 78fa2e2acf79d791a90410025daad438968550d18cAlan Viverette mToolbar = findViewById(R.id.toolbar); 7930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mToolbar.setTitle(R.string.drawer_title); 8030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov setSupportActionBar(mToolbar); 8130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 8230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov getSupportActionBar().setDisplayHomeAsUpEnabled(true); 8330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov getSupportActionBar().setDisplayShowHomeEnabled(false); 8430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 8530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // ActionBarDrawerToggle provides convenient helpers for tying together the 8630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // prescribed interactions between a top-level sliding drawer and the action bar. 8730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // Note that, as the Javadocs of ActionBarDrawerToggle constructors say, we are 8830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // *not* using a constructor that gets a Toolbar since we're setting our toolbar 8930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // dynamically at runtime. Furthermore, as the drawer is sliding over the toolbar, 9030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // we are suppressing the morphing animation from hamburger to back arrow by 9130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // calling super.onDrawerSlide with slideOffset=0.0f. In case your app only has 9230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // top-level pages and doesn't need back arrow visuals at all, you can set up 9330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // your activity theme to have attribute named "drawerArrowStyle" that points 9430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // to an extension of Widget.AppCompat.DrawerArrowToggle that has its "spinBars" 9530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // attribute set to false. 9630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 9730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov R.string.drawer_open, R.string.drawer_close) { 9830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 9930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov public void onDrawerOpened(View drawerView) { 10030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov super.onDrawerOpened(drawerView); 10130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov super.onDrawerSlide(drawerView, 0.0f); 10230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 10330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 10430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 10530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov public void onDrawerSlide(View drawerView, float slideOffset) { 10630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov super.onDrawerSlide(drawerView, 0.0f); 10730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 10830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov }; 10930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 1103eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes mDrawerLayout.addDrawerListener(mDrawerToggle); 11130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 11230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // Configure the background color fill of the system status bar (on supported platform 11330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // versions) and the toolbar itself. We're using the same color, and android:statusBar 11430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // from the theme makes the status bar slightly darker. 11530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov final int metalBlueColor = getResources().getColor(R.color.drawer_sample_metal_blue); 11630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerLayout.setStatusBarBackgroundColor(metalBlueColor); 11730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mToolbar.setBackgroundColor(metalBlueColor); 1183eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes 1193eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // Register a pre-draw listener to get the initial width of the DrawerLayout so 1203eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // that we can determine the width of the drawer based on the Material spec at 1213eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // https://www.google.com/design/spec/patterns/navigation-drawer.html#navigation-drawer-specs 1223eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes mDrawerLayout.getViewTreeObserver().addOnPreDrawListener( 1233eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes new ViewTreeObserver.OnPreDrawListener() { 1243eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes @Override 1253eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes public boolean onPreDraw() { 1263eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // What is the width of the entire DrawerLayout? 1273eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final int drawerLayoutWidth = mDrawerLayout.getWidth(); 1283eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes 1293eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // What is the action bar size? 1303eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final Resources.Theme theme = mDrawerLayout.getContext().getTheme(); 1313eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final TypedArray a = theme.obtainStyledAttributes( 1323eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes new int[] { android.support.v7.appcompat.R.attr.actionBarSize }); 1333eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final int actionBarSize = a.getDimensionPixelSize(0, 0); 1343eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes if (a != null) { 1353eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes a.recycle(); 1363eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes } 1373eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes 1383eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // Compute the width of the drawer and set it on the layout params. 1393eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final int idealDrawerWidth = 5 * actionBarSize; 1403eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final int maxDrawerWidth = Math.max(0, drawerLayoutWidth - actionBarSize); 1413eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final int drawerWidth = Math.min(idealDrawerWidth, maxDrawerWidth); 1423eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes 1433eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes final DrawerLayout.LayoutParams drawerLp = 1443eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes (DrawerLayout.LayoutParams) mDrawer.getLayoutParams(); 1453eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes drawerLp.width = drawerWidth; 1463eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes mDrawer.setLayoutParams(drawerLp); 1473eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes 1483eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // Remove ourselves as the pre-draw listener since this is a one-time 1493eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes // configuration. 1503eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes mDrawerLayout.getViewTreeObserver().removeOnPreDrawListener(this); 1513eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes return true; 1523eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes } 1533eb01e183e6eef7610881c8b9c0914afbe23b442Chris Banes }); 15430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 15530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 15630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 15730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov protected void onPostCreate(Bundle savedInstanceState) { 15830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov super.onPostCreate(savedInstanceState); 15930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 16030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // Sync the toggle state after onRestoreInstanceState has occurred. 16130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerToggle.syncState(); 16230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 16330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 16430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 16530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov public boolean onOptionsItemSelected(MenuItem item) { 16630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov /* 16730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * The action bar home/up action should open or close the drawer. 16830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * The drawer toggle will take care of this. 16930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov */ 17030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov if (mDrawerToggle.onOptionsItemSelected(item)) { 17130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov return true; 17230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 17330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov return super.onOptionsItemSelected(item); 17430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 17530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 17630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 17730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov public void onBackPressed() { 17830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // Is the drawer open? 17930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov if (mDrawerLayout.isDrawerOpen(mDrawer)) { 18030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov // Close the drawer and return. 18130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerLayout.closeDrawer(mDrawer); 18230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov return; 18330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 18430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 18530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov super.onBackPressed(); 18630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 18730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 18830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 18930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov public void onConfigurationChanged(Configuration newConfig) { 19030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov super.onConfigurationChanged(newConfig); 19130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerToggle.onConfigurationChanged(newConfig); 19230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 19330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov 19430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov /** 19530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * This list item click listener implements very simple view switching by changing 19630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov * the primary content text. The drawer is closed when a selection is made. 19730c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov */ 19830c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov private class DrawerItemClickListener implements ListView.OnItemClickListener { 19930c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov @Override 20030c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 20130c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mContent.setText(Shakespeare.DIALOGUE[position]); 20230c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mToolbar.setTitle(Shakespeare.TITLES[position]); 20330c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov mDrawerLayout.closeDrawer(mDrawer); 20430c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 20530c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov } 20630c25a404365719cbe21a0886ddbe8be544c8e90Kirill Grouchnikov} 207