1d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian/* 2d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Copyright (C) 2016 The Android Open Source Project 3d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 4d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Licensed under the Apache License, Version 2.0 (the "License"); 5d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * you may not use this file except in compliance with the License. 6d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * You may obtain a copy of the License at 7d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 8d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * http://www.apache.org/licenses/LICENSE-2.0 9d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 10d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Unless required by applicable law or agreed to in writing, software 11d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * distributed under the License is distributed on an "AS IS" BASIS, 12d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * See the License for the specific language governing permissions and 14d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * limitations under the License. 15d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 16d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 17d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpackage com.android.voicemail.impl; 18d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 19d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.net.Uri; 20d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.os.Parcel; 21d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.os.Parcelable; 22d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.telecom.PhoneAccountHandle; 23d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianimport android.text.TextUtils; 24d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 25d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian/** Represents a single voicemail stored in the voicemail content provider. */ 26d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanianpublic class Voicemail implements Parcelable { 27d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 28d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final Long mTimestamp; 29d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final String mNumber; 30d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final PhoneAccountHandle mPhoneAccount; 31d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final Long mId; 32d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final Long mDuration; 33d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final String mSource; 34d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final String mProviderData; 35d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final Uri mUri; 36d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final Boolean mIsRead; 37d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final Boolean mHasContent; 38d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private final String mTranscription; 39d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 40d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Voicemail( 41d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Long timestamp, 42d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian String number, 43d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian PhoneAccountHandle phoneAccountHandle, 44d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Long id, 45d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Long duration, 46d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian String source, 47d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian String providerData, 48d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Uri uri, 49d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Boolean isRead, 50d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian Boolean hasContent, 51d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian String transcription) { 52d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mTimestamp = timestamp; 53d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mNumber = number; 54d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mPhoneAccount = phoneAccountHandle; 55d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mId = id; 56d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mDuration = duration; 57d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mSource = source; 58d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mProviderData = providerData; 59d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mUri = uri; 60d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mIsRead = isRead; 61d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mHasContent = hasContent; 62d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mTranscription = transcription; 63d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 64d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 65d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 66d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Create a {@link Builder} for a new {@link Voicemail} to be inserted. 67d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 68d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>The number and the timestamp are mandatory for insertion. 69d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 70d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static Builder createForInsertion(long timestamp, String number) { 71d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return new Builder().setNumber(number).setTimestamp(timestamp); 72d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 73d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 74d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 75d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Create a {@link Builder} for a {@link Voicemail} to be updated (or deleted). 76d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 77d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>The id and source data fields are mandatory for update - id is necessary for updating the 78d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * database and source data is necessary for updating the server. 79d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 80d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static Builder createForUpdate(long id, String sourceData) { 81d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return new Builder().setId(id).setSourceData(sourceData); 82d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 83d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 84d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 85d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Builder pattern for creating a {@link Voicemail}. The builder must be created with the {@link 86d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * #createForInsertion(long, String)} method. 87d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 88d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>This class is <b>not thread safe</b> 89d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 90d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static class Builder { 91d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 92d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Long mBuilderTimestamp; 93d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private String mBuilderNumber; 94d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private PhoneAccountHandle mBuilderPhoneAccount; 95d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Long mBuilderId; 96d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Long mBuilderDuration; 97d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private String mBuilderSourcePackage; 98d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private String mBuilderSourceData; 99d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Uri mBuilderUri; 100d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Boolean mBuilderIsRead; 101d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private boolean mBuilderHasContent; 102d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private String mBuilderTranscription; 103d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 104d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** You should use the correct factory method to construct a builder. */ 105d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Builder() {} 106d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 107d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setNumber(String number) { 108d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderNumber = number; 109d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 110d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 111d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 112d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setTimestamp(long timestamp) { 113d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderTimestamp = timestamp; 114d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 115d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 116d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 117d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setPhoneAccount(PhoneAccountHandle phoneAccount) { 118d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderPhoneAccount = phoneAccount; 119d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 120d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 121d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 122d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setId(long id) { 123d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderId = id; 124d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 125d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 126d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 127d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setDuration(long duration) { 128d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderDuration = duration; 129d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 130d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 131d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 132d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setSourcePackage(String sourcePackage) { 133d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderSourcePackage = sourcePackage; 134d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 135d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 136d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 137d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setSourceData(String sourceData) { 138d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderSourceData = sourceData; 139d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 140d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 141d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 142d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setUri(Uri uri) { 143d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderUri = uri; 144d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 145d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 146d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 147d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setIsRead(boolean isRead) { 148d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderIsRead = isRead; 149d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 150d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 151d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 152d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setHasContent(boolean hasContent) { 153d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderHasContent = hasContent; 154d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 155d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 156d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 157d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Builder setTranscription(String transcription) { 158d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderTranscription = transcription; 159d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return this; 160d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 161d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 162d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Voicemail build() { 163d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderId = mBuilderId == null ? -1 : mBuilderId; 164d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderTimestamp = mBuilderTimestamp == null ? 0 : mBuilderTimestamp; 165d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderDuration = mBuilderDuration == null ? 0 : mBuilderDuration; 166d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderIsRead = mBuilderIsRead == null ? false : mBuilderIsRead; 167d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return new Voicemail( 168d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderTimestamp, 169d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderNumber, 170d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderPhoneAccount, 171d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderId, 172d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderDuration, 173d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderSourcePackage, 174d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderSourceData, 175d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderUri, 176d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderIsRead, 177d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderHasContent, 178d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mBuilderTranscription); 179d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 180d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 181d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 182d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 183d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * The identifier of the voicemail in the content provider. 184d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 185d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>This may be missing in the case of a new {@link Voicemail} that we plan to insert into the 186d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * content provider, since until it has been inserted we don't know what id it should have. If 187d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * none is specified, we return -1. 188d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 189d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public long getId() { 190d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mId; 191d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 192d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 193d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The number of the person leaving the voicemail, empty string if unknown, null if not set. */ 194d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public String getNumber() { 195d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mNumber; 196d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 197d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 198d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The phone account associated with the voicemail, null if not set. */ 199d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public PhoneAccountHandle getPhoneAccount() { 200d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mPhoneAccount; 201d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 202d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 203d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** The timestamp the voicemail was received, in millis since the epoch, zero if not set. */ 204d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public long getTimestampMillis() { 205d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mTimestamp; 206d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 207d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 208d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Gets the duration of the voicemail in millis, or zero if the field is not set. */ 209d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public long getDuration() { 210d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mDuration; 211d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 212d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 213d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 214d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Returns the package name of the source that added this voicemail, or null if this field is not 215d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * set. 216d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 217d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public String getSourcePackage() { 218d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mSource; 219d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 220d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 221d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 222d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Returns the application-specific data type stored with the voicemail, or null if this field is 223d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * not set. 224d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 225d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>Source data is typically used as an identifier to uniquely identify the voicemail against 226d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * the voicemail server. This is likely to be something like the IMAP UID, or some other 227d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * server-generated identifying string. 228d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 229d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public String getSourceData() { 230d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mProviderData; 231d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 232d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 233d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 234d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Gets the Uri that can be used to refer to this voicemail, and to make it play. 235d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 236d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>Returns null if we don't know the Uri. 237d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 238d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Uri getUri() { 239d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mUri; 240d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 241d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 242d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** 243d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * Tells us if the voicemail message has been marked as read. 244d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * 245d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian * <p>Always returns false if this field has not been set, i.e. if hasRead() returns false. 246d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian */ 247d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public boolean isRead() { 248d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mIsRead; 249d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 250d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 251d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Tells us if there is content stored at the Uri. */ 252d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public boolean hasContent() { 253d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mHasContent; 254d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 255d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 256d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian /** Returns the text transcription of this voicemail, or null if this field is not set. */ 257d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public String getTranscription() { 258d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return mTranscription; 259d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 260d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 261d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 262d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public int describeContents() { 263d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return 0; 264d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 265d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 266d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 267d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public void writeToParcel(Parcel dest, int flags) { 268d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeLong(mTimestamp); 269d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian writeCharSequence(dest, mNumber); 270d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (mPhoneAccount == null) { 271d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(0); 272d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 273d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(1); 274d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mPhoneAccount.writeToParcel(dest, flags); 275d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 276d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeLong(mId); 277d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeLong(mDuration); 278d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian writeCharSequence(dest, mSource); 279d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian writeCharSequence(dest, mProviderData); 280d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (mUri == null) { 281d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(0); 282d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 283d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(1); 284d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mUri.writeToParcel(dest, flags); 285d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 286d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (mIsRead) { 287d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(1); 288d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 289d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(0); 290d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 291d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (mHasContent) { 292d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(1); 293d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 294d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian dest.writeInt(0); 295d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 296d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian writeCharSequence(dest, mTranscription); 297d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 298d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 299d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static final Creator<Voicemail> CREATOR = 300d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian new Creator<Voicemail>() { 301d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 302d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Voicemail createFromParcel(Parcel in) { 303d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return new Voicemail(in); 304d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 305d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 306d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian @Override 307d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public Voicemail[] newArray(int size) { 308d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return new Voicemail[size]; 309d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 310d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian }; 311d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 312d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private Voicemail(Parcel in) { 313d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mTimestamp = in.readLong(); 314d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mNumber = (String) readCharSequence(in); 315d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (in.readInt() > 0) { 316d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mPhoneAccount = PhoneAccountHandle.CREATOR.createFromParcel(in); 317d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 318d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mPhoneAccount = null; 319d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 320d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mId = in.readLong(); 321d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mDuration = in.readLong(); 322d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mSource = (String) readCharSequence(in); 323d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mProviderData = (String) readCharSequence(in); 324d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian if (in.readInt() > 0) { 325d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mUri = Uri.CREATOR.createFromParcel(in); 326d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } else { 327d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mUri = null; 328d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 329d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mIsRead = in.readInt() > 0 ? true : false; 330d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mHasContent = in.readInt() > 0 ? true : false; 331d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian mTranscription = (String) readCharSequence(in); 332d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 333d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 334d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian private static CharSequence readCharSequence(Parcel in) { 335d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian return TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 336d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 337d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian 338d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian public static void writeCharSequence(Parcel dest, CharSequence val) { 339d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian TextUtils.writeToParcel(val, dest, 0); 340d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian } 341d5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9Eric Erfanian} 342