Merge "Make taps on subscriptions in multi-network header go to mobile page"
This commit is contained in:
committed by
Android (Google) Code Review
commit
86005a91b3
@@ -17,7 +17,6 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="mobile_network_pref_screen"
|
||||
android:title="@string/network_settings_title"
|
||||
settings:initialExpandedChildrenCount="4">
|
||||
|
||||
<Preference
|
||||
|
@@ -20,10 +20,13 @@ import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
|
||||
import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.network.telephony.MobileNetworkActivity;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -125,7 +128,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
|
||||
mSubscriptionPreferences = new ArrayMap<>();
|
||||
|
||||
int order = mStartOrder;
|
||||
for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(mManager) ) {
|
||||
for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(mManager)) {
|
||||
final int subId = info.getSubscriptionId();
|
||||
Preference pref = existingPrefs.remove(subId);
|
||||
if (pref == null) {
|
||||
@@ -139,8 +142,9 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl
|
||||
// TODO(asargent) - set summary here to indicate default for calls/sms and data
|
||||
|
||||
pref.setOnPreferenceClickListener(clickedPref -> {
|
||||
// TODO(asargent) - make this start MobileNetworkActivity once we've
|
||||
// added support for it to take a subscription id
|
||||
final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
|
||||
intent.putExtra(Settings.EXTRA_SUB_ID, subId);
|
||||
mContext.startActivity(intent);
|
||||
return true;
|
||||
});
|
||||
|
||||
|
@@ -25,7 +25,6 @@ import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.View;
|
||||
|
||||
@@ -43,14 +42,12 @@ import com.android.settings.core.SettingsBaseActivity;
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class MobileNetworkActivity extends SettingsBaseActivity {
|
||||
|
||||
private static final String TAG = "MobileSettingsActivity";
|
||||
private static final String TAG = "MobileNetworkActivity";
|
||||
@VisibleForTesting
|
||||
static final String MOBILE_SETTINGS_TAG = "mobile_settings:";
|
||||
@VisibleForTesting
|
||||
@@ -94,6 +91,13 @@ public class MobileNetworkActivity extends SettingsBaseActivity {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
|
||||
// Set the title to the name of the subscription. If we don't have subscription info, the
|
||||
// title will just default to the label for this activity that's already specified in
|
||||
// AndroidManifest.xml.
|
||||
final SubscriptionInfo subscription = getSubscription();
|
||||
if (subscription != null) {
|
||||
setTitle(subscription.getDisplayName());
|
||||
}
|
||||
updateSubscriptions(savedInstanceState);
|
||||
}
|
||||
|
||||
@@ -136,25 +140,41 @@ public class MobileNetworkActivity extends SettingsBaseActivity {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current subId to display. First check whether intent has {@link
|
||||
* Settings#EXTRA_SUB_ID}. If not, just display first one in list
|
||||
* since it is already sorted by sim slot.
|
||||
* Get the current subscription to display. First check whether intent has {@link
|
||||
* Settings#EXTRA_SUB_ID} and if so find the subscription with that id. If not, just return the
|
||||
* first one in the mSubscriptionInfos list since it is already sorted by sim slot.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
int getSubscriptionId() {
|
||||
SubscriptionInfo getSubscription() {
|
||||
final Intent intent = getIntent();
|
||||
if (intent != null) {
|
||||
final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL);
|
||||
if (subId != SUB_ID_NULL && mSubscriptionManager.isActiveSubscriptionId(subId)) {
|
||||
return subId;
|
||||
if (subId != SUB_ID_NULL) {
|
||||
for (SubscriptionInfo subscription :
|
||||
mSubscriptionManager.getAvailableSubscriptionInfoList()) {
|
||||
if (subscription.getSubscriptionId() == subId) {
|
||||
return subscription;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(mSubscriptionInfos)) {
|
||||
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
return null;
|
||||
}
|
||||
return mSubscriptionInfos.get(0);
|
||||
}
|
||||
|
||||
return mSubscriptionInfos.get(0).getSubscriptionId();
|
||||
/**
|
||||
* Get the current subId to display.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
int getSubscriptionId() {
|
||||
final SubscriptionInfo subscription = getSubscription();
|
||||
if (subscription != null) {
|
||||
return subscription.getSubscriptionId();
|
||||
}
|
||||
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
@@ -16,33 +16,40 @@
|
||||
|
||||
package com.android.settings.network;
|
||||
|
||||
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.preference.Preference;
|
||||
@@ -70,7 +77,7 @@ public class SubscriptionsPreferenceControllerTest {
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mContext = spy(Robolectric.setupActivity(Activity.class));
|
||||
mLifecycleOwner = () -> mLifecycle;
|
||||
mLifecycle = new Lifecycle(mLifecycleOwner);
|
||||
when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
|
||||
@@ -83,6 +90,11 @@ public class SubscriptionsPreferenceControllerTest {
|
||||
KEY, 5);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
SubscriptionUtil.setAvailableSubscriptionsForTesting(null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isAvailable_oneSubscription_availableFalse() {
|
||||
SubscriptionUtil.setAvailableSubscriptionsForTesting(
|
||||
@@ -215,4 +227,57 @@ public class SubscriptionsPreferenceControllerTest {
|
||||
verify(mPreferenceCategory, times(3)).addPreference(captor.capture());
|
||||
assertThat(captor.getValue().getTitle()).isEqualTo("sub3");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper to create a specified number of subscriptions, display them, and then click on one and
|
||||
* verify that the intent fires and has the right subscription id extra.
|
||||
*
|
||||
* @param subscriptionCount the number of subscriptions
|
||||
* @param selectedPrefIndex index of the subscription to click on
|
||||
*/
|
||||
private void runPreferenceClickTest(int subscriptionCount, int selectedPrefIndex) {
|
||||
final ArrayList<SubscriptionInfo> subscriptions = new ArrayList<>();
|
||||
for (int i = 0; i < subscriptionCount; i++) {
|
||||
final SubscriptionInfo sub = mock(SubscriptionInfo.class);
|
||||
doReturn(i + 1).when(sub).getSubscriptionId();
|
||||
subscriptions.add(sub);
|
||||
}
|
||||
SubscriptionUtil.setAvailableSubscriptionsForTesting(subscriptions);
|
||||
mController.displayPreference(mScreen);
|
||||
final ArgumentCaptor<Preference> prefCaptor = ArgumentCaptor.forClass(Preference.class);
|
||||
verify(mPreferenceCategory, times(subscriptionCount)).addPreference(prefCaptor.capture());
|
||||
final List<Preference> prefs = prefCaptor.getAllValues();
|
||||
final Preference pref = prefs.get(selectedPrefIndex);
|
||||
pref.getOnPreferenceClickListener().onPreferenceClick(pref);
|
||||
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
|
||||
verify(mContext).startActivity(intentCaptor.capture());
|
||||
final Intent intent = intentCaptor.getValue();
|
||||
assertThat(intent).isNotNull();
|
||||
assertThat(intent.hasExtra(Settings.EXTRA_SUB_ID)).isTrue();
|
||||
final int subIdFromIntent = intent.getIntExtra(Settings.EXTRA_SUB_ID,
|
||||
INVALID_SUBSCRIPTION_ID);
|
||||
assertThat(subIdFromIntent).isEqualTo(
|
||||
subscriptions.get(selectedPrefIndex).getSubscriptionId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void twoPreferences_firstPreferenceClicked_correctIntentFires() {
|
||||
runPreferenceClickTest(2, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void twoPreferences_secondPreferenceClicked_correctIntentFires() {
|
||||
runPreferenceClickTest(2, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void threePreferences_secondPreferenceClicked_correctIntentFires() {
|
||||
runPreferenceClickTest(3, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void threePreferences_thirdPreferenceClicked_correctIntentFires() {
|
||||
runPreferenceClickTest(3, 2);
|
||||
}
|
||||
}
|
||||
|
@@ -143,6 +143,9 @@ public class MobileNetworkActivityTest {
|
||||
final Intent intent = new Intent();
|
||||
intent.putExtra(Settings.EXTRA_SUB_ID, CURRENT_SUB_ID);
|
||||
doReturn(intent).when(mMobileNetworkActivity).getIntent();
|
||||
mSubscriptionInfos.add(mSubscriptionInfo);
|
||||
mSubscriptionInfos.add(mSubscriptionInfo2);
|
||||
doReturn(mSubscriptionInfos).when(mSubscriptionManager).getAvailableSubscriptionInfoList();
|
||||
doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(CURRENT_SUB_ID);
|
||||
|
||||
assertThat(mMobileNetworkActivity.getSubscriptionId()).isEqualTo(CURRENT_SUB_ID);
|
||||
|
Reference in New Issue
Block a user