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 --> <!-- Provider Model: SMS preference title -->
<string name="sms_preference_title">SMS</string> <string name="sms_preference_title">SMS</string>
<!-- Provider Model: Preferred status in summary for Calls & SMS --> <!-- 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 --> <!-- 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 --> <!-- 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 --> <!-- 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 --> <!-- Provider Model: No SIM status in summary for Calls & SMS -->
<string name="calls_sms_no_sim">No SIM</string> <string name="calls_sms_no_sim">No SIM</string>
<!-- Network & internet preferences title [CHAR LIMIT=NONE] --> <!-- 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.content.Context;
import android.os.UserManager; import android.os.UserManager;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.LifecycleObserver;
@@ -31,6 +33,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -45,7 +48,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
private UserManager mUserManager; private UserManager mUserManager;
private SubscriptionManager mSubscriptionManager; private SubscriptionManager mSubscriptionManager;
private SubscriptionsChangeListener mSubscriptionsChangeListener; private SubscriptionsChangeListener mSubscriptionsChangeListener;
private TelephonyManager mTelephonyManager;
private RestrictedPreference mPreference; private RestrictedPreference mPreference;
/** /**
@@ -57,6 +60,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
mUserManager = context.getSystemService(UserManager.class); mUserManager = context.getSystemService(UserManager.class);
mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
if (lifecycle != null) { if (lifecycle != null) {
mSubscriptionsChangeListener = new SubscriptionsChangeListener(context, this); mSubscriptionsChangeListener = new SubscriptionsChangeListener(context, this);
lifecycle.addObserver(this); lifecycle.addObserver(this);
@@ -91,16 +95,18 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
final StringBuilder summary = new StringBuilder(); final StringBuilder summary = new StringBuilder();
for (SubscriptionInfo subInfo : subs) { for (SubscriptionInfo subInfo : subs) {
int subsSize = subs.size(); int subsSize = subs.size();
int subId = subInfo.getSubscriptionId();
final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName( final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
subInfo, mContext); subInfo, mContext);
// Set displayName as summary if there is only one valid SIM. // Set displayName as summary if there is only one valid SIM.
if (subsSize == 1 if (subsSize == 1
&& SubscriptionManager.isValidSubscriptionId(subInfo.getSubscriptionId())) { && SubscriptionManager.isValidSubscriptionId(subId)
&& isInService(subId)) {
return displayName; return displayName;
} }
CharSequence status = getPreferredStatus(subInfo); CharSequence status = getPreferredStatus(subsSize, subId);
if (status.toString().isEmpty()) { if (status.toString().isEmpty()) {
// If there are 2 or more SIMs and one of these has no preferred status, // If there are 2 or more SIMs and one of these has no preferred status,
// set only its displayName as summary. // set only its displayName as summary.
@@ -121,14 +127,14 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
} }
@VisibleForTesting @VisibleForTesting
protected CharSequence getPreferredStatus(SubscriptionInfo subInfo) { protected CharSequence getPreferredStatus(int subsSize, int subId) {
final int subId = subInfo.getSubscriptionId();
String status = ""; String status = "";
boolean isDataPreferred = subId == getDefaultVoiceSubscriptionId(); boolean isDataPreferred = subId == getDefaultVoiceSubscriptionId();
boolean isSmsPreferred = subId == getDefaultSmsSubscriptionId(); boolean isSmsPreferred = subId == getDefaultSmsSubscriptionId();
if (!SubscriptionManager.isValidSubscriptionId(subId)) { if (!SubscriptionManager.isValidSubscriptionId(subId) || !isInService(subId)) {
status = setSummaryResId(R.string.calls_sms_unavailable); status = setSummaryResId(subsSize > 1 ? R.string.calls_sms_unavailable :
R.string.calls_sms_temp_unavailable);
} else { } else {
if (isDataPreferred && isSmsPreferred) { if (isDataPreferred && isSmsPreferred) {
status = setSummaryResId(R.string.calls_sms_preferred); status = setSummaryResId(R.string.calls_sms_preferred);
@@ -203,4 +209,11 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
refreshSummary(mPreference); refreshSummary(mPreference);
update(); 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.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import com.android.settings.Utils;
public class CallsDefaultSubscriptionController extends DefaultSubscriptionController { public class CallsDefaultSubscriptionController extends DefaultSubscriptionController {
public CallsDefaultSubscriptionController(Context context, String preferenceKey) { public CallsDefaultSubscriptionController(Context context, String preferenceKey) {
@@ -40,4 +42,13 @@ public class CallsDefaultSubscriptionController extends DefaultSubscriptionContr
protected void setDefaultSubscription(int subscriptionId) { protected void setDefaultSubscription(int subscriptionId) {
mManager.setDefaultVoiceSubscriptionId(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.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.ims.WifiCallingQueryImsState; import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants; import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
@@ -600,8 +601,7 @@ public class MobileNetworkUtils {
final Drawable networkDrawable = final Drawable networkDrawable =
iconType == NO_CELL_DATA_TYPE_ICON iconType == NO_CELL_DATA_TYPE_ICON
? EMPTY_DRAWABLE ? EMPTY_DRAWABLE
: context : context.getResources().getDrawable(iconType, context.getTheme());
.getResources().getDrawable(iconType, context.getTheme());
// Overlay the two drawables // Overlay the two drawables
final Drawable[] layers = {networkDrawable, signalDrawable}; final Drawable[] layers = {networkDrawable, signalDrawable};
@@ -920,4 +920,78 @@ public class MobileNetworkUtils {
} }
return isWifiCallingEnabled; 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.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import com.android.settings.Utils;
public class SmsDefaultSubscriptionController extends DefaultSubscriptionController { public class SmsDefaultSubscriptionController extends DefaultSubscriptionController {
private final boolean mIsAskEverytimeSupported; private final boolean mIsAskEverytimeSupported;
@@ -56,4 +58,13 @@ public class SmsDefaultSubscriptionController extends DefaultSubscriptionControl
// Not supporting calling account override by VoIP // Not supporting calling account override by VoIP
return null; 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 mDefaultVoiceSubscriptionId;
private int mDefaultSmsSubscriptionId; private int mDefaultSmsSubscriptionId;
private boolean mIsInService;
@Override @Override
protected int getDefaultVoiceSubscriptionId() { protected int getDefaultVoiceSubscriptionId() {
return mDefaultVoiceSubscriptionId; return mDefaultVoiceSubscriptionId;
@@ -104,6 +104,11 @@ public class NetworkProviderCallsSmsControllerTest {
return mDefaultSmsSubscriptionId; return mDefaultSmsSubscriptionId;
} }
@Override
protected boolean isInService(int subId) {
return mIsInService;
}
public void setDefaultVoiceSubscriptionId(int subscriptionId) { public void setDefaultVoiceSubscriptionId(int subscriptionId) {
mDefaultVoiceSubscriptionId = subscriptionId; mDefaultVoiceSubscriptionId = subscriptionId;
} }
@@ -111,6 +116,10 @@ public class NetworkProviderCallsSmsControllerTest {
public void setDefaultSmsSubscriptionId(int subscriptionId) { public void setDefaultSmsSubscriptionId(int subscriptionId) {
mDefaultSmsSubscriptionId = subscriptionId; mDefaultSmsSubscriptionId = subscriptionId;
} }
public void setInService(boolean inService) {
mIsInService = inService;
}
} }
@Before @Before
@@ -128,7 +137,7 @@ public class NetworkProviderCallsSmsControllerTest {
mPreference = new RestrictedPreference(mContext); mPreference = new RestrictedPreference(mContext);
mPreference.setKey(KEY_PREFERENCE_CALLS_SMS); mPreference.setKey(KEY_PREFERENCE_CALLS_SMS);
mController = new MockNetworkProviderCallsSmsController(mContext, mLifecycle); mController = new MockNetworkProviderCallsSmsController(mContext, mLifecycle);
mController.setInService(true);
mLifecycleRegistry = new LifecycleRegistry(mLifecycleOwner); mLifecycleRegistry = new LifecycleRegistry(mLifecycleOwner);
when(mLifecycleOwner.getLifecycle()).thenReturn(mLifecycleRegistry); when(mLifecycleOwner.getLifecycle()).thenReturn(mLifecycleRegistry);
} }
@@ -176,7 +185,7 @@ public class NetworkProviderCallsSmsControllerTest {
final StringBuilder summary = new StringBuilder(); final StringBuilder summary = new StringBuilder();
summary.append(DISPLAY_NAME_1) summary.append(DISPLAY_NAME_1)
.append(" (") .append(" (")
.append(setSummaryResId("calls_sms_unavailable")) .append(setSummaryResId("calls_sms_temp_unavailable"))
.append(")"); .append(")");
assertTrue(TextUtils.equals(mController.getSummary(), summary)); assertTrue(TextUtils.equals(mController.getSummary(), summary));