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

@@ -12592,13 +12592,15 @@
<!-- Provider Model: SMS preference title -->
<string name="sms_preference_title">SMS</string>
<!-- Provider Model: Preferred status in summary for Calls & SMS -->
<string name="calls_sms_preferred">Preferred for calls &amp; SMS</string>
<string name="calls_sms_preferred">preferred</string>
<!-- Provider Model: Calls Preferred status in summary for Calls & SMS -->
<string name="calls_sms_calls_preferred">Preferred for calls</string>
<string name="calls_sms_calls_preferred">preferred for calls</string>
<!-- Provider Model: SMS Preferred status in summary for Calls & SMS -->
<string name="calls_sms_sms_preferred">Preferred for SMS</string>
<string name="calls_sms_sms_preferred">preferred for SMS</string>
<!-- Provider Model: Unavailable status in summary for Calls & SMS -->
<string name="calls_sms_unavailable">Temporarily unavailable</string>
<string name="calls_sms_unavailable">unavailable</string>
<!-- Provider Model: Temporarily unavailable status in summary for Calls & SMS -->
<string name="calls_sms_temp_unavailable">Temporarily unavailable</string>
<!-- Provider Model: No SIM status in summary for Calls & SMS -->
<string name="calls_sms_no_sim">No SIM</string>
<!-- Network & internet preferences title [CHAR LIMIT=NONE] -->

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

View File

@@ -93,7 +93,7 @@ public class NetworkProviderCallsSmsControllerTest {
private int mDefaultVoiceSubscriptionId;
private int mDefaultSmsSubscriptionId;
private boolean mIsInService;
@Override
protected int getDefaultVoiceSubscriptionId() {
return mDefaultVoiceSubscriptionId;
@@ -104,6 +104,11 @@ public class NetworkProviderCallsSmsControllerTest {
return mDefaultSmsSubscriptionId;
}
@Override
protected boolean isInService(int subId) {
return mIsInService;
}
public void setDefaultVoiceSubscriptionId(int subscriptionId) {
mDefaultVoiceSubscriptionId = subscriptionId;
}
@@ -111,6 +116,10 @@ public class NetworkProviderCallsSmsControllerTest {
public void setDefaultSmsSubscriptionId(int subscriptionId) {
mDefaultSmsSubscriptionId = subscriptionId;
}
public void setInService(boolean inService) {
mIsInService = inService;
}
}
@Before
@@ -128,7 +137,7 @@ public class NetworkProviderCallsSmsControllerTest {
mPreference = new RestrictedPreference(mContext);
mPreference.setKey(KEY_PREFERENCE_CALLS_SMS);
mController = new MockNetworkProviderCallsSmsController(mContext, mLifecycle);
mController.setInService(true);
mLifecycleRegistry = new LifecycleRegistry(mLifecycleOwner);
when(mLifecycleOwner.getLifecycle()).thenReturn(mLifecycleRegistry);
}
@@ -176,7 +185,7 @@ public class NetworkProviderCallsSmsControllerTest {
final StringBuilder summary = new StringBuilder();
summary.append(DISPLAY_NAME_1)
.append(" (")
.append(setSummaryResId("calls_sms_unavailable"))
.append(setSummaryResId("calls_sms_temp_unavailable"))
.append(")");
assertTrue(TextUtils.equals(mController.getSummary(), summary));