diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index bc1d0fa..f3fbf06 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -33,8 +33,6 @@
 import androidx.slice.Slice;
 
 import com.android.settings.homepage.contextualcards.deviceinfo.BatterySlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DataUsageSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DeviceInfoSlice;
 import com.android.settingslib.utils.AsyncLoaderCompat;
 
 import java.util.ArrayList;
@@ -94,15 +92,6 @@
         final double rankingScore = 0.0;
         final List<ContextualCard> result = new ArrayList();
         result.add(new ContextualCard.Builder()
-                .setSliceUri(DataUsageSlice.DATA_USAGE_CARD_URI)
-                .setName(DataUsageSlice.PATH_DATA_USAGE)
-                .setPackageName(packageName)
-                .setRankingScore(rankingScore)
-                .setAppVersion(appVersionCode)
-                .setCardType(ContextualCard.CardType.SLICE)
-                .setIsHalfWidth(false)
-                .build());
-        result.add(new ContextualCard.Builder()
                 .setSliceUri(BatterySlice.BATTERY_CARD_URI)
                 .setName(BatterySlice.PATH_BATTERY_INFO)
                 .setPackageName(packageName)
@@ -111,15 +100,6 @@
                 .setCardType(ContextualCard.CardType.SLICE)
                 .setIsHalfWidth(false)
                 .build());
-        result.add(new ContextualCard.Builder()
-                .setSliceUri(DeviceInfoSlice.DEVICE_INFO_CARD_URI)
-                .setName(DeviceInfoSlice.PATH_DEVICE_INFO)
-                .setPackageName(packageName)
-                .setRankingScore(rankingScore)
-                .setAppVersion(appVersionCode)
-                .setCardType(ContextualCard.CardType.SLICE)
-                .setIsHalfWidth(false)
-                .build());
         return result;
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java b/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
index 36c0a11..e394c03 100644
--- a/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
+++ b/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
@@ -21,10 +21,6 @@
 import android.annotation.Nullable;
 
 import com.android.settings.homepage.contextualcards.deviceinfo.BatterySlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DataUsageSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DeviceInfoSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.EmergencyInfoSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.StorageSlice;
 import com.android.settings.homepage.contextualcards.slices.ConnectedDeviceSlice;
 import com.android.settings.intelligence.ContextualCardProto.ContextualCard;
 import com.android.settings.intelligence.ContextualCardProto.ContextualCardList;
@@ -45,26 +41,6 @@
                         .setSliceUri(WifiSlice.WIFI_URI.toString())
                         .setCardName(KEY_WIFI)
                         .build();
-        final ContextualCard dataUsageCard =
-                ContextualCard.newBuilder()
-                        .setSliceUri(DataUsageSlice.DATA_USAGE_CARD_URI.toString())
-                        .setCardName(DataUsageSlice.PATH_DATA_USAGE)
-                        .build();
-        final ContextualCard deviceInfoCard =
-                ContextualCard.newBuilder()
-                        .setSliceUri(DeviceInfoSlice.DEVICE_INFO_CARD_URI.toString())
-                        .setCardName(DeviceInfoSlice.PATH_DEVICE_INFO)
-                        .build();
-        final ContextualCard storageInfoCard =
-                ContextualCard.newBuilder()
-                        .setSliceUri(StorageSlice.STORAGE_CARD_URI.toString())
-                        .setCardName(StorageSlice.PATH_STORAGE_INFO)
-                        .build();
-        final ContextualCard emergencyInfoCard =
-                ContextualCard.newBuilder()
-                        .setSliceUri(EmergencyInfoSlice.EMERGENCY_INFO_CARD_URI.toString())
-                        .setCardName(EmergencyInfoSlice.PATH_EMERGENCY_INFO_CARD)
-                        .build();
         final ContextualCard batteryInfoCard =
                 ContextualCard.newBuilder()
                         .setSliceUri(BatterySlice.BATTERY_CARD_URI.toSafeString())
@@ -77,10 +53,6 @@
                         .build();
         final ContextualCardList cards = ContextualCardList.newBuilder()
                 .addCard(wifiCard)
-                .addCard(dataUsageCard)
-                .addCard(deviceInfoCard)
-                .addCard(storageInfoCard)
-                .addCard(emergencyInfoCard)
                 .addCard(batteryInfoCard)
                 .addCard(connectedDeviceCard)
                 .build();
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
index 6aeb5c0..e98e36f 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
@@ -22,8 +22,6 @@
 import android.net.Uri;
 
 import com.android.settings.homepage.contextualcards.deviceinfo.BatterySlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DataUsageSlice;
-import com.android.settings.homepage.contextualcards.deviceinfo.DeviceInfoSlice;
 import com.android.settings.slices.SettingsSliceProvider;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
@@ -54,18 +52,9 @@
     }
 
     @Test
-    public void createStaticCards_shouldReturnFourCards() {
-        final List<ContextualCard> defaultData = mContextualCardLoader.createStaticCards();
-
-        assertThat(defaultData).hasSize(3);
-    }
-
-    @Test
     public void createStaticCards_shouldContainCorrectCards() {
-        final Uri dataUsage = DataUsageSlice.DATA_USAGE_CARD_URI;
-        final Uri deviceInfo = DeviceInfoSlice.DEVICE_INFO_CARD_URI;
         final Uri batteryInfo = BatterySlice.BATTERY_CARD_URI;
-        final List<Uri> expectedUris = Arrays.asList(dataUsage, deviceInfo, batteryInfo);
+        final List<Uri> expectedUris = Arrays.asList(batteryInfo);
 
         final List<Uri> actualCardUris = mContextualCardLoader.createStaticCards().stream().map(
                 ContextualCard::getSliceUri).collect(Collectors.toList());
@@ -90,7 +79,8 @@
         final String sliceUri = "contet://com.android.settings.slices/action/flashlight";
 
         assertThat(
-                mContextualCardLoader.isCardEligibleToDisplay(getContextualCard(sliceUri))).isFalse();
+                mContextualCardLoader.isCardEligibleToDisplay(
+                        getContextualCard(sliceUri))).isFalse();
     }
 
     @Test
@@ -98,7 +88,8 @@
         final String sliceUri = "content://com.android.settings.test.slices/action/flashlight";
 
         assertThat(
-                mContextualCardLoader.isCardEligibleToDisplay(getContextualCard(sliceUri))).isFalse();
+                mContextualCardLoader.isCardEligibleToDisplay(
+                        getContextualCard(sliceUri))).isFalse();
     }
 
     private ContextualCard getContextualCard(String sliceUri) {
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
index 2c42379..1932ab9 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
@@ -20,7 +20,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.ContentResolver;
-import android.content.Context;
 import android.net.Uri;
 import android.os.Bundle;
 
@@ -38,15 +37,13 @@
 @RunWith(SettingsRobolectricTestRunner.class)
 public class SettingsContextualCardProviderTest {
 
-    private Context mContext;
     private ContentResolver mResolver;
     private Uri mUri;
     private SettingsContextualCardProvider mProvider;
 
     @Before
     public void setUp() {
-        mContext = RuntimeEnvironment.application;
-        mResolver = mContext.getContentResolver();
+        mResolver = RuntimeEnvironment.application.getContentResolver();
         mUri = new Uri.Builder()
                 .scheme(ContentResolver.SCHEME_CONTENT)
                 .authority(SettingsContextualCardProvider.CARD_AUTHORITY)
