diff options
7 files changed, 75 insertions, 244 deletions
diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml index 7ac9c41fe208..39da8d02a855 100644 --- a/packages/SystemUI/res/layout/super_status_bar.xml +++ b/packages/SystemUI/res/layout/super_status_bar.xml @@ -84,16 +84,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> - <com.android.systemui.statusbar.phone.PanelHolder - android:id="@+id/panel_holder" + <include layout="@layout/status_bar_expanded" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/transparent" > - <include layout="@layout/status_bar_expanded" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="gone" /> - </com.android.systemui.statusbar.phone.PanelHolder> + android:visibility="gone" /> <com.android.systemui.statusbar.ScrimView android:id="@+id/scrim_in_front" android:layout_width="match_parent" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java index 6aa072ff2c81..f2c57e538829 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java @@ -23,8 +23,6 @@ import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; -import java.util.ArrayList; - public abstract class PanelBar extends FrameLayout { public static final boolean DEBUG = false; public static final String TAG = PanelBar.class.getSimpleName(); @@ -39,14 +37,10 @@ public abstract class PanelBar extends FrameLayout { public static final int STATE_OPENING = 1; public static final int STATE_OPEN = 2; - PanelHolder mPanelHolder; - ArrayList<PanelView> mPanels = new ArrayList<PanelView>(); - PanelView mTouchingPanel; + PanelView mPanel; private int mState = STATE_CLOSED; private boolean mTracking; - float mPanelExpandedFractionSum; - public void go(int state) { if (DEBUG) LOG("go state: %d -> %d", mState, state); mState = state; @@ -61,54 +55,28 @@ public abstract class PanelBar extends FrameLayout { super.onFinishInflate(); } - public void addPanel(PanelView pv) { - mPanels.add(pv); + public void setPanel(PanelView pv) { + mPanel = pv; pv.setBar(this); } - public void setPanelHolder(PanelHolder ph) { - if (ph == null) { - Log.e(TAG, "setPanelHolder: null PanelHolder", new Throwable()); - return; - } - mPanelHolder = ph; - final int N = ph.getChildCount(); - for (int i=0; i<N; i++) { - final View v = ph.getChildAt(i); - if (v != null && v instanceof PanelView) { - addPanel((PanelView) v); - } - } - } - public void setBouncerShowing(boolean showing) { int important = showing ? IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS : IMPORTANT_FOR_ACCESSIBILITY_AUTO; setImportantForAccessibility(important); - if (mPanelHolder != null) { - mPanelHolder.setImportantForAccessibility(important); - } + if (mPanel != null) mPanel.setImportantForAccessibility(important); } - public float getBarHeight() { - return getMeasuredHeight(); - } - - public PanelView selectPanelForTouch(MotionEvent touch) { - final int N = mPanels.size(); - return mPanels.get((int)(N * touch.getX() / getMeasuredWidth())); - } - - public boolean panelsEnabled() { + public boolean panelEnabled() { return true; } @Override public boolean onTouchEvent(MotionEvent event) { // Allow subclasses to implement enable/disable semantics - if (!panelsEnabled()) { + if (!panelEnabled()) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.v(TAG, String.format("onTouch: all panels disabled, ignoring touch at (%d,%d)", (int) event.getX(), (int) event.getY())); @@ -116,14 +84,12 @@ public abstract class PanelBar extends FrameLayout { return false; } - // figure out which panel needs to be talked to here if (event.getAction() == MotionEvent.ACTION_DOWN) { - final PanelView panel = selectPanelForTouch(event); + final PanelView panel = mPanel; if (panel == null) { // panel is not there, so we'll eat the gesture Log.v(TAG, String.format("onTouch: no panel for touch at (%d,%d)", (int) event.getX(), (int) event.getY())); - mTouchingPanel = null; return true; } boolean enabled = panel.isEnabled(); @@ -134,90 +100,65 @@ public abstract class PanelBar extends FrameLayout { Log.v(TAG, String.format( "onTouch: panel (%s) is disabled, ignoring touch at (%d,%d)", panel, (int) event.getX(), (int) event.getY())); - mTouchingPanel = null; return true; } - startOpeningPanel(panel); - } - final boolean result = mTouchingPanel != null - ? mTouchingPanel.onTouchEvent(event) - : true; - return result; - } - - // called from PanelView when self-expanding, too - public void startOpeningPanel(PanelView panel) { - if (DEBUG) LOG("startOpeningPanel: " + panel); - mTouchingPanel = panel; - mPanelHolder.setSelectedPanel(mTouchingPanel); - for (PanelView pv : mPanels) { - if (pv != panel) { - pv.collapse(false /* delayed */, 1.0f /* speedUpFactor */); - } } + return mPanel == null || mPanel.onTouchEvent(event); } public abstract void panelScrimMinFractionChanged(float minFraction); /** - * @param panel the panel which changed its expansion state * @param frac the fraction from the expansion in [0, 1] * @param expanded whether the panel is currently expanded; this is independent from the * fraction as the panel also might be expanded if the fraction is 0 */ - public void panelExpansionChanged(PanelView panel, float frac, boolean expanded) { + public void panelExpansionChanged(float frac, boolean expanded) { boolean fullyClosed = true; - PanelView fullyOpenedPanel = null; - if (SPEW) LOG("panelExpansionChanged: start state=%d panel=%s", mState, panel.getName()); - mPanelExpandedFractionSum = 0f; - for (PanelView pv : mPanels) { - pv.setVisibility(expanded ? View.VISIBLE : View.INVISIBLE); - // adjust any other panels that may be partially visible - if (expanded) { - if (mState == STATE_CLOSED) { - go(STATE_OPENING); - onPanelPeeked(); - } - fullyClosed = false; - final float thisFrac = pv.getExpandedFraction(); - mPanelExpandedFractionSum += thisFrac; - if (SPEW) LOG("panelExpansionChanged: -> %s: f=%.1f", pv.getName(), thisFrac); - if (panel == pv) { - if (thisFrac == 1f) fullyOpenedPanel = panel; - } + boolean fullyOpened = false; + if (SPEW) LOG("panelExpansionChanged: start state=%d", mState); + PanelView pv = mPanel; + pv.setVisibility(expanded ? View.VISIBLE : View.INVISIBLE); + // adjust any other panels that may be partially visible + if (expanded) { + if (mState == STATE_CLOSED) { + go(STATE_OPENING); + onPanelPeeked(); } + fullyClosed = false; + final float thisFrac = pv.getExpandedFraction(); + if (SPEW) LOG("panelExpansionChanged: -> %s: f=%.1f", pv.getName(), thisFrac); + fullyOpened = thisFrac >= 1f; } - mPanelExpandedFractionSum /= mPanels.size(); - if (fullyOpenedPanel != null && !mTracking) { + if (fullyOpened && !mTracking) { go(STATE_OPEN); - onPanelFullyOpened(fullyOpenedPanel); + onPanelFullyOpened(); } else if (fullyClosed && !mTracking && mState != STATE_CLOSED) { go(STATE_CLOSED); - onAllPanelsCollapsed(); + onPanelCollapsed(); } if (SPEW) LOG("panelExpansionChanged: end state=%d [%s%s ]", mState, - (fullyOpenedPanel!=null)?" fullyOpened":"", fullyClosed?" fullyClosed":""); + fullyOpened?" fullyOpened":"", fullyClosed?" fullyClosed":""); } - public void collapseAllPanels(boolean animate, boolean delayed, float speedUpFactor) { + public void collapsePanel(boolean animate, boolean delayed, float speedUpFactor) { boolean waiting = false; - for (PanelView pv : mPanels) { - if (animate && !pv.isFullyCollapsed()) { - pv.collapse(delayed, speedUpFactor); - waiting = true; - } else { - pv.resetViews(); - pv.setExpandedFraction(0); // just in case - pv.cancelPeek(); - } + PanelView pv = mPanel; + if (animate && !pv.isFullyCollapsed()) { + pv.collapse(delayed, speedUpFactor); + waiting = true; + } else { + pv.resetViews(); + pv.setExpandedFraction(0); // just in case + pv.cancelPeek(); } - if (DEBUG) LOG("collapseAllPanels: animate=%s waiting=%s", animate, waiting); + if (DEBUG) LOG("collapsePanel: animate=%s waiting=%s", animate, waiting); if (!waiting && mState != STATE_CLOSED) { // it's possible that nothing animated, so we replicate the termination // conditions of panelExpansionChanged here go(STATE_CLOSED); - onAllPanelsCollapsed(); + onPanelCollapsed(); } } @@ -225,19 +166,19 @@ public abstract class PanelBar extends FrameLayout { if (DEBUG) LOG("onPanelPeeked"); } - public void onAllPanelsCollapsed() { - if (DEBUG) LOG("onAllPanelsCollapsed"); + public void onPanelCollapsed() { + if (DEBUG) LOG("onPanelCollapsed"); } - public void onPanelFullyOpened(PanelView openPanel) { + public void onPanelFullyOpened() { if (DEBUG) LOG("onPanelFullyOpened"); } - public void onTrackingStarted(PanelView panel) { + public void onTrackingStarted() { mTracking = true; } - public void onTrackingStopped(PanelView panel, boolean expand) { + public void onTrackingStopped(boolean expand) { mTracking = false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java deleted file mode 100644 index 5095ebb95ec1..000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.statusbar.phone; - -import android.content.Context; -import android.util.AttributeSet; -import android.util.EventLog; -import android.view.MotionEvent; -import android.widget.FrameLayout; - -import com.android.systemui.EventLogTags; - -public class PanelHolder extends FrameLayout { - public static final boolean DEBUG_GESTURES = true; - - private int mSelectedPanelIndex = -1; - - public PanelHolder(Context context, AttributeSet attrs) { - super(context, attrs); - setChildrenDrawingOrderEnabled(true); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - setChildrenDrawingOrderEnabled(true); - } - - public int getPanelIndex(PanelView pv) { - final int N = getChildCount(); - for (int i=0; i<N; i++) { - final PanelView v = (PanelView) getChildAt(i); - if (pv == v) return i; - } - return -1; - } - - public void setSelectedPanel(PanelView pv) { - mSelectedPanelIndex = getPanelIndex(pv); - } - - @Override - protected int getChildDrawingOrder(int childCount, int i) { - if (mSelectedPanelIndex == -1) { - return i; - } else { - if (i == childCount - 1) { - return mSelectedPanelIndex; - } else if (i >= mSelectedPanelIndex) { - return i + 1; - } else { - return i; - } - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - if (DEBUG_GESTURES) { - if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { - EventLog.writeEvent(EventLogTags.SYSUI_PANELHOLDER_TOUCH, - event.getActionMasked(), (int) event.getX(), (int) event.getY()); - } - } - return false; - } -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index 7b2498f2ac72..aa01bf248853 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -432,7 +432,7 @@ public abstract class PanelView extends FrameLayout { protected void onTrackingStopped(boolean expand) { mTracking = false; - mBar.onTrackingStopped(PanelView.this, expand); + mBar.onTrackingStopped(expand); notifyBarPanelExpansionChanged(); } @@ -440,7 +440,7 @@ public abstract class PanelView extends FrameLayout { endClosing(); mTracking = true; mCollapseAfterPeek = false; - mBar.onTrackingStarted(PanelView.this); + mBar.onTrackingStarted(); notifyExpandingStarted(); notifyBarPanelExpansionChanged(); } @@ -893,7 +893,6 @@ public abstract class PanelView extends FrameLayout { != mStatusBar.getStatusBarHeight()) { getViewTreeObserver().removeOnGlobalLayoutListener(this); if (animate) { - mBar.startOpeningPanel(PanelView.this); notifyExpandingStarted(); fling(0, true /* expand */); } else { @@ -1025,7 +1024,7 @@ public abstract class PanelView extends FrameLayout { } protected void notifyBarPanelExpansionChanged() { - mBar.panelExpansionChanged(this, mExpandedFraction, mExpandedFraction > 0f || mPeekPending + mBar.panelExpansionChanged(mExpandedFraction, mExpandedFraction > 0f || mPeekPending || mPeekAnimator != null || mInstantExpanding || isPanelVisibleBecauseOfHeadsUp() || mTracking || mHeightAnimator != null); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index d721a77b4055..75337e1758c8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -81,7 +81,6 @@ import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.ThreadedRenderer; -import android.view.VelocityTracker; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.ViewStub; @@ -342,7 +341,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, // Tracking finger for opening/closing. boolean mTracking; - VelocityTracker mVelocityTracker; int[] mAbsPos = new int[2]; ArrayList<Runnable> mPostCollapseRunnables = new ArrayList<>(); @@ -692,16 +690,14 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } }); - mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar); - mStatusBarView.setBar(this); - - PanelHolder holder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder); - mStatusBarView.setPanelHolder(holder); - mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById( R.id.notification_panel); mNotificationPanel.setStatusBar(this); + mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar); + mStatusBarView.setBar(this); + mStatusBarView.setPanel(mNotificationPanel); + if (!ActivityManager.isHighEndGfx()) { mStatusBarWindow.setBackground(null); mNotificationPanel.setBackground(new FastColorDrawable(context.getColor( @@ -2275,7 +2271,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mStatusBarWindowManager.setStatusBarFocusable(false); mStatusBarWindow.cancelExpandHelper(); - mStatusBarView.collapseAllPanels(true /* animate */, delayed, speedUpFactor); + mStatusBarView.collapsePanel(true /* animate */, delayed, speedUpFactor); } } @@ -2324,7 +2320,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, public void animateCollapseQuickSettings() { if (mState == StatusBarState.SHADE) { - mStatusBarView.collapseAllPanels(true, false /* delayed */, 1.0f /* speedUpFactor */); + mStatusBarView.collapsePanel(true, false /* delayed */, 1.0f /* speedUpFactor */); } } @@ -2337,7 +2333,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } // Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868) - mStatusBarView.collapseAllPanels(/*animate=*/ false, false /* delayed*/, + mStatusBarView.collapsePanel(/*animate=*/ false, false /* delayed*/, 1.0f /* speedUpFactor */); mNotificationPanel.closeQs(); @@ -2429,7 +2425,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mStatusBarWindowState = state; if (DEBUG_WINDOW_STATE) Log.d(TAG, "Status bar " + windowStateToString(state)); if (!showing && mState == StatusBarState.SHADE) { - mStatusBarView.collapseAllPanels(false /* animate */, false /* delayed */, + mStatusBarView.collapsePanel(false /* animate */, false /* delayed */, 1.0f /* speedUpFactor */); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index ab37e6abc32b..813a1679290c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.phone; import android.content.Context; -import android.content.res.Resources; import android.util.AttributeSet; import android.util.EventLog; import android.view.MotionEvent; @@ -26,7 +25,6 @@ import android.view.accessibility.AccessibilityEvent; import com.android.systemui.DejankUtils; import com.android.systemui.EventLogTags; -import com.android.systemui.R; public class PhoneStatusBarView extends PanelBar { private static final String TAG = "PhoneStatusBarView"; @@ -35,8 +33,7 @@ public class PhoneStatusBarView extends PanelBar { PhoneStatusBar mBar; - PanelView mLastFullyOpenedPanel = null; - PanelView mNotificationPanel; + boolean mIsFullyOpenedPanel = false; private final PhoneStatusBarTransitions mBarTransitions; private ScrimController mScrimController; private float mMinFraction; @@ -72,15 +69,7 @@ public class PhoneStatusBarView extends PanelBar { } @Override - public void addPanel(PanelView pv) { - super.addPanel(pv); - if (pv.getId() == R.id.notification_panel) { - mNotificationPanel = pv; - } - } - - @Override - public boolean panelsEnabled() { + public boolean panelEnabled() { return mBar.panelsEnabled(); } @@ -100,24 +89,17 @@ public class PhoneStatusBarView extends PanelBar { } @Override - public PanelView selectPanelForTouch(MotionEvent touch) { - return mNotificationPanel.getExpandedHeight() > 0 - ? null - : mNotificationPanel; - } - - @Override public void onPanelPeeked() { super.onPanelPeeked(); mBar.makeExpandedVisible(false); } @Override - public void onAllPanelsCollapsed() { - super.onAllPanelsCollapsed(); + public void onPanelCollapsed() { + super.onPanelCollapsed(); // Close the status bar in the next frame so we can show the end of the animation. DejankUtils.postAfterTraversal(mHideExpandedRunnable); - mLastFullyOpenedPanel = null; + mIsFullyOpenedPanel = false; } public void removePendingHideExpandedRunnables() { @@ -125,12 +107,12 @@ public class PhoneStatusBarView extends PanelBar { } @Override - public void onPanelFullyOpened(PanelView openPanel) { - super.onPanelFullyOpened(openPanel); - if (openPanel != mLastFullyOpenedPanel) { - openPanel.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + public void onPanelFullyOpened() { + super.onPanelFullyOpened(); + if (!mIsFullyOpenedPanel) { + mPanel.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } - mLastFullyOpenedPanel = openPanel; + mIsFullyOpenedPanel = true; } @Override @@ -149,8 +131,8 @@ public class PhoneStatusBarView extends PanelBar { } @Override - public void onTrackingStarted(PanelView panel) { - super.onTrackingStarted(panel); + public void onTrackingStarted() { + super.onTrackingStarted(); mBar.onTrackingStarted(); mScrimController.onTrackingStarted(); } @@ -162,8 +144,8 @@ public class PhoneStatusBarView extends PanelBar { } @Override - public void onTrackingStopped(PanelView panel, boolean expand) { - super.onTrackingStopped(panel, expand); + public void onTrackingStopped(boolean expand) { + super.onTrackingStopped(expand); mBar.onTrackingStopped(expand); } @@ -187,8 +169,8 @@ public class PhoneStatusBarView extends PanelBar { } @Override - public void panelExpansionChanged(PanelView panel, float frac, boolean expanded) { - super.panelExpansionChanged(panel, frac, expanded); + public void panelExpansionChanged(float frac, boolean expanded) { + super.panelExpansionChanged(frac, expanded); mPanelFraction = frac; updateScrimFraction(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java index 03409846ed40..4ae0321ff68b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessMirrorController.java @@ -35,25 +35,25 @@ public class BrightnessMirrorController { private final ScrimView mScrimBehind; private final View mBrightnessMirror; - private final View mPanelHolder; + private final View mNotificationPanel; private final int[] mInt2Cache = new int[2]; public BrightnessMirrorController(StatusBarWindowView statusBarWindow) { mScrimBehind = (ScrimView) statusBarWindow.findViewById(R.id.scrim_behind); mBrightnessMirror = statusBarWindow.findViewById(R.id.brightness_mirror); - mPanelHolder = statusBarWindow.findViewById(R.id.panel_holder); + mNotificationPanel = statusBarWindow.findViewById(R.id.notification_panel); } public void showMirror() { mBrightnessMirror.setVisibility(View.VISIBLE); mScrimBehind.animateViewAlpha(0.0f, TRANSITION_DURATION_OUT, PhoneStatusBar.ALPHA_OUT); - outAnimation(mPanelHolder.animate()) + outAnimation(mNotificationPanel.animate()) .withLayer(); } public void hideMirror() { mScrimBehind.animateViewAlpha(1.0f, TRANSITION_DURATION_IN, PhoneStatusBar.ALPHA_IN); - inAnimation(mPanelHolder.animate()) + inAnimation(mNotificationPanel.animate()) .withLayer() .withEndAction(new Runnable() { @Override |