[RTT2] Convert APIs to use MacAddress

MacAddress class is being added as a public API. Convert ad-hoc
byte[] represetations to new class.

Bug: 65108607
Test: unit tests and integration tests
Change-Id: I8c93c9ec8dbdc6a6e2b1ed0a4dace895d3c0e32a
diff --git a/service/java/com/android/server/wifi/rtt/RttNative.java b/service/java/com/android/server/wifi/rtt/RttNative.java
index e920310..e085352 100644
--- a/service/java/com/android/server/wifi/rtt/RttNative.java
+++ b/service/java/com/android/server/wifi/rtt/RttNative.java
@@ -206,11 +206,8 @@
         for (ResponderConfig responder: request.mRttPeers) {
             RttConfig config = new RttConfig();
 
-            if (responder.macAddress.length != config.addr.length) {
-                Log.e(TAG, "Invalid configuration: unexpected BSSID length -- " + responder);
-                continue;
-            }
-            System.arraycopy(responder.macAddress, 0, config.addr, 0, config.addr.length);
+            System.arraycopy(responder.macAddress.toByteArray(), 0, config.addr, 0,
+                    config.addr.length);
 
             try {
                 config.type = responder.supports80211mc ? RttType.TWO_SIDED : RttType.ONE_SIDED;
diff --git a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
index ff722ae..3417f74 100644
--- a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
+++ b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
@@ -24,6 +24,7 @@
 import android.content.pm.PackageManager;
 import android.hardware.wifi.V1_0.RttResult;
 import android.hardware.wifi.V1_0.RttStatus;
+import android.net.MacAddress;
 import android.net.wifi.aware.IWifiAwareMacAddressProvider;
 import android.net.wifi.aware.IWifiAwareManager;
 import android.net.wifi.rtt.IRttCallback;
@@ -48,8 +49,6 @@
 import com.android.server.wifi.Clock;
 import com.android.server.wifi.util.WifiPermissionsUtil;
 
-import libcore.util.HexEncoding;
-
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -350,11 +349,7 @@
         private void cancelRanging(RttRequestInfo rri) {
             ArrayList<byte[]> macAddresses = new ArrayList<>();
             for (ResponderConfig peer : rri.request.mRttPeers) {
-                if (peer.macAddress.length != 6) {
-                    Log.e(TAG, "Invalid configuration: unexpected BSSID length -- " + peer);
-                    continue;
-                }
-                macAddresses.add(peer.macAddress);
+                macAddresses.add(peer.macAddress.toByteArray());
             }
 
             mRttNative.rangeCancel(rri.cmdId, macAddresses);
@@ -472,7 +467,7 @@
                 try {
                     callback.onRangingFailure(RangingResultCallback.STATUS_CODE_FAIL);
                 } catch (RemoteException e) {
-                    Log.e(TAG,  "RttServiceSynchronized.queueRangingRequest: spamming, callback "
+                    Log.e(TAG, "RttServiceSynchronized.queueRangingRequest: spamming, callback "
                             + "failed -- " + e);
                 }
                 return;
@@ -609,7 +604,7 @@
         /**
          * Perform pre-execution throttling checks:
          * - If all uids in ws are in background then check last execution and block if request is
-         *   more frequent than permitted
+         * more frequent than permitted
          * - If executing (i.e. permitted) then update execution time
          *
          * Returns true to permit execution, false to abort it.
@@ -735,9 +730,10 @@
                         + ", peerIdToMacMap=" + peerIdToMacMap);
             }
 
-            for (ResponderConfig rttPeer: request.request.mRttPeers) {
+            for (ResponderConfig rttPeer : request.request.mRttPeers) {
                 if (rttPeer.peerHandle != null && rttPeer.macAddress == null) {
-                    rttPeer.macAddress = peerIdToMacMap.get(rttPeer.peerHandle.peerId);
+                    rttPeer.macAddress = MacAddress.fromBytes(
+                            peerIdToMacMap.get(rttPeer.peerHandle.peerId));
                 }
             }
 
@@ -799,20 +795,18 @@
          */
         private List<RangingResult> postProcessResults(RangingRequest request,
                 List<RttResult> results) {
-            Map<String, RttResult> resultEntries = new HashMap<>();
-            for (RttResult result: results) {
-                resultEntries.put(new String(HexEncoding.encode(result.addr)), result);
+            Map<MacAddress, RttResult> resultEntries = new HashMap<>();
+            for (RttResult result : results) {
+                resultEntries.put(MacAddress.fromBytes(result.addr), result);
             }
 
             List<RangingResult> finalResults = new ArrayList<>(request.mRttPeers.size());
 
-            for (ResponderConfig peer: request.mRttPeers) {
-                RttResult resultForRequest = resultEntries.get(
-                        new String(HexEncoding.encode(peer.macAddress)));
+            for (ResponderConfig peer : request.mRttPeers) {
+                RttResult resultForRequest = resultEntries.get(peer.macAddress);
                 if (resultForRequest == null) {
                     if (VDBG) {
-                        Log.v(TAG, "postProcessResults: missing=" + new String(
-                                HexEncoding.encode(peer.macAddress)));
+                        Log.v(TAG, "postProcessResults: missing=" + peer.macAddress);
                     }
                     if (peer.peerHandle == null) {
                         finalResults.add(
diff --git a/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java b/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
index 51fed83..5043c85 100644
--- a/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
@@ -35,12 +35,11 @@
 import android.hardware.wifi.V1_0.RttType;
 import android.hardware.wifi.V1_0.WifiStatus;
 import android.hardware.wifi.V1_0.WifiStatusCode;
+import android.net.MacAddress;
 import android.net.wifi.rtt.RangingRequest;
 
 import com.android.server.wifi.HalDeviceManager;
 
-import libcore.util.HexEncoding;
-
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -118,19 +117,19 @@
 
         RttConfig rttConfig = halRequest.get(0);
         collector.checkThat("entry 0: MAC", rttConfig.addr,
-                equalTo(HexEncoding.decode("000102030400".toCharArray(), false)));
+                equalTo(MacAddress.fromString("00:01:02:03:04:00").toByteArray()));
         collector.checkThat("entry 0: MAC", rttConfig.type, equalTo(RttType.TWO_SIDED));
         collector.checkThat("entry 0: MAC", rttConfig.peer, equalTo(RttPeerType.AP));
 
         rttConfig = halRequest.get(1);
         collector.checkThat("entry 1: MAC", rttConfig.addr,
-                equalTo(HexEncoding.decode("0A0B0C0D0E00".toCharArray(), false)));
+                equalTo(MacAddress.fromString("0A:0B:0C:0D:0E:00").toByteArray()));
         collector.checkThat("entry 1: MAC", rttConfig.type, equalTo(RttType.ONE_SIDED));
         collector.checkThat("entry 1: MAC", rttConfig.peer, equalTo(RttPeerType.AP));
 
         rttConfig = halRequest.get(2);
         collector.checkThat("entry 2: MAC", rttConfig.addr,
-                equalTo(HexEncoding.decode("080908070605".toCharArray(), false)));
+                equalTo(MacAddress.fromString("08:09:08:07:06:05").toByteArray()));
         collector.checkThat("entry 2: MAC", rttConfig.type, equalTo(RttType.TWO_SIDED));
         collector.checkThat("entry 2: MAC", rttConfig.peer, equalTo(RttPeerType.NAN));
 
@@ -164,8 +163,8 @@
     public void testRangeCancel() throws Exception {
         int cmdId = 66;
         ArrayList<byte[]> macAddresses = new ArrayList<>();
-        byte[] mac1 = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
-        byte[] mac2 = { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
+        byte[] mac1 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
+        byte[] mac2 = {0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
         macAddresses.add(mac1);
         macAddresses.add(mac2);
 
@@ -212,7 +211,7 @@
         collector.checkThat("status", rttResult.status,
                 equalTo(RttStatus.SUCCESS));
         collector.checkThat("mac", rttResult.addr,
-                equalTo(HexEncoding.decode("05060708090A".toCharArray(), false)));
+                equalTo(MacAddress.fromString("05:06:07:08:09:0A").toByteArray()));
         collector.checkThat("distanceCm", rttResult.distanceInMm, equalTo(1500));
         collector.checkThat("timestamp", rttResult.timeStampInUs, equalTo(666L));
 
diff --git a/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
index ee8c15f..7e71069 100644
--- a/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
@@ -46,6 +46,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.hardware.wifi.V1_0.RttResult;
+import android.net.MacAddress;
 import android.net.wifi.aware.IWifiAwareMacAddressProvider;
 import android.net.wifi.aware.IWifiAwareManager;
 import android.net.wifi.aware.PeerHandle;
@@ -68,8 +69,6 @@
 import com.android.server.wifi.Clock;
 import com.android.server.wifi.util.WifiPermissionsUtil;
 
-import libcore.util.HexEncoding;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -261,9 +260,9 @@
         PeerHandle peerHandle2 = new PeerHandle(1023);
         request.mRttPeers.add(ResponderConfig.fromWifiAwarePeerHandleWithDefaults(peerHandle1));
         request.mRttPeers.add(ResponderConfig.fromWifiAwarePeerHandleWithDefaults(peerHandle2));
-        Map<Integer, byte[]> peerHandleToMacMap = new HashMap<>();
-        byte[] macAwarePeer1 = HexEncoding.decode("AABBCCDDEEFF".toCharArray(), false);
-        byte[] macAwarePeer2 = HexEncoding.decode("BBBBBBEEEEEE".toCharArray(), false);
+        Map<Integer, MacAddress> peerHandleToMacMap = new HashMap<>();
+        MacAddress macAwarePeer1 = MacAddress.fromString("AA:BB:CC:DD:EE:FF");
+        MacAddress macAwarePeer2 = MacAddress.fromString("BB:BB:BB:EE:EE:EE");
         peerHandleToMacMap.put(peerHandle1.peerId, macAwarePeer1);
         peerHandleToMacMap.put(peerHandle2.peerId, macAwarePeer2);
 
@@ -431,11 +430,11 @@
                         (ArrayList) mListCaptor.capture());
                 RangingRequest request0 = requests[0];
                 assertEquals(request0.mRttPeers.size(), mListCaptor.getValue().size());
-                assertArrayEquals(HexEncoding.decode("000102030400".toCharArray(), false),
+                assertArrayEquals(MacAddress.fromString("00:01:02:03:04:00").toByteArray(),
                         (byte[]) mListCaptor.getValue().get(0));
-                assertArrayEquals(HexEncoding.decode("0A0B0C0D0E00".toCharArray(), false),
+                assertArrayEquals(MacAddress.fromString("0A:0B:0C:0D:0E:00").toByteArray(),
                         (byte[]) mListCaptor.getValue().get(1));
-                assertArrayEquals(HexEncoding.decode("080908070605".toCharArray(), false),
+                assertArrayEquals(MacAddress.fromString("08:09:08:07:06:05").toByteArray(),
                         (byte[]) mListCaptor.getValue().get(2));
             }
 
@@ -1103,9 +1102,9 @@
 
     private class AwareTranslatePeerHandlesToMac extends MockAnswerUtil.AnswerWithArguments {
         private int mExpectedUid;
-        private Map<Integer, byte[]> mPeerIdToMacMap;
+        private Map<Integer, MacAddress> mPeerIdToMacMap;
 
-        AwareTranslatePeerHandlesToMac(int expectedUid, Map<Integer, byte[]> peerIdToMacMap) {
+        AwareTranslatePeerHandlesToMac(int expectedUid, Map<Integer, MacAddress> peerIdToMacMap) {
             mExpectedUid = expectedUid;
             mPeerIdToMacMap = peerIdToMacMap;
         }
@@ -1115,7 +1114,7 @@
 
             Map<Integer, byte[]> result = new HashMap<>();
             for (Integer peerId: peerIds) {
-                byte[] mac = mPeerIdToMacMap.get(peerId);
+                byte[] mac = mPeerIdToMacMap.get(peerId).toByteArray();
                 if (mac == null) {
                     continue;
                 }
diff --git a/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java b/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java
index db3cd17..ec56322 100644
--- a/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java
+++ b/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java
@@ -18,14 +18,13 @@
 
 import android.hardware.wifi.V1_0.RttResult;
 import android.hardware.wifi.V1_0.RttStatus;
+import android.net.MacAddress;
 import android.net.wifi.ScanResult;
 import android.net.wifi.rtt.RangingRequest;
 import android.net.wifi.rtt.RangingResult;
 import android.net.wifi.rtt.ResponderConfig;
 import android.util.Pair;
 
-import libcore.util.HexEncoding;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -66,7 +65,7 @@
         scan1.setFlag(ScanResult.FLAG_80211mc_RESPONDER);
         ScanResult scan2 = new ScanResult();
         scan2.BSSID = "0A:0B:0C:0D:0E:" + String.format("%02d", lastMacByte);
-        byte[] mac1 = HexEncoding.decode("080908070605".toCharArray(), false);
+        MacAddress mac1 = MacAddress.fromString("08:09:08:07:06:05");
 
         builder.addAccessPoint(scan1);
         builder.addAccessPoint(scan2);
@@ -107,13 +106,13 @@
             }
         } else {
             results.add(new RangingResult(RangingResult.STATUS_SUCCESS,
-                    HexEncoding.decode("100102030405".toCharArray(), false), rangeCmBase++,
+                    MacAddress.fromString("10:01:02:03:04:05"), rangeCmBase++,
                     rangeStdDevCmBase++, rssiBase++, rangeTimestampBase++));
             results.add(new RangingResult(RangingResult.STATUS_SUCCESS,
-                    HexEncoding.decode("1A0B0C0D0E0F".toCharArray(), false), rangeCmBase++,
+                    MacAddress.fromString("1A:0B:0C:0D:0E:0F"), rangeCmBase++,
                     rangeStdDevCmBase++, rssiBase++, rangeTimestampBase++));
             results.add(new RangingResult(RangingResult.STATUS_SUCCESS,
-                    HexEncoding.decode("080908070605".toCharArray(), false), rangeCmBase++,
+                    MacAddress.fromString("08:09:08:07:06:05"), rangeCmBase++,
                     rangeStdDevCmBase++, rssiBase++, rangeTimestampBase++));
             halResults.add(getMatchingRttResult(results.get(0), null));
             halResults.add(getMatchingRttResult(results.get(1), null));
@@ -123,12 +122,13 @@
         return new Pair<>(halResults, results);
     }
 
-    private static RttResult getMatchingRttResult(RangingResult rangingResult, byte[] overrideMac) {
+    private static RttResult getMatchingRttResult(RangingResult rangingResult,
+            MacAddress overrideMac) {
         RttResult rttResult = new RttResult();
         rttResult.status = rangingResult.getStatus() == RangingResult.STATUS_SUCCESS
                 ? RttStatus.SUCCESS : RttStatus.FAILURE;
-        System.arraycopy(overrideMac == null ? rangingResult.getMacAddress() : overrideMac, 0,
-                rttResult.addr, 0, 6);
+        System.arraycopy(overrideMac == null ? rangingResult.getMacAddress().toByteArray()
+                : overrideMac.toByteArray(), 0, rttResult.addr, 0, 6);
         rttResult.distanceInMm = rangingResult.getDistanceMm();
         rttResult.distanceSdInMm = rangingResult.getDistanceStdDevMm();
         rttResult.rssi = rangingResult.getRssi();