diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java index 4af5d79c37f..c048ed5d1f9 100644 --- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java +++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java @@ -103,7 +103,17 @@ public class MyDeviceInfoFragment extends DashboardFragment private static List buildPreferenceControllers( Context context, MyDeviceInfoFragment fragment, Lifecycle lifecycle) { final List controllers = new ArrayList<>(); - controllers.add(new SimStatusPreferenceController(context, fragment)); + + SimStatusPreferenceController defaultRecord = + new SimStatusPreferenceController(context, fragment); + + for (int slotIndex = 0; slotIndex < defaultRecord.getSimSlotSize(); slotIndex ++) { + SimStatusPreferenceController slotRecord = + new SimStatusPreferenceController(context, fragment); + slotRecord.setSimSlotStatus(slotIndex); + controllers.add(slotRecord); + } + controllers.add(new IpAddressPreferenceController(context, lifecycle)); controllers.add(new WifiMacAddressPreferenceController(context, lifecycle)); controllers.add(new BluetoothAddressPreferenceController(context, lifecycle)); diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java index f811d2a86d2..835f8203fb5 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java @@ -46,6 +46,8 @@ public class SimStatusPreferenceController extends private final Fragment mFragment; private final List mPreferenceList = new ArrayList<>(); + private int mSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX; + public SimStatusPreferenceController(Context context, Fragment fragment) { super(context); @@ -57,9 +59,36 @@ public class SimStatusPreferenceController extends @Override public String getPreferenceKey() { + if (mSlotIndex != SubscriptionManager.INVALID_SIM_SLOT_INDEX) { + return KEY_SIM_STATUS + mSlotIndex; + } return KEY_SIM_STATUS; } + /** + * Update the index of slot for this subscription. + * @param slotIndex index of slot + */ + public void setSimSlotStatus(int slotIndex) { + mSlotIndex = slotIndex; + } + + /** + * Get number of subscription slots. + * @return number of slots + */ + public int getSimSlotSize() { + return isAvailable() ? mTelephonyManager.getPhoneCount() : 0; + } + + /** + * Get the index of slot for this subscription. + * @return index of slot + */ + public int getSimSlotIndex() { + return mSlotIndex; + } + @Override public boolean isAvailable() { return SubscriptionUtil.isSimHardwareVisible(mContext) && @@ -72,22 +101,23 @@ public class SimStatusPreferenceController extends if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { return; } - final Preference preference = screen.findPreference(getPreferenceKey()); + final Preference preference = screen.findPreference(KEY_SIM_STATUS); if (!isAvailable() || preference == null || !preference.isVisible()) { return; } final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY); - mPreferenceList.add(preference); - final int simStatusOrder = preference.getOrder(); + screen.removePreference(preference); + preference.setVisible(false); + // Add additional preferences for each sim in the device - for (int simSlotNumber = 1; simSlotNumber < mTelephonyManager.getPhoneCount(); + for (int simSlotNumber = 0; simSlotNumber < mTelephonyManager.getPhoneCount(); simSlotNumber++) { final Preference multiSimPreference = createNewPreference(screen.getContext()); multiSimPreference.setCopyingEnabled(true); - multiSimPreference.setOrder(simStatusOrder + simSlotNumber); - multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber); + multiSimPreference.setOrder(simStatusOrder + simSlotNumber + 1); + multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber + 1); category.addPreference(multiSimPreference); mPreferenceList.add(multiSimPreference); } diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java index 4ffaf7ae6ec..458f7ff296d 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java @@ -24,8 +24,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; -import android.os.UserManager; import android.content.res.Resources; +import android.os.UserManager; import android.telephony.TelephonyManager; import androidx.fragment.app.Fragment; @@ -36,6 +36,9 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; +import java.util.ArrayList; +import java.util.List; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -44,7 +47,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) public class SimStatusPreferenceControllerTest { @@ -52,6 +54,8 @@ public class SimStatusPreferenceControllerTest { @Mock private Preference mPreference; @Mock + private Preference mFirstSimPreference; + @Mock private Preference mSecondSimPreference; @Mock private PreferenceScreen mScreen; @@ -77,18 +81,31 @@ public class SimStatusPreferenceControllerTest { when(mContext.getResources()).thenReturn(mResources); when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); + doReturn(mTelephonyManager).when(mContext) + .getSystemService(Context.TELEPHONY_SERVICE); + doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); - mController = spy(new SimStatusPreferenceController(mContext, mFragment)); + final List preferencePool = new ArrayList(); + preferencePool.add(mFirstSimPreference); + preferencePool.add(mSecondSimPreference); + + mController = spy(new SimStatusPreferenceController(mContext, mFragment) { + @Override + public Preference createNewPreference(Context context) { + return preferencePool.remove(0); + } + }); doReturn(true).when(mController).isAvailable(); when(mScreen.getContext()).thenReturn(mContext); final String categoryKey = "device_detail_category"; when(mScreen.findPreference(categoryKey)).thenReturn(mCategory); - doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext); - ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager); - when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); + final String baseEntryKey = "sim_status"; + when(mScreen.findPreference(baseEntryKey)).thenReturn(mPreference); final String prefKey = mController.getPreferenceKey(); when(mPreference.getKey()).thenReturn(prefKey); when(mPreference.isVisible()).thenReturn(true); + + mController.setSimSlotStatus(-1); } @Test @@ -107,8 +124,8 @@ public class SimStatusPreferenceControllerTest { mController.updateState(mPreference); - verify(mPreference).setTitle(mContext.getString(R.string.sim_status_title)); - verify(mPreference).setSummary(anyString()); + verify(mFirstSimPreference).setTitle(mContext.getString(R.string.sim_status_title)); + verify(mFirstSimPreference).setSummary(anyString()); } @Test @@ -118,11 +135,11 @@ public class SimStatusPreferenceControllerTest { mController.updateState(mPreference); - verify(mPreference).setTitle( + verify(mFirstSimPreference).setTitle( mContext.getString(R.string.sim_status_title_sim_slot, 1 /* sim slot */)); verify(mSecondSimPreference).setTitle( mContext.getString(R.string.sim_status_title_sim_slot, 2 /* sim slot */)); - verify(mPreference).setSummary(anyString()); + verify(mFirstSimPreference).setSummary(anyString()); verify(mSecondSimPreference).setSummary(anyString()); } @@ -130,9 +147,10 @@ public class SimStatusPreferenceControllerTest { public void handlePreferenceTreeClick_shouldStartDialogFragment() { when(mFragment.getChildFragmentManager()).thenReturn( mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS)); + when(mTelephonyManager.getPhoneCount()).thenReturn(2); mController.displayPreference(mScreen); - mController.handlePreferenceTreeClick(mPreference); + mController.handlePreferenceTreeClick(mFirstSimPreference); verify(mFragment).getChildFragmentManager(); }