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