diff --git a/res/values/strings.xml b/res/values/strings.xml
index b1435c9..ad11706 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -9218,6 +9218,8 @@
     <!-- Confirmation message displayed when the user taps Clear app, to ensure they want to remove
          the instant app from the device. -->
     <string name="clear_instant_app_confirmation">Do you want to remove this instant app?</string>
+    <!-- Label for button that allows user to launch the instant app. -->
+    <string name="launch_instant_app">Open</string>
 
     <!-- Title of games app storage screen [CHAR LIMIT=30] -->
     <string name="game_storage_settings">Games</string>
diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java
index 0a4c343..9702102 100644
--- a/src/com/android/settings/accounts/AccountDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDashboardFragment.java
@@ -22,6 +22,7 @@
 import android.os.UserHandle;
 import android.provider.SearchIndexableResource;
 import android.text.BidiFormatter;
+import android.text.TextUtils;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
@@ -94,17 +95,21 @@
                 if (types == null || types.length == 0) {
                     summary = mContext.getString(R.string.account_dashboard_default_summary);
                 } else {
-                    // Show up to 3 account types
-                    final int size = Math.min(3, types.length);
+                    // Show up to 3 account types, ignore any null value
+                    int accountToAdd = Math.min(3, types.length);
 
-                    for (int i = 0; i < size; i++) {
+                    for (int i = 0; i < types.length && accountToAdd > 0; i++) {
                         final CharSequence label = authHelper.getLabelForType(mContext, types[i]);
+                        if (TextUtils.isEmpty(label)) {
+                            continue;
+                        }
                         if (summary == null) {
                             summary = bidiFormatter.unicodeWrap(label);
                         } else {
                             summary = mContext.getString(R.string.join_many_items_middle, summary,
                                     bidiFormatter.unicodeWrap(label));
                         }
+                        accountToAdd--;
                     }
                 }
                 mSummaryLoader.setSummary(this, summary);
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index 275af3d..29d66bd 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -19,12 +19,11 @@
 import android.util.ArrayMap;
 
 import com.android.settings.DisplaySettings;
-import com.android.settings.accounts.AccountDetailDashboardFragment;
 import com.android.settings.accounts.AccountDashboardFragment;
+import com.android.settings.accounts.AccountDetailDashboardFragment;
 import com.android.settings.applications.AppAndNotificationDashboardFragment;
 import com.android.settings.applications.DefaultAppSettings;
 import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
-import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld;
 import com.android.settings.development.DevelopmentSettingsDashboardFragment;
 import com.android.settings.deviceinfo.StorageDashboardFragment;
 import com.android.settings.fuelgauge.PowerUsageSummary;
@@ -60,9 +59,6 @@
         PARENT_TO_CATEGORY_KEY_MAP = new ArrayMap<>();
         PARENT_TO_CATEGORY_KEY_MAP.put(
                 NetworkDashboardFragment.class.getName(), CategoryKey.CATEGORY_NETWORK);
-        //TODO(b/69471219): update ConnectedDeviceDashboardFragment once new feature is done.
-        PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragmentOld.class.getName(),
-                CategoryKey.CATEGORY_DEVICE);
         PARENT_TO_CATEGORY_KEY_MAP.put(AdvancedConnectedDeviceDashboardFragment.class.getName(),
                 CategoryKey.CATEGORY_DEVICE);
         PARENT_TO_CATEGORY_KEY_MAP.put(AppAndNotificationDashboardFragment.class.getName(),
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
index 9371019..3ed9717 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
@@ -17,6 +17,9 @@
 
 import static com.android.settings.accounts.AccountDashboardFragmentTest
         .ShadowAuthenticationHelper.LABELS;
+import static com.android.settings.accounts.AccountDashboardFragmentTest
+        .ShadowAuthenticationHelper.TYPES;
+
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -75,7 +78,6 @@
             ShadowAuthenticationHelper.class
     })
     public void updateSummary_hasAccount_shouldDisplayUpTo3AccountTypes() {
-        ShadowAuthenticationHelper.setHasAccount(true);
         final SummaryLoader loader = mock(SummaryLoader.class);
         final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
 
@@ -91,7 +93,7 @@
             ShadowAuthenticationHelper.class
     })
     public void updateSummary_noAccount_shouldDisplayDefaultSummary() {
-        ShadowAuthenticationHelper.setHasAccount(false);
+        ShadowAuthenticationHelper.setEnabledAccount(null);
         final SummaryLoader loader = mock(SummaryLoader.class);
         final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
 
@@ -104,6 +106,24 @@
     }
 
     @Test
