19bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava/*
29bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Copyright (C) 2010 The Android Open Source Project
39bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *
49bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Licensed under the Apache License, Version 2.0 (the "License");
59bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * you may not use this file except in compliance with the License.
69bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * You may obtain a copy of the License at
79bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *
89bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *      http://www.apache.org/licenses/LICENSE-2.0
99bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava *
109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * Unless required by applicable law or agreed to in writing, software
119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * distributed under the License is distributed on an "AS IS" BASIS,
129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * See the License for the specific language governing permissions and
149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * limitations under the License.
159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */
169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavapackage android.media.videoeditor;
199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.util.HashMap;
219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavaimport java.util.Map;
229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava/**
249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * This is the super class for all Overlay classes.
259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava * {@hide}
269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava */
279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhavapublic abstract class Overlay {
289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *  Instance variables
309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private final String mUniqueId;
329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *  The overlay owner
349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private final MediaItem mMediaItem;
369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *  user attributes
389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private final Map<String, String> mUserAttributes;
409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    protected long mStartTimeMs;
429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    protected long mDurationMs;
439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Default constructor
469bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
479bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @SuppressWarnings("unused")
489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    private Overlay() {
499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        this(null, null, 0, 0);
509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
519bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Constructor
549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param mediaItem The media item owner
569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param overlayId The overlay id
579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param startTimeMs The start time relative to the media item start time
589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param durationMs The duration
599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @throws IllegalArgumentException if the file type is not PNG or the
619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *      startTimeMs and durationMs are incorrect.
629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public Overlay(MediaItem mediaItem, String overlayId, long startTimeMs,
649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava           long durationMs) {
659bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mediaItem == null) {
669bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Media item cannot be null");
679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if ((startTimeMs<0) || (durationMs<0) ) {
709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Invalid start time and/OR duration");
719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
739bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (startTimeMs + durationMs > mediaItem.getDuration()) {
749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Invalid start time and duration");
759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mMediaItem = mediaItem;
789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mUniqueId = overlayId;
799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mStartTimeMs = startTimeMs;
809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mDurationMs = durationMs;
819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mUserAttributes = new HashMap<String, String>();
829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the overlay ID.
869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The of the overlay
889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public String getId() {
909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mUniqueId;
919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the duration of overlay.
959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The duration of the overlay effect
979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public long getDuration() {
999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mDurationMs;
1009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * If a preview or export is in progress, then this change is effective for
1049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * next preview or export session.
1059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param durationMs The duration in milliseconds
1079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public void setDuration(long durationMs) {
1099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (durationMs < 0) {
1109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Invalid duration");
1119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (mStartTimeMs + durationMs > mMediaItem.getDuration()) {
1149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Duration is too large");
1159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1172bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        getMediaItem().getNativeContext().setGeneratePreview(true);
1182bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
1199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        final long oldDurationMs = mDurationMs;
1209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mDurationMs = durationMs;
1219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1222bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
1239bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1249bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1259bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1269bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the start time of overlay.
1279bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1289bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return the start time of the overlay
1299bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1309bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public long getStartTime() {
1319bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mStartTimeMs;
1329bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1339bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1349bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1359bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Set the start time for the overlay. If a preview or export is in
1369bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * progress, then this change is effective for next preview or export
1379bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * session.
1389bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1399bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param startTimeMs start time in milliseconds
1409bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1419bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public void setStartTime(long startTimeMs) {
1429bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (startTimeMs + mDurationMs > mMediaItem.getDuration()) {
1439bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Start time is too large");
1449bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1459bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1462bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        getMediaItem().getNativeContext().setGeneratePreview(true);
1472bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
1489bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        final long oldStartTimeMs = mStartTimeMs;
1499bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mStartTimeMs = startTimeMs;
1509bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1512bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
1529bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1539bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1549bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1559bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Set the start time and duration
1569bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1579bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param startTimeMs start time in milliseconds
1589bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param durationMs The duration in milliseconds
1599bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1609bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public void setStartTimeAndDuration(long startTimeMs, long durationMs) {
1619bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (startTimeMs + durationMs > mMediaItem.getDuration()) {
1629bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            throw new IllegalArgumentException("Invalid start time or duration");
1639bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
1649bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1652bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        getMediaItem().getNativeContext().setGeneratePreview(true);
1662bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi
1679bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        final long oldStartTimeMs = mStartTimeMs;
1689bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        final long oldDurationMs = mDurationMs;
1699bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1709bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mStartTimeMs = startTimeMs;
1719bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mDurationMs = durationMs;
1729bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1732bb13573d619e3371d06847d36db78a20b17dfabGil Dobjanschi        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
1749bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1759bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1769bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1779bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the media item owner.
1789bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1799bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The media item owner.
1809bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1819bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public MediaItem getMediaItem() {
1829bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mMediaItem;
1839bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1849bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1859bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1869bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Set a user attribute
1879bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1889bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param name The attribute name
1899bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @param value The attribute value
1909bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
1919bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public void setUserAttribute(String name, String value) {
1929bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        mUserAttributes.put(name, value);
1939bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
1949bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
1959bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /**
1969bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * Get the current user attributes set.
1979bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     *
1989bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * @return The user attributes
1999bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2009bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public Map<String, String> getUserAttributes() {
2019bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mUserAttributes;
2029bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
2039bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2049bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /*
2059bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * {@inheritDoc}
2069bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2079bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @Override
2089bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public boolean equals(Object object) {
2099bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        if (!(object instanceof Overlay)) {
2109bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava            return false;
2119bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        }
2129bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mUniqueId.equals(((Overlay)object).mUniqueId);
2139bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
2149bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava
2159bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    /*
2169bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     * {@inheritDoc}
2179bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava     */
2189bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    @Override
2199bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    public int hashCode() {
2209bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava        return mUniqueId.hashCode();
2219bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava    }
2229bcedf7cf3e9c981837f2d8ec98cd118efad3f01Santosh Madhava}
223