diff --git a/Android.mk b/Android.mk
index 0663e85..52fcfb4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -6,7 +6,9 @@
 
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := \
+        $(call all-java-files-under, src) \
+        src/com/android/settings/EventLogTags.logtags
 
 LOCAL_PACKAGE_NAME := Settings
 LOCAL_CERTIFICATE := platform
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4d09484..965c1ad 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1221,6 +1221,8 @@
     <string name="wifi_display_status_connected">Connected</string>
     <!-- Wifi Display settings. The status summary for available devices. [CHAR LIMIT=40] -->
     <string name="wifi_display_status_available">Available</string>
+    <!-- Wifi Display settings. The status summary for busy devices. [CHAR LIMIT=40] -->
+    <string name="wifi_display_status_busy">Busy</string>
     <!-- Wifi Display settings. Image description for device details button. This opens the screen to rename, unpair, etc. a single device. -->
     <string name="wifi_display_details">Display settings</string>
 
@@ -3314,10 +3316,14 @@
     <string name="usage_type_phone" product="tablet">Tablet</string>
     <!-- Label for Phone usage time -->
     <string name="usage_type_phone" product="default">Phone</string>
-    <!-- Label for Data sent -->
-    <string name="usage_type_data_send">Data sent</string>
-    <!-- Label for Data received -->
-    <string name="usage_type_data_recv">Data received</string>
+    <!-- Label for mobile network data sent [CHAR LIMIT=32] -->
+    <string name="usage_type_data_send">Mobile data sent</string>
+    <!-- Label for mobile network data received [CHAR LIMIT=32] -->
+    <string name="usage_type_data_recv">Mobile data received</string>
+    <!-- Label for Wi-Fi network data sent [CHAR LIMIT=32] -->
+    <string name="usage_type_data_wifi_send">Wi\u2011Fi data sent</string>
+    <!-- Label for Wi-Fi network data received [CHAR LIMIT=32] -->
+    <string name="usage_type_data_wifi_recv">Wi\u2011Fi data received</string>
     <!-- Label for Audio usage time -->
     <string name="usage_type_audio">Audio</string>
     <!-- Label for Video usage time -->
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 14671d1..8db5a75 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -28,6 +28,7 @@
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 import android.security.KeyStore;
+import android.util.EventLog;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -122,6 +123,9 @@
                 Preference preference) {
             final String key = preference.getKey();
             boolean handled = true;
+
+            EventLog.writeEvent(EventLogTags.LOCK_SCREEN_TYPE, key);
+
             if (KEY_UNLOCK_SET_OFF.equals(key)) {
                 updateUnlockMethodAndFinish(
                         DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true);
diff --git a/src/com/android/settings/DeviceAdminAdd.java b/src/com/android/settings/DeviceAdminAdd.java
index 27e7a54..6234038 100644
--- a/src/com/android/settings/DeviceAdminAdd.java
+++ b/src/com/android/settings/DeviceAdminAdd.java
@@ -116,34 +116,38 @@
             return;
         }
 
-        // Make sure the given component name is actually a valid device admin.
-        List<ResolveInfo> avail = getPackageManager().queryBroadcastReceivers(
-                new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
-                PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
-        int count = avail == null ? 0 : avail.size();
-        boolean found = false;
-        for (int i=0; i<count; i++) {
-            ResolveInfo ri = avail.get(i);
-            if (ai.packageName.equals(ri.activityInfo.packageName)
-                    && ai.name.equals(ri.activityInfo.name)) {
-                try {
-                    // We didn't retrieve the meta data for all possible matches, so
-                    // need to use the activity info of this specific one that was retrieved.
-                    ri.activityInfo = ai;
-                    DeviceAdminInfo dpi = new DeviceAdminInfo(this, ri);
-                    found = true;
-                } catch (XmlPullParserException e) {
-                    Log.w(TAG, "Bad " + ri.activityInfo, e);
-                } catch (IOException e) {
-                    Log.w(TAG, "Bad " + ri.activityInfo, e);
+        // When activating, make sure the given component name is actually a valid device admin.
+        // No need to check this when deactivating, because it is safe to deactivate an active
+        // invalid device admin.
+        if (!mDPM.isAdminActive(cn)) {
+            List<ResolveInfo> avail = getPackageManager().queryBroadcastReceivers(
+                    new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
+                    PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS);
+            int count = avail == null ? 0 : avail.size();
+            boolean found = false;
+            for (int i=0; i<count; i++) {
+                ResolveInfo ri = avail.get(i);
+                if (ai.packageName.equals(ri.activityInfo.packageName)
+                        && ai.name.equals(ri.activityInfo.name)) {
+                    try {
+                        // We didn't retrieve the meta data for all possible matches, so
+                        // need to use the activity info of this specific one that was retrieved.
+                        ri.activityInfo = ai;
+                        DeviceAdminInfo dpi = new DeviceAdminInfo(this, ri);
+                        found = true;
+                    } catch (XmlPullParserException e) {
+                        Log.w(TAG, "Bad " + ri.activityInfo, e);
+                    } catch (IOException e) {
+                        Log.w(TAG, "Bad " + ri.activityInfo, e);
+                    }
+                    break;
                 }
-                break;
             }
-        }
-        if (!found) {
-            Log.w(TAG, "Request to add invalid device admin: " + cn);
-            finish();
-            return;
+            if (!found) {
+                Log.w(TAG, "Request to add invalid device admin: " + cn);
+                finish();
+                return;
+            }
         }
 
         ResolveInfo ri = new ResolveInfo();
diff --git a/src/com/android/settings/EventLogTags.logtags b/src/com/android/settings/EventLogTags.logtags
new file mode 100644
index 0000000..3e87c53
--- /dev/null
+++ b/src/com/android/settings/EventLogTags.logtags
@@ -0,0 +1,6 @@
+# See system/core/logcat/event.logtags for a description of the format of this file.
+
+option java_package com.android.settings
+
+# log the type of screen lock when user sets lock screen
+90200 lock_screen_type (type|3)
diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
index 61188ec..1992fac 100644
--- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
+++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java
@@ -137,6 +137,8 @@
     public void init() {
         final Context context = getContext();
 
+        removeAll();
+
         final UserInfo currentUser;
         try {
             currentUser = ActivityManagerNative.getDefault().getCurrentUser();
@@ -242,9 +244,6 @@
 
         if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
             mItemAvailable.setTitle(R.string.memory_available_read_only);
-            if (mFormatPreference != null) {
-                removePreference(mFormatPreference);
-            }
         } else {
             mItemAvailable.setTitle(R.string.memory_available);
         }
@@ -269,9 +268,6 @@
             removePreference(mUsageBarPreference);
             removePreference(mItemTotal);
             removePreference(mItemAvailable);
-            if (mFormatPreference != null) {
-                removePreference(mFormatPreference);
-            }
         }
 
         if (mUsbConnected && (UsbManager.USB_FUNCTION_MTP.equals(mUsbFunction) ||
@@ -374,6 +370,7 @@
     }
 
     public void onStorageStateChanged() {
+        init();
         measure();
     }
 
diff --git a/src/com/android/settings/fuelgauge/BatterySipper.java b/src/com/android/settings/fuelgauge/BatterySipper.java
index 9a8e783..d581fb4 100644
--- a/src/com/android/settings/fuelgauge/BatterySipper.java
+++ b/src/com/android/settings/fuelgauge/BatterySipper.java
@@ -49,8 +49,10 @@
     long wifiRunningTime;
     long cpuFgTime;
     long wakeLockTime;
-    long tcpBytesReceived;
-    long tcpBytesSent;
+    long mobileRxBytes;
+    long mobileTxBytes;
+    long wifiRxBytes;
+    long wifiTxBytes;
     double percent;
     double noCoveragePercent;
     String defaultPackageName;
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 8ecc659..945b86b 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -316,6 +316,8 @@
                 switch (mTypes[i]) {
                     case R.string.usage_type_data_recv:
                     case R.string.usage_type_data_send:
+                    case R.string.usage_type_data_wifi_recv:
+                    case R.string.usage_type_data_wifi_send:
                         final long bytes = (long) (mValues[i]);
                         value = Formatter.formatFileSize(getActivity(), bytes);
                         break;
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 39dc1d6..8307530 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -16,6 +16,11 @@
 
 package com.android.settings.fuelgauge;
 
+import static android.os.BatteryStats.NETWORK_MOBILE_RX_BYTES;
+import static android.os.BatteryStats.NETWORK_MOBILE_TX_BYTES;
+import static android.os.BatteryStats.NETWORK_WIFI_RX_BYTES;
+import static android.os.BatteryStats.NETWORK_WIFI_TX_BYTES;
+
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -24,7 +29,6 @@
 import android.graphics.drawable.Drawable;
 import android.hardware.Sensor;
 import android.hardware.SensorManager;
-import android.net.Uri;
 import android.os.BatteryStats;
 import android.os.BatteryStats.Uid;
 import android.os.Bundle;
@@ -229,8 +233,10 @@
                     R.string.usage_type_wake_lock,
                     R.string.usage_type_gps,
                     R.string.usage_type_wifi_running,
-                    R.string.usage_type_data_send,
                     R.string.usage_type_data_recv,
+                    R.string.usage_type_data_send,
+                    R.string.usage_type_data_wifi_recv,
+                    R.string.usage_type_data_wifi_send,
                     R.string.usage_type_audio,
                     R.string.usage_type_video,
                 };
@@ -240,8 +246,10 @@
                     sipper.wakeLockTime,
                     sipper.gpsTime,
                     sipper.wifiRunningTime,
-                    sipper.tcpBytesSent,
-                    sipper.tcpBytesReceived,
+                    sipper.mobileRxBytes,
+                    sipper.mobileTxBytes,
+                    sipper.wifiRxBytes,
+                    sipper.wifiTxBytes,
                     0,
                     0
                 };
@@ -279,16 +287,20 @@
                     R.string.usage_type_cpu,
                     R.string.usage_type_cpu_foreground,
                     R.string.usage_type_wake_lock,
-                    R.string.usage_type_data_send,
                     R.string.usage_type_data_recv,
+                    R.string.usage_type_data_send,
+                    R.string.usage_type_data_wifi_recv,
+                    R.string.usage_type_data_wifi_send,
                 };
                 values = new double[] {
                     sipper.usageTime,
                     sipper.cpuTime,
                     sipper.cpuFgTime,
                     sipper.wakeLockTime,
-                    sipper.tcpBytesSent,
-                    sipper.tcpBytesReceived,
+                    sipper.mobileRxBytes,
+                    sipper.mobileTxBytes,
+                    sipper.wifiRxBytes,
+                    sipper.wifiTxBytes,
                 };
             } break;
             case BLUETOOTH:
@@ -298,16 +310,20 @@
                     R.string.usage_type_cpu,
                     R.string.usage_type_cpu_foreground,
                     R.string.usage_type_wake_lock,
-                    R.string.usage_type_data_send,
                     R.string.usage_type_data_recv,
+                    R.string.usage_type_data_send,
+                    R.string.usage_type_data_wifi_recv,
+                    R.string.usage_type_data_wifi_send,
                 };
                 values = new double[] {
                     sipper.usageTime,
                     sipper.cpuTime,
                     sipper.cpuFgTime,
                     sipper.wakeLockTime,
-                    sipper.tcpBytesSent,
-                    sipper.tcpBytesReceived,
+                    sipper.mobileRxBytes,
+                    sipper.mobileTxBytes,
+                    sipper.wifiRxBytes,
+                    sipper.wifiTxBytes,
                 };
             } break;
             default:
@@ -445,7 +461,8 @@
         for (int p = 0; p < speedSteps; p++) {
             powerCpuNormal[p] = mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_ACTIVE, p);
         }
