From e65e310fc979fa708d7469d01e42188174e47cf8 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Tue, 1 Jul 2014 22:00:50 +0200 Subject: [PATCH] Fix occasional jank when going to QS. We change the listening state of the QS panel before the user actually navigates there and when the animations are probably not running (after expanding the panel). Change-Id: Iad48b3459e7db09c423f6983a9fec17ec0088050 --- .../src/com/android/systemui/qs/QSPanel.java | 10 ++++++++-- .../phone/NotificationPanelView.java | 19 +++++++++++++++++-- .../statusbar/phone/StatusBarHeaderView.java | 12 ++++++++++-- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 0720704e78e52..d152887f811b6 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -50,6 +50,7 @@ public class QSPanel extends ViewGroup { private int mPanelPaddingBottom; private int mDualTileUnderlap; private boolean mExpanded; + private boolean mListening; private TileRecord mDetailRecord; private Callback mCallback; @@ -100,9 +101,14 @@ public class QSPanel extends ViewGroup { if (!mExpanded) { showDetail(false /*show*/, mDetailRecord); } + } + + public void setListening(boolean listening) { + if (mListening == listening) return; + mListening = listening; for (TileRecord r : mRecords) { - r.tile.setListening(mExpanded); - if (mExpanded) { + r.tile.setListening(mListening); + if (mListening) { r.tile.refreshState(); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index c82bdf6b061e7..fd2db8edb71a7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -35,6 +35,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.android.systemui.R; +import com.android.systemui.qs.QSPanel; import com.android.systemui.statusbar.ExpandableView; import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.GestureRecorder; @@ -61,7 +62,7 @@ public class NotificationPanelView extends PanelView implements private KeyguardPageSwipeHelper mPageSwiper; private StatusBarHeaderView mHeader; private View mQsContainer; - private View mQsPanel; + private QSPanel mQsPanel; private View mKeyguardStatusView; private ObservableScrollView mScrollView; private TextView mClockView; @@ -136,7 +137,7 @@ public class NotificationPanelView extends PanelView implements mHeader.setOverlayParent(this); mKeyguardStatusView = findViewById(R.id.keyguard_status_view); mQsContainer = findViewById(R.id.quick_settings_container); - mQsPanel = findViewById(R.id.quick_settings_panel); + mQsPanel = (QSPanel) findViewById(R.id.quick_settings_panel); mClockView = (TextView) findViewById(R.id.clock_view); mScrollView = (ObservableScrollView) findViewById(R.id.scroll_view); mScrollView.setListener(this); @@ -873,6 +874,20 @@ public class NotificationPanelView extends PanelView implements super.onExpandingFinished(); mNotificationStackScroller.onExpansionStopped(); mIsExpanding = false; + if (mExpandedHeight == 0f) { + mHeader.setListening(false); + mQsPanel.setListening(false); + } else { + mHeader.setListening(true); + mQsPanel.setListening(true); + } + } + + @Override + public void instantExpand() { + super.instantExpand(); + mHeader.setListening(true); + mQsPanel.setListening(true); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index 9e9de5d65dfa6..3e2dcef10c66e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -45,6 +45,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL private static final float EXPANSION_RUBBERBAND_FACTOR = 0.35f; private boolean mExpanded; + private boolean mListening; private boolean mOverscrolled; private boolean mKeyguardShowing; @@ -145,6 +146,14 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL return mExpandedHeight; } + public void setListening(boolean listening) { + if (listening == mListening) { + return; + } + mListening = listening; + updateBrightnessControllerState(); + } + public void setExpanded(boolean expanded, boolean overscrolled) { boolean changed = expanded != mExpanded; boolean overscrollChanged = overscrolled != mOverscrolled; @@ -154,7 +163,6 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL updateHeights(); updateVisibilities(); updateSystemIconsLayoutParams(); - updateBrightnessControllerState(); updateZTranslation(); updateClickTargets(); updateWidth(); @@ -254,7 +262,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL } private void updateBrightnessControllerState() { - if (mExpanded) { + if (mListening) { mBrightnessController.registerCallbacks(); } else { mBrightnessController.unregisterCallbacks();