diff --git a/src/com/android/settings/datausage/DataUsagePreference.java b/src/com/android/settings/datausage/DataUsagePreference.java
index af8d6d4..09465f7 100644
--- a/src/com/android/settings/datausage/DataUsagePreference.java
+++ b/src/com/android/settings/datausage/DataUsagePreference.java
@@ -21,6 +21,7 @@
 import android.os.Bundle;
 import android.util.AttributeSet;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.core.SubSettingLauncher;
@@ -51,17 +52,24 @@
             NetworkServices services) {
         mTemplate = template;
         mSubId = subId;
-        DataUsageController controller = new DataUsageController(getContext());
-        DataUsageController.DataUsageInfo usageInfo = controller.getDataUsageInfo(mTemplate);
+        final DataUsageController controller = getDataUsageController();
         if (mTemplate.isMatchRuleMobile()) {
             setTitle(R.string.app_cellular_data_usage);
         } else {
+            final DataUsageController.DataUsageInfo usageInfo =
+                    controller.getDataUsageInfo(mTemplate);
             setTitle(mTitleRes);
             setSummary(getContext().getString(R.string.data_usage_template,
                     DataUsageUtils.formatDataUsage(getContext(), usageInfo.usageLevel),
                     usageInfo.period));
         }
-        setIntent(getIntent());
+        final long usageLevel = controller.getHistoriclUsageLevel(template);
+        if (usageLevel > 0L) {
+            setIntent(getIntent());
+        } else {
+            setIntent(null);
+            setEnabled(false);
+        }
     }
 
     @Override
@@ -80,4 +88,9 @@
         }
         return launcher.toIntent();
     }
+
+    @VisibleForTesting
+    DataUsageController getDataUsageController() {
+        return new DataUsageController(getContext());
+    }
 }
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
index d0e4871..ee9798d 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
@@ -38,6 +38,7 @@
 import com.android.settings.R;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settingslib.Utils;
+import com.android.settingslib.net.DataUsageController;
 import com.android.settingslib.utils.StringUtil;
 
 import java.util.Objects;
@@ -177,9 +178,14 @@
             carrierInfo.setVisibility(View.GONE);
             limitInfo.setVisibility(View.GONE);
 
-            launchButton.setOnClickListener((view) -> {
-                launchWifiDataUsage(getContext());
-            });
+            final long usageLevel = getHistoriclUsageLevel();
+            if (usageLevel > 0L) {
+                launchButton.setOnClickListener((view) -> {
+                    launchWifiDataUsage(getContext());
+                });
+            } else {
+                launchButton.setEnabled(false);
+            }
             launchButton.setText(R.string.launch_wifi_text);
             launchButton.setVisibility(View.VISIBLE);
         } else {
@@ -331,4 +337,11 @@
         carrierInfo.setTextColor(Utils.getColorAttr(getContext(), colorId));
         carrierInfo.setTypeface(typeface);
     }
+
+    @VisibleForTesting
+    long getHistoriclUsageLevel() {
+        final DataUsageController controller = new DataUsageController(getContext());
+        return controller.getHistoriclUsageLevel(NetworkTemplate.buildTemplateWifiWildcard());
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
new file mode 100644
index 0000000..422450a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsagePreferenceTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.datausage;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.NetworkTemplate;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.net.DataUsageController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class DataUsagePreferenceTest {
+
+    @Mock
+    private DataUsageController mController;
+
+    private Context mContext;
+    private DataUsagePreference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = RuntimeEnvironment.application;
+        mPreference = spy(new DataUsagePreference(mContext, null /* attrs */));
+        doReturn(mController).when(mPreference).getDataUsageController();
+
+    }
+
+    @Test
+    public void setTemplate_noDataUsage_shouldDisablePreference() {
+        doReturn(0L).when(mController).getHistoriclUsageLevel(any(NetworkTemplate.class));
+
+        mPreference.setTemplate(
+                NetworkTemplate.buildTemplateMobileWildcard(), 5 /* subId */, null /* services */);
+
+        verify(mPreference).setEnabled(false);
+        verify(mPreference).setIntent(null);
+    }
+
+    @Test
+    public void setTemplate_hasDataUsage_shouldNotDisablePreference() {
+        doReturn(200L).when(mController).getHistoriclUsageLevel(any(NetworkTemplate.class));
+
+        mPreference.setTemplate(
+                NetworkTemplate.buildTemplateMobileWildcard(), 5 /* subId */, null /* services */);
+
+        verify(mPreference, never()).setEnabled(false);
+        verify(mPreference).setIntent(any(Intent.class));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
index 5b72471..d1655b7 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryPreferenceTest.java
@@ -486,11 +486,13 @@
         final long cycleEnd = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(daysLeft)
                 + TimeUnit.HOURS.toMillis(1);
         final Activity activity = Robolectric.setupActivity(Activity.class);
+        mSummaryPreference = spy(mSummaryPreference);
         mSummaryPreference.setUsageInfo(cycleEnd, mUpdateTime, DUMMY_CARRIER, 0 /* numPlans */,
                 new Intent());
         mSummaryPreference.setUsageNumbers(1000000L, -1L, true);
         final String cycleText = "The quick fox";
         mSummaryPreference.setWifiMode(true, cycleText);
+        doReturn(200L).when(mSummaryPreference).getHistoriclUsageLevel();
 
         bindViewHolder();
         assertThat(mUsageTitle.getText().toString())
@@ -522,6 +524,17 @@
                 .isEqualTo(R.string.wifi_data_usage);
     }
 
+    @Test
+    public void testSetWifiMode_noUsageInfo_shouldDisableLaunchButton() {
+        mSummaryPreference = spy(mSummaryPreference);
+        mSummaryPreference.setWifiMode(true, "Test cycle text");
+        doReturn(0L).when(mSummaryPreference).getHistoriclUsageLevel();
+
+        bindViewHolder();
+
+        assertThat(mLaunchButton.isEnabled()).isFalse();
+    }
+
     private void bindViewHolder() {
         mSummaryPreference.onBindViewHolder(mHolder);
         mUsageTitle = (TextView) mHolder.findViewById(R.id.usage_title);
