diff --git a/src/com/android/settings/datausage/DataUsageInfoController.java b/src/com/android/settings/datausage/DataUsageInfoController.java
new file mode 100644
index 0000000..115e45e
--- /dev/null
+++ b/src/com/android/settings/datausage/DataUsageInfoController.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2016 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 android.net.NetworkPolicy;
+import com.android.settingslib.net.DataUsageController.DataUsageInfo;
+
+/**
+ * Controller to handle caching and mobile data logic.
+ */
+public class DataUsageInfoController {
+    /**
+     * Take the cached data usage values in the NetworkPolicy to update DataUsageInfo.
+     */
+    public void updateDataLimit(DataUsageInfo info, NetworkPolicy policy) {
+        if (info == null || policy == null) {
+            return;
+        }
+        if (policy.warningBytes >= 0) {
+            info.warningLevel = policy.warningBytes;
+        }
+        if (policy.limitBytes >= 0) {
+            info.limitLevel = policy.limitBytes;
+        }
+    }
+
+    /**
+     * @returns the most appropriate limit for the data usage summary. Use the total usage when it
+     * is higher than the limit and warning level. Use the limit when it is set and less than usage.
+     * Otherwise use warning level.
+     */
+    public long getSummaryLimit(DataUsageInfo info) {
+        long limit = info.limitLevel;
+        if (limit <= 0) {
+            limit = info.warningLevel;
+        }
+        if (info.usageLevel > limit) {
+            limit = info.usageLevel;
+        }
+        return limit;
+    }
+}
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index e334a5a..f975d11 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -20,7 +20,6 @@
 import android.content.Intent;
 import android.net.ConnectivityManager;
 import android.net.INetworkStatsSession;
-import android.net.NetworkPolicy;
 import android.net.NetworkTemplate;
 import android.net.TrafficStats;
 import android.os.Bundle;
@@ -71,6 +70,7 @@
     private static final String KEY_RESTRICT_BACKGROUND = "restrict_background";
 
     private DataUsageController mDataUsageController;
+    private DataUsageInfoController mDataInfoController;
     private SummaryPreference mSummaryPreference;
     private Preference mLimitPreference;
     private NetworkTemplate mDefaultTemplate;
@@ -82,6 +82,7 @@
 
         boolean hasMobileData = hasMobileData(getContext());
         mDataUsageController = new DataUsageController(getContext());
+        mDataInfoController = new DataUsageInfoController();
         addPreferencesFromResource(R.xml.data_usage);
 
         int defaultSubId = getDefaultSubscriptionId(getContext());
@@ -236,18 +237,14 @@
         DataUsageController.DataUsageInfo info = mDataUsageController.getDataUsageInfo(
                 mDefaultTemplate);
         Context context = getContext();
-        NetworkPolicy policy = services.mPolicyEditor.getPolicy(mDefaultTemplate);
-        info.warningLevel = policy.warningBytes;
+
+        mDataInfoController.updateDataLimit(info,
+                services.mPolicyEditor.getPolicy(mDefaultTemplate));
+
         if (mSummaryPreference != null) {
             mSummaryPreference.setTitle(
                     formatTitle(context, getString(mDataUsageTemplate), info.usageLevel));
-            long limit = info.limitLevel;
-            if (limit <= 0) {
-                limit = info.warningLevel;
-            }
-            if (info.usageLevel > limit) {
-                limit = info.usageLevel;
-            }
+            long limit = mDataInfoController.getSummaryLimit(info);
             mSummaryPreference.setSummary(info.period);
             mSummaryPreference.setLabels(Formatter.formatFileSize(context, 0),
                     Formatter.formatFileSize(context, limit));
