Snap for 8626064 from 833a0b75b29a4daf945efd0a40d8d9326633024f to mainline-go-adservices-release

Change-Id: Ia0492ec17540e3c3d03010e89eeaac12f98c1665
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java
index 5913027..290cacf 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java
@@ -44,6 +44,7 @@
 import com.googlecode.android_scripting.rpc.RpcOptional;
 import com.googlecode.android_scripting.rpc.RpcParameter;
 
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -896,6 +897,40 @@
     }
 
     /**
+     * Add filter "macAddress", "addressType", and "irk" to existing ScanFilter
+     *
+     * @param macAddress the macAddress to filter against
+     * @param addressType the type of macAddress to filter against
+     * @param irk IRK for address resolution in hex format
+     * @throws Exception
+     */
+    @Rpc(description =
+            "Add filter \"macAddress\", \"addressType\", and \"irk\" to existing ScanFilter")
+    public void bleSetScanFilterDeviceAddressTypeAndIrkHexString(
+            @RpcParameter(name = "macAddress") String macAddress,
+            @RpcParameter(name = "addressType") Integer addressType,
+            @RpcParameter(name = "irk") String irk
+    ) throws UnsupportedEncodingException {
+        mScanFilterBuilder.setDeviceAddress(macAddress, addressType, hexStringToByteArray(irk));
+    }
+
+    private static byte[] hexStringToByteArray(String s) {
+        if (s == null) {
+            throw new IllegalArgumentException("Hex String must not be null");
+        }
+        int len = s.length();
+        if ((len % 2) != 0 || len < 1) { // Multiple of 2 or empty
+            throw new IllegalArgumentException("Hex String must be an even number > 0");
+        }
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((byte) (Character.digit(s.charAt(i), 16) << 4)
+                + (byte) Character.digit(s.charAt(i + 1), 16));
+        }
+        return data;
+    }
+
+    /**
      * Add filter "manufacturereDataId and/or manufacturerData" to existing
      * ScanFilter
      * @param manufacturerDataId the manufacturer data id to filter against
diff --git a/Common/src/com/googlecode/android_scripting/facade/wifi/WifiAwareManagerFacade.java b/Common/src/com/googlecode/android_scripting/facade/wifi/WifiAwareManagerFacade.java
index c690a38..7586039 100644
--- a/Common/src/com/googlecode/android_scripting/facade/wifi/WifiAwareManagerFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/wifi/WifiAwareManagerFacade.java
@@ -25,6 +25,7 @@
 import android.net.NetworkSpecifier;
 import android.net.wifi.RttManager;
 import android.net.wifi.RttManager.RttResult;
+import android.net.wifi.WifiScanner;
 import android.net.wifi.aware.AttachCallback;
 import android.net.wifi.aware.ConfigRequest;
 import android.net.wifi.aware.DiscoverySession;
@@ -47,6 +48,7 @@
 import android.util.SparseArray;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.modules.utils.build.SdkLevel;
 
 import libcore.util.HexEncoding;
 
@@ -64,6 +66,7 @@
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * WifiAwareManager functions.
@@ -280,7 +283,11 @@
         if (j.has("RangingEnabled")) {
             builder.setRangingEnabled(j.getBoolean("RangingEnabled"));
         }
-
+        if (SdkLevel.isAtLeastT() && j.has("InstantModeEnabled")) {
+            builder.setInstantCommunicationModeEnabled(true,
+                    Objects.equals(j.getString("InstantModeEnabled"), "5G")
+                            ? WifiScanner.WIFI_BAND_5_GHZ : WifiScanner.WIFI_BAND_24_GHZ);
+        }
 
         return builder.build();
     }
@@ -329,6 +336,11 @@
         if (j.has("MaxDistanceMm")) {
             builder.setMaxDistanceMm(j.getInt("MaxDistanceMm"));
         }
+        if (SdkLevel.isAtLeastT() && j.has("InstantModeEnabled")) {
+            builder.setInstantCommunicationModeEnabled(true,
+                    Objects.equals(j.getString("InstantModeEnabled"), "5G")
+                            ? WifiScanner.WIFI_BAND_5_GHZ : WifiScanner.WIFI_BAND_24_GHZ);
+        }
 
         return builder.build();
     }