diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 598dd3b..a08d028 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2223,7 +2223,7 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.datausage.DataUsageListV2" />
+                       android:value="com.android.settings.datausage.DataUsageList" />
         </activity>
 
         <activity
diff --git a/res/xml/app_info_settings.xml b/res/xml/app_info_settings.xml
index 39ba960..506686a 100644
--- a/res/xml/app_info_settings.xml
+++ b/res/xml/app_info_settings.xml
@@ -66,10 +66,10 @@
         settings:controller="com.android.settings.applications.appinfo.InstantAppDomainsPreferenceController" />
 
     <Preference
-        android:key="data_settings_v2"
+        android:key="data_settings"
         android:title="@string/data_usage_app_summary_title"
         android:summary="@string/summary_placeholder"
-        settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceControllerV2" />
+        settings:controller="com.android.settings.applications.appinfo.AppDataUsagePreferenceController" />
 
     <Preference
         android:key="time_spent_in_app"
@@ -179,4 +179,4 @@
         settings:allowDividerAbove="true"
         settings:enableCopying="true"/>
 
-</PreferenceScreen>
\ No newline at end of file
+</PreferenceScreen>
diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
similarity index 94%
rename from src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2.java
rename to src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
index 84f58e6..1bfcd7d 100644
--- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2.java
+++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java
@@ -31,7 +31,7 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
-import com.android.settings.datausage.AppDataUsageV2;
+import com.android.settings.datausage.AppDataUsage;
 import com.android.settings.datausage.DataUsageUtils;
 import com.android.settingslib.AppItem;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -42,13 +42,13 @@
 
 import java.util.List;
 
