QS: Cleanup detail toggle on

 - Fix animating state to not animate when already on
 - Fix enabled state to not be disable during initial animation

Change-Id: Id9c2d160bb65ee9c859f67a6d310f9b84d1b8944
Fixes: 30292340
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
index ee55a80..662b6a7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
@@ -67,7 +67,7 @@
     private boolean mTriggeredExpand;
     private int mOpenX;
     private int mOpenY;
-    private boolean mAnimating;
+    private boolean mAnimatingOpen;
     private boolean mSwitchState;
 
     public QSDetail(Context context, @Nullable AttributeSet attrs) {
@@ -160,7 +160,7 @@
                 mQsDetailHeader.setClickable(false);
             } else {
                 mQsDetailHeaderSwitch.setVisibility(VISIBLE);
-                handleToggleStateChanged(toggleState);
+                handleToggleStateChanged(toggleState, adapter.getToggleEnabled());
                 mQsDetailHeader.setClickable(true);
                 mQsDetailHeader.setOnClickListener(new OnClickListener() {
                     @Override
@@ -230,7 +230,7 @@
         }
         sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
         if (visibleDiff) {
-            mAnimating = true;
+            mAnimatingOpen = adapter != null;
             if (mFullyExpanded || mDetailAdapter != null) {
                 setAlpha(1);
                 mClipper.animateCircularClip(x, y, mDetailAdapter != null, listener);
@@ -243,13 +243,12 @@
         }
     }
 
-    private void handleToggleStateChanged(boolean state) {
+    private void handleToggleStateChanged(boolean state, boolean toggleEnabled) {
         mSwitchState = state;
-        if (mAnimating) {
+        if (mAnimatingOpen) {
             return;
         }
         mQsDetailHeaderSwitch.setChecked(state);
-        final boolean toggleEnabled = mDetailAdapter != null && mDetailAdapter.getToggleEnabled();
         mQsDetailHeader.setEnabled(toggleEnabled);
         mQsDetailHeaderSwitch.setEnabled(toggleEnabled);
     }
@@ -268,7 +267,8 @@
     }
 
     private void checkPendingAnimations() {
-        handleToggleStateChanged(mSwitchState);
+        handleToggleStateChanged(mSwitchState,
+                            mDetailAdapter != null && mDetailAdapter.getToggleEnabled());
     }
 
     private final QSPanel.Callback mQsPanelCallback = new QSPanel.Callback() {
@@ -277,7 +277,8 @@
             post(new Runnable() {
                 @Override
                 public void run() {
-                    handleToggleStateChanged(state);
+                    handleToggleStateChanged(state,
+                            mDetailAdapter != null && mDetailAdapter.getToggleEnabled());
                 }
             });
         }
@@ -308,7 +309,7 @@
             // 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;
+            mAnimatingOpen = false;
             checkPendingAnimations();
         };
 
@@ -319,7 +320,7 @@
                 mQsPanel.setGridContentVisibility(false);
                 mHeader.setVisibility(View.INVISIBLE);
             }
-            mAnimating = false;
+            mAnimatingOpen = false;
             checkPendingAnimations();
         }
     };