From aa96eb62609230f50b622f3e5138972c2ef7dd0d Mon Sep 17 00:00:00 2001 From: Ying Xu Date: Mon, 30 Jan 2023 09:59:12 -0800 Subject: [PATCH] Update the WiFiInfo in the InternetTile when qsIcon is null Previously when MobileDataIndicators.qsIcon is null, the WiFiInfo cached in the InternetTile is not correctly updated, so whenever APM is enabled, the stale WiFiInfo will be used to determine the Icon of the InternetTile. Bug: 266262663 Test: Manual test, atest -c com.android.systemui.qs.tiles.InternetTileTest Change-Id: I68955157236d150413e14b60b946b866a370883d --- .../systemui/qs/tiles/InternetTile.java | 18 ++++++++------- .../systemui/qs/tiles/InternetTileTest.java | 22 +++++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java index 51de5227b7d44..b155e13489dd1 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java @@ -255,17 +255,19 @@ public class InternetTile extends QSTileImpl { Log.d(TAG, "setWifiIndicators: " + indicators); } mWifiInfo.mEnabled = indicators.enabled; - if (indicators.qsIcon == null) { - return; - } - mWifiInfo.mConnected = indicators.qsIcon.visible; - mWifiInfo.mWifiSignalIconId = indicators.qsIcon.icon; - mWifiInfo.mWifiSignalContentDescription = indicators.qsIcon.contentDescription; - mWifiInfo.mEnabled = indicators.enabled; mWifiInfo.mSsid = indicators.description; mWifiInfo.mIsTransient = indicators.isTransient; mWifiInfo.mStatusLabel = indicators.statusLabel; - refreshState(mWifiInfo); + if (indicators.qsIcon != null) { + mWifiInfo.mConnected = indicators.qsIcon.visible; + mWifiInfo.mWifiSignalIconId = indicators.qsIcon.icon; + mWifiInfo.mWifiSignalContentDescription = indicators.qsIcon.contentDescription; + refreshState(mWifiInfo); + } else { + mWifiInfo.mConnected = false; + mWifiInfo.mWifiSignalIconId = 0; + mWifiInfo.mWifiSignalContentDescription = null; + } } @Override diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java index 80c39cf9e4cd1..addca9d28d1ab 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/InternetTileTest.java @@ -37,10 +37,12 @@ import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; +import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.qs.tiles.dialog.InternetDialogFactory; import com.android.systemui.statusbar.connectivity.AccessPointController; import com.android.systemui.statusbar.connectivity.IconState; import com.android.systemui.statusbar.connectivity.NetworkController; +import com.android.systemui.statusbar.connectivity.WifiIndicators; import org.junit.Before; import org.junit.Test; @@ -135,4 +137,24 @@ public class InternetTileTest extends SysuiTestCase { assertThat(mTile.getState().secondaryLabel) .isNotEqualTo(mContext.getString(R.string.status_bar_airplane)); } + + @Test + public void setIsAirplaneMode_APM_enabled_after_wifi_disconnected() { + WifiIndicators wifiIndicators = new WifiIndicators( + /* enabled= */ true, + /* statusIcon= */ null, + /* qsIcon= */ null, + /* activityIn= */ false, + /* activityOut= */ false, + /* description= */ null, + /* isTransient= */ false, + /* statusLabel= */ null + ); + mTile.mSignalCallback.setWifiIndicators(wifiIndicators); + IconState state = new IconState(true, 0, ""); + mTile.mSignalCallback.setIsAirplaneMode(state); + mTestableLooper.processAllMessages(); + assertThat(mTile.getState().icon).isEqualTo( + QSTileImpl.ResourceIcon.get(R.drawable.ic_qs_no_internet_unavailable)); + } }