Loading res/values/strings.xml +6 −4 Original line number Diff line number Diff line Loading @@ -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 & 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] --> src/com/android/settings/network/NetworkProviderCallsSmsController.java +20 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -45,7 +48,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl private UserManager mUserManager; private SubscriptionManager mSubscriptionManager; private SubscriptionsChangeListener mSubscriptionsChangeListener; private TelephonyManager mTelephonyManager; private RestrictedPreference mPreference; /** Loading @@ -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); Loading Loading @@ -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. Loading @@ -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); Loading Loading @@ -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); } } src/com/android/settings/network/telephony/CallsDefaultSubscriptionController.java +11 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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(); } } } src/com/android/settings/network/telephony/MobileNetworkUtils.java +76 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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}; Loading Loading @@ -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); } } src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java +11 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } } } Loading
res/values/strings.xml +6 −4 Original line number Diff line number Diff line Loading @@ -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 & 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] -->
src/com/android/settings/network/NetworkProviderCallsSmsController.java +20 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -45,7 +48,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl private UserManager mUserManager; private SubscriptionManager mSubscriptionManager; private SubscriptionsChangeListener mSubscriptionsChangeListener; private TelephonyManager mTelephonyManager; private RestrictedPreference mPreference; /** Loading @@ -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); Loading Loading @@ -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. Loading @@ -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); Loading Loading @@ -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); } }
src/com/android/settings/network/telephony/CallsDefaultSubscriptionController.java +11 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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(); } } }
src/com/android/settings/network/telephony/MobileNetworkUtils.java +76 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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}; Loading Loading @@ -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); } }
src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java +11 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } } }