diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java index 46e6b9b601abf..14944d5a9e473 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java @@ -67,6 +67,8 @@ public class QSDetail extends LinearLayout { private boolean mTriggeredExpand; private int mOpenX; private int mOpenY; + private boolean mAnimating; + private boolean mSwitchState; public QSDetail(Context context, @Nullable AttributeSet attrs) { super(context, attrs); @@ -212,6 +214,7 @@ public class QSDetail extends LinearLayout { protected void animateDetailVisibleDiff(int x, int y, boolean visibleDiff, AnimatorListener listener) { if (visibleDiff) { + mAnimating = true; if (mFullyExpanded || mDetailAdapter != null) { setAlpha(1); mClipper.animateCircularClip(x, y, mDetailAdapter != null, listener); @@ -243,7 +246,7 @@ public class QSDetail extends LinearLayout { mQsDetailHeader.setClickable(false); } else { mQsDetailHeaderSwitch.setVisibility(VISIBLE); - mQsDetailHeaderSwitch.setChecked(toggleState); + handleToggleStateChanged(toggleState); mQsDetailHeader.setClickable(true); mQsDetailHeader.setOnClickListener(new OnClickListener() { @Override @@ -257,6 +260,10 @@ public class QSDetail extends LinearLayout { } private void handleToggleStateChanged(boolean state) { + mSwitchState = state; + if (mAnimating) { + return; + } mQsDetailHeaderSwitch.setChecked(state); } @@ -273,6 +280,10 @@ public class QSDetail extends LinearLayout { } } + private void checkPendingAnimations() { + handleToggleStateChanged(mSwitchState); + } + protected QSPanel.Callback mQsPanelCallback = new QSPanel.Callback() { @Override public void onToggleStateChanged(final boolean state) { @@ -310,6 +321,8 @@ public class QSDetail extends LinearLayout { // If we have been cancelled, remove the listener so that onAnimationEnd doesn't get // called, this will avoid accidentally turning off the grid when we don't want to. animation.removeListener(this); + mAnimating = false; + checkPendingAnimations(); }; @Override @@ -319,6 +332,8 @@ public class QSDetail extends LinearLayout { mQsPanel.setGridContentVisibility(false); mHeader.setVisibility(View.INVISIBLE); } + mAnimating = false; + checkPendingAnimations(); } }; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index f892a241fb552..68f594bada3fc 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -90,11 +90,11 @@ public class BluetoothTile extends QSTile { mHost.startActivityDismissingKeyguard(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)); return; } + showDetail(true); if (!mState.value) { mState.value = true; mController.setBluetoothEnabled(true); } - showDetail(true); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java index 04cb55331554d..91821bad988af 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java @@ -122,9 +122,9 @@ public class DndTile extends QSTile { if (mState.value) { mController.setZen(Global.ZEN_MODE_OFF, null, TAG); } else { + showDetail(true); int zen = Prefs.getInt(mContext, Prefs.Key.DND_FAVORITE_ZEN, Global.ZEN_MODE_ALARMS); mController.setZen(zen, null, TAG); - showDetail(true); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index 89108641815ab..4c023d23f38e7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -116,11 +116,11 @@ public class WifiTile extends QSTile { mHost.startActivityDismissingKeyguard(new Intent(Settings.ACTION_WIFI_SETTINGS)); return; } + showDetail(true); if (!mState.value) { mController.setWifiEnabled(true); mState.value = true; } - showDetail(true); } @Override