Merge "Make QSTileImpl#mListeners thread safe." into pi-dev
am: 3bfa02a114
Change-Id: Iff73fc24b669ead73d67091805d809c60953e2e2
This commit is contained in:
@@ -85,6 +85,7 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
|
|||||||
private String mTileSpec;
|
private String mTileSpec;
|
||||||
private EnforcedAdmin mEnforcedAdmin;
|
private EnforcedAdmin mEnforcedAdmin;
|
||||||
private boolean mShowingDetail;
|
private boolean mShowingDetail;
|
||||||
|
private int mIsFullQs;
|
||||||
|
|
||||||
public abstract TState newTileState();
|
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.
|
* listening client it will go into the listening state.
|
||||||
*/
|
*/
|
||||||
public void setListening(Object listener, boolean listening) {
|
public void setListening(Object listener, boolean listening) {
|
||||||
if (listening) {
|
mHandler.obtainMessage(H.SET_LISTENING, listening ? 1 : 0, 0, listener).sendToTarget();
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected long getStaleTimeout() {
|
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);
|
logMaker.addTaggedData(FIELD_QS_VALUE, ((BooleanState) mState).value ? 1 : 0);
|
||||||
}
|
}
|
||||||
return logMaker.setSubtype(getMetricsCategory())
|
return logMaker.setSubtype(getMetricsCategory())
|
||||||
.addTaggedData(FIELD_CONTEXT, isFullQs())
|
.addTaggedData(FIELD_CONTEXT, mIsFullQs)
|
||||||
.addTaggedData(FIELD_QS_POSITION, mHost.indexOf(mTileSpec));
|
.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) {
|
public void showDetail(boolean show) {
|
||||||
mHandler.obtainMessage(H.SHOW_DETAIL, show ? 1 : 0, 0).sendToTarget();
|
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);
|
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 abstract void handleSetListening(boolean listening);
|
||||||
|
|
||||||
protected void handleDestroy() {
|
protected void handleDestroy() {
|
||||||
@@ -464,8 +471,8 @@ public abstract class QSTileImpl<TState extends State> implements QSTile {
|
|||||||
name = "handleClearState";
|
name = "handleClearState";
|
||||||
handleClearState();
|
handleClearState();
|
||||||
} else if (msg.what == SET_LISTENING) {
|
} else if (msg.what == SET_LISTENING) {
|
||||||
name = "handleSetListening";
|
name = "handleSetListeningInternal";
|
||||||
handleSetListening(msg.arg1 != 0);
|
handleSetListeningInternal(msg.obj, msg.arg1 != 0);
|
||||||
} else if (msg.what == STALE) {
|
} else if (msg.what == STALE) {
|
||||||
name = "handleStale";
|
name = "handleStale";
|
||||||
handleStale();
|
handleStale();
|
||||||
|
|||||||
Reference in New Issue
Block a user