Home | History | Annotate | Download | only in telephony
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.telephony;
     18 
     19 import android.annotation.Nullable;
     20 import android.os.Bundle;
     21 import android.os.Parcel;
     22 import android.os.Parcelable;
     23 import android.telecom.PhoneAccountHandle;
     24 import android.telephony.VisualVoicemailService.VisualVoicemailTask;
     25 
     26 /**
     27  * Represents the content of a visual voicemail SMS. If a incoming SMS matches the {@link
     28  * VisualVoicemailSmsFilterSettings} set by the default dialer, {@link
     29  * VisualVoicemailService#onSmsReceived(VisualVoicemailTask, VisualVoicemailSms)} will be called.
     30  */
     31 public final class VisualVoicemailSms implements Parcelable {
     32 
     33     private final PhoneAccountHandle mPhoneAccountHandle;
     34     @Nullable
     35     private final String mPrefix;
     36 
     37     @Nullable
     38     private final Bundle mFields;
     39 
     40     private final String mMessageBody;
     41 
     42     VisualVoicemailSms(Builder builder) {
     43         mPhoneAccountHandle = builder.mPhoneAccountHandle;
     44         mPrefix = builder.mPrefix;
     45         mFields = builder.mFields;
     46         mMessageBody = builder.mMessageBody;
     47     }
     48 
     49     /**
     50      * The {@link PhoneAccountHandle} that received the SMS.
     51      */
     52     public PhoneAccountHandle getPhoneAccountHandle() {
     53         return mPhoneAccountHandle;
     54     }
     55 
     56     /**
     57      * The event type of the SMS or {@code null} if the framework cannot parse the SMS as voicemail
     58      * but the carrier pattern indicates it is. Common values are "SYNC" or "STATUS".
     59      */
     60     public String getPrefix() {
     61         return mPrefix;
     62     }
     63 
     64     /**
     65      * The key-value pairs sent by the SMS, or {@code null} if the framework cannot parse the SMS as
     66      * voicemail but the carrier pattern indicates it is. The interpretation of the fields is
     67      * carrier dependent.
     68      */
     69     public Bundle getFields() {
     70         return mFields;
     71     }
     72 
     73     /**
     74      * Raw message body of the received SMS.
     75      */
     76     public String getMessageBody() {
     77         return mMessageBody;
     78     }
     79 
     80     /**
     81      * Builder for the {@link VisualVoicemailSms}. Internal use only.
     82      *
     83      * @hide
     84      */
     85     public static class Builder {
     86 
     87         private PhoneAccountHandle mPhoneAccountHandle;
     88         private String mPrefix;
     89         private Bundle mFields;
     90         private String mMessageBody;
     91 
     92         public VisualVoicemailSms build() {
     93             return new VisualVoicemailSms(this);
     94         }
     95 
     96         public Builder setPhoneAccountHandle(PhoneAccountHandle phoneAccountHandle) {
     97             this.mPhoneAccountHandle = phoneAccountHandle;
     98             return this;
     99         }
    100 
    101         public Builder setPrefix(String prefix) {
    102             this.mPrefix = prefix;
    103             return this;
    104         }
    105 
    106         public Builder setFields(Bundle fields) {
    107             this.mFields = fields;
    108             return this;
    109         }
    110 
    111         public Builder setMessageBody(String messageBody) {
    112             this.mMessageBody = messageBody;
    113             return this;
    114         }
    115 
    116     }
    117 
    118 
    119     public static final Creator<VisualVoicemailSms> CREATOR =
    120             new Creator<VisualVoicemailSms>() {
    121                 @Override
    122                 public VisualVoicemailSms createFromParcel(Parcel in) {
    123                     return new Builder()
    124                             .setPhoneAccountHandle((PhoneAccountHandle) in.readParcelable(null))
    125                             .setPrefix(in.readString())
    126                             .setFields(in.readBundle())
    127                             .setMessageBody(in.readString())
    128                             .build();
    129                 }
    130 
    131                 @Override
    132                 public VisualVoicemailSms[] newArray(int size) {
    133                     return new VisualVoicemailSms[size];
    134                 }
    135             };
    136 
    137     @Override
    138     public int describeContents() {
    139         return 0;
    140     }
    141 
    142     @Override
    143     public void writeToParcel(Parcel dest, int flags) {
    144         dest.writeParcelable(getPhoneAccountHandle(), flags);
    145         dest.writeString(getPrefix());
    146         dest.writeBundle(getFields());
    147         dest.writeString(getMessageBody());
    148     }
    149 }
    150