QS Detail: Fix up open/close animations
- CP from CL below to handle removing callbacks correctly
- Make correct QSPanel handle detail callbacks (quick/full)
- Move expanding/collapsing panel to QSDetail
- Collapse to the point expansion was from
Fixes: 28770315
Fixes: 29057236
Change-Id: Ib70c29cbc45dd8a58a751de0ea9e4f8a25057468
(based on cherry pick from commit d319f04986e44a7e9eab5f2822f1a6510282f803)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java
index 8d6e17e..d5fb8f2 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java
@@ -178,6 +178,7 @@
private void updateQsState() {
boolean expandVisually = mQsExpanded || mStackScrollerOverscrolling || mHeaderAnimating;
mQSPanel.setExpanded(mQsExpanded);
+ mQSDetail.setExpanded(mQsExpanded);
mHeader.setVisibility((mQsExpanded || !mKeyguardShowing || mHeaderAnimating)
? View.VISIBLE
: View.INVISIBLE);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
index 0cf7e479..a40e5b7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
@@ -31,6 +31,7 @@
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
+
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
@@ -64,6 +65,9 @@
private boolean mFullyExpanded;
private View mQsDetailHeaderBack;
private BaseStatusBarHeader mHeader;
+ private boolean mTriggeredExpand;
+ private int mOpenX;
+ private int mOpenY;
public QSDetail(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -112,6 +116,7 @@
public void setQsPanel(QSPanel panel, BaseStatusBarHeader header) {
mQsPanel = panel;
mHeader = header;
+ mHeader.setCallback(mQsPanelCallback);
mQsPanel.setCallback(mQsPanelCallback);
}
@@ -126,6 +131,12 @@
mFullyExpanded = fullyExpanded;
}
+ public void setExpanded(boolean qsExpanded) {
+ if (!qsExpanded) {
+ mTriggeredExpand = false;
+ }
+ }
+
private void updateDetailText() {
mDetailDoneButton.setText(R.string.quick_settings_done);
mDetailSettingsButton.setText(R.string.quick_settings_more_settings);
@@ -161,6 +172,22 @@
}
});
}
+ if (!mFullyExpanded) {
+ mTriggeredExpand = true;
+ mHost.animateToggleQSExpansion();
+ } else {
+ mTriggeredExpand = false;
+ }
+ mOpenX = x;
+ mOpenY = y;
+ } else {
+ // Ensure we collapse into the same point we opened from.
+ x = mOpenX;
+ y = mOpenY;
+ if (mTriggeredExpand) {
+ mHost.animateToggleQSExpansion();
+ mTriggeredExpand = false;
+ }
}
boolean visibleDiff = (mDetailAdapter != null) != (adapter != null);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 6945176..2c874e5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -23,6 +23,7 @@
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
@@ -56,7 +57,7 @@
private int mPanelPaddingBottom;
private int mBrightnessPaddingTop;
- private boolean mExpanded;
+ protected boolean mExpanded;
protected boolean mListening;
private Callback mCallback;
@@ -70,7 +71,6 @@
private QSCustomizer mCustomizePanel;
private Record mDetailRecord;
- private boolean mTriggeredExpand;
public QSPanel(Context context) {
this(context, null);
@@ -221,7 +221,6 @@
}
MetricsLogger.visibility(mContext, MetricsEvent.QS_PANEL, mExpanded);
if (!mExpanded) {
- mTriggeredExpand = false;
closeDetail();
} else {
logTiles();
@@ -279,6 +278,7 @@
public void setTiles(Collection<QSTile<?>> tiles, boolean collapsedView) {
for (TileRecord record : mRecords) {
mTileLayout.removeTile(record);
+ record.tile.removeCallback(record.callback);
}
mRecords.clear();
for (QSTile<?> tile : tiles) {
@@ -294,6 +294,10 @@
return new QSTileView(mContext, tile.createTileView(mContext), collapsedView);
}
+ protected boolean shouldShowDetail() {
+ return mExpanded;
+ }
+
protected void addTile(final QSTile<?> tile, boolean collapsedView) {
final TileRecord r = new TileRecord();
r.tile = tile;
@@ -306,7 +310,11 @@
@Override
public void onShowDetail(boolean show) {
- QSPanel.this.showDetail(show, r);
+ // Both the collapsed and full QS panels get this callback, this check determines
+ // which one should handle showing the detail.
+ if (shouldShowDetail()) {
+ QSPanel.this.showDetail(show, r);
+ }
}
@Override
@@ -330,6 +338,7 @@
}
};
r.tile.addCallback(callback);
+ r.callback = callback;
final View.OnClickListener click = new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -390,17 +399,6 @@
}
protected void handleShowDetail(Record r, boolean show) {
- if (show) {
- if (!mExpanded) {
- mTriggeredExpand = true;
- mHost.animateToggleQSExpansion();
- } else {
- mTriggeredExpand = false;
- }
- } else if (mTriggeredExpand) {
- mHost.animateToggleQSExpansion();
- mTriggeredExpand = false;
- }
if (r instanceof TileRecord) {
handleShowDetailTile((TileRecord) r, show);
} else {
@@ -520,6 +518,7 @@
public QSTile<?> tile;
public QSTileBaseView tileView;
public boolean scanState;
+ public QSTile.Callback callback;
}
public interface Callback {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
index 8d9f23f..974de08 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
@@ -161,6 +161,10 @@
mHandler.obtainMessage(H.ADD_CALLBACK, callback).sendToTarget();
}
+ public void removeCallback(Callback callback) {
+ mHandler.obtainMessage(H.REMOVE_CALLBACK, callback).sendToTarget();
+ }
+
public void removeCallbacks() {
mHandler.sendEmptyMessage(H.REMOVE_CALLBACKS);
}
@@ -224,6 +228,10 @@
handleRefreshState(null);
}
+ private void handleRemoveCallback(Callback callback) {
+ mCallbacks.remove(callback);
+ }
+
private void handleRemoveCallbacks() {
mCallbacks.clear();
}
@@ -334,7 +342,8 @@
private static final int DESTROY = 10;
private static final int CLEAR_STATE = 11;
private static final int REMOVE_CALLBACKS = 12;
- private static final int SET_LISTENING = 13;
+ private static final int REMOVE_CALLBACK = 13;
+ private static final int SET_LISTENING = 14;
private H(Looper looper) {
super(looper);
@@ -350,6 +359,9 @@
} else if (msg.what == REMOVE_CALLBACKS) {
name = "handleRemoveCallbacks";
handleRemoveCallbacks();
+ } else if (msg.what == REMOVE_CALLBACK) {
+ name = "handleRemoveCallback";
+ handleRemoveCallback((QSTile.Callback) msg.obj);
} else if (msg.what == CLICK) {
name = "handleClick";
if (mState.disabledByPolicy) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index b28d0f2..c984abe 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -77,6 +77,11 @@
}
@Override
+ protected boolean shouldShowDetail() {
+ return !mExpanded;
+ }
+
+ @Override
protected void drawTile(TileRecord r, State state) {
if (state instanceof SignalState) {
State copy = r.tile.newTileState();
@@ -90,11 +95,6 @@
}
@Override
- protected void showDetail(boolean show, Record r) {
- // Do nothing, will be handled by the QSPanel.
- }
-
- @Override
protected QSTileBaseView createTileView(QSTile<?> tile, boolean collapsedView) {
return new QSTileBaseView(mContext, tile.createTileView(mContext), collapsedView);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java
index 6e1c862..79eef43 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BaseStatusBarHeader.java
@@ -20,6 +20,7 @@
import android.util.AttributeSet;
import android.widget.RelativeLayout;
import com.android.systemui.qs.QSPanel;
+import com.android.systemui.qs.QSPanel.Callback;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.NetworkControllerImpl;
import com.android.systemui.statusbar.policy.NextAlarmController;
@@ -44,4 +45,5 @@
public abstract void setBatteryController(BatteryController batteryController);
public abstract void setNextAlarmController(NextAlarmController nextAlarmController);
public abstract void setUserInfoController(UserInfoController userInfoController);
+ public abstract void setCallback(Callback qsPanelCallback);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
index 8bb1f24..809a992 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
@@ -38,6 +38,7 @@
import com.android.systemui.R;
import com.android.systemui.qs.QSAnimator;
import com.android.systemui.qs.QSPanel;
+import com.android.systemui.qs.QSPanel.Callback;
import com.android.systemui.qs.QuickQSPanel;
import com.android.systemui.qs.TouchAnimator;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -220,6 +221,7 @@
@Override
public void setExpanded(boolean expanded) {
mExpanded = expanded;
+ mHeaderQsPanel.setExpanded(expanded);
updateEverything();
}
@@ -389,6 +391,11 @@
}
@Override
+ public void setCallback(Callback qsPanelCallback) {
+ mHeaderQsPanel.setCallback(qsPanelCallback);
+ }
+
+ @Override
public void setEmergencyCallsOnly(boolean show) {
boolean changed = show != mShowEmergencyCallsOnly;
if (changed) {
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 a051973..72eafd8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
@@ -44,6 +44,7 @@
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
import com.android.systemui.qs.QSPanel;
+import com.android.systemui.qs.QSPanel.Callback;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.QSTile.DetailAdapter;
import com.android.systemui.statusbar.policy.BatteryController;
@@ -511,6 +512,10 @@
}
@Override
+ public void setCallback(Callback qsPanelCallback) {
+ }
+
+ @Override
public void onClick(View v) {
if (v == mSettingsButton) {
if (mSettingsButton.isTunerClick()) {