From f6b38c22d33229b151700f57a2888403ee800955 Mon Sep 17 00:00:00 2001 From: Ying Xu Date: Mon, 5 Dec 2022 14:56:56 -0800 Subject: [PATCH] Use mWifiInfo to refresh Internet Tile when APM is enabled. Since Android T QPR1, Wifi can now remain on when entering airplane mode. So the Interent tile will show different information depending on whether WiFi is enabled or not. On the other hand, Cellular will always be disabled whenever APM is enabled. Bug: 259007266 Test: unit tests, manual tests atest -c com.android.systemui.qs.tiles.InternetTileTest Change-Id: Ie47a687dec90dee307dddbbe35e07a1887a3db55 --- .../systemui/qs/tiles/InternetTile.java | 9 +++++++- .../systemui/qs/tiles/InternetTileTest.java | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) 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 e43d4c8a34eb9..51de5227b7d44 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java @@ -329,7 +329,14 @@ public class InternetTile extends QSTileImpl { mCellularInfo.mAirplaneModeEnabled = icon.visible; mWifiInfo.mAirplaneModeEnabled = icon.visible; if (!mSignalCallback.mEthernetInfo.mConnected) { - if (mWifiInfo.mEnabled && (mWifiInfo.mWifiSignalIconId > 0) + // Always use mWifiInfo to refresh the Internet Tile if airplane mode is enabled, + // because Internet Tile will show different information depending on whether WiFi + // is enabled or not. + if (mWifiInfo.mAirplaneModeEnabled) { + refreshState(mWifiInfo); + // If airplane mode is disabled, we will use mWifiInfo to refresh the Internet Tile + // if WiFi is currently connected to avoid any icon flickering. + } else if (mWifiInfo.mEnabled && (mWifiInfo.mWifiSignalIconId > 0) && (mWifiInfo.mSsid != null)) { refreshState(mWifiInfo); } else { 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 d91baa5e7fcb2..80c39cf9e4cd1 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 @@ -23,6 +23,7 @@ import static org.mockito.Mockito.when; import android.os.Handler; +import android.service.quicksettings.Tile; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; @@ -38,6 +39,7 @@ import com.android.systemui.qs.QSTileHost; import com.android.systemui.qs.logging.QSLogger; 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 org.junit.Before; @@ -113,4 +115,24 @@ public class InternetTileTest extends SysuiTestCase { .isNotEqualTo(mContext.getString(R.string.quick_settings_networks_available)); assertThat(mTile.getLastTileState()).isEqualTo(-1); } + + @Test + public void setIsAirplaneMode_APM_enabled_wifi_disabled() { + IconState state = new IconState(true, 0, ""); + mTile.mSignalCallback.setIsAirplaneMode(state); + mTestableLooper.processAllMessages(); + assertThat(mTile.getState().state).isEqualTo(Tile.STATE_INACTIVE); + assertThat(mTile.getState().secondaryLabel) + .isEqualTo(mContext.getString(R.string.status_bar_airplane)); + } + + @Test + public void setIsAirplaneMode_APM_enabled_wifi_enabled() { + IconState state = new IconState(false, 0, ""); + mTile.mSignalCallback.setIsAirplaneMode(state); + mTestableLooper.processAllMessages(); + assertThat(mTile.getState().state).isEqualTo(Tile.STATE_ACTIVE); + assertThat(mTile.getState().secondaryLabel) + .isNotEqualTo(mContext.getString(R.string.status_bar_airplane)); + } }