-public class AppDataUsagePreferenceControllerV2 extends AppInfoPreferenceControllerBase
+public class AppDataUsagePreferenceController extends AppInfoPreferenceControllerBase
         implements LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>>, LifecycleObserver,
         OnResume, OnPause {
 
     private List<NetworkCycleDataForUid> mAppUsageData;
 
-    public AppDataUsagePreferenceControllerV2(Context context, String key) {
+    public AppDataUsagePreferenceController(Context context, String key) {
         super(context, key);
     }
 
@@ -110,7 +110,7 @@
 
     @Override
     protected Class<? extends SettingsPreferenceFragment> getDetailFragmentClass() {
-        return AppDataUsageV2.class;
+        return AppDataUsage.class;
     }
 
     private CharSequence getDataSummary() {
diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index 742e259..80cc6ae 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -139,7 +139,7 @@
         final String packageName = getPackageName();
         use(TimeSpentInAppPreferenceController.class).setPackageName(packageName);
 
-        use(AppDataUsagePreferenceControllerV2.class).setParentFragment(this);
+        use(AppDataUsagePreferenceController.class).setParentFragment(this);
         final AppInstallerInfoPreferenceController installer =
                 use(AppInstallerInfoPreferenceController.class);
         installer.setPackageName(packageName);
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 2accd61..7ba3688 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -57,7 +57,7 @@
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
-import com.android.settings.datausage.DataUsageListV2;
+import com.android.settings.datausage.DataUsageList;
 import com.android.settings.datausage.DataUsageSummary;
 import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
 import com.android.settings.development.DevelopmentSettingsDashboardFragment;
@@ -258,7 +258,7 @@
             WebViewAppPicker.class.getName(),
             LockscreenDashboardFragment.class.getName(),
             BluetoothDeviceDetailsFragment.class.getName(),
-            DataUsageListV2.class.getName(),
+            DataUsageList.class.getName(),
             ToggleBackupSettingFragment.class.getName(),
             PreviouslyConnectedDeviceDashboardFragment.class.getName(),
     };
diff --git a/src/com/android/settings/datausage/AppDataUsageV2.java b/src/com/android/settings/datausage/AppDataUsage.java
similarity index 98%
rename from src/com/android/settings/datausage/AppDataUsageV2.java
rename to src/com/android/settings/datausage/AppDataUsage.java
index 6a31726..b6c95dd 100644
--- a/src/com/android/settings/datausage/AppDataUsageV2.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -53,10 +53,10 @@
 
 import java.util.List;
 
-public class AppDataUsageV2 extends DataUsageBaseFragment implements OnPreferenceChangeListener,
+public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceChangeListener,
         DataSaverBackend.Listener {
 
-    private static final String TAG = "AppDataUsageV2";
+    private static final String TAG = "AppDataUsage";
 
     public static final String ARG_APP_ITEM = "app_item";
     public static final String ARG_NETWORK_TEMPLATE = "network_template";
diff --git a/src/com/android/settings/datausage/AppDataUsageActivity.java b/src/com/android/settings/datausage/AppDataUsageActivity.java
index b4bac98..2b8e42d 100644
--- a/src/com/android/settings/datausage/AppDataUsageActivity.java
+++ b/src/com/android/settings/datausage/AppDataUsageActivity.java
@@ -59,9 +59,9 @@
         final Bundle args = new Bundle();
         final AppItem appItem = new AppItem(uid);
         appItem.addUid(uid);
-        args.putParcelable(AppDataUsageV2.ARG_APP_ITEM, appItem);
+        args.putParcelable(AppDataUsage.ARG_APP_ITEM, appItem);
         intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
-        intent.putExtra(EXTRA_SHOW_FRAGMENT, AppDataUsageV2.class.getName());
+        intent.putExtra(EXTRA_SHOW_FRAGMENT, AppDataUsage.class.getName());
         intent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.app_data_usage);
 
         super.onCreate(savedInstanceState);
@@ -70,6 +70,6 @@
     @Override
     protected boolean isValidFragment(String fragmentName) {
         return super.isValidFragment(fragmentName)
-                || AppDataUsageV2.class.getName().equals(fragmentName);
+                || AppDataUsage.class.getName().equals(fragmentName);
     }
 }
diff --git a/src/com/android/settings/datausage/BillingCyclePreference.java b/src/com/android/settings/datausage/BillingCyclePreference.java
index d53e43c..b30f32e 100644
--- a/src/com/android/settings/datausage/BillingCyclePreference.java
+++ b/src/com/android/settings/datausage/BillingCyclePreference.java
@@ -74,7 +74,7 @@
     @Override
     public Intent getIntent() {
         Bundle args = new Bundle();
-        args.putParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE, mTemplate);
+        args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
         return new SubSettingLauncher(getContext())
                 .setDestination(BillingCycleSettings.class.getName())
                 .setArguments(args)
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index e6370de..45997f8 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -105,7 +105,7 @@
         mDataUsageController = new DataUsageController(context);
 
         Bundle args = getArguments();
-        mNetworkTemplate = args.getParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE);
+        mNetworkTemplate = args.getParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE);
         if (mNetworkTemplate == null) {
             mNetworkTemplate = DataUsageUtils.getDefaultTemplate(context,
                 DataUsageUtils.getDefaultSubscriptionId(context));
diff --git a/src/com/android/settings/datausage/DataUsageListV2.java b/src/com/android/settings/datausage/DataUsageList.java
similarity index 97%
rename from src/com/android/settings/datausage/DataUsageListV2.java
rename to src/com/android/settings/datausage/DataUsageList.java
index d883e32..326b0d4 100644
--- a/src/com/android/settings/datausage/DataUsageListV2.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -74,13 +74,13 @@
  * Panel showing data usage history across various networks, including options
  * to inspect based on usage cycle and control through {@link NetworkPolicy}.
  */
-public class DataUsageListV2 extends DataUsageBaseFragment {
+public class DataUsageList extends DataUsageBaseFragment {
 
     static final String EXTRA_SUB_ID = "sub_id";
     static final String EXTRA_NETWORK_TEMPLATE = "network_template";
     static final String EXTRA_NETWORK_TYPE = "network_type";
 
-    private static final String TAG = "DataUsageListV2";
+    private static final String TAG = "DataUsageList";
     private static final boolean LOGD = false;
 
     private static final String KEY_USAGE_AMOUNT = "usage_amount";
@@ -150,7 +150,7 @@
         mHeader = setPinnedHeaderView(R.layout.apps_filter_spinner);
         mHeader.findViewById(R.id.filter_settings).setOnClickListener(btn -> {
             final Bundle args = new Bundle();
-            args.putParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE, mTemplate);
+            args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
             new SubSettingLauncher(getContext())
                     .setDestination(BillingCycleSettings.class.getName())
                     .setTitleRes(R.string.billing_cycle)
@@ -414,11 +414,11 @@
 
     private void startAppDataUsage(AppItem item) {
         final Bundle args = new Bundle();
-        args.putParcelable(AppDataUsageV2.ARG_APP_ITEM, item);
-        args.putParcelable(AppDataUsageV2.ARG_NETWORK_TEMPLATE, mTemplate);
+        args.putParcelable(AppDataUsage.ARG_APP_ITEM, item);
+        args.putParcelable(AppDataUsage.ARG_NETWORK_TEMPLATE, mTemplate);
 
         new SubSettingLauncher(getContext())
-                .setDestination(AppDataUsageV2.class.getName())
+                .setDestination(AppDataUsage.class.getName())
                 .setTitleRes(R.string.app_data_usage)
                 .setArguments(args)
                 .setSourceMetricsCategory(getMetricsCategory())
diff --git a/src/com/android/settings/datausage/DataUsagePreference.java b/src/com/android/settings/datausage/DataUsagePreference.java
index fbfca48..21c0503 100644
--- a/src/com/android/settings/datausage/DataUsagePreference.java
+++ b/src/com/android/settings/datausage/DataUsagePreference.java
@@ -76,13 +76,13 @@
     public Intent getIntent() {
         final Bundle args = new Bundle();
         final SubSettingLauncher launcher;
-        args.putParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE, mTemplate);
-        args.putInt(DataUsageListV2.EXTRA_SUB_ID, mSubId);
-        args.putInt(DataUsageListV2.EXTRA_NETWORK_TYPE, mTemplate.isMatchRuleMobile()
+        args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
+        args.putInt(DataUsageList.EXTRA_SUB_ID, mSubId);
+        args.putInt(DataUsageList.EXTRA_NETWORK_TYPE, mTemplate.isMatchRuleMobile()
             ? ConnectivityManager.TYPE_MOBILE : ConnectivityManager.TYPE_WIFI);
         launcher = new SubSettingLauncher(getContext())
             .setArguments(args)
-            .setDestination(DataUsageListV2.class.getName())
+            .setDestination(DataUsageList.class.getName())
             .setSourceMetricsCategory(MetricsProto.MetricsEvent.VIEW_UNKNOWN);
         if (mTemplate.isMatchRuleMobile()) {
             launcher.setTitleRes(R.string.app_cellular_data_usage);
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
index edde661..92d3e29 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
@@ -208,11 +208,11 @@
 
     private static void launchWifiDataUsage(Context context) {
         final Bundle args = new Bundle(1);
-        args.putParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE,
+        args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE,
                 NetworkTemplate.buildTemplateWifiWildcard());
         final SubSettingLauncher launcher = new SubSettingLauncher(context)
                 .setArguments(args)
-                .setDestination(DataUsageListV2.class.getName())
+                .setDestination(DataUsageList.class.getName())
                 .setSourceMetricsCategory(MetricsProto.MetricsEvent.VIEW_UNKNOWN);
         launcher.setTitleRes(R.string.wifi_data_usage);
         launcher.launch();
diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccessPreference.java b/src/com/android/settings/datausage/UnrestrictedDataAccessPreference.java
index 9918411..824c102 100644
--- a/src/com/android/settings/datausage/UnrestrictedDataAccessPreference.java
+++ b/src/com/android/settings/datausage/UnrestrictedDataAccessPreference.java
@@ -81,7 +81,7 @@
     protected void onClick() {
         if (mDataUsageState.isDataSaverBlacklisted) {
             // app is blacklisted, launch App Data Usage screen
-            AppInfoDashboardFragment.startAppInfoFragment(AppDataUsageV2.class,
+            AppInfoDashboardFragment.startAppInfoFragment(AppDataUsage.class,
                     R.string.app_data_usage,
                     null /* arguments */,
                     mParentFragment,
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index b8f1fa5..e105dfc 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -26,8 +26,8 @@
 com.android.settings.bluetooth.BluetoothDeviceDetailsFragment
 com.android.settings.bluetooth.BluetoothPairingDetail
 com.android.settings.bluetooth.DevicePickerFragment
-com.android.settings.datausage.AppDataUsageV2
-com.android.settings.datausage.DataUsageListV2
+com.android.settings.datausage.AppDataUsage
+com.android.settings.datausage.DataUsageList
 com.android.settings.datetime.timezone.TimeZoneSettings
 com.android.settings.deviceinfo.PrivateVolumeSettings
 com.android.settings.deviceinfo.PublicVolumeSettings
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2Test.java
rename to tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java
index 494fa40..fe70c7e 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2Test.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerTest.java
@@ -35,7 +35,7 @@
 import android.os.Bundle;
 
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.datausage.AppDataUsageV2;
+import com.android.settings.datausage.AppDataUsage;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 
@@ -51,7 +51,7 @@
 import androidx.preference.Preference;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-public class AppDataUsagePreferenceControllerV2Test {
+public class AppDataUsagePreferenceControllerTest {
 
     @Mock
     private LoaderManager mLoaderManager;
@@ -59,13 +59,13 @@
     private AppInfoDashboardFragment mFragment;
 
     private Context mContext;
-    private AppDataUsagePreferenceControllerV2 mController;
+    private AppDataUsagePreferenceController mController;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application.getApplicationContext());
-        mController = spy(new AppDataUsagePreferenceControllerV2(mContext, "test_key"));
+        mController = spy(new AppDataUsagePreferenceController(mContext, "test_key"));
         mController.setParentFragment(mFragment);
     }
 
@@ -126,7 +126,7 @@
 
     @Test
     public void getDetailFragmentClass_shouldReturnAppDataUsage() {
-        assertThat(mController.getDetailFragmentClass()).isEqualTo(AppDataUsageV2.class);
+        assertThat(mController.getDetailFragmentClass()).isEqualTo(AppDataUsage.class);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageV2Test.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
similarity index 96%
rename from tests/robotests/src/com/android/settings/datausage/AppDataUsageV2Test.java
rename to tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
index 8796a39..333c706 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageV2Test.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
@@ -66,14 +66,14 @@
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(shadows = {ShadowEntityHeaderController.class, ShadowRestrictedLockUtilsInternal.class})
-public class AppDataUsageV2Test {
+public class AppDataUsageTest {
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private EntityHeaderController mHeaderController;
     @Mock
     private PackageManager mPackageManager;
 
-    private AppDataUsageV2 mFragment;
+    private AppDataUsage mFragment;
 
     @Before
     public void setUp() {
@@ -92,7 +92,7 @@
         when(mHeaderController.setRecyclerView(any(), any())).thenReturn(mHeaderController);
         when(mHeaderController.setUid(anyInt())).thenReturn(mHeaderController);
 
-        mFragment = spy(new AppDataUsageV2());
+        mFragment = spy(new AppDataUsage());
 
         when(mFragment.getPreferenceManager())
             .thenReturn(mock(PreferenceManager.class, RETURNS_DEEP_STUBS));
@@ -109,7 +109,7 @@
             PackageManager.NameNotFoundException {
         final int fakeUserId = 100;
 
-        mFragment = spy(new AppDataUsageV2());
+        mFragment = spy(new AppDataUsage());
         final ArraySet<String> packages = new ArraySet<>();
         packages.add("pkg");
         final AppItem appItem = new AppItem(123456789);
@@ -138,7 +138,7 @@
 
     @Test
     public void changePreference_backgroundData_shouldUpdateUI() {
-        mFragment = spy(new AppDataUsageV2());
+        mFragment = spy(new AppDataUsage());
         final AppItem appItem = new AppItem(123456789);
         final RestrictedSwitchPreference pref = mock(RestrictedSwitchPreference.class);
         final DataSaverBackend dataSaverBackend = mock(DataSaverBackend.class);
@@ -155,7 +155,7 @@
 
     @Test
     public void updatePrefs_restrictedByAdmin_shouldDisablePreference() {
-        mFragment = spy(new AppDataUsageV2());
+        mFragment = spy(new AppDataUsage());
         final int testUid = 123123;
         final AppItem appItem = new AppItem(testUid);
         final RestrictedSwitchPreference restrictBackgroundPref
@@ -182,7 +182,7 @@
 
     @Test
     public void bindData_noAppUsageData_shouldHideCycleSpinner() {
-        mFragment = spy(new AppDataUsageV2());
+        mFragment = spy(new AppDataUsage());
         final SpinnerPreference cycle = mock(SpinnerPreference.class);
         ReflectionHelpers.setField(mFragment, "mCycle", cycle);
         final Preference preference = mock(Preference.class);
@@ -198,7 +198,7 @@
 
     @Test
     public void bindData_hasAppUsageData_shouldShowCycleSpinnerAndUpdateUsageSummary() {
-        mFragment = spy(new AppDataUsageV2());
+        mFragment = spy(new AppDataUsage());
         final Context context = RuntimeEnvironment.application;
         doReturn(context).when(mFragment).getContext();
         final long backgroundBytes = 1234L;
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageListV2Test.java b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
similarity index 90%
rename from tests/robotests/src/com/android/settings/datausage/DataUsageListV2Test.java
rename to tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
index f561a05..7a10d70 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageListV2Test.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
@@ -47,7 +47,7 @@
 import androidx.preference.PreferenceManager;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-public class DataUsageListV2Test {
+public class DataUsageListTest {
 
     @Mock
     private CellDataPreference.DataStateListener mListener;
@@ -55,14 +55,14 @@
     private TemplatePreference.NetworkServices mNetworkServices;
     @Mock
     private Context mContext;
-    private DataUsageListV2 mDataUsageList;
+    private DataUsageList mDataUsageList;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         FakeFeatureFactory.setupForTest();
         mNetworkServices.mPolicyEditor = mock(NetworkPolicyEditor.class);
-        mDataUsageList = spy(DataUsageListV2.class);
+        mDataUsageList = spy(DataUsageList.class);
 
         doReturn(mContext).when(mDataUsageList).getContext();
         ReflectionHelpers.setField(mDataUsageList, "mDataStateListener", mListener);
@@ -88,8 +88,8 @@
     @Test
     public void processArgument_shouldGetTemplateFromArgument() {
         final Bundle args = new Bundle();
-        args.putParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE, mock(NetworkTemplate.class));
-        args.putInt(DataUsageListV2.EXTRA_SUB_ID, 3);
+        args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mock(NetworkTemplate.class));
+        args.putInt(DataUsageList.EXTRA_SUB_ID, 3);
         mDataUsageList.setArguments(args);
 
         mDataUsageList.processArgument();
@@ -101,8 +101,8 @@
     @Test
     public void processArgument_shouldGetNetworkTypeFromArgument() {
         final Bundle args = new Bundle();
-        args.putInt(DataUsageListV2.EXTRA_NETWORK_TYPE, ConnectivityManager.TYPE_WIFI);
-        args.putInt(DataUsageListV2.EXTRA_SUB_ID, 3);
+        args.putInt(DataUsageList.EXTRA_NETWORK_TYPE, ConnectivityManager.TYPE_WIFI);
+        args.putInt(DataUsageList.EXTRA_SUB_ID, 3);
         mDataUsageList.setArguments(args);
 
         mDataUsageList.processArgument();
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
index 581a7be..855e40b 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
@@ -513,11 +513,11 @@
                 SubSettings.class.getName()));
 
         final Bundle expect = new Bundle(1);
-        expect.putParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE,
+        expect.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE,
                 NetworkTemplate.buildTemplateWifiWildcard());
         final Bundle actual = startedIntent
                 .getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
-        assertThat((NetworkTemplate) actual.getParcelable(DataUsageListV2.EXTRA_NETWORK_TEMPLATE))
+        assertThat((NetworkTemplate) actual.getParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE))
                 .isEqualTo(NetworkTemplate.buildTemplateWifiWildcard());
 
         assertThat(startedIntent.getIntExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, 0))
