PanelBar.java revision 3d395c69fa67732ceb2c045d03ea81efa3710afa
150a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler/* 250a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * Copyright (C) 2012 The Android Open Source Project 350a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * 450a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 550a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * you may not use this file except in compliance with the License. 650a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * You may obtain a copy of the License at 750a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * 850a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 950a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * 1050a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * Unless required by applicable law or agreed to in writing, software 1150a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 1250a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1350a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * See the License for the specific language governing permissions and 1450a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * limitations under the License. 1550a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler */ 1650a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler 1708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerpackage com.android.systemui.statusbar.phone; 1808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 1908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.content.Context; 2008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.util.AttributeSet; 21cd686b5b6d4166b510df8e32138479a9559bc117John Spurlockimport android.util.Log; 2208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.view.MotionEvent; 23173bae2c674b2bc25cf376cbb4e150bd86703049Daniel Sandlerimport android.view.View; 2408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.widget.FrameLayout; 2508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 26de84f0e77ea2bf713d15c290264059a413c2486aJohn Spurlockimport java.util.ArrayList; 27de84f0e77ea2bf713d15c290264059a413c2486aJohn Spurlock 283d395c69fa67732ceb2c045d03ea81efa3710afaSelim Cinekpublic abstract class PanelBar extends FrameLayout { 29bf4aa9d5bc34df144afcab45e8045d34a0ac090aDaniel Sandler public static final boolean DEBUG = false; 30198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler public static final String TAG = PanelBar.class.getSimpleName(); 3108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public static final void LOG(String fmt, Object... args) { 3208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler if (!DEBUG) return; 33cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock Log.v(TAG, String.format(fmt, args)); 3408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 3508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 36198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler public static final int STATE_CLOSED = 0; 37198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler public static final int STATE_OPENING = 1; 38198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler public static final int STATE_OPEN = 2; 39198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler 4067eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler PanelHolder mPanelHolder; 4167eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler ArrayList<PanelView> mPanels = new ArrayList<PanelView>(); 4267eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler PanelView mTouchingPanel; 43978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler private int mState = STATE_CLOSED; 44978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler private boolean mTracking; 45978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler 4667eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler float mPanelExpandedFractionSum; 4767eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler 48198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler public void go(int state) { 4967eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("go state: %d -> %d", mState, state); 50978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler mState = state; 51978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler } 5208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 5308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public PanelBar(Context context, AttributeSet attrs) { 5408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler super(context, attrs); 5508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 5608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 5708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler @Override 5808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler protected void onFinishInflate() { 5908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler super.onFinishInflate(); 6008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 6108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 6208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public void addPanel(PanelView pv) { 6308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler mPanels.add(pv); 6408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler pv.setBar(this); 6508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 6608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 6708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public void setPanelHolder(PanelHolder ph) { 6808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler if (ph == null) { 69cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock Log.e(TAG, "setPanelHolder: null PanelHolder", new Throwable()); 7008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return; 7108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 7208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler ph.setBar(this); 7308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler mPanelHolder = ph; 7408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler final int N = ph.getChildCount(); 7508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler for (int i=0; i<N; i++) { 76e111ad300d614a0f94e30f96ae664a1de578c48aDaniel Sandler final View v = ph.getChildAt(i); 77e111ad300d614a0f94e30f96ae664a1de578c48aDaniel Sandler if (v != null && v instanceof PanelView) { 78e111ad300d614a0f94e30f96ae664a1de578c48aDaniel Sandler addPanel((PanelView) v); 7908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 8008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 8108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 8208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 83d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos public void setBouncerShowing(boolean showing) { 84d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos if (mPanelHolder != null) { 85d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos mPanelHolder.setImportantForAccessibility( 86d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos showing ? IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS 87d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos : IMPORTANT_FOR_ACCESSIBILITY_AUTO); 88d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos } 89d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos } 90d0b2f7ddcac251acfe88092ecef4abb63b3e248bAdrian Roos 9108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public float getBarHeight() { 9208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return getMeasuredHeight(); 9308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 9408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 95efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler public PanelView selectPanelForTouch(MotionEvent touch) { 96cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler final int N = mPanels.size(); 97efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler return mPanels.get((int)(N * touch.getX() / getMeasuredWidth())); 98cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler } 99cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler 1005050813f15a1d39d49cb8eca5a3aa6df43c4d450Daniel Sandler public boolean panelsEnabled() { 1011e8feef1faca7d2f14bf459691dbe724c8cf5c88Daniel Sandler return true; 1021e8feef1faca7d2f14bf459691dbe724c8cf5c88Daniel Sandler } 1031e8feef1faca7d2f14bf459691dbe724c8cf5c88Daniel Sandler 10408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler @Override 10508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public boolean onTouchEvent(MotionEvent event) { 1061e8feef1faca7d2f14bf459691dbe724c8cf5c88Daniel Sandler // Allow subclasses to implement enable/disable semantics 1072b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler if (!panelsEnabled()) { 1082b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler if (event.getAction() == MotionEvent.ACTION_DOWN) { 109cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock Log.v(TAG, String.format("onTouch: all panels disabled, ignoring touch at (%d,%d)", 1102b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler (int) event.getX(), (int) event.getY())); 1112b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler } 1122b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler return false; 1132b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler } 1141e8feef1faca7d2f14bf459691dbe724c8cf5c88Daniel Sandler 11508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler // figure out which panel needs to be talked to here 11608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler if (event.getAction() == MotionEvent.ACTION_DOWN) { 117efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler final PanelView panel = selectPanelForTouch(event); 118efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler if (panel == null) { 119efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler // panel is not there, so we'll eat the gesture 120cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock Log.v(TAG, String.format("onTouch: no panel for touch at (%d,%d)", 1212b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler (int) event.getX(), (int) event.getY())); 122efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler mTouchingPanel = null; 123efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler return true; 124efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler } 125919adac28bd6a9888c3bbd53a1736f260bc76bbfJohn Spurlock boolean enabled = panel.isEnabled(); 12667eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("PanelBar.onTouch: state=%d ACTION_DOWN: panel %s %s", mState, panel, 127919adac28bd6a9888c3bbd53a1736f260bc76bbfJohn Spurlock (enabled ? "" : " (disabled)")); 128efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler if (!enabled) { 129efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler // panel is disabled, so we'll eat the gesture 130cd686b5b6d4166b510df8e32138479a9559bc117John Spurlock Log.v(TAG, String.format( 1312b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler "onTouch: panel (%s) is disabled, ignoring touch at (%d,%d)", 1322b99a49c2e2dec29d350b662d5b45bca59cfd5c6Daniel Sandler panel, (int) event.getX(), (int) event.getY())); 133efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler mTouchingPanel = null; 134efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler return true; 135efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler } 136198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler startOpeningPanel(panel); 13708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 138efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler final boolean result = mTouchingPanel != null 139040c2e4ace25a45bc701821da4fa786e6dd75eadDaniel Sandler ? mTouchingPanel.onTouchEvent(event) 140efb0faf1c043777762eecfef87ec575632c365e1Daniel Sandler : true; 14108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return result; 14208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 14308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 144198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler // called from PanelView when self-expanding, too 145198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler public void startOpeningPanel(PanelView panel) { 14667eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("startOpeningPanel: " + panel); 147198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler mTouchingPanel = panel; 148198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler mPanelHolder.setSelectedPanel(mTouchingPanel); 14967eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler for (PanelView pv : mPanels) { 15067eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (pv != panel) { 151f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi pv.collapse(false /* delayed */, 1.0f /* speedUpFactor */); 15267eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler } 15367eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler } 154198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler } 155198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler 1563d395c69fa67732ceb2c045d03ea81efa3710afaSelim Cinek public abstract void panelScrimMinFractionChanged(float minFraction); 1573d395c69fa67732ceb2c045d03ea81efa3710afaSelim Cinek 158b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi /** 159b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi * @param panel the panel which changed its expansion state 160b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi * @param frac the fraction from the expansion in [0, 1] 161b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi * @param expanded whether the panel is currently expanded; this is independent from the 162b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi * fraction as the panel also might be expanded if the fraction is 0 163b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi */ 164b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi public void panelExpansionChanged(PanelView panel, float frac, boolean expanded) { 16508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler boolean fullyClosed = true; 1668e72c9e19cfb0b6c1463fa841f1dd02be8f3b4e1Daniel Sandler PanelView fullyOpenedPanel = null; 16767eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("panelExpansionChanged: start state=%d panel=%s", mState, panel.getName()); 16867eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler mPanelExpandedFractionSum = 0f; 16908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler for (PanelView pv : mPanels) { 170b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek pv.setVisibility(expanded ? View.VISIBLE : View.INVISIBLE); 171978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler // adjust any other panels that may be partially visible 172b472b347b51f84489217bb5d9c3beeeda1e4e626Jorim Jaggi if (expanded) { 173198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler if (mState == STATE_CLOSED) { 174198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler go(STATE_OPENING); 175198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler onPanelPeeked(); 176198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler } 17708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler fullyClosed = false; 17808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler final float thisFrac = pv.getExpandedFraction(); 179b8f09cf5533d458868a335ce334e4880b2b0788dSelim Cinek mPanelExpandedFractionSum += thisFrac; 18067eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("panelExpansionChanged: -> %s: f=%.1f", pv.getName(), thisFrac); 18108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler if (panel == pv) { 1828e72c9e19cfb0b6c1463fa841f1dd02be8f3b4e1Daniel Sandler if (thisFrac == 1f) fullyOpenedPanel = panel; 18308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 18408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 18508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 18667eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler mPanelExpandedFractionSum /= mPanels.size(); 187978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler if (fullyOpenedPanel != null && !mTracking) { 188978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler go(STATE_OPEN); 189978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler onPanelFullyOpened(fullyOpenedPanel); 190198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler } else if (fullyClosed && !mTracking && mState != STATE_CLOSED) { 191978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler go(STATE_CLOSED); 192978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler onAllPanelsCollapsed(); 193978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler } 19408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 19567eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("panelExpansionChanged: end state=%d [%s%s ]", mState, 1968e72c9e19cfb0b6c1463fa841f1dd02be8f3b4e1Daniel Sandler (fullyOpenedPanel!=null)?" fullyOpened":"", fullyClosed?" fullyClosed":""); 19708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 19808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 199f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi public void collapseAllPanels(boolean animate, boolean delayed, float speedUpFactor) { 200198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler boolean waiting = false; 20108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler for (PanelView pv : mPanels) { 202198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler if (animate && !pv.isFullyCollapsed()) { 203f3b3bee12994a24b60bd447dede9e8791151fcc9Jorim Jaggi pv.collapse(delayed, speedUpFactor); 204198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler waiting = true; 20508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } else { 206dbbf45e79affa3e29b0f376719d297fe9c1f8a37Jorim Jaggi pv.resetViews(); 20708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler pv.setExpandedFraction(0); // just in case 2089764218ff979f735aee2f1189e3547d5f3b02f83John Spurlock pv.cancelPeek(); 20908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 21008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 21167eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("collapseAllPanels: animate=%s waiting=%s", animate, waiting); 212c38bbc391ae4ec5945d5fa408da3994552f775ebDaniel Sandler if (!waiting && mState != STATE_CLOSED) { 213209bede6b9edb9171e5bee4077b48e35004a37b4John Spurlock // it's possible that nothing animated, so we replicate the termination 214198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler // conditions of panelExpansionChanged here 215198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler go(STATE_CLOSED); 216198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler onAllPanelsCollapsed(); 217198a0306e5b0ef6b02d61e299a4b4ab4c1c2cdc8Daniel Sandler } 21808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 21908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 22008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public void onPanelPeeked() { 22167eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("onPanelPeeked"); 22208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 22308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 22408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public void onAllPanelsCollapsed() { 22567eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("onAllPanelsCollapsed"); 22608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 22708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 2288e72c9e19cfb0b6c1463fa841f1dd02be8f3b4e1Daniel Sandler public void onPanelFullyOpened(PanelView openPanel) { 22967eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler if (DEBUG) LOG("onPanelFullyOpened"); 23008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 231978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler 232978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler public void onTrackingStarted(PanelView panel) { 233978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler mTracking = true; 234978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler } 235978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler 2362fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi public void onTrackingStopped(PanelView panel, boolean expand) { 237978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler mTracking = false; 238978f853d189c1857190b4a2e200c7a283e31ca14Daniel Sandler } 2392fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi 2402fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi public void onExpandingFinished() { 2412fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi 2422fbad7b6a724cf0a5b98b66fe639d58f5ab10af3Jorim Jaggi } 243dbbcfbe8aea1944fc0b0ecbf531034bcd5b5770aSelim Cinek 244dbbcfbe8aea1944fc0b0ecbf531034bcd5b5770aSelim Cinek public void onClosingFinished() { 245dbbcfbe8aea1944fc0b0ecbf531034bcd5b5770aSelim Cinek 246dbbcfbe8aea1944fc0b0ecbf531034bcd5b5770aSelim Cinek } 24708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler} 248