-        final double averageCostPerByte = getAverageDataCost();
+        final double mobilePowerPerByte = getMobilePowerPerByte();
+        final double wifiPowerPerByte = getWifiPowerPerByte();
         long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which);
         long appWakelockTime = 0;
         BatterySipper osApp = null;
@@ -454,8 +471,8 @@
         final int NU = uidStats.size();
         for (int iu = 0; iu < NU; iu++) {
             Uid u = uidStats.valueAt(iu);
-            double p;
-            double power = 0;
+            double p; // in mAs
+            double power = 0; // in mAs
             double highestDrain = 0;
             String packageWithHighestDrain = null;
             //mUsageList.add(new AppUsage(u.getUid(), new double[] {power}));
@@ -535,12 +552,19 @@
             power += p;
             if (DEBUG && p != 0) Log.i(TAG, String.format("wakelock power=%.2f", p));
             
-            // Add cost of data traffic
-            long tcpBytesReceived = u.getTcpBytesReceived(mStatsType);
-            long tcpBytesSent = u.getTcpBytesSent(mStatsType);
-            p = (tcpBytesReceived+tcpBytesSent) * averageCostPerByte;
+            // Add cost of mobile traffic
+            final long mobileRx = u.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, mStatsType);
+            final long mobileTx = u.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, mStatsType);
+            p = (mobileRx + mobileTx) * mobilePowerPerByte;
             power += p;
