Merge "Abort ongoing STA scan to prioritize P2P scan"
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index 8173853..edf3969 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -161,7 +161,7 @@
         mWifiP2pMonitor = new WifiP2pMonitor(this);
         mSupplicantP2pIfaceHal = new SupplicantP2pIfaceHal(mWifiP2pMonitor);
         mWifiP2pNative = new WifiP2pNative(SystemProperties.get("wifi.direct.interface", "p2p0"),
-                mSupplicantP2pIfaceHal);
+                mSupplicantP2pIfaceHal, mWificondControl);
 
         // Now get instances of all the objects that depend on the HandlerThreads
         mTrafficPoller =  new WifiTrafficPoller(mContext, mWifiServiceHandlerThread.getLooper(),
diff --git a/service/java/com/android/server/wifi/WificondControl.java b/service/java/com/android/server/wifi/WificondControl.java
index fdd0faf..8be7478 100644
--- a/service/java/com/android/server/wifi/WificondControl.java
+++ b/service/java/com/android/server/wifi/WificondControl.java
@@ -465,4 +465,22 @@
         return false;
     }
 
+    /**
+     * Abort ongoing single scan triggered by wificond.
+     * @return Returns true on success.
+     */
+    public boolean abortScan() {
+        if (mWificondScanner == null) {
+            Log.e(TAG, "No valid wificond scanner interface handler");
+            return false;
+        }
+
+        try {
+            return mWificondScanner.abortScan();
+        } catch (RemoteException e1) {
+            Log.e(TAG, "Failed to request abortScan due to remote exception");
+        }
+        return false;
+    }
+
 }
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pNative.java b/service/java/com/android/server/wifi/p2p/WifiP2pNative.java
index bae3faa..5de6585 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pNative.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pNative.java
@@ -21,6 +21,8 @@
 import android.net.wifi.p2p.WifiP2pGroupList;
 import android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
 
+import com.android.server.wifi.WificondControl;
+
 /**
  * Native calls for bring up/shut down of the supplicant daemon and for
  * sending requests to the supplicant daemon
@@ -31,11 +33,14 @@
     private final String mTAG;
     private final String mInterfaceName;
     private final SupplicantP2pIfaceHal mSupplicantP2pIfaceHal;
+    private final WificondControl mWificondControl;
 
-    public WifiP2pNative(String interfaceName, SupplicantP2pIfaceHal p2pIfaceHal) {
+    public WifiP2pNative(String interfaceName, SupplicantP2pIfaceHal p2pIfaceHal,
+            WificondControl wificondcontrol) {
         mTAG = "WifiP2pNative-" + interfaceName;
         mInterfaceName = interfaceName;
         mSupplicantP2pIfaceHal = p2pIfaceHal;
+        mWificondControl = wificondcontrol;
     }
 
     public String getInterfaceName() {
@@ -247,6 +252,7 @@
      * @return boolean value indicating whether operation was successful.
      */
     public boolean p2pFind(int timeout) {
+        abortScan();
         return mSupplicantP2pIfaceHal.find(timeout);
     }
 
@@ -597,4 +603,13 @@
     public boolean saveConfig() {
         return mSupplicantP2pIfaceHal.saveConfig();
     }
+
+    /**
+     * Abort ongoing single scan triggered by wificond.
+     *
+     * @return true on success, false otherwise.
+     */
+    private boolean abortScan() {
+        return mWificondControl.abortScan();
+    }
 }