11fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenenpackage android.nfc; 21fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 31fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenenimport android.net.Uri; 41fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenenimport android.os.Parcel; 51fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenenimport android.os.Parcelable; 656f299b87a891db38691cc0260f761c3ce8ef9acAndres Moralesimport android.os.UserHandle; 71fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 81fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen/** 91fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen * Class to IPC data to be shared over Android Beam. 101fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen * Allows bundling NdefMessage, Uris and flags in a single 111fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen * IPC call. This is important as we want to reduce the 121fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen * amount of IPC calls at "touch time". 131fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen * @hide 141fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen */ 151fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenenpublic final class BeamShareData implements Parcelable { 161fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public final NdefMessage ndefMessage; 171fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public final Uri[] uris; 1856f299b87a891db38691cc0260f761c3ce8ef9acAndres Morales public final UserHandle userHandle; 191fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public final int flags; 201fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 2156f299b87a891db38691cc0260f761c3ce8ef9acAndres Morales public BeamShareData(NdefMessage msg, Uri[] uris, UserHandle userHandle, int flags) { 221fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen this.ndefMessage = msg; 231fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen this.uris = uris; 2456f299b87a891db38691cc0260f761c3ce8ef9acAndres Morales this.userHandle = userHandle; 251fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen this.flags = flags; 261fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen } 271fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 281fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen @Override 291fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public int describeContents() { 301fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen return 0; 311fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen } 321fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 331fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen @Override 341fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public void writeToParcel(Parcel dest, int flags) { 351fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen int urisLength = (uris != null) ? uris.length : 0; 361fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen dest.writeParcelable(ndefMessage, 0); 371fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen dest.writeInt(urisLength); 381fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen if (urisLength > 0) { 391fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen dest.writeTypedArray(uris, 0); 401fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen } 4156f299b87a891db38691cc0260f761c3ce8ef9acAndres Morales dest.writeParcelable(userHandle, 0); 421fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen dest.writeInt(this.flags); 431fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen } 441fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 451fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public static final Parcelable.Creator<BeamShareData> CREATOR = 461fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen new Parcelable.Creator<BeamShareData>() { 471fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen @Override 481fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public BeamShareData createFromParcel(Parcel source) { 491fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen Uri[] uris = null; 501fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen NdefMessage msg = source.readParcelable(NdefMessage.class.getClassLoader()); 511fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen int numUris = source.readInt(); 521fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen if (numUris > 0) { 531fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen uris = new Uri[numUris]; 541fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen source.readTypedArray(uris, Uri.CREATOR); 551fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen } 5656f299b87a891db38691cc0260f761c3ce8ef9acAndres Morales UserHandle userHandle = source.readParcelable(UserHandle.class.getClassLoader()); 571fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen int flags = source.readInt(); 581fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 5956f299b87a891db38691cc0260f761c3ce8ef9acAndres Morales return new BeamShareData(msg, uris, userHandle, flags); 601fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen } 611fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen 621fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen @Override 631fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen public BeamShareData[] newArray(int size) { 641fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen return new BeamShareData[size]; 651fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen } 661fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen }; 671fa2aff21bc4cb89a141828c2661530e6aa655ddMartijn Coenen} 68