Merge "[Provider Model] 1. Use the original string for Calls & SMS 2. Set preferred status in Call & SMS" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-02-09 01:09:11 +00:00
committed by Android (Google) Code Review
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);
}
}

View File

@@ -20,6 +20,8 @@ import android.content.Context;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import com.android.settings.Utils;
public class CallsDefaultSubscriptionController extends DefaultSubscriptionController {
public CallsDefaultSubscriptionController(Context context, String preferenceKey) {
@@ -40,4 +42,13 @@ public class CallsDefaultSubscriptionController extends DefaultSubscriptionContr
protected void setDefaultSubscription(int subscriptionId) {
mManager.setDefaultVoiceSubscriptionId(subscriptionId);
}
@Override
public CharSequence getSummary() {
if (Utils.isProviderModelEnabled(mContext)) {
return MobileNetworkUtils.getPreferredStatus(mContext, mManager, true);
} else {
return super.getSummary();
}
}
}

View File

@@ -73,6 +73,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -600,8 +601,7 @@ public class MobileNetworkUtils {
final Drawable networkDrawable =
iconType == NO_CELL_DATA_TYPE_ICON
? EMPTY_DRAWABLE
: context
.getResources().getDrawable(iconType, context.getTheme());
: context.getResources().getDrawable(iconType, context.getTheme());
// Overlay the two drawables
final Drawable[] layers = {networkDrawable, signalDrawable};
@@ -920,4 +920,78 @@ public class MobileNetworkUtils {
}
return isWifiCallingEnabled;
}
/**
* Returns preferred status of Calls & SMS separately when Provider Model is enabled.
*/
public static CharSequence getPreferredStatus(Context context,
SubscriptionManager subscriptionManager, boolean isPreferredCallStatus) {
final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(
subscriptionManager);
if (!subs.isEmpty()) {
final StringBuilder summary = new StringBuilder();
for (SubscriptionInfo subInfo : subs) {
int subsSize = subs.size();
final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
subInfo, context);
// Set displayName as summary if there is only one valid SIM.
if (subsSize == 1
&& SubscriptionManager.isValidSubscriptionId(subInfo.getSubscriptionId())) {
return displayName;
}
CharSequence status = isPreferredCallStatus
? getPreferredCallStatus(context, subInfo)
: getPreferredSmsStatus(context, subInfo);
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.
summary.append(displayName);
} else {
summary.append(displayName)
.append(" (")
.append(status)
.append(")");
}
// Do not add ", " for the last subscription.
if (subInfo != subs.get(subs.size() - 1)) {
summary.append(", ");
}
}
return summary;
} else {
return "";
}
}
private static CharSequence getPreferredCallStatus(Context context, SubscriptionInfo subInfo) {
final int subId = subInfo.getSubscriptionId();
String status = "";
boolean isDataPreferred = subId == SubscriptionManager.getDefaultVoiceSubscriptionId();
if (isDataPreferred) {
status = setSummaryResId(context, R.string.calls_sms_preferred);
}
return status;
}
private static CharSequence getPreferredSmsStatus(Context context, SubscriptionInfo subInfo) {
final int subId = subInfo.getSubscriptionId();
String status = "";
boolean isSmsPreferred = subId == SubscriptionManager.getDefaultSmsSubscriptionId();
if (isSmsPreferred) {
status = setSummaryResId(context, R.string.calls_sms_preferred);
}
return status;
}
private static String setSummaryResId(Context context, int resId) {
return context.getResources().getString(resId);
}
}

View File

@@ -21,6 +21,8 @@ import android.telecom.PhoneAccountHandle;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import com.android.settings.Utils;
public class SmsDefaultSubscriptionController extends DefaultSubscriptionController {
private final boolean mIsAskEverytimeSupported;
@@ -56,4 +58,13 @@ public class SmsDefaultSubscriptionController extends DefaultSubscriptionControl
// Not supporting calling account override by VoIP
return null;
}
@Override
public CharSequence getSummary() {
if (Utils.isProviderModelEnabled(mContext)) {
return MobileNetworkUtils.getPreferredStatus(mContext, mManager, false);
} else {
return super.getSummary();
}
}
}