+    @Config(shadows = {
+        ShadowAuthenticationHelper.class
+    })
+    public void updateSummary_noAccountTypeLabel_shouldNotDisplayNullEntry() {
+        final SummaryLoader loader = mock(SummaryLoader.class);
+        final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
+        final String[] enabledAccounts = {TYPES[0], "unlabled_account_type", TYPES[1]};
+        ShadowAuthenticationHelper.setEnabledAccount(enabledAccounts);
+
+        final SummaryLoader.SummaryProvider provider = mFragment.SUMMARY_PROVIDER_FACTORY
+            .createSummaryProvider(activity, loader);
+        provider.setListening(true);
+
+        // should only show the 2 accounts with labels
+        verify(loader).setSummary(provider, LABELS[0] + ", " + LABELS[1]);
+    }
+
+    @Test
     public void testSearchIndexProvider_shouldIndexResource() {
         final List<SearchIndexableResource> indexRes =
                 AccountDashboardFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(
@@ -118,26 +138,25 @@
     public static class ShadowAuthenticationHelper {
 
         static final String[] TYPES = new String[] {"type1", "type2", "type3", "type4"};
-        static final String[] LABELS = new String[] {"LABEL1", "LABEL2",
-                "LABEL3", "LABEL4"};
-        private static boolean sHasAccount = true;
+        static final String[] LABELS = new String[] {"LABEL1", "LABEL2", "LABEL3", "LABEL4"};
+        private static String[] sEnabledAccount = TYPES;
 
         public void __constructor__(Context context, UserHandle userHandle,
                 AuthenticatorHelper.OnAccountsUpdateListener listener) {
         }
 
-        public static void setHasAccount(boolean hasAccount) {
-            sHasAccount = hasAccount;
+        public static void setEnabledAccount(String[] enabledAccount) {
+            sEnabledAccount = enabledAccount;
         }
 
         @Resetter
         public static void reset() {
-            sHasAccount = true;
+            sEnabledAccount = TYPES;
         }
 
         @Implementation
         public String[] getEnabledAccountTypes() {
-            return sHasAccount ? TYPES : null;
+            return sEnabledAccount;
         }
 
         @Implementation
@@ -151,7 +170,7 @@
             } else if (TextUtils.equals(accountType, TYPES[3])) {
                 return LABELS[3];
             }
-            return "no_label";
+            return null;
         }
     }
 }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
index 3eacd7a..5aa3933 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
@@ -72,11 +72,6 @@
     }
 
     @Test
-    public void testCategory_isConnectedDevice() {
-        assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_DEVICE);
-    }
-
-    @Test
     public void testSearchIndexProvider_shouldIndexResource() {
         final List<SearchIndexableResource> indexRes =
                 mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext,
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
index ea1d29b..41032bb 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceControllerTest.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.datausage;
 
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.doReturn;
+
 import android.content.Context;
 import android.content.Intent;
 import android.net.NetworkTemplate;
@@ -68,8 +71,10 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
+        mContext = spy(RuntimeEnvironment.application);
 
+        doReturn("%1$s %2%s").when(mContext)
+            .getString(com.android.internal.R.string.fileSizeSuffix);
         mController = new DataUsageSummaryPreferenceController(
                 mContext,
                 mDataUsageController,
