11e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell/*
21e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * Copyright (C) 2013 The Android Open Source Project
31e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *
41e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * Licensed under the Apache License, Version 2.0 (the "License");
51e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * you may not use this file except in compliance with the License.
61e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * You may obtain a copy of the License at
71e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *
81e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *      http://www.apache.org/licenses/LICENSE-2.0
91e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *
101e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * Unless required by applicable law or agreed to in writing, software
111e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * distributed under the License is distributed on an "AS IS" BASIS,
121e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * See the License for the specific language governing permissions and
141e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * limitations under the License.
151e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell */
161e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
171e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
181e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellpackage com.example.android.supportv4.widget;
191e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
201e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.app.ActionBar;
211e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.app.Activity;
221e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.os.Build;
231e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.os.Bundle;
241e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.view.MenuItem;
251e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.view.View;
261e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.view.ViewTreeObserver;
271e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.widget.AdapterView;
281e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.widget.ArrayAdapter;
291e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.widget.ListView;
301e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport android.widget.TextView;
319c76e9550ada0475f1c750e5672128630d2a028cAurimas Liutikas
32def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.slidingpanelayout.widget.SlidingPaneLayout;
33def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
341e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellimport com.example.android.supportv4.R;
359c76e9550ada0475f1c750e5672128630d2a028cAurimas Liutikasimport com.example.android.supportv4.Shakespeare;
361e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
371e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell/**
381e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * This example illustrates a common usage of SlidingPaneLayout in the Android support library.
391e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *
401e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * <p>A SlidingPaneLayout should be positioned at the top of your view hierarchy, placing it
411e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * below the action bar but above your content views. It is ideal as a two-pane layout
421e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * for larger screens, used in place of a horizontal LinearLayout.</p>
431e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *
441e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * <p>What separates SlidingPaneLayout from LinearLayout in this usage is that SlidingPaneLayout
451e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * allows these wide, two-pane layouts to overlap when horizontal space is at a premium. The user
461e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * can then access both panes by physically sliding the content pane into view or out of the way
471e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * or implicitly by moving focus between the two panes. This can greatly simplify development
481e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * of Android apps that support multiple form factors and screen sizes.</p>
491e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *
501e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * <p>When it comes to your navigation hierarchy, the left pane of a SlidingPaneLayout is always
511e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * considered to be one level up from the right content pane. As such, your Action Bar's
521e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * Up navigation should be enabled if the right pane is obscuring the left pane, and invoking it
531e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * should open the panes, revealing the left pane for normal interaction. From this open state
541e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * where the left pane is in primary focus, the Action Bar's Up affordance should act as if
551e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * both panes were fully visible in the activity window and navigate to the activity one level up
561e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * in the app's logical hierarchy. If the activity is the root of the application's task, the up
571e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * affordance should be disabled when the sliding pane is open and showing the left pane.
581e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * This code example illustrates this root activity case.</p>
591e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell *
601e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * <p>Note that SlidingPaneLayout differs in usage from DrawerLayout. While DrawerLayout offers
611e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * sliding utility drawers for extended navigation options and actions, the panes of a
621e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * SlidingPaneLayout are firmly part of the content itself. If it would not make sense for
631e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * both panes to be visible all the time on a sufficiently wide screen, DrawerLayout and its
641e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell * associated patterns are likely to be a better choice for your usage.</p>
651e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell */
661e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powellpublic class SlidingPaneLayoutActivity extends Activity {
671e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private SlidingPaneLayout mSlidingLayout;
681e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private ListView mList;
691e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private TextView mContent;
701e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
711e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private ActionBarHelper mActionBar;
721e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
731e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    @Override
741e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    protected void onCreate(Bundle savedInstanceState) {
751e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        super.onCreate(savedInstanceState);
761e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
771e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        setContentView(R.layout.sliding_pane_layout);
781e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
79fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mSlidingLayout = findViewById(R.id.sliding_pane_layout);
80fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mList = findViewById(R.id.left_pane);
81fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mContent = findViewById(R.id.content_text);
821e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
831e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        mSlidingLayout.setPanelSlideListener(new SliderListener());
841e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        mSlidingLayout.openPane();
851e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
861e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
871e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell                Shakespeare.TITLES));
881e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        mList.setOnItemClickListener(new ListItemClickListener());
891e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
901e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        mActionBar = createActionBarHelper();
911e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        mActionBar.init();
921e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
931e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        mSlidingLayout.getViewTreeObserver().addOnGlobalLayoutListener(new FirstLayoutListener());
941e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
951e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
961e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    @Override
971e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    public boolean onOptionsItemSelected(MenuItem item) {
981e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        /*
991e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell         * The action bar up action should open the slider if it is currently closed,
1001e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell         * as the left pane contains content one level up in the navigation hierarchy.
1011e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell         */
1021e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        if (item.getItemId() == android.R.id.home && !mSlidingLayout.isOpen()) {
1039c76e9550ada0475f1c750e5672128630d2a028cAurimas Liutikas            mSlidingLayout.openPane();
1041e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            return true;
1051e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1061e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        return super.onOptionsItemSelected(item);
1071e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
1081e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1091e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    /**
1101e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * This list item click listener implements very simple view switching by changing
1111e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * the primary content text. The slider is closed when a selection is made to fully
1121e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * reveal the content.
1131e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     */
1141e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private class ListItemClickListener implements ListView.OnItemClickListener {
1151e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
1161e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
1171e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mContent.setText(Shakespeare.DIALOGUE[position]);
1181e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setTitle(Shakespeare.TITLES[position]);
1199c76e9550ada0475f1c750e5672128630d2a028cAurimas Liutikas            mSlidingLayout.closePane();
1201e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1211e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
1221e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1231e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    /**
1241e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * This panel slide listener updates the action bar accordingly for each panel state.
1251e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     */
1261e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private class SliderListener extends SlidingPaneLayout.SimplePanelSlideListener {
1271e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
1281e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onPanelOpened(View panel) {
1291e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.onPanelOpened();
1301e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1311e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1321e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
1331e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onPanelClosed(View panel) {
1341e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.onPanelClosed();
1351e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1361e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
1371e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1381e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    /**
1391e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * This global layout listener is used to fire an event after first layout occurs
1401e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * and then it is removed. This gives us a chance to configure parts of the UI
1411e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * that adapt based on available space after they have had the opportunity to measure
1421e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * and layout.
1431e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     */
1441e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private class FirstLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
1451e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
1461e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onGlobalLayout() {
1471e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.onFirstLayout();
14863a2530d57dfe7a90de8b3ef70088e23773428fbAurimas Liutikas            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
14963a2530d57dfe7a90de8b3ef70088e23773428fbAurimas Liutikas                mSlidingLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
15063a2530d57dfe7a90de8b3ef70088e23773428fbAurimas Liutikas            } else {
15163a2530d57dfe7a90de8b3ef70088e23773428fbAurimas Liutikas                //noinspection deprecation
15263a2530d57dfe7a90de8b3ef70088e23773428fbAurimas Liutikas                mSlidingLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
15363a2530d57dfe7a90de8b3ef70088e23773428fbAurimas Liutikas            }
1541e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1551e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
1561e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1571e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    /**
1581e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * Create a compatible helper that will manipulate the action bar if available.
1591e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     */
1601e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private ActionBarHelper createActionBarHelper() {
1611e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
1621e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            return new ActionBarHelperICS();
1631e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        } else {
1641e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            return new ActionBarHelper();
1651e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1661e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
1671e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1681e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    /**
1691e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * Stub action bar helper; this does nothing.
1701e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     */
1711e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private class ActionBarHelper {
1721e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void init() {}
1731e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onPanelClosed() {}
1741e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onPanelOpened() {}
1751e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onFirstLayout() {}
1761e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void setTitle(CharSequence title) {}
1771e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
1781e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1791e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    /**
1801e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     * Action bar helper for use on ICS and newer devices.
1811e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell     */
1821e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    private class ActionBarHelperICS extends ActionBarHelper {
1831e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        private final ActionBar mActionBar;
1841e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        private CharSequence mDrawerTitle;
1851e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        private CharSequence mTitle;
1861e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1871e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        ActionBarHelperICS() {
1881e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar = getActionBar();
1891e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1901e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1911e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
1921e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void init() {
1931e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setDisplayHomeAsUpEnabled(true);
1941e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setHomeButtonEnabled(true);
1951e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mTitle = mDrawerTitle = getTitle();
1961e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
1971e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
1981e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
1991e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onPanelClosed() {
2001e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            super.onPanelClosed();
2011e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setDisplayHomeAsUpEnabled(true);
2021e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setHomeButtonEnabled(true);
2031e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setTitle(mTitle);
2041e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
2051e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
2061e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
2071e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onPanelOpened() {
2081e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            super.onPanelOpened();
2091e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setHomeButtonEnabled(false);
2101e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setDisplayHomeAsUpEnabled(false);
2111e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mActionBar.setTitle(mDrawerTitle);
2121e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
2131e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
2141e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
2151e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void onFirstLayout() {
2169c76e9550ada0475f1c750e5672128630d2a028cAurimas Liutikas            if (mSlidingLayout.isSlideable() && !mSlidingLayout.isOpen()) {
2171e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell                onPanelClosed();
2181e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            } else {
2191e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell                onPanelOpened();
2201e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            }
2211e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
2221e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
2231e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        @Override
2241e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        public void setTitle(CharSequence title) {
2251e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell            mTitle = title;
2261e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell        }
2271e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell    }
2281e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell
2291e549373c15dfaa60283e09b87221b25f0b8b0d0Adam Powell}
230