Merge "Set summary for SIM entries in multi-SIM header"
This commit is contained in:
committed by
Android (Google) Code Review
commit
83e6a68743
@@ -10456,6 +10456,30 @@
|
||||
<item quantity="other"><xliff:g id="count" example="2">%1$d</xliff:g> SIMs</item>
|
||||
</plurals>
|
||||
|
||||
<!-- Network & internet page. Summary indicating that a SIM is used by default for calls when
|
||||
multiple SIMs are present. [CHAR LIMIT=40] -->
|
||||
<string name="default_for_calls">Default for calls</string>
|
||||
<!-- Network & internet page. Summary indicating that a SIM is used by default for SMS messages
|
||||
when multiple SIMs are present. [CHAR LIMIT=40] -->
|
||||
<string name="default_for_sms">Default for SMS</string>
|
||||
<!-- Network & internet page. Summary indicating that a SIM is used by default for calls and SMS
|
||||
messages when multiple SIMs are present. [CHAR LIMIT=40] -->
|
||||
<string name="default_for_calls_and_sms">Default for calls & SMS</string>
|
||||
<!-- Network & internet page. Summary indicating that a SIM is used by default for mobile data
|
||||
when multiple SIMs are present. [CHAR LIMIT=40] -->
|
||||
<string name="default_for_mobile_data">Default for mobile data</string>
|
||||
<!-- Network & internet page. Summary indicating that a SIM has an active mobile data connection
|
||||
when multiple SIMs are present. [CHAR LIMIT=40] -->
|
||||
<string name="mobile_data_active">Mobile data active</string>
|
||||
<!-- Network & internet page. Summary indicating that a SIM is used by default for mobile data
|
||||
when multiple SIMs are present, but mobile data is currently turned off.
|
||||
[CHAR LIMIT=40] -->
|
||||
<string name="mobile_data_off">Mobile data off</string>
|
||||
<!-- Network & internet page. Summary indicating that a SIM is available to be used for services
|
||||
such as calls, SMS, or data when multiple SIMs are present, but is not currently the
|
||||
default SIM for any of those services. [CHAR LIMIT=40] -->
|
||||
<string name="subscription_available">Available</string>
|
||||
|
||||
<!-- Title of item shown at the bottom of the page listing multiple mobile service
|
||||
subscriptions; tapping it leads to a UI to add more [CHAR LIMIT=40] -->
|
||||
<string name="mobile_network_list_add_more">Add more</string>
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.content.Intent;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import androidx.collection.ArrayMap;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
@@ -136,11 +137,10 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
|
||||
mPreferenceGroup.addPreference(pref);
|
||||
}
|
||||
pref.setTitle(info.getDisplayName());
|
||||
pref.setSummary(getSummary(subId));
|
||||
pref.setIcon(R.drawable.ic_network_cell);
|
||||
pref.setOrder(order++);
|
||||
|
||||
// TODO(asargent) - set summary here to indicate default for calls/sms and data
|
||||
|
||||
pref.setOnPreferenceClickListener(clickedPref -> {
|
||||
final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
|
||||
intent.putExtra(Settings.EXTRA_SUB_ID, subId);
|
||||
@@ -158,6 +158,56 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
|
||||
mUpdateListener.onChildrenUpdated();
|
||||
}
|
||||
|
||||
/**
|
||||
* The summary can have either 1 or 2 lines depending on which services (calls, SMS, data) this
|
||||
* subscription is the default for.
|
||||
*
|
||||
* If this subscription is the default for calls and/or SMS, we add a line to show that.
|
||||
*
|
||||
* If this subscription is the default for data, we add a line with detail about
|
||||
* whether the data connection is active.
|
||||
*
|
||||
* If a subscription isn't the default for anything, we just say it is available.
|
||||
*/
|
||||
protected String getSummary(int subId) {
|
||||
final int callsDefaultSubId = SubscriptionManager.getDefaultVoiceSubscriptionId();
|
||||
final int smsDefaultSubId = SubscriptionManager.getDefaultSmsSubscriptionId();
|
||||
final int dataDefaultSubId = SubscriptionManager.getDefaultDataSubscriptionId();
|
||||
|
||||
String line1 = null;
|
||||
if (subId == callsDefaultSubId && subId == smsDefaultSubId) {
|
||||
line1 = mContext.getString(R.string.default_for_calls_and_sms);
|
||||
} else if (subId == callsDefaultSubId) {
|
||||
line1 = mContext.getString(R.string.default_for_calls);
|
||||
} else if (subId == smsDefaultSubId) {
|
||||
line1 = mContext.getString(R.string.default_for_sms);
|
||||
}
|
||||
|
||||
String line2 = null;
|
||||
if (subId == dataDefaultSubId) {
|
||||
final TelephonyManager telMgrForSub = mContext.getSystemService(
|
||||
TelephonyManager.class).createForSubscriptionId(subId);
|
||||
final int dataState = telMgrForSub.getDataState();
|
||||
if (dataState == TelephonyManager.DATA_CONNECTED) {
|
||||
line2 = mContext.getString(R.string.mobile_data_active);
|
||||
} else if (!telMgrForSub.isDataEnabled()) {
|
||||
line2 = mContext.getString(R.string.mobile_data_off);
|
||||
} else {
|
||||
line2 = mContext.getString(R.string.default_for_mobile_data);
|
||||
}
|
||||
}
|
||||
|
||||
if (line1 != null && line2 != null) {
|
||||
return String.join(System.lineSeparator(), line1, line2);
|
||||
} else if (line1 != null) {
|
||||
return line1;
|
||||
} else if (line2 != null) {
|
||||
return line2;
|
||||
} else {
|
||||
return mContext.getString(R.string.subscription_available);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return true if there are at least 2 available subscriptions.
|
||||
|
||||
@@ -20,6 +20,7 @@ import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -34,7 +35,9 @@ import android.content.Intent;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import org.junit.After;
|
||||
@@ -46,6 +49,8 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadows.ShadowSubscriptionManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -57,6 +62,7 @@ import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = ShadowSubscriptionManager.class)
|
||||
public class SubscriptionsPreferenceControllerTest {
|
||||
private static final String KEY = "preference_group";
|
||||
|
||||
@@ -66,6 +72,8 @@ public class SubscriptionsPreferenceControllerTest {
|
||||
private PreferenceCategory mPreferenceCategory;
|
||||
@Mock
|
||||
private SubscriptionManager mSubscriptionManager;
|
||||
@Mock
|
||||
private TelephonyManager mTelephonyManager;
|
||||
|
||||
private Context mContext;
|
||||
private LifecycleOwner mLifecycleOwner;
|
||||
@@ -81,6 +89,8 @@ public class SubscriptionsPreferenceControllerTest {
|
||||
mLifecycleOwner = () -> mLifecycle;
|
||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
||||
when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
|
||||
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
|
||||
when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
|
||||
when(mScreen.findPreference(eq(KEY))).thenReturn(mPreferenceCategory);
|
||||
when(mPreferenceCategory.getContext()).thenReturn(mContext);
|
||||
mOnChildUpdatedCount = 0;
|
||||
@@ -280,4 +290,69 @@ public class SubscriptionsPreferenceControllerTest {
|
||||
public void threePreferences_thirdPreferenceClicked_correctIntentFires() {
|
||||
runPreferenceClickTest(3, 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_twoSubsOneDefaultForEverythingDataActive() {
|
||||
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
|
||||
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
|
||||
when(sub1.getSubscriptionId()).thenReturn(11);
|
||||
when(sub2.getSubscriptionId()).thenReturn(22);
|
||||
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
|
||||
|
||||
ShadowSubscriptionManager.setDefaultDataSubscriptionId(11);
|
||||
ShadowSubscriptionManager.setDefaultSmsSubscriptionId(11);
|
||||
ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(11);
|
||||
when(mTelephonyManager.getDataState()).thenReturn(TelephonyManager.DATA_CONNECTED);
|
||||
|
||||
assertThat(mController.getSummary(11)).isEqualTo(
|
||||
mContext.getString(R.string.default_for_calls_and_sms) + System.lineSeparator()
|
||||
+ mContext.getString(R.string.mobile_data_active));
|
||||
|
||||
assertThat(mController.getSummary(22)).isEqualTo(
|
||||
mContext.getString(R.string.subscription_available));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_twoSubsOneDefaultForEverythingDataDisabled() {
|
||||
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
|
||||
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
|
||||
when(sub1.getSubscriptionId()).thenReturn(11);
|
||||
when(sub2.getSubscriptionId()).thenReturn(22);
|
||||
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
|
||||
|
||||
ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(11);
|
||||
ShadowSubscriptionManager.setDefaultSmsSubscriptionId(11);
|
||||
ShadowSubscriptionManager.setDefaultDataSubscriptionId(11);
|
||||
when(mTelephonyManager.getDataState()).thenReturn(TelephonyManager.DATA_DISCONNECTED);
|
||||
when(mTelephonyManager.isDataEnabled()).thenReturn(false);
|
||||
|
||||
assertThat(mController.getSummary(11)).isEqualTo(
|
||||
mContext.getString(R.string.default_for_calls_and_sms) + System.lineSeparator()
|
||||
+ mContext.getString(R.string.mobile_data_off));
|
||||
|
||||
assertThat(mController.getSummary(22)).isEqualTo(
|
||||
mContext.getString(R.string.subscription_available));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_twoSubsOneForCallsAndDataOneForSms() {
|
||||
final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
|
||||
final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
|
||||
when(sub1.getSubscriptionId()).thenReturn(11);
|
||||
when(sub2.getSubscriptionId()).thenReturn(22);
|
||||
SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
|
||||
|
||||
ShadowSubscriptionManager.setDefaultDataSubscriptionId(11);
|
||||
ShadowSubscriptionManager.setDefaultSmsSubscriptionId(22);
|
||||
ShadowSubscriptionManager.setDefaultVoiceSubscriptionId(11);
|
||||
when(mTelephonyManager.getDataState()).thenReturn(TelephonyManager.DATA_DISCONNECTED);
|
||||
when(mTelephonyManager.isDataEnabled()).thenReturn(true);
|
||||
|
||||
assertThat(mController.getSummary(11)).isEqualTo(
|
||||
mContext.getString(R.string.default_for_calls) + System.lineSeparator()
|
||||
+ mContext.getString(R.string.default_for_mobile_data));
|
||||
|
||||
assertThat(mController.getSummary(22)).isEqualTo(
|
||||
mContext.getString(R.string.default_for_sms));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user