From a758ba6be9278a7038ee0ed81e5b790034d31c92 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 14 Jul 2015 12:29:28 -0400 Subject: [PATCH] Fix QS labels on language change Some tiles now won't do updates if the state hasn't changed (rotation) to avoid breaking the animation state. To handle this, state is cleared when the configuration changes. Bug: 22206214 Change-Id: I029fb4c75cc920a6c9907b65e8c48d28c21d529a --- .../src/com/android/systemui/qs/QSPanel.java | 3 +++ .../src/com/android/systemui/qs/QSTile.java | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 2ded9194d32da..94d517086789c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -158,6 +158,9 @@ public class QSPanel extends ViewGroup { mColumns = columns; postInvalidate(); } + for (TileRecord r : mRecords) { + r.tile.clearState(); + } if (mListening) { refreshAllTiles(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java index 38fade21390f4..b330582089c4a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java @@ -61,8 +61,8 @@ public abstract class QSTile implements Listenable { protected final Handler mUiHandler = new Handler(Looper.getMainLooper()); private Callback mCallback; - protected final TState mState = newTileState(); - private final TState mTmpState = newTileState(); + protected TState mState = newTileState(); + private TState mTmpState = newTileState(); private boolean mAnnounceNextStateChange; abstract protected TState newTileState(); @@ -139,6 +139,10 @@ public abstract class QSTile implements Listenable { mHandler.obtainMessage(H.REFRESH_STATE, arg).sendToTarget(); } + public final void clearState() { + mHandler.sendEmptyMessage(H.CLEAR_STATE); + } + public void userSwitch(int newUserId) { mHandler.obtainMessage(H.USER_SWITCH, newUserId, 0).sendToTarget(); } @@ -178,6 +182,11 @@ public abstract class QSTile implements Listenable { // optional } + protected void handleClearState() { + mTmpState = newTileState(); + mState = newTileState(); + } + protected void handleRefreshState(Object arg) { handleUpdateState(mTmpState, arg); final boolean changed = mTmpState.copyTo(mState); @@ -246,6 +255,7 @@ public abstract class QSTile implements Listenable { private static final int TOGGLE_STATE_CHANGED = 8; private static final int SCAN_STATE_CHANGED = 9; private static final int DESTROY = 10; + private static final int CLEAR_STATE = 11; private H(Looper looper) { super(looper); @@ -286,6 +296,9 @@ public abstract class QSTile implements Listenable { } else if (msg.what == DESTROY) { name = "handleDestroy"; handleDestroy(); + } else if (msg.what == CLEAR_STATE) { + name = "handleClearState"; + handleClearState(); } else { throw new IllegalArgumentException("Unknown msg: " + msg.what); }