diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java
index e497a9e..65eaf87 100644
--- a/src/com/android/settings/network/telephony/MobileDataSlice.java
+++ b/src/com/android/settings/network/telephony/MobileDataSlice.java
@@ -78,16 +78,14 @@
         final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
         @ColorInt final int color = Utils.getColorAccentDefaultColor(mContext);
 
-        // Return a Slice without the mobile data toggle when airplane mode is on.
+        // Return null until we can show a disabled-action Slice, blaming Airplane mode.
         if (isAirplaneModeEnabled()) {
-            return buildUnavailableMobileDataSlice(title,
-                    mContext.getText(R.string.mobile_data_ap_mode_disabled), icon, color);
+            return null;
         }
 
-        // Return a Slice without the mobile data toggle when mobile data disabled.
+        // Return null until we can show a disabled-action Slice.
         if (!isMobileDataAvailable()) {
-            return buildUnavailableMobileDataSlice(title,
-                    mContext.getText(R.string.sim_cellular_data_unavailable), icon, color);
+            return null;
         }
 
         final CharSequence summary = getSummary();
@@ -201,22 +199,6 @@
         return mTelephonyManager.isDataEnabled();
     }
 
-    private Slice buildUnavailableMobileDataSlice(String title, CharSequence summary,
-            IconCompat icon, int color) {
-        final PendingIntent intent = PendingIntent.getActivity(mContext, 0 /* requestCode */,
-                new Intent(), 0 /* flags */);
-        final SliceAction deadAction =
-                SliceAction.create(intent, icon, ListBuilder.ICON_IMAGE, title);
-        final ListBuilder listBuilder = new ListBuilder(mContext, getUri(),
-                ListBuilder.INFINITY)
-                .setAccentColor(color)
-                .addRow(new ListBuilder.RowBuilder()
-                        .setTitle(title)
-                        .setSubtitle(summary)
-                        .setPrimaryAction(deadAction));
-        return listBuilder.build();
-    }
-
     /**
      * Listener for mobile data state changes.
      *
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java
index ae6f568..c66f75f 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java
@@ -174,21 +174,7 @@
         doReturn(new ArrayList<>()).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
         final Slice mobileData = mMobileDataSlice.getSlice();
 
-        final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
-        assertThat(metadata.getTitle())
-                .isEqualTo(mContext.getString(R.string.mobile_data_settings_title));
-
-        assertThat(metadata.getSubtitle())
-                .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable));
-
-        final List<SliceAction> toggles = metadata.getToggles();
-        assertThat(toggles).hasSize(0);
-
-        final SliceAction primaryAction = metadata.getPrimaryAction();
-        final PendingIntent pendingIntent = primaryAction.getAction();
-        final Intent actionIntent = pendingIntent.getIntent();
-
-        assertThat(actionIntent).isNull();
+        assertThat(mobileData).isNull();
     }
 
     @Test
@@ -196,21 +182,7 @@
         doReturn(null).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
         final Slice mobileData = mMobileDataSlice.getSlice();
 
-        final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
-        assertThat(metadata.getTitle())
-                .isEqualTo(mContext.getString(R.string.mobile_data_settings_title));
-
-        assertThat(metadata.getSubtitle())
-                .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable));
-
-        final List<SliceAction> toggles = metadata.getToggles();
-        assertThat(toggles).hasSize(0);
-
-        final SliceAction primaryAction = metadata.getPrimaryAction();
-        final PendingIntent pendingIntent = primaryAction.getAction();
-        final Intent actionIntent = pendingIntent.getIntent();
-
-        assertThat(actionIntent).isNull();
+        assertThat(mobileData).isNull();
     }
 
     @Test
@@ -219,20 +191,6 @@
         doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID);
         final Slice mobileData = mMobileDataSlice.getSlice();
 
-        final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
-        assertThat(metadata.getTitle())
-                .isEqualTo(mContext.getString(R.string.mobile_data_settings_title));
-
-        assertThat(metadata.getSubtitle())
-                .isEqualTo(mContext.getString(R.string.mobile_data_ap_mode_disabled));
-
-        final List<SliceAction> toggles = metadata.getToggles();
-        assertThat(toggles).hasSize(0);
-
-        final SliceAction primaryAction = metadata.getPrimaryAction();
-        final PendingIntent pendingIntent = primaryAction.getAction();
-        final Intent actionIntent = pendingIntent.getIntent();
-
-        assertThat(actionIntent).isNull();
+        assertThat(mobileData).isNull();
     }
 }
