Merge changes I4ad08873,If0562677,I5fe6ba32 into jb-mr1-dev

* changes:
  Don't auto-discover peers until scan requested.
  Use wfdInfo to filter available sinks.
  Allow adb shell am display-size to use bigger sizes.
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index 89287ad..bc9e74e 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -1187,32 +1187,26 @@
 
     private void runDisplaySize() throws Exception {
         String size = nextArgRequired();
-        int m, n;
+        int w, h;
         if ("reset".equals(size)) {
-            m = n = -1;
+            w = h = -1;
         } else {
             int div = size.indexOf('x');
             if (div <= 0 || div >= (size.length()-1)) {
                 System.err.println("Error: bad size " + size);
                 return;
             }
-            String mstr = size.substring(0, div);
-            String nstr = size.substring(div+1);
+            String wstr = size.substring(0, div);
+            String hstr = size.substring(div+1);
             try {
-                m = Integer.parseInt(mstr);
-                n = Integer.parseInt(nstr);
+                w = Integer.parseInt(wstr);
+                h = Integer.parseInt(hstr);
             } catch (NumberFormatException e) {
                 System.err.println("Error: bad number " + e);
                 return;
             }
         }
 
-        if (m < n) {
-            int tmp = m;
-            m = n;
-            n = tmp;
-        }
-
         IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.checkService(
                 Context.WINDOW_SERVICE));
         if (wm == null) {
@@ -1221,9 +1215,9 @@
         }
 
         try {
-            if (m >= 0 && n >= 0) {
+            if (w >= 0 && h >= 0) {
                 // TODO(multidisplay): For now Configuration only applies to main screen.
-                wm.setForcedDisplaySize(Display.DEFAULT_DISPLAY, m, n);
+                wm.setForcedDisplaySize(Display.DEFAULT_DISPLAY, w, h);
             } else {
                 wm.clearForcedDisplaySize(Display.DEFAULT_DISPLAY);
             }
@@ -1444,7 +1438,7 @@
                 "       am clear-debug-app\n" +
                 "       am monitor [--gdb <port>]\n" +
                 "       am screen-compat [on|off] <PACKAGE>\n" +
-                "       am display-size [reset|MxN]\n" +
+                "       am display-size [reset|WxH]\n" +
                 "       am display-density [reset|DENSITY]\n" +
                 "       am to-uri [INTENT]\n" +
                 "       am to-intent-uri [INTENT]\n" +
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index dae5c0a..a64cbf7 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -59,7 +59,7 @@
             in IInputContext inputContext);
     boolean inputMethodClientHasFocus(IInputMethodClient client);
 
-    void setForcedDisplaySize(int displayId, int longDimen, int shortDimen);
+    void setForcedDisplaySize(int displayId, int width, int height);
     void clearForcedDisplaySize(int displayId);
     void setForcedDisplayDensity(int displayId, int density);
     void clearForcedDisplayDensity(int displayId);
diff --git a/services/java/com/android/server/display/WifiDisplayController.java b/services/java/com/android/server/display/WifiDisplayController.java
index 67691df..144b391 100644
--- a/services/java/com/android/server/display/WifiDisplayController.java
+++ b/services/java/com/android/server/display/WifiDisplayController.java
@@ -179,7 +179,6 @@
                     if (mWfdEnabling) {
                         mWfdEnabling = false;
                         setWfdEnabled(true);
-                        discoverPeers();
                     }
                 }
 
@@ -493,14 +492,8 @@
                 return; // done
             }
 
-            int port = DEFAULT_CONTROL_PORT;
-            if (mConnectedDevice.deviceName.startsWith("DIRECT-")
-                    && mConnectedDevice.deviceName.endsWith("Broadcom")) {
-                // These dongles ignore the port we broadcast in our WFD IE.
-                port = 8554;
-            }
-
             final WifiDisplay display = createWifiDisplay(mConnectedDevice);
+            final int port = getPortNumber(mConnectedDevice);
             final String iface = addr.getHostAddress() + ":" + port;
 
             mPublishedDevice = mConnectedDevice;
@@ -517,9 +510,7 @@
         if (mWifiP2pEnabled != enabled) {
             mWifiP2pEnabled = enabled;
             if (enabled) {
-                if (mWfdEnabled) {
-                    discoverPeers();
-                } else {
+                if (!mWfdEnabled) {
                     enableWfd();
                 }
             } else {
@@ -647,12 +638,24 @@
         return null;
     }
 
+    private static int getPortNumber(WifiP2pDevice device) {
+        if (device.deviceName.startsWith("DIRECT-")
+                && device.deviceName.endsWith("Broadcom")) {
+            // These dongles ignore the port we broadcast in our WFD IE.
+            return 8554;
+        }
+        return DEFAULT_CONTROL_PORT;
+    }
+
     private static boolean isWifiDisplay(WifiP2pDevice device) {
-        // FIXME: the wfdInfo API doesn't work yet
-        return device.deviceName.startsWith("DWD-")
-                || device.deviceName.startsWith("DIRECT-")
-                || device.deviceName.startsWith("CAVM-");
-        //device.wfdInfo != null && device.wfdInfo.isWfdEnabled();
+        return device.wfdInfo != null
+                && device.wfdInfo.isWfdEnabled()
+                && isPrimarySinkDeviceType(device.wfdInfo.getDeviceType());
+    }
+
+    private static boolean isPrimarySinkDeviceType(int deviceType) {
+        return deviceType == WifiP2pWfdInfo.PRIMARY_SINK
+                || deviceType == WifiP2pWfdInfo.SOURCE_OR_PRIMARY_SINK;
     }
 
     private static String describeWifiP2pDevice(WifiP2pDevice device) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 622ab63..6951879 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -7831,24 +7831,22 @@
         }
     }
 
