182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh/* 282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Copyright (C) 2009 The Android Open Source Project 382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Licensed under the Apache License, Version 2.0 (the "License"); 582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * you may not use this file except in compliance with the License. 682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * You may obtain a copy of the License at 782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * http://www.apache.org/licenses/LICENSE-2.0 982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 1082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Unless required by applicable law or agreed to in writing, software 1182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * distributed under the License is distributed on an "AS IS" BASIS, 1282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * See the License for the specific language governing permissions and 1482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * limitations under the License. 1582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh */ 1682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 17aef439e6f825c0cb99a2ac08c8207f48b7a9fe10Nick Pellypackage android.os; 1882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 1982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganeshimport java.util.UUID; 2082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 2182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh/** 2282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * This class is a Parcelable wrapper around {@link UUID} which is an 2382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * immutable representation of a 128-bit universally unique 2482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * identifier. 2582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh */ 2682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganeshpublic final class ParcelUuid implements Parcelable { 2782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 2882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh private final UUID mUuid; 2982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 3082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh /** 3182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Constructor creates a ParcelUuid instance from the 3282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * given {@link UUID}. 3382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 3482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @param uuid UUID 3582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh */ 3682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public ParcelUuid(UUID uuid) { 3782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh mUuid = uuid; 3882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 3982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 4082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh /** 4182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Creates a new ParcelUuid from a string representation of {@link UUID}. 4282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 4382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @param uuid 4482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * the UUID string to parse. 45f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa * @return a ParcelUuid instance. 4682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @throws NullPointerException 4782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * if {@code uuid} is {@code null}. 4882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @throws IllegalArgumentException 4982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * if {@code uuid} is not formatted correctly. 5082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh */ 5182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public static ParcelUuid fromString(String uuid) { 5282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return new ParcelUuid(UUID.fromString(uuid)); 5382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 5482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 5582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh /** 5682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Get the {@link UUID} represented by the ParcelUuid. 5782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 5882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @return UUID contained in the ParcelUuid. 5982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh */ 6082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public UUID getUuid() { 6182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return mUuid; 6282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 6382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 6482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh /** 6582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Returns a string representation of the ParcelUuid 6682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * For example: 0000110B-0000-1000-8000-00805F9B34FB will be the return value. 6782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 6882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @return a String instance. 6982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh */ 7082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh @Override 7182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public String toString() { 7282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return mUuid.toString(); 7382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 7482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 7582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 7682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh @Override 7782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public int hashCode() { 7882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return mUuid.hashCode(); 7982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 8082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 8182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh /** 8282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * Compares this ParcelUuid to another object for equality. If {@code object} 8382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * is not {@code null}, is a ParcelUuid instance, and all bits are equal, then 8482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * {@code true} is returned. 8582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * 8682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @param object 8782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * the {@code Object} to compare to. 8882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * @return {@code true} if this ParcelUuid is equal to {@code object} 8982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh * or {@code false} if not. 9082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh */ 9182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh @Override 9282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public boolean equals(Object object) { 9382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh if (object == null) { 9482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return false; 9582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 9682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 9782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh if (this == object) { 9882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return true; 9982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 10082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 10182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh if (!(object instanceof ParcelUuid)) { 10282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return false; 10382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 10482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 10582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh ParcelUuid that = (ParcelUuid) object; 10682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 10782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return (this.mUuid.equals(that.mUuid)); 10882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 10982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 11082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public static final Parcelable.Creator<ParcelUuid> CREATOR = 11182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh new Parcelable.Creator<ParcelUuid>() { 11282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public ParcelUuid createFromParcel(Parcel source) { 11382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh long mostSigBits = source.readLong(); 11482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh long leastSigBits = source.readLong(); 11582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh UUID uuid = new UUID(mostSigBits, leastSigBits); 11682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return new ParcelUuid(uuid); 11782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 11882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 11982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public ParcelUuid[] newArray(int size) { 12082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return new ParcelUuid[size]; 12182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 12282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh }; 12382c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 12482c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public int describeContents() { 12582c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh return 0; 12682c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 12782c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh 12882c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh public void writeToParcel(Parcel dest, int flags) { 12982c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh dest.writeLong(mUuid.getMostSignificantBits()); 13082c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh dest.writeLong(mUuid.getLeastSignificantBits()); 13182c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh } 13282c3ef7adc235e857736b09864c2aa81d41d7132Jaikumar Ganesh} 133