[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:
@@ -12561,13 +12561,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 & 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] -->
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
|
Reference in New Issue
Block a user