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