Merge "Disable App data usage preference if there's no usage data."
diff --git a/src/com/android/settings/network/telephony/DataUsagePreferenceController.java b/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
index 7028a3e..f9e0a97 100644
--- a/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/DataUsagePreferenceController.java
@@ -63,7 +63,16 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        final boolean enabled = mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+        if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+            preference.setEnabled(false);
+            return;
+        }
+        long usageLevel = mDataUsageInfo.usageLevel;
+        if (usageLevel <= 0L) {
+            final DataUsageController controller = new DataUsageController(mContext);
+            usageLevel = controller.getHistoricalUsageLevel(mTemplate);
+        }
+        final boolean enabled = usageLevel > 0L;
         preference.setEnabled(enabled);
 
         if (enabled) {
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
index f77a94f..348f8b4 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
@@ -18,11 +18,17 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import android.app.Activity;
+import android.app.usage.NetworkStats;
 import android.app.usage.NetworkStatsManager;
 import android.content.Context;
 import android.content.Intent;
@@ -33,6 +39,7 @@
 import androidx.preference.SwitchPreference;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.net.DataUsageController;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -42,6 +49,7 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.util.ReflectionHelpers;
 
 @RunWith(RobolectricTestRunner.class)
 public class DataUsagePreferenceControllerTest {
@@ -104,4 +112,18 @@
 
         assertThat(mPreference.isEnabled()).isFalse();
     }
+
+    @Test
+    public void updateState_noUsageData_shouldDisablePreference() throws Exception {
+        final NetworkStatsManager networkStatsManager = mock(NetworkStatsManager.class);
+        when(networkStatsManager.querySummaryForDevice(anyInt() /* networkType */,
+            anyString() /* subscriberId */, anyLong() /* startTime */, anyLong() /* endTime */))
+            .thenReturn(mock(NetworkStats.Bucket.class));
+        ReflectionHelpers.setField(
+            mController, "mDataUsageInfo", new DataUsageController.DataUsageInfo());
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isEnabled()).isFalse();
+    }
 }