-            if (DEBUG && p != 0) Log.i(TAG, String.format("tcp power=%.2f", p));
+            if (DEBUG && p != 0) Log.i(TAG, String.format("mobile power=%.2f", p));
+
+            // Add cost of wifi traffic
+            final long wifiRx = u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, mStatsType);
+            final long wifiTx = u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, mStatsType);
+            p = (wifiRx + wifiTx) * wifiPowerPerByte;
+            power += p;
+            if (DEBUG && p != 0) Log.i(TAG, String.format("wifi power=%.2f", p));
 
             // Add cost of keeping WIFI running.
             long wifiRunningTimeMs = u.getWifiRunningTime(uSecTime, which) / 1000;
@@ -602,8 +626,10 @@
                 app.wifiRunningTime = wifiRunningTimeMs;
                 app.cpuFgTime = cpuFgTime;
                 app.wakeLockTime = wakelockTime;
-                app.tcpBytesReceived = tcpBytesReceived;
-                app.tcpBytesSent = tcpBytesSent;
+                app.mobileRxBytes = mobileRx;
+                app.mobileTxBytes = mobileTx;
+                app.wifiRxBytes = wifiRx;
+                app.wifiTxBytes = wifiTx;
                 if (u.getUid() == Process.WIFI_UID) {
                     mWifiSippers.add(app);
                 } else if (u.getUid() == Process.BLUETOOTH_UID) {
@@ -725,8 +751,10 @@
             bs.wifiRunningTime += wbs.wifiRunningTime;
             bs.cpuFgTime += wbs.cpuFgTime;
             bs.wakeLockTime += wbs.wakeLockTime;
-            bs.tcpBytesReceived += wbs.tcpBytesReceived;
-            bs.tcpBytesSent += wbs.tcpBytesSent;
+            bs.mobileRxBytes += wbs.mobileRxBytes;
+            bs.mobileTxBytes += wbs.mobileTxBytes;
+            bs.wifiRxBytes += wbs.wifiRxBytes;
+            bs.wifiTxBytes += wbs.wifiTxBytes;
         }
     }
 
