18d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee/* 28d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Copyright (C) 2011 The Android Open Source Project 38d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 48d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Licensed under the Apache License, Version 2.0 (the "License"); 58d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * you may not use this file except in compliance with the License. 68d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * You may obtain a copy of the License at 78d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 88d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * http://www.apache.org/licenses/LICENSE-2.0 98d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * 108d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Unless required by applicable law or agreed to in writing, software 118d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * distributed under the License is distributed on an "AS IS" BASIS, 128d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * See the License for the specific language governing permissions and 148d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * limitations under the License. 158d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 168d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 178d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeepackage com.example.android.voicemail.common.core; 188d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 198d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeeimport android.net.Uri; 208d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 218d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee/** 228d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * A simple immutable data object to represent a voicemail. 238d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 248d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjeepublic final class VoicemailImpl implements Voicemail { 258d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final Long mTimestamp; 268d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final String mNumber; 278d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final Long mId; 288d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final Long mDuration; 298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final String mSource; 308d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final String mProviderData; 318d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final Uri mUri; 328d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final Boolean mIsRead; 338d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private final boolean mHasContent; 348d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 358d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee // TODO: 5. We should probably consider changing "number" everywhere to "contact", given that 368d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee // it's not clear that these will be restricted to telephone numbers. 378d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 388d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private VoicemailImpl( 398d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee Long timestamp, 408d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee String number, 418d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee Long id, 428d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee Long duration, 438d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee String source, 448d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee String providerData, 458d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee Uri uri, 468d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee Boolean isRead, 478d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee boolean hasContent) { 488d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mId = id; 498d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mNumber = number; 508d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mDuration = duration; 518d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mTimestamp = timestamp; 528d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mSource = source; 538d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mProviderData = providerData; 548d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mUri = uri; 558d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mIsRead = isRead; 568d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mHasContent = hasContent; 578d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 588d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 598d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 608d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Create a {@link Builder} for a new {@link Voicemail} to be inserted. 618d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 628d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * The number and the timestamp are mandatory for insertion. 638d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 648d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public static Builder createForInsertion(long timestamp, String number) { 658d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return new Builder().setNumber(number).setTimestamp(timestamp); 668d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 678d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 688d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 698d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Create a {@link Builder} for updating a {@link Voicemail}. 708d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 718d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Only the id of the voicemail to be updated is mandatory. 728d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 738d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public static Builder createForUpdate(long id) { 748d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return new Builder().setId(id); 758d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 768d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 778d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 788d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Create a {@link Builder} for a new {@link Voicemail}, such as one suitable for returning from 798d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * a list of results or creating from scratch. 808d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 818d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public static Builder createEmptyBuilder() { 828d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return new Builder(); 838d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 848d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 858d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** 868d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * Builder pattern for creating a {@link VoicemailImpl}. 878d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * <p> 888d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee * All fields are optional, and can be set with the various {@code setXXX} methods. 89c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee * <p> 90c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee * This class is <b>not thread safe</b> 918d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee */ 928d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public static class Builder { 938d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private Long mBuilderTimestamp; 948d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private String mBuilderNumber; 958d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private Long mBuilderId; 968d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private Long mBuilderDuration; 97c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee private String mBuilderSourcePackage; 98c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee private String mBuilderSourceData; 998d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private Uri mBuilderUri; 1008d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private Boolean mBuilderIsRead; 1018d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private boolean mBuilderHasContent; 1028d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1038d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee /** You should use the correct factory method to construct a builder. */ 1048d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee private Builder() { 1058d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1068d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1078d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Builder setNumber(String number) { 1088d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderNumber = number; 1098d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1108d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1118d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1128d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Builder setTimestamp(long timestamp) { 1138d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderTimestamp = timestamp; 1148d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1158d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1168d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1178d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Builder setId(long id) { 1188d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderId = id; 1198d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1208d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1218d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1228d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Builder setDuration(long duration) { 1238d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderDuration = duration; 1248d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1258d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1268d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 127c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee public Builder setSourcePackage(String sourcePackage) { 128c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee mBuilderSourcePackage = sourcePackage; 1298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1308d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1318d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 132c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee public Builder setSourceData(String sourceData) { 133c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee mBuilderSourceData = sourceData; 1348d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1358d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1368d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1378d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Builder setUri(Uri uri) { 1388d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderUri = uri; 1398d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1408d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1418d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1428d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Builder setIsRead(boolean isRead) { 1438d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderIsRead = isRead; 1448d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1458d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1468d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1478d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Builder setHasContent(boolean hasContent) { 1488d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderHasContent = hasContent; 1498d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return this; 1508d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1518d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1528d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public VoicemailImpl build() { 1538d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return new VoicemailImpl(mBuilderTimestamp, mBuilderNumber, mBuilderId, 1548d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderDuration, 155d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjee mBuilderSourcePackage, mBuilderSourceData, mBuilderUri, 1568d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderIsRead, 1578d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee mBuilderHasContent); 1588d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1598d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1608d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1618d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1628d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public long getId() { 1638d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return hasId() ? mId : -1; 1648d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1658d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1668d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1678d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean hasId() { 1688d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mId != null; 1698d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1708d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1718d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1728d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public String getNumber() { 1738d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mNumber; 1748d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1758d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1768d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1778d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean hasNumber() { 1788d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mNumber != null; 1798d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1808d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1818d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1828d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public long getTimestampMillis() { 1838d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return hasTimestampMillis() ? mTimestamp : 0; 1848d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1858d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1868d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1878d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean hasTimestampMillis() { 1888d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mTimestamp != null; 1898d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1908d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1918d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1928d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public long getDuration() { 1938d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return hasDuration() ? mDuration : 0; 1948d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 1958d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 1968d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 1978d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean hasDuration() { 1988d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mDuration != null; 1998d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2008d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2018d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 202c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee public String getSourcePackage() { 2038d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mSource; 2048d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2058d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2068d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 207c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee public boolean hasSourcePackage() { 2088d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mSource != null; 2098d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2108d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2118d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 212c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee public String getSourceData() { 2138d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mProviderData; 2148d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2158d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2168d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 217c635aaacffbfa695f479fe0aadeeee769224d14eDebashish Chatterjee public boolean hasSourceData() { 2188d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mProviderData != null; 2198d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2208d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2218d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 2228d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public Uri getUri() { 2238d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mUri; 2248d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2258d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2268d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 2278d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean hasUri() { 2288d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mUri != null; 2298d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2308d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2318d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 2328d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean isRead() { 2338d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return hasRead() ? mIsRead : false; 2348d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2358d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2368d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 2378d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean hasRead() { 2388d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mIsRead != null; 2398d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2408d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2418d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 2428d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public boolean hasContent() { 2438d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return mHasContent; 2448d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2458d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee 2468d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee @Override 2478d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee public String toString() { 2488d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee return "VoicemailImpl [mTimestamp=" + mTimestamp + ", mNumber=" + mNumber + ", mId=" + mId 2498d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee + ", mDuration=" + mDuration + ", mSource=" + mSource + ", mProviderData=" 250d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjee + mProviderData + ", mUri=" + mUri + ", mIsRead=" + mIsRead + ", mHasContent=" 251d407959adae53bdf1cfec3916441759506a43ba7Debashish Chatterjee + mHasContent + "]"; 2528d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee } 2538d6d2581ff11ec169cd84a6610557b9afdf41e06Debashish Chatterjee} 254