[Provider Model] 1. Use the original string for Calls & SMS 2. Set preferred status in Call & SMS

1.
UX modify the string in document

Dual SIMs:
    Calls & SMS
    Google Fi (preferred), AT&T

    Calls & SMS
    Google Fi (preferred for calls), AT&T (preferred for SMS)

    Calls & SMS
    Google Fi (Temporarily unavailable), AT&T

Single SIM:
    Calls & SMS
    Temporarily unavailable

2.
UX: https://screenshot.googleplex.com/B9BETTwRoa4mfds.png
Implementation: https://screenshot.googleplex.com/4vxMLBynwdTvhEs.png

Bug: 178916743
Test: make
Change-Id: I444eb0e3361707764dae18b9fa942c7f7a80a2c6
This commit is contained in:
Zoey Chen
2021-02-04 14:16:48 +08:00
parent 2184c4eecc
commit 35dcb7c7f1
6 changed files with 136 additions and 16 deletions

View File

@@ -20,8 +20,10 @@ import static androidx.lifecycle.Lifecycle.Event;
import android.content.Context;
import android.os.UserManager;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.LifecycleObserver;
@@ -31,6 +33,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -45,7 +48,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
private UserManager mUserManager;
private SubscriptionManager mSubscriptionManager;
private SubscriptionsChangeListener mSubscriptionsChangeListener;
private TelephonyManager mTelephonyManager;
private RestrictedPreference mPreference;
/**
@@ -57,6 +60,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
mUserManager = context.getSystemService(UserManager.class);
mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
if (lifecycle != null) {
mSubscriptionsChangeListener = new SubscriptionsChangeListener(context, this);
lifecycle.addObserver(this);
@@ -91,16 +95,18 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
final StringBuilder summary = new StringBuilder();
for (SubscriptionInfo subInfo : subs) {
int subsSize = subs.size();
int subId = subInfo.getSubscriptionId();
final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
subInfo, mContext);
// Set displayName as summary if there is only one valid SIM.
if (subsSize == 1
&& SubscriptionManager.isValidSubscriptionId(subInfo.getSubscriptionId())) {
&& SubscriptionManager.isValidSubscriptionId(subId)
&& isInService(subId)) {
return displayName;
}
CharSequence status = getPreferredStatus(subInfo);
CharSequence status = getPreferredStatus(subsSize, subId);
if (status.toString().isEmpty()) {
// If there are 2 or more SIMs and one of these has no preferred status,
// set only its displayName as summary.
@@ -121,14 +127,14 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
}
@VisibleForTesting
protected CharSequence getPreferredStatus(SubscriptionInfo subInfo) {
final int subId = subInfo.getSubscriptionId();
protected CharSequence getPreferredStatus(int subsSize, int subId) {
String status = "";
boolean isDataPreferred = subId == getDefaultVoiceSubscriptionId();
boolean isSmsPreferred = subId == getDefaultSmsSubscriptionId();
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
status = setSummaryResId(R.string.calls_sms_unavailable);
if (!SubscriptionManager.isValidSubscriptionId(subId) || !isInService(subId)) {
status = setSummaryResId(subsSize > 1 ? R.string.calls_sms_unavailable :
R.string.calls_sms_temp_unavailable);
} else {
if (isDataPreferred && isSmsPreferred) {
status = setSummaryResId(R.string.calls_sms_preferred);
@@ -203,4 +209,11 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
refreshSummary(mPreference);
update();
}
@VisibleForTesting
protected boolean isInService(int subId) {
ServiceState serviceState =
mTelephonyManager.createForSubscriptionId(subId).getServiceState();
return Utils.isInService(serviceState);
}
}