Merge "QS Detail: Fix up open/close animations" into nyc-dev

This commit is contained in:
Jason Monk
2016-06-09 15:22:48 +00:00
committed by Android (Google) Code Review
8 changed files with 74 additions and 21 deletions

View File

@@ -178,6 +178,7 @@ public class QSContainer extends FrameLayout {
private void updateQsState() {
boolean expandVisually = mQsExpanded || mStackScrollerOverscrolling || mHeaderAnimating;
mQSPanel.setExpanded(mQsExpanded);
mQSDetail.setExpanded(mQsExpanded);
mHeader.setVisibility((mQsExpanded || !mKeyguardShowing || mHeaderAnimating)
? View.VISIBLE
: View.INVISIBLE);

View File

@@ -31,6 +31,7 @@ import android.widget.ImageView;
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 @@ public class QSDetail extends LinearLayout {
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 class QSDetail extends LinearLayout {
public void setQsPanel(QSPanel panel, BaseStatusBarHeader header) {
mQsPanel = panel;
mHeader = header;
mHeader.setCallback(mQsPanelCallback);
mQsPanel.setCallback(mQsPanelCallback);
}
@@ -126,6 +131,12 @@ public class QSDetail extends LinearLayout {
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 @@ public class QSDetail extends LinearLayout {
}
});
}
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);

View File

@@ -23,6 +23,7 @@ import android.content.res.Resources;
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 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
private int mPanelPaddingBottom;
private int mBrightnessPaddingTop;
private boolean mExpanded;
protected boolean mExpanded;
protected boolean mListening;
private Callback mCallback;
@@ -70,7 +71,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
private QSCustomizer mCustomizePanel;
private Record mDetailRecord;
private boolean mTriggeredExpand;
public QSPanel(Context context) {
this(context, null);
@@ -221,7 +221,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
}
MetricsLogger.visibility(mContext, MetricsEvent.QS_PANEL, mExpanded);
if (!mExpanded) {
mTriggeredExpand = false;
closeDetail();
} else {
logTiles();
@@ -279,6 +278,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
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 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
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 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
@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 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
}
};
r.tile.addCallback(callback);
r.callback = callback;
final View.OnClickListener click = new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -390,17 +399,6 @@ public class QSPanel extends LinearLayout implements Tunable, Callback {
}
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 class QSPanel extends LinearLayout implements Tunable, Callback {
public QSTile<?> tile;
public QSTileBaseView tileView;
public boolean scanState;
public QSTile.Callback callback;
}
public interface Callback {

View File

@@ -161,6 +161,10 @@ public abstract class QSTile<TState extends State> {
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 @@ public abstract class QSTile<TState extends State> {
handleRefreshState(null);
}
private void handleRemoveCallback(Callback callback) {
mCallbacks.remove(callback);
}
private void handleRemoveCallbacks() {
mCallbacks.clear();
}
@@ -334,7 +342,8 @@ public abstract class QSTile<TState extends State> {
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 @@ public abstract class QSTile<TState extends State> {
} 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) {

View File

@@ -76,6 +76,11 @@ public class QuickQSPanel extends QSPanel {
mHeader = header;
}
@Override
protected boolean shouldShowDetail() {
return !mExpanded;
}
@Override
protected void drawTile(TileRecord r, State state) {
if (state instanceof SignalState) {
@@ -89,11 +94,6 @@ public class QuickQSPanel extends QSPanel {
super.drawTile(r, state);
}
@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);

View File

@@ -20,6 +20,7 @@ import android.content.Context;
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 class BaseStatusBarHeader extends RelativeLayout implements
public abstract void setBatteryController(BatteryController batteryController);
public abstract void setNextAlarmController(NextAlarmController nextAlarmController);
public abstract void setUserInfoController(UserInfoController userInfoController);
public abstract void setCallback(Callback qsPanelCallback);
}

View File

@@ -38,6 +38,7 @@ import com.android.systemui.FontSizeUtils;
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;
@@ -222,6 +223,7 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
@Override
public void setExpanded(boolean expanded) {
mExpanded = expanded;
mHeaderQsPanel.setExpanded(expanded);
updateEverything();
}
@@ -392,6 +394,11 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements
userInfoController.addListener(this);
}
@Override
public void setCallback(Callback qsPanelCallback) {
mHeaderQsPanel.setCallback(qsPanelCallback);
}
@Override
public void setEmergencyCallsOnly(boolean show) {
boolean changed = show != mShowEmergencyCallsOnly;

View File

@@ -44,6 +44,7 @@ import com.android.systemui.BatteryMeterView;
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;
@@ -510,6 +511,10 @@ public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnC
});
}
@Override
public void setCallback(Callback qsPanelCallback) {
}
@Override
public void onClick(View v) {
if (v == mSettingsButton) {