Fix some problems with the "Mobile network" preference

This fixes a few issues with the "Mobile network" preference that shows
on the Network & internet page:

-The pref should not be available at all if the device is wifi-only.

-The pref should be disabled in airplane mode.

-If eSIM support is disabled, we need to disable entry points for adding
 a new eSIM subscription (the summary and click handler in single-SIM
 mode with no physical SIM, and the 'add' button in dual-SIM mode).

Bug: 116349402
Test: make RunSettingsRoboTests
Change-Id: Ic6fe426e9f890d80b399d48a2c9984d4d8b02a10
This commit is contained in:
Antony Sargent
2019-02-08 16:41:30 -08:00
parent 12cec79889
commit 475dde51b6
3 changed files with 132 additions and 14 deletions

View File

@@ -31,6 +31,7 @@ import android.telephony.euicc.EuiccManager;
import com.android.settings.R;
import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.widget.AddPreference;
import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
import java.util.List;
@@ -50,6 +51,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
private SubscriptionManager mSubscriptionManager;
private SubscriptionsChangeListener mChangeListener;
private TelephonyManager mTelephonyMgr;
private EuiccManager mEuiccManager;
private AddPreference mPreference;
/**
@@ -71,6 +73,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
super(context);
mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
mTelephonyMgr = mContext.getSystemService(TelephonyManager.class);
mEuiccManager = mContext.getSystemService(EuiccManager.class);
mChangeListener = new SubscriptionsChangeListener(context, this);
lifecycle.addObserver(this);
}
@@ -97,7 +100,11 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
mSubscriptionManager);
if (subs.isEmpty()) {
return mContext.getResources().getString(R.string.mobile_network_summary_add_a_network);
if (mEuiccManager.isEnabled()) {
return mContext.getResources().getString(
R.string.mobile_network_summary_add_a_network);
}
return null;
} else if (subs.size() == 1) {
return subs.get(0).getDisplayName();
} else {
@@ -112,20 +119,22 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
mContext.startActivity(intent);
}
private boolean shouldEnableAddButton() {
// The add button should only show up if the device is in multi-sim mode.
return mTelephonyMgr.getMultiSimConfiguration() != UNKNOWN;
private boolean shouldShowAddButton() {
// The add button should only show up if the device is in multi-sim mode and the eSIM
// manager is enabled.
return mTelephonyMgr.getMultiSimConfiguration() != UNKNOWN && mEuiccManager.isEnabled();
}
private void update() {
if (mPreference == null) {
return;
}
final boolean enableAddButton = shouldEnableAddButton();
final boolean showAddButton = shouldShowAddButton();
refreshSummary(mPreference);
if (!enableAddButton) {
if (!showAddButton) {
mPreference.setOnAddClickListener(null);
} else {
mPreference.setAddWidgetEnabled(!mChangeListener.isAirplaneModeOn());
mPreference.setOnAddClickListener(p -> {
startAddSimFlow();
});
@@ -134,11 +143,11 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
mSubscriptionManager);
mPreference.setOnPreferenceClickListener(null);
mPreference.setFragment(null);
mPreference.setEnabled(true);
mPreference.setEnabled(!mChangeListener.isAirplaneModeOn());
if (subs.isEmpty()) {
if (enableAddButton) {
if (showAddButton) {
mPreference.setEnabled(false);
} else {
} else if (mEuiccManager.isEnabled()) {
mPreference.setOnPreferenceClickListener((Preference pref) -> {
startAddSimFlow();
return true;
@@ -157,7 +166,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
@Override
public boolean isAvailable() {
return true;
return !Utils.isWifiOnly(mContext);
}
@Override
@@ -167,6 +176,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
@Override
public void onAirplaneModeChanged(boolean airplaneModeEnabled) {
update();
}
@Override