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
This commit is contained in:
Ying Xu
2022-12-05 14:56:56 -08:00
parent 5b7da895e2
commit f6b38c22d3
2 changed files with 30 additions and 1 deletions

View File

@@ -329,7 +329,14 @@ public class InternetTile extends QSTileImpl<SignalState> {
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 {

View File

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