diff options
3 files changed, 35 insertions, 17 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 07406b98f8be..f3ad9d803394 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -45,6 +45,8 @@ public class CellularTile extends QSTile<QSTile.SignalState> {      private final MobileDataController mDataController;      private final CellularDetailAdapter mDetailAdapter; +    private final CellSignalCallback mSignalCallback = new CellSignalCallback(); +      public CellularTile(Host host) {          super(host);          mController = host.getNetworkController(); @@ -90,8 +92,10 @@ public class CellularTile extends QSTile<QSTile.SignalState> {      protected void handleUpdateState(SignalState state, Object arg) {          state.visible = mController.hasMobileDataFeature();          if (!state.visible) return; -        final CallbackInfo cb = (CallbackInfo) arg; -        if (cb == null) return; +        CallbackInfo cb = (CallbackInfo) arg; +        if (cb == null) { +            cb = mSignalCallback.mInfo; +        }          final Resources r = mContext.getResources();          final int iconId = cb.noSim ? R.drawable.ic_qs_no_sim @@ -152,7 +156,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> {          boolean isDataTypeIconWide;      } -    private final SignalCallback mSignalCallback = new SignalCallbackAdapter() { +    private final class CellSignalCallback extends SignalCallbackAdapter {          private final CallbackInfo mInfo = new CallbackInfo();          @Override          public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java index f7f7acb8a072..3d0dc7b5c1a2 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java @@ -45,6 +45,8 @@ public class IntentTile extends QSTile<QSTile.State> {      private int mCurrentUserId;      private String mIntentPackage; +    private Intent mLastIntent; +      private IntentTile(Host host, String action) {          super(host);          mContext.registerReceiver(mReceiver, new IntentFilter(action)); @@ -112,8 +114,16 @@ public class IntentTile extends QSTile<QSTile.State> {      @Override      protected void handleUpdateState(State state, Object arg) { -        if (!(arg instanceof Intent)) return; -        final Intent intent = (Intent) arg; +        Intent intent = (Intent) arg; +        if (intent == null) { +            if (mLastIntent == null) { +                return; +            } +            // No intent but need to refresh state, just use the last one. +            intent = mLastIntent; +        } +        // Save the last one in case we need it later. +        mLastIntent = intent;          state.visible = intent.getBooleanExtra("visible", true);          state.contentDescription = intent.getStringExtra("contentDescription");          state.label = intent.getStringExtra("label"); 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 3bfff2faba08..e654efd4dd2a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -35,7 +35,6 @@ import com.android.systemui.qs.SignalTileView;  import com.android.systemui.statusbar.policy.NetworkController;  import com.android.systemui.statusbar.policy.NetworkController.AccessPointController;  import com.android.systemui.statusbar.policy.NetworkController.IconState; -import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;  import com.android.systemui.statusbar.policy.SignalCallbackAdapter;  import java.util.List; @@ -49,6 +48,8 @@ public class WifiTile extends QSTile<QSTile.SignalState> {      private final WifiDetailAdapter mDetailAdapter;      private final QSTile.SignalState mStateBeforeClick = newTileState(); +    private final WifiSignalCallback mSignalCallback = new WifiSignalCallback(); +      public WifiTile(Host host) {          super(host);          mController = host.getNetworkController(); @@ -118,8 +119,10 @@ 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); -        if (arg == null) return;          CallbackInfo cb = (CallbackInfo) arg; +        if (cb == null) { +            cb = mSignalCallback.mInfo; +        }          boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.enabledDesc != null);          boolean wifiNotConnected = (cb.wifiSignalIconId > 0) && (cb.enabledDesc == null); @@ -213,20 +216,21 @@ public class WifiTile extends QSTile<QSTile.SignalState> {          }      } -    private final SignalCallback mSignalCallback = new SignalCallbackAdapter() { +    private final class WifiSignalCallback extends SignalCallbackAdapter { +        final CallbackInfo mInfo = new CallbackInfo(); +          @Override          public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,                  boolean activityIn, boolean activityOut, String description) {              if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + enabled); -            final CallbackInfo info = new CallbackInfo(); -            info.enabled = enabled; -            info.connected = qsIcon.visible; -            info.wifiSignalIconId = qsIcon.icon; -            info.enabledDesc = description; -            info.activityIn = activityIn; -            info.activityOut = activityOut; -            info.wifiSignalContentDescription = qsIcon.contentDescription; -            refreshState(info); +            mInfo.enabled = enabled; +            mInfo.connected = qsIcon.visible; +            mInfo.wifiSignalIconId = qsIcon.icon; +            mInfo.enabledDesc = description; +            mInfo.activityIn = activityIn; +            mInfo.activityOut = activityOut; +            mInfo.wifiSignalContentDescription = qsIcon.contentDescription; +            refreshState(mInfo);          }      };  |