Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a36b5c58 authored by Etan Cohen's avatar Etan Cohen
Browse files

[AWARE] Make PeerHandle parcelable

PeerHandle is an opaque object used to represent a peer for
communication and data-path setup.

Applications which use multiple components may want to communicate the
PeerHandle across components using Binder - requiring a Parcelable
implementation.

Bug: 119594815
Test: All Wi-Fi Manager unit tests + added unit test for this CL
Change-Id: Iae1c8c223677d232c54e7f6c2bdf811764ab6c82
parent fcd034e6
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -29733,7 +29733,10 @@ package android.net.wifi.aware {
    method public void onIdentityChanged(byte[]);
  }
  public class PeerHandle {
  public final class PeerHandle implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.net.wifi.aware.PeerHandle> CREATOR;
  }
  public final class PublishConfig implements android.os.Parcelable {
+29 −1
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package android.net.wifi.aware;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Opaque object used to represent a Wi-Fi Aware peer. Obtained from discovery sessions in
 * {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle, byte[], java.util.List)} or
@@ -33,7 +36,7 @@ package android.net.wifi.aware;
 * {@link PublishConfig.Builder#setServiceSpecificInfo(byte[])}, or match filter,
 * {@link PublishConfig.Builder#setMatchFilter(java.util.List)}.
 */
public class PeerHandle {
public final class PeerHandle implements Parcelable {
    /** @hide */
    public PeerHandle(int peerId) {
        this.peerId = peerId;
@@ -59,4 +62,29 @@ public class PeerHandle {
    public int hashCode() {
        return peerId;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(peerId);
    }

    public static final Creator<PeerHandle> CREATOR = new Creator<PeerHandle>() {
        @Override
        public PeerHandle[] newArray(int size) {
            return new PeerHandle[size];
        }

        @Override
        public PeerHandle createFromParcel(Parcel in) {
            int peerHandle = in.readInt();

            return new PeerHandle(peerHandle);
        }
    };

}
+20 −0
Original line number Diff line number Diff line
@@ -1382,4 +1382,24 @@ public class WifiAwareManagerTest {
        assertEquals(cap.getPeerIpv6Addr().toString(), "/fe80::1322:33ff:fe44:5566%5");
        assertEquals(cap.hashCode(), rereadCap.hashCode());
    }

    // PeerHandle tests

    @Test
    public void testPeerHandleParcel() {
        final PeerHandle peerHandle = new PeerHandle(5);

        Parcel parcelW = Parcel.obtain();
        peerHandle.writeToParcel(parcelW, 0);
        byte[] bytes = parcelW.marshall();
        parcelW.recycle();

        Parcel parcelR = Parcel.obtain();
        parcelR.unmarshall(bytes, 0, bytes.length);
        parcelR.setDataPosition(0);
        PeerHandle rereadPeerHandle = PeerHandle.CREATOR.createFromParcel(parcelR);

        assertEquals(peerHandle, rereadPeerHandle);
        assertEquals(peerHandle.hashCode(), rereadPeerHandle.hashCode());
    }
}