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