diff --git a/res/xml/device_info_settings_v2.xml b/res/xml/device_info_settings_v2.xml
index 11ba2a1..bf4b47b 100644
--- a/res/xml/device_info_settings_v2.xml
+++ b/res/xml/device_info_settings_v2.xml
@@ -19,8 +19,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
     android:key="device_info_pref_screen"
-    android:title="@string/about_settings"
-    settings:initialExpandedChildrenCount="6">
+    android:title="@string/about_settings">
 
     <!-- Phone number -->
     <Preference
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index f21d8e1..e5c3e06 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -22,8 +22,11 @@
 import android.app.Fragment;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Bundle;
 import android.provider.SearchIndexableResource;
+import android.telephony.TelephonyManager;
 import android.util.FeatureFlagUtils;
+import android.support.annotation.VisibleForTesting;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.dashboard.DashboardFragment;
@@ -62,6 +65,11 @@
 
     private static final String KEY_LEGAL_CONTAINER = "legal_container";
 
+    @VisibleForTesting
+    static final int SIM_PREFERENCES_COUNT = 3;
+    @VisibleForTesting
+    static final int NON_SIM_PREFERENCES_COUNT = 2;
+
     @Override
     public int getMetricsCategory() {
         return MetricsEvent.DEVICEINFO;
@@ -73,6 +81,21 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        if (FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2)) {
+            // Increase the number of children when the device contains more than 1 sim.
+            final TelephonyManager telephonyManager = (TelephonyManager) getSystemService(
+                    Context.TELEPHONY_SERVICE);
+            final int numberOfChildren = Math.max(SIM_PREFERENCES_COUNT,
+                    SIM_PREFERENCES_COUNT * telephonyManager.getPhoneCount())
+                    + NON_SIM_PREFERENCES_COUNT;
+            getPreferenceScreen().setInitialExpandedChildrenCount(numberOfChildren);
+        }
+    }
+
+    @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         final BuildNumberPreferenceController buildNumberPreferenceController =
                 getPreferenceController(BuildNumberPreferenceController.class);
diff --git a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
index 8cedaf1..9f2415b 100644
--- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
@@ -16,19 +16,32 @@
 
 package com.android.settings;
 
+import static com.android.settings.DeviceInfoSettings.NON_SIM_PREFERENCES_COUNT;
+import static com.android.settings.DeviceInfoSettings.SIM_PREFERENCES_COUNT;
+
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
+import android.app.Activity;
 import android.content.Context;
 import android.os.Build;
+import android.os.SystemProperties;
 import android.support.v7.preference.PreferenceScreen;
+import android.telephony.TelephonyManager;
+import android.util.FeatureFlagUtils;
+import android.view.View;
 
+import com.android.settings.core.FeatureFlags;
 import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
 import com.android.settings.testutils.shadow.ShadowConnectivityManager;
 import com.android.settings.testutils.shadow.ShadowUtils;
 import com.android.settingslib.DeviceInfoUtils;
@@ -40,29 +53,43 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
 
 import java.util.List;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(
-    manifest = TestConfig.MANIFEST_PATH,
-    sdk = TestConfig.SDK_VERSION_O,
-    shadows = {ShadowUtils.class, ShadowConnectivityManager.class}
+        manifest = TestConfig.MANIFEST_PATH,
+        sdk = TestConfig.SDK_VERSION_O,
+        shadows = {ShadowUtils.class, ShadowConnectivityManager.class}
 )
 public class DeviceInfoSettingsTest {
 
     @Mock
+    private Activity mActivity;
+    @Mock
     private PreferenceScreen mScreen;
     @Mock
     private SummaryLoader mSummaryLoader;
+    @Mock
+    private TelephonyManager mTelephonyManager;
 
+    private Context mContext;
     private DeviceInfoSettings mSettings;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
         mSettings = spy(new DeviceInfoSettings());
+
+        doReturn(mActivity).when(mSettings).getActivity();
+        doReturn(mContext.getTheme()).when(mActivity).getTheme();
+        doReturn(mContext.getResources()).when(mSettings).getResources();
+        doNothing().when(mSettings).onCreatePreferences(any(), any());
+
         doReturn(mScreen).when(mSettings).getPreferenceScreen();
+        doReturn(mTelephonyManager).when(mSettings).getSystemService(Context.TELEPHONY_SERVICE);
     }
 
     @Test
@@ -91,4 +118,32 @@
 
         assertThat(keys).containsAllIn(niks);
     }
+
+    @Test
+    @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class,
+            SettingsShadowSystemProperties.class})
+    public void onCreate_singleSim_shouldAddSingleSimCount() {
+        SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2,
+                "true");
+        doReturn(1).when(mTelephonyManager).getPhoneCount();
+
+        mSettings.onCreate(null /* icicle */);
+
+        verify(mScreen).setInitialExpandedChildrenCount(
+                SIM_PREFERENCES_COUNT + NON_SIM_PREFERENCES_COUNT);
+    }
+
+    @Test
+    @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class,
+            SettingsShadowSystemProperties.class})
+    public void onCreate_dualeSim_shouldAddDualSimCount() {
+        SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2,
+                "true");
+        doReturn(2).when(mTelephonyManager).getPhoneCount();
+
+        mSettings.onCreate(null /* icicle */);
+
+        verify(mScreen).setInitialExpandedChildrenCount(
+                2 * SIM_PREFERENCES_COUNT + NON_SIM_PREFERENCES_COUNT);
+    }
 }
