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)); + } }