All Downloads are FREE. Search and download functionalities are using the official Maven repository.

android.telecom.Voicemail Maven / Gradle / Ivy

Go to download

A library jar that provides APIs for Applications written for the Google Android Platform.

There is a newer version: 14-robolectric-10818077
Show newest version
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.telecom;

import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Represents a single voicemail stored in the voicemail content provider.
 *
 * @hide
 */
public class Voicemail implements Parcelable {
    private final Long mTimestamp;
    private final String mNumber;
    private final PhoneAccountHandle mPhoneAccount;
    private final Long mId;
    private final Long mDuration;
    private final String mSource;
    private final String mProviderData;
    private final Uri mUri;
    private final Boolean mIsRead;
    private final Boolean mHasContent;
    private final String mTranscription;

    private Voicemail(Long timestamp, String number, PhoneAccountHandle phoneAccountHandle, Long id,
            Long duration, String source, String providerData, Uri uri, Boolean isRead,
            Boolean hasContent, String transcription) {
        mTimestamp = timestamp;
        mNumber = number;
        mPhoneAccount = phoneAccountHandle;
        mId = id;
        mDuration = duration;
        mSource = source;
        mProviderData = providerData;
        mUri = uri;
        mIsRead = isRead;
        mHasContent = hasContent;
        mTranscription = transcription;
    }

    /**
     * Create a {@link Builder} for a new {@link Voicemail} to be inserted.
     * 

* The number and the timestamp are mandatory for insertion. */ public static Builder createForInsertion(long timestamp, String number) { return new Builder().setNumber(number).setTimestamp(timestamp); } /** * Create a {@link Builder} for a {@link Voicemail} to be updated (or deleted). *

* The id and source data fields are mandatory for update - id is necessary for updating the * database and source data is necessary for updating the server. */ public static Builder createForUpdate(long id, String sourceData) { return new Builder().setId(id).setSourceData(sourceData); } /** * Builder pattern for creating a {@link Voicemail}. The builder must be created with the * {@link #createForInsertion(long, String)} method. *

* This class is not thread safe */ public static class Builder { private Long mBuilderTimestamp; private String mBuilderNumber; private PhoneAccountHandle mBuilderPhoneAccount; private Long mBuilderId; private Long mBuilderDuration; private String mBuilderSourcePackage; private String mBuilderSourceData; private Uri mBuilderUri; private Boolean mBuilderIsRead; private boolean mBuilderHasContent; private String mBuilderTranscription; /** You should use the correct factory method to construct a builder. */ private Builder() { } public Builder setNumber(String number) { mBuilderNumber = number; return this; } public Builder setTimestamp(long timestamp) { mBuilderTimestamp = timestamp; return this; } public Builder setPhoneAccount(PhoneAccountHandle phoneAccount) { mBuilderPhoneAccount = phoneAccount; return this; } public Builder setId(long id) { mBuilderId = id; return this; } public Builder setDuration(long duration) { mBuilderDuration = duration; return this; } public Builder setSourcePackage(String sourcePackage) { mBuilderSourcePackage = sourcePackage; return this; } public Builder setSourceData(String sourceData) { mBuilderSourceData = sourceData; return this; } public Builder setUri(Uri uri) { mBuilderUri = uri; return this; } public Builder setIsRead(boolean isRead) { mBuilderIsRead = isRead; return this; } public Builder setHasContent(boolean hasContent) { mBuilderHasContent = hasContent; return this; } public Builder setTranscription(String transcription) { mBuilderTranscription = transcription; return this; } public Voicemail build() { mBuilderId = mBuilderId == null ? -1 : mBuilderId; mBuilderTimestamp = mBuilderTimestamp == null ? 0 : mBuilderTimestamp; mBuilderDuration = mBuilderDuration == null ? 0: mBuilderDuration; mBuilderIsRead = mBuilderIsRead == null ? false : mBuilderIsRead; return new Voicemail(mBuilderTimestamp, mBuilderNumber, mBuilderPhoneAccount, mBuilderId, mBuilderDuration, mBuilderSourcePackage, mBuilderSourceData, mBuilderUri, mBuilderIsRead, mBuilderHasContent, mBuilderTranscription); } } /** * The identifier of the voicemail in the content provider. *

* This may be missing in the case of a new {@link Voicemail} that we plan to insert into the * content provider, since until it has been inserted we don't know what id it should have. If * none is specified, we return -1. */ public long getId() { return mId; } /** The number of the person leaving the voicemail, empty string if unknown, null if not set. */ public String getNumber() { return mNumber; } /** The phone account associated with the voicemail, null if not set. */ public PhoneAccountHandle getPhoneAccount() { return mPhoneAccount; } /** The timestamp the voicemail was received, in millis since the epoch, zero if not set. */ public long getTimestampMillis() { return mTimestamp; } /** Gets the duration of the voicemail in millis, or zero if the field is not set. */ public long getDuration() { return mDuration; } /** * Returns the package name of the source that added this voicemail, or null if this field is * not set. */ public String getSourcePackage() { return mSource; } /** * Returns the application-specific data type stored with the voicemail, or null if this field * is not set. *

* Source data is typically used as an identifier to uniquely identify the voicemail against * the voicemail server. This is likely to be something like the IMAP UID, or some other * server-generated identifying string. */ public String getSourceData() { return mProviderData; } /** * Gets the Uri that can be used to refer to this voicemail, and to make it play. *

* Returns null if we don't know the Uri. */ public Uri getUri() { return mUri; } /** * Tells us if the voicemail message has been marked as read. *

* Always returns false if this field has not been set, i.e. if hasRead() returns false. */ public boolean isRead() { return mIsRead; } /** * Tells us if there is content stored at the Uri. */ public boolean hasContent() { return mHasContent; } /** * Returns the text transcription of this voicemail, or null if this field is not set. */ public String getTranscription() { return mTranscription; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeLong(mTimestamp); dest.writeCharSequence(mNumber); if (mPhoneAccount == null) { dest.writeInt(0); } else { dest.writeInt(1); mPhoneAccount.writeToParcel(dest, flags); } dest.writeLong(mId); dest.writeLong(mDuration); dest.writeCharSequence(mSource); dest.writeCharSequence(mProviderData); if (mUri == null) { dest.writeInt(0); } else { dest.writeInt(1); mUri.writeToParcel(dest, flags); } if (mIsRead) { dest.writeInt(1); } else { dest.writeInt(0); } if (mHasContent) { dest.writeInt(1); } else { dest.writeInt(0); } dest.writeCharSequence(mTranscription); } public static final Creator CREATOR = new Creator() { @Override public Voicemail createFromParcel(Parcel in) { return new Voicemail(in); } @Override public Voicemail[] newArray(int size) { return new Voicemail[size]; } }; private Voicemail(Parcel in) { mTimestamp = in.readLong(); mNumber = (String) in.readCharSequence(); if (in.readInt() > 0) { mPhoneAccount = PhoneAccountHandle.CREATOR.createFromParcel(in); } else { mPhoneAccount = null; } mId = in.readLong(); mDuration = in.readLong(); mSource = (String) in.readCharSequence(); mProviderData = (String) in.readCharSequence(); if (in.readInt() > 0) { mUri = Uri.CREATOR.createFromParcel(in); } else { mUri = null; } mIsRead = in.readInt() > 0 ? true : false; mHasContent = in.readInt() > 0 ? true : false; mTranscription = (String) in.readCharSequence(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy