diff --git a/src/com/android/settings/datausage/DataUsagePreference.java b/src/com/android/settings/datausage/DataUsagePreference.java
index 5bd8dcd..aa4e646 100644
--- a/src/com/android/settings/datausage/DataUsagePreference.java
+++ b/src/com/android/settings/datausage/DataUsagePreference.java
@@ -51,8 +51,7 @@
     }
 
     @Override
-    public void setTemplate(NetworkTemplate template, int subId,
-            NetworkServices services) {
+    public void setTemplate(NetworkTemplate template, int subId, NetworkServices services) {
         mTemplate = template;
         mSubId = subId;
         final DataUsageController controller = getDataUsageController();
@@ -66,7 +65,7 @@
                     DataUsageUtils.formatDataUsage(getContext(), usageInfo.usageLevel),
                     usageInfo.period));
         }
-        final long usageLevel = controller.getHistoriclUsageLevel(template);
+        final long usageLevel = controller.getHistoricalUsageLevel(template);
         if (usageLevel > 0L) {
             setIntent(getIntent());
         } else {
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index c7c906f..97715db 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -283,8 +283,7 @@
                                     formatUsedData()));
                 } else {
                     final DataUsageController.DataUsageInfo info =
-                            mDataController
-                                    .getDataUsageInfo(NetworkTemplate.buildTemplateWifiWildcard());
+                            mDataController.getWifiDataUsageInfo();
 
                     if (info == null) {
                         mSummaryLoader.setSummary(this, null);
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
index 5b54ebb..92d3e29 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
@@ -178,7 +178,7 @@
             carrierInfo.setVisibility(View.GONE);
             limitInfo.setVisibility(View.GONE);
 
-            final long usageLevel = getHistoriclUsageLevel();
+            final long usageLevel = getHistoricalUsageLevel();
             if (usageLevel > 0L) {
                 launchButton.setOnClickListener((view) -> {
                     launchWifiDataUsage(getContext());
@@ -339,9 +339,9 @@
     }
 
     @VisibleForTesting
-    long getHistoriclUsageLevel() {
+    long getHistoricalUsageLevel() {
         final DataUsageController controller = new DataUsageController(getContext());
-        return controller.getHistoriclUsageLevel(NetworkTemplate.buildTemplateWifiWildcard());
+        return controller.getHistoricalUsageLevel(NetworkTemplate.buildTemplateWifiWildcard());
     }
 
 }
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
index 422450a..151bc7d 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
@@ -57,7 +57,7 @@
 
     @Test
     public void setTemplate_noDataUsage_shouldDisablePreference() {
-        doReturn(0L).when(mController).getHistoriclUsageLevel(any(NetworkTemplate.class));
+        doReturn(0L).when(mController).getHistoricalUsageLevel(any(NetworkTemplate.class));
 
         mPreference.setTemplate(
                 NetworkTemplate.buildTemplateMobileWildcard(), 5 /* subId */, null /* services */);
@@ -68,7 +68,7 @@
 
     @Test
     public void setTemplate_hasDataUsage_shouldNotDisablePreference() {
-        doReturn(200L).when(mController).getHistoriclUsageLevel(any(NetworkTemplate.class));
+        doReturn(200L).when(mController).getHistoricalUsageLevel(any(NetworkTemplate.class));
 
         mPreference.setTemplate(
                 NetworkTemplate.buildTemplateMobileWildcard(), 5 /* subId */, null /* services */);
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
index 8964d88..121d9a2 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
@@ -493,7 +493,7 @@
         mSummaryPreference.setUsageNumbers(1000000L, -1L, true);
         final String cycleText = "The quick fox";
         mSummaryPreference.setWifiMode(true, cycleText);
-        doReturn(200L).when(mSummaryPreference).getHistoriclUsageLevel();
+        doReturn(200L).when(mSummaryPreference).getHistoricalUsageLevel();
 
         bindViewHolder();
         assertThat(mUsageTitle.getText().toString())
@@ -529,7 +529,7 @@
     public void testSetWifiMode_noUsageInfo_shouldDisableLaunchButton() {
         mSummaryPreference = spy(mSummaryPreference);
         mSummaryPreference.setWifiMode(true, "Test cycle text");
-        doReturn(0L).when(mSummaryPreference).getHistoriclUsageLevel();
+        doReturn(0L).when(mSummaryPreference).getHistoricalUsageLevel();
 
         bindViewHolder();
 
