diff options
author | Roman Birg <roman@cyngn.com> | 2015-10-19 11:38:18 -0700 |
---|---|---|
committer | Roman Birg <roman@cyngn.com> | 2016-01-27 14:09:21 -0800 |
commit | fdbad83415498d8e7126104bf365948452a5aadb (patch) | |
tree | d959b958ee69d6c11b89fa1ff471bca3ecf35a65 | |
parent | b4c3428e06a8a2e3b3bb4f055b5829b233fea499 (diff) | |
download | frameworks_base-fdbad83415498d8e7126104bf365948452a5aadb.zip frameworks_base-fdbad83415498d8e7126104bf365948452a5aadb.tar.gz frameworks_base-fdbad83415498d8e7126104bf365948452a5aadb.tar.bz2 |
Wifi tile: don't set items visible from non-ui thread
This can lead to the items disappearing sometimes.
Ref: CYNGNOS-1241 CYNGNOS-1644
Change-Id: Iea3e0467b56ae17f266c99b02866f8981b5007d7
Signed-off-by: Roman Birg <roman@cyngn.com>
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index b25390e..abc9acd 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -20,6 +20,7 @@ package com.android.systemui.qs.tiles; import android.content.Context; import android.content.Intent; import android.content.res.Resources; +import android.os.Looper; import android.provider.Settings; import android.util.Log; import android.view.View; @@ -131,16 +132,28 @@ public class WifiTile extends QSTile<QSTile.SignalState> { protected void handleUpdateState(SignalState state, Object arg) { state.visible = true; if (DEBUG) Log.d(TAG, "handleUpdateState arg=" + arg); - CallbackInfo cb = (CallbackInfo) arg; - if (cb == null) { + final CallbackInfo cb; + if (arg == null) { cb = mSignalCallback.mInfo; + } else { + cb = (CallbackInfo) arg; } boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.enabledDesc != null); boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.enabledDesc == null); boolean enabledChanging = state.enabled != cb.enabled; if (enabledChanging) { - mDetailAdapter.setItemsVisible(cb.enabled); + if (Looper.myLooper() == Looper.getMainLooper()) { + // on main thread, bypass the handler + mDetailAdapter.setItemsVisible(cb.enabled); + } else { + mUiHandler.post(new Runnable() { + @Override + public void run() { + mDetailAdapter.setItemsVisible(cb.enabled); + } + }); + } fireToggleStateChanged(cb.enabled); } state.enabled = cb.enabled; |