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