19d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen/*
29d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * Copyright (C) 2016 The Android Open Source Project
39d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen *
49d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * Licensed under the Apache License, Version 2.0 (the "License");
59d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * you may not use this file except in compliance with the License.
69d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * You may obtain a copy of the License at
79d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen *
89d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen *   http://www.apache.org/licenses/LICENSE-2.0
99d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen *
109d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * Unless required by applicable law or agreed to in writing, software
119d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * distributed under the License is distributed on an "AS IS" BASIS,
129d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * See the License for the specific language governing permissions and
149d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen * limitations under the License.
159d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen */
169d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
179d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenpackage com.android.calculator2;
189d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
199d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.content.Context;
209d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.transition.Fade;
219d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.transition.Transition;
229d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.transition.TransitionManager;
239d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.util.AttributeSet;
249d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.view.GestureDetector;
259d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.view.MotionEvent;
269d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.view.View;
279d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.view.accessibility.AccessibilityManager;
2826e159ebb4b40c92a25f697857e444ac9b604fbfAnnie Chinimport android.widget.LinearLayout;
299d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassenimport android.widget.Toolbar;
309d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
3126e159ebb4b40c92a25f697857e444ac9b604fbfAnnie Chinpublic class CalculatorDisplay extends LinearLayout
329d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        implements AccessibilityManager.AccessibilityStateChangeListener {
339d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
349d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    /**
359d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     * The duration in milliseconds after which to hide the toolbar.
369d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     */
379d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private static final long AUTO_HIDE_DELAY_MILLIS = 3000L;
389d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
399d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    /**
409d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     * The duration in milliseconds to fade in/out the toolbar.
419d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     */
429d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private static final long FADE_DURATION = 200L;
439d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
449d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private final Runnable mHideToolbarRunnable = new Runnable() {
459d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        @Override
469d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        public void run() {
479d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            // Remove any duplicate callbacks to hide the toolbar.
489d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            removeCallbacks(this);
499d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
509d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            // Only animate if we have been laid out at least once.
519d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            if (isLaidOut()) {
529d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                TransitionManager.beginDelayedTransition(CalculatorDisplay.this, mTransition);
539d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            }
549d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            mToolbar.setVisibility(View.INVISIBLE);
559d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        }
569d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    };
579d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
589d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private final AccessibilityManager mAccessibilityManager;
599d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private final GestureDetector mTapDetector;
609d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
619d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private Toolbar mToolbar;
629d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private Transition mTransition;
639d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
649d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    private boolean mForceToolbarVisible;
659d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
669d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public CalculatorDisplay(Context context) {
679d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        this(context, null /* attrs */);
689d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
699d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
709d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public CalculatorDisplay(Context context, AttributeSet attrs) {
719d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        this(context, attrs, 0 /* defStyleAttr */);
729d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
739d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
749d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public CalculatorDisplay(Context context, AttributeSet attrs, int defStyleAttr) {
759d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        super(context, attrs, defStyleAttr);
769d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
779d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mAccessibilityManager =
789d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
799d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
809d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mTapDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
819d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            @Override
829d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            public boolean onDown(MotionEvent e) {
839d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                // Remove callbacks to hide the toolbar.
849d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                removeCallbacks(mHideToolbarRunnable);
859d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
869d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                return true;
879d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            }
889d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
899d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            @Override
909d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            public boolean onSingleTapConfirmed(MotionEvent e) {
919d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                if (mToolbar.getVisibility() != View.VISIBLE) {
9252d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm                    showToolbar(true);
939d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                } else {
949d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                    hideToolbar();
959d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                }
969d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
979d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                return true;
989d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            }
999d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        });
100b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen
101b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen        // Draw the children in reverse order so that the toolbar is on top.
102b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen        setChildrenDrawingOrderEnabled(true);
1039d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1049d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1059d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    @Override
1069d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    protected void onFinishInflate() {
1079d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        super.onFinishInflate();
1089d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1099d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mToolbar = (Toolbar) findViewById(R.id.toolbar);
1109d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mTransition = new Fade()
1119d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                .setDuration(FADE_DURATION)
1129d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen                .addTarget(mToolbar);
1139d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1149d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1159d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    @Override
116b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen    protected int getChildDrawingOrder(int childCount, int i) {
117b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen        // Reverse the normal drawing order.
118b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen        return (childCount - 1) - i;
119b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen    }
120b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen
121b2f8b11ce0cf7c98856139eb02c5a7312900f42fJustin Klaassen    @Override
1229d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    protected void onAttachedToWindow() {
1239d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        super.onAttachedToWindow();
1249d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mAccessibilityManager.addAccessibilityStateChangeListener(this);
1259d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1269d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1279d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    @Override
1289d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    protected void onDetachedFromWindow() {
1299d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        super.onDetachedFromWindow();
1309d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mAccessibilityManager.removeAccessibilityStateChangeListener(this);
1319d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1329d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1339d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    @Override
1349d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public void onAccessibilityStateChanged(boolean enabled) {
1359d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        // Always show the toolbar whenever accessibility is enabled.
13652d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm        showToolbar(true);
1379d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1389d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1399d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    @Override
1409d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public boolean onInterceptTouchEvent(MotionEvent event) {
1419d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mTapDetector.onTouchEvent(event);
1429d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        return super.onInterceptTouchEvent(event);
1439d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1449d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1459d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    @Override
1469d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public boolean onTouchEvent(MotionEvent event) {
1479d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        return mTapDetector.onTouchEvent(event) || super.onTouchEvent(event);
1489d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1499d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1509d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    /**
1519d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     * Returns {@code true} if the toolbar should remain visible.
1529d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     */
1539d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public boolean getForceToolbarVisible() {
1549d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        return mForceToolbarVisible || mAccessibilityManager.isEnabled();
1559d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1569d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1579d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    /**
1589d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     * Forces the toolbar to remain visible.
1599d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     *
1609d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     * @param forceToolbarVisible {@code true} to keep the toolbar visible
1619d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     */
1629d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public void setForceToolbarVisible(boolean forceToolbarVisible) {
16352d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm        if (mForceToolbarVisible != forceToolbarVisible) {
16452d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm            mForceToolbarVisible = forceToolbarVisible;
16552d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm            showToolbar(!forceToolbarVisible);
16652d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm        }
1679d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1689d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1699d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    /**
1709d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     * Shows the toolbar.
17152d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm     * @param autoHide Automatically ide toolbar again after delay
1729d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     */
17352d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm    public void showToolbar(boolean autoHide) {
1749d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        // Only animate if we have been laid out at least once.
1759d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        if (isLaidOut()) {
1769d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            TransitionManager.beginDelayedTransition(this, mTransition);
1779d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        }
1789d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        mToolbar.setVisibility(View.VISIBLE);
1799d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1809d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        // Remove callbacks to hide the toolbar.
1819d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        removeCallbacks(mHideToolbarRunnable);
1829d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1839d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        // Auto hide the toolbar after 3 seconds.
18452d477a1812e37c35277b90c045dcbf25d1331e1Hans Boehm        if (autoHide && !getForceToolbarVisible()) {
1859d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen            postDelayed(mHideToolbarRunnable, AUTO_HIDE_DELAY_MILLIS);
1869d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        }
1879d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
1889d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen
1899d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    /**
1909d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     * Hides the toolbar.
1919d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen     */
1929d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    public void hideToolbar() {
1939d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        if (!getForceToolbarVisible()) {
194eeff27fa7aa424acf5087fc4ffb4b01fae2ae38fChristine Franks            removeCallbacks(mHideToolbarRunnable);
195eeff27fa7aa424acf5087fc4ffb4b01fae2ae38fChristine Franks            mHideToolbarRunnable.run();
1969d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen        }
1979d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen    }
198eeff27fa7aa424acf5087fc4ffb4b01fae2ae38fChristine Franks
199eeff27fa7aa424acf5087fc4ffb4b01fae2ae38fChristine Franks    public boolean isToolbarVisible() {
200eeff27fa7aa424acf5087fc4ffb4b01fae2ae38fChristine Franks        return mToolbar.getVisibility() == View.VISIBLE;
201eeff27fa7aa424acf5087fc4ffb4b01fae2ae38fChristine Franks    }
2029d33cdc043df5dcdf8e16ba68f5a3a504b6d5d9eJustin Klaassen}
203