Check ServiceState when showing dialog

When showing the dialog the first time cellular data is turned off from
QS, check if the data network is in service. If it's not, do not believe
the carrier name and use a generic string instead.

Test: atest NetworkControllerDataTest
Bug: 156238588
Change-Id: Iee8091921ecdaba0c18f67080348240b8b8f67a7
This commit is contained in:
Fabian Kozynski
2020-08-20 13:55:17 -04:00
parent d7efb1175a
commit 15012a9acb
6 changed files with 40 additions and 1 deletions

View File

@@ -130,7 +130,8 @@ public class CellularTile extends QSTileImpl<SignalState> {
return;
}
String carrierName = mController.getMobileDataNetworkName();
if (TextUtils.isEmpty(carrierName)) {
boolean isInService = mController.isMobileDataNetworkInService();
if (TextUtils.isEmpty(carrierName) || !isInService) {
carrierName = mContext.getString(R.string.mobile_data_disable_message_default_carrier);
}
AlertDialog dialog = new Builder(mContext)

View File

@@ -418,6 +418,10 @@ public class MobileSignalController extends SignalController<
return (mServiceState != null && mServiceState.isEmergencyOnly());
}
public boolean isInService() {
return Utils.isInService(mServiceState);
}
private boolean isRoaming() {
// During a carrier change, roaming indications need to be supressed.
if (isCarrierNetworkChangeActive()) {

View File

@@ -35,6 +35,7 @@ public interface NetworkController extends CallbackController<SignalCallback>, D
DataUsageController getMobileDataController();
DataSaverController getDataSaverController();
String getMobileDataNetworkName();
boolean isMobileDataNetworkInService();
int getNumberSubscriptions();
boolean hasVoiceCallingFeature();

View File

@@ -459,6 +459,12 @@ public class NetworkControllerImpl extends BroadcastReceiver
return controller != null ? controller.getState().networkNameData : "";
}
@Override
public boolean isMobileDataNetworkInService() {
MobileSignalController controller = getDataController();
return controller != null && controller.isInService();
}
@Override
public int getNumberSubscriptions() {
return mMobileSignalControllers.size();

View File

@@ -3,6 +3,8 @@ package com.android.systemui.statusbar.policy;
import static android.telephony.AccessNetworkConstants.TRANSPORT_TYPE_WWAN;
import static android.telephony.NetworkRegistrationInfo.DOMAIN_PS;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -10,6 +12,7 @@ import static org.mockito.Mockito.when;
import android.net.NetworkCapabilities;
import android.os.Looper;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
@@ -259,6 +262,25 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
assertDataNetworkNameEquals(newDataName);
}
@Test
public void testIsDataInService_true() {
setupDefaultSignal();
assertTrue(mNetworkController.isMobileDataNetworkInService());
}
@Test
public void testIsDataInService_noSignal_false() {
assertFalse(mNetworkController.isMobileDataNetworkInService());
}
@Test
public void testIsDataInService_notInService_false() {
setupDefaultSignal();
setVoiceRegState(ServiceState.STATE_OUT_OF_SERVICE);
setDataRegState(ServiceState.STATE_OUT_OF_SERVICE);
assertFalse(mNetworkController.isMobileDataNetworkInService());
}
private void testDataActivity(int direction, boolean in, boolean out) {
updateDataActivity(direction);

View File

@@ -94,6 +94,11 @@ public class FakeNetworkController extends BaseLeakChecker<SignalCallback>
return "";
}
@Override
public boolean isMobileDataNetworkInService() {
return false;
}
@Override
public int getNumberSubscriptions() {
return 0;