@@ -796,30 +824,34 @@
         }
     }
 
-    private double getAverageDataCost() {
-        final long WIFI_BPS = 1000000; // TODO: Extract average bit rates from system 
+    /**
+     * Return estimated power (in mAs) of sending a byte with the mobile radio.
+     */
+    private double getMobilePowerPerByte() {
         final long MOBILE_BPS = 200000; // TODO: Extract average bit rates from system
-        final double WIFI_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ACTIVE)
-                / 3600;
         final double MOBILE_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE)
                 / 3600;
-        final long mobileData = mStats.getMobileTcpBytesReceived(mStatsType) +
-                mStats.getMobileTcpBytesSent(mStatsType);
-        final long wifiData = mStats.getTotalTcpBytesReceived(mStatsType) +
-                mStats.getTotalTcpBytesSent(mStatsType) - mobileData;
+
+        final long mobileRx = mStats.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, mStatsType);
+        final long mobileTx = mStats.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, mStatsType);
+        final long mobileData = mobileRx + mobileTx;
+
         final long radioDataUptimeMs = mStats.getRadioDataUptime() / 1000;
         final long mobileBps = radioDataUptimeMs != 0
                 ? mobileData * 8 * 1000 / radioDataUptimeMs
                 : MOBILE_BPS;
 
-        double mobileCostPerByte = MOBILE_POWER / (mobileBps / 8);
-        double wifiCostPerByte = WIFI_POWER / (WIFI_BPS / 8);
-        if (wifiData + mobileData != 0) {
-            return (mobileCostPerByte * mobileData + wifiCostPerByte * wifiData)
-                    / (mobileData + wifiData);
-        } else {
-            return 0;
-        }
+        return MOBILE_POWER / (mobileBps / 8);
+    }
+
+    /**
+     * Return estimated power (in mAs) of sending a byte with the Wi-Fi radio.
+     */
+    private double getWifiPowerPerByte() {
+        final long WIFI_BPS = 1000000; // TODO: Extract average bit rates from system
+        final double WIFI_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ACTIVE)
+                / 3600;
+        return WIFI_POWER / (WIFI_BPS / 8);
     }
 
     private void processMiscUsage() {
diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java
index 5b732d6..ca2d254 100755
--- a/src/com/android/settings/wfd/WifiDisplaySettings.java
+++ b/src/com/android/settings/wfd/WifiDisplaySettings.java
@@ -182,7 +182,7 @@
 
             if (display.equals(mWifiDisplayStatus.getActiveDisplay())) {
                 showDisconnectDialog(display);
-            } else {
+            } else if (display.canConnect()){
                 mDisplayManager.connectWifiDisplay(display.getDeviceAddress());
             }
         }
@@ -267,6 +267,17 @@
         } else if (paired && contains(mWifiDisplayStatus.getAvailableDisplays(),
                 d.getDeviceAddress())) {
             p.setSummary(R.string.wifi_display_status_available);
+            for (WifiDisplay display : mWifiDisplayStatus.getAvailableDisplays()) {
+                if (display.getDeviceAddress().equals(d.getDeviceAddress()) &&
+                        !display.canConnect()) {
+                    p.setSummary(R.string.wifi_display_status_busy);
+                    p.setEnabled(false);
+                    break;
+                }
+            }
+        } else if (!paired && !d.canConnect()) {
+            p.setSummary(R.string.wifi_display_status_busy);
+            p.setEnabled(false);
         }
         if (paired) {
             p.setWidgetLayoutResource(R.layout.wifi_display_preference);
