Merge "Make QSTileImpl#mListeners thread safe." into pi-dev am: 3bfa02a114

am: 48dcf157ed

Change-Id: I105bf4aa0e129141281ccb706ccb08e29c99f6b5
This commit is contained in:
Amin Shaikh
2018-03-22 17:59:24 +00:00
committed by android-build-merger

View File

@@ -85,6 +85,7 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
private String mTileSpec;
private EnforcedAdmin mEnforcedAdmin;
private boolean mShowingDetail;
private int mIsFullQs;
public abstract TState newTileState();
@@ -110,18 +111,7 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
* listening client it will go into the listening state.
*/
public void setListening(Object listener, boolean listening) {
if (listening) {
if (mListeners.add(listener) && mListeners.size() == 1) {
if (DEBUG) Log.d(TAG, "setListening " + true);
mHandler.obtainMessage(H.SET_LISTENING, 1, 0).sendToTarget();
refreshState(); // Ensure we get at least one refresh after listening.
}
} else {
if (mListeners.remove(listener) && mListeners.size() == 0) {
if (DEBUG) Log.d(TAG, "setListening " + false);
mHandler.obtainMessage(H.SET_LISTENING, 0, 0).sendToTarget();
}
}
mHandler.obtainMessage(H.SET_LISTENING, listening ? 1 : 0, 0, listener).sendToTarget();
}
protected long getStaleTimeout() {
@@ -205,19 +195,10 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
logMaker.addTaggedData(FIELD_QS_VALUE, ((BooleanState) mState).value ? 1 : 0);
}
return logMaker.setSubtype(getMetricsCategory())
.addTaggedData(FIELD_CONTEXT, isFullQs())
.addTaggedData(FIELD_CONTEXT, mIsFullQs)
.addTaggedData(FIELD_QS_POSITION, mHost.indexOf(mTileSpec));
}
private int isFullQs() {
for (Object listener : mListeners) {
if (TilePage.class.equals(listener.getClass())) {
return 1;
}
}
return 0;
}
public void showDetail(boolean show) {
mHandler.obtainMessage(H.SHOW_DETAIL, show ? 1 : 0, 0).sendToTarget();
}
@@ -352,6 +333,32 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
handleRefreshState(null);
}
private void handleSetListeningInternal(Object listener, boolean listening) {
if (listening) {
if (mListeners.add(listener) && mListeners.size() == 1) {
if (DEBUG) Log.d(TAG, "handleSetListening true");
handleSetListening(listening);
refreshState(); // Ensure we get at least one refresh after listening.
}
} else {
if (mListeners.remove(listener) && mListeners.size() == 0) {
if (DEBUG) Log.d(TAG, "handleSetListening false");
handleSetListening(listening);
}
}
updateIsFullQs();
}
private void updateIsFullQs() {
for (Object listener : mListeners) {
if (TilePage.class.equals(listener.getClass())) {
mIsFullQs = 1;
return;
}
}
mIsFullQs = 0;
}
protected abstract void handleSetListening(boolean listening);
protected void handleDestroy() {
@@ -464,8 +471,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
name = "handleClearState";
handleClearState();
} else if (msg.what == SET_LISTENING) {
name = "handleSetListening";
handleSetListening(msg.arg1 != 0);
name = "handleSetListeningInternal";
handleSetListeningInternal(msg.obj, msg.arg1 != 0);
} else if (msg.what == STALE) {
name = "handleStale";
handleStale();