1package android.nfc;
2
3import android.net.Uri;
4import android.os.Parcel;
5import android.os.Parcelable;
6import android.os.UserHandle;
7
8/**
9 * Class to IPC data to be shared over Android Beam.
10 * Allows bundling NdefMessage, Uris and flags in a single
11 * IPC call. This is important as we want to reduce the
12 * amount of IPC calls at "touch time".
13 * @hide
14 */
15public final class BeamShareData implements Parcelable {
16    public final NdefMessage ndefMessage;
17    public final Uri[] uris;
18    public final UserHandle userHandle;
19    public final int flags;
20
21    public BeamShareData(NdefMessage msg, Uri[] uris, UserHandle userHandle, int flags) {
22        this.ndefMessage = msg;
23        this.uris = uris;
24        this.userHandle = userHandle;
25        this.flags = flags;
26    }
27
28    @Override
29    public int describeContents() {
30        return 0;
31    }
32
33    @Override
34    public void writeToParcel(Parcel dest, int flags) {
35        int urisLength = (uris != null) ? uris.length : 0;
36        dest.writeParcelable(ndefMessage, 0);
37        dest.writeInt(urisLength);
38        if (urisLength > 0) {
39            dest.writeTypedArray(uris, 0);
40        }
41        dest.writeParcelable(userHandle, 0);
42        dest.writeInt(this.flags);
43    }
44
45    public static final Parcelable.Creator<BeamShareData> CREATOR =
46            new Parcelable.Creator<BeamShareData>() {
47        @Override
48        public BeamShareData createFromParcel(Parcel source) {
49            Uri[] uris = null;
50            NdefMessage msg = source.readParcelable(NdefMessage.class.getClassLoader());
51            int numUris = source.readInt();
52            if (numUris > 0) {
53                uris = new Uri[numUris];
54                source.readTypedArray(uris, Uri.CREATOR);
55            }
56            UserHandle userHandle = source.readParcelable(UserHandle.class.getClassLoader());
57            int flags = source.readInt();
58
59            return new BeamShareData(msg, uris, userHandle, flags);
60        }
61
62        @Override
63        public BeamShareData[] newArray(int size) {
64            return new BeamShareData[size];
65        }
66    };
67}
68