-    public void setForcedDisplaySize(int displayId, int longDimen, int shortDimen) {
+    public void setForcedDisplaySize(int displayId, int width, int height) {
         synchronized(mWindowMap) {
+            // Set some sort of reasonable bounds on the size of the display that we
+            // will try to emulate.
+            final int MIN_WIDTH = 200;
+            final int MIN_HEIGHT = 200;
+            final int MAX_SCALE = 2;
             final DisplayContent displayContent = getDisplayContent(displayId);
-            int width, height;
-            if (displayContent.mInitialDisplayWidth < displayContent.mInitialDisplayHeight) {
-                width = shortDimen < displayContent.mInitialDisplayWidth
-                        ? shortDimen : displayContent.mInitialDisplayWidth;
-                height = longDimen < displayContent.mInitialDisplayHeight
-                        ? longDimen : displayContent.mInitialDisplayHeight;
-            } else {
-                width = longDimen < displayContent.mInitialDisplayWidth
-                        ? longDimen : displayContent.mInitialDisplayWidth;
-                height = shortDimen < displayContent.mInitialDisplayHeight
-                        ? shortDimen : displayContent.mInitialDisplayHeight;
-            }
+
+            width = Math.min(Math.max(width, MIN_WIDTH),
+                    displayContent.mInitialDisplayWidth * MAX_SCALE);
+            height = Math.min(Math.max(height, MIN_HEIGHT),
+                    displayContent.mInitialDisplayHeight * MAX_SCALE);
             setForcedDisplaySizeLocked(displayContent, width, height);
-            Settings.Secure.putString(mContext.getContentResolver(),
-                    Settings.Secure.DISPLAY_SIZE_FORCED, width + "," + height);
+            Settings.Global.putString(mContext.getContentResolver(),
+                    Settings.Global.DISPLAY_SIZE_FORCED, width + "," + height);
         }
     }
 
@@ -7895,8 +7893,8 @@
 
     private void readForcedDisplaySizeAndDensityLocked(final DisplayContent displayContent) {
         boolean changed = false;
-        final String sizeStr = Settings.Secure.getString(mContext.getContentResolver(),
-                Settings.Secure.DISPLAY_SIZE_FORCED);
+        final String sizeStr = Settings.Global.getString(mContext.getContentResolver(),
+                Settings.Global.DISPLAY_SIZE_FORCED);
         if (sizeStr != null && sizeStr.length() > 0) {
             final int pos = sizeStr.indexOf(',');
             if (pos > 0 && sizeStr.lastIndexOf(',') == pos) {
@@ -7917,8 +7915,8 @@
                 }
             }
         }
-        final String densityStr = Settings.Secure.getString(mContext.getContentResolver(),
-                Settings.Secure.DISPLAY_DENSITY_FORCED);
+        final String densityStr = Settings.Global.getString(mContext.getContentResolver(),
+                Settings.Global.DISPLAY_DENSITY_FORCED);
         if (densityStr != null && densityStr.length() > 0) {
             int density;
             try {
@@ -7953,8 +7951,8 @@
             final DisplayContent displayContent = getDisplayContent(displayId);
             setForcedDisplaySizeLocked(displayContent, displayContent.mInitialDisplayWidth,
                     displayContent.mInitialDisplayHeight);
-            Settings.Secure.putString(mContext.getContentResolver(),
-                    Settings.Secure.DISPLAY_SIZE_FORCED, "");
+            Settings.Global.putString(mContext.getContentResolver(),
+                    Settings.Global.DISPLAY_SIZE_FORCED, "");
         }
     }
 
@@ -7962,8 +7960,8 @@
         synchronized(mWindowMap) {
             final DisplayContent displayContent = getDisplayContent(displayId);
             setForcedDisplayDensityLocked(displayContent, density);
-            Settings.Secure.putString(mContext.getContentResolver(),
-                    Settings.Secure.DISPLAY_DENSITY_FORCED, Integer.toString(density));
+            Settings.Global.putString(mContext.getContentResolver(),
+                    Settings.Global.DISPLAY_DENSITY_FORCED, Integer.toString(density));
         }
     }