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 package android.telephony; 17 18 import android.os.Parcel; 19 import android.os.Parcelable; 20 21 import java.util.Collections; 22 import java.util.List; 23 24 /** 25 * Class to represent various settings for the visual voicemail SMS filter. When the filter is 26 * enabled, incoming SMS matching the generalized OMTP format: 27 * 28 * <p>[clientPrefix]:[prefix]:([key]=[value];)* 29 * 30 * <p>will be regarded as a visual voicemail SMS, and removed before reaching the SMS provider. The 31 * intent {@link android.provider.VoicemailContract#ACTION_VOICEMAIL_SMS_RECEIVED} will then be sent 32 * to the default dialer with the information extracted from the SMS. 33 * 34 * <p>Use {@link android.telephony.VisualVoicemailSmsFilterSettings.Builder} to construct this 35 * class. 36 * 37 * @see android.telephony.TelephonyManager#enableVisualVoicemailSmsFilter 38 * 39 * @hide 40 */ 41 public class VisualVoicemailSmsFilterSettings implements Parcelable { 42 43 44 /** 45 * The visual voicemail SMS message does not have to be a data SMS, and can be directed to any 46 * port. 47 * 48 * @hide 49 */ 50 public static final int DESTINATION_PORT_ANY = -1; 51 52 /** 53 * The visual voicemail SMS message can be directed to any port, but must be a data SMS. 54 * 55 * @hide 56 */ 57 public static final int DESTINATION_PORT_DATA_SMS = -2; 58 59 public static final String DEFAULT_CLIENT_PREFIX = "//VVM"; 60 public static final List<String> DEFAULT_ORIGINATING_NUMBERS = Collections.emptyList(); 61 public static final int DEFAULT_DESTINATION_PORT = DESTINATION_PORT_ANY; 62 63 /** 64 * Builder class for {@link VisualVoicemailSmsFilterSettings} objects. 65 * 66 * @hide 67 */ 68 public static class Builder { 69 70 private String mClientPrefix = DEFAULT_CLIENT_PREFIX; 71 private List<String> mOriginatingNumbers = DEFAULT_ORIGINATING_NUMBERS; 72 private int mDestinationPort = DEFAULT_DESTINATION_PORT; 73 74 public VisualVoicemailSmsFilterSettings build() { 75 return new VisualVoicemailSmsFilterSettings(this); 76 } 77 78 /** 79 * Sets the client prefix for the visual voicemail SMS filter. The client prefix will appear 80 * at the start of a visual voicemail SMS message, followed by a colon(:). 81 */ 82 public Builder setClientPrefix(String clientPrefix) { 83 if (clientPrefix == null) { 84 throw new IllegalArgumentException("Client prefix cannot be null"); 85 } 86 mClientPrefix = clientPrefix; 87 return this; 88 } 89 90 /** 91 * Sets the originating number whitelist for the visual voicemail SMS filter. If the list is 92 * not null only the SMS messages from a number in the list can be considered as a visual 93 * voicemail SMS. Otherwise, messages from any address will be considered. 94 */ 95 public Builder setOriginatingNumbers(List<String> originatingNumbers) { 96 if (originatingNumbers == null) { 97 throw new IllegalArgumentException("Originating numbers cannot be null"); 98 } 99 mOriginatingNumbers = originatingNumbers; 100 return this; 101 } 102 103 /** 104 * Sets the destination port for the visual voicemail SMS filter. 105 * 106 * @param destinationPort The destination port, or {@link #DESTINATION_PORT_ANY}, or {@link 107 * #DESTINATION_PORT_DATA_SMS} 108 */ 109 public Builder setDestinationPort(int destinationPort) { 110 mDestinationPort = destinationPort; 111 return this; 112 } 113 114 } 115 116 /** 117 * The client prefix for the visual voicemail SMS filter. The client prefix will appear at the 118 * start of a visual voicemail SMS message, followed by a colon(:). 119 */ 120 public final String clientPrefix; 121 122 /** 123 * The originating number whitelist for the visual voicemail SMS filter of a phone account. If 124 * the list is not null only the SMS messages from a number in the list can be considered as a 125 * visual voicemail SMS. Otherwise, messages from any address will be considered. 126 */ 127 public final List<String> originatingNumbers; 128 129 /** 130 * The destination port for the visual voicemail SMS filter, or {@link #DESTINATION_PORT_ANY}, 131 * or {@link #DESTINATION_PORT_DATA_SMS} 132 */ 133 public final int destinationPort; 134 135 /** 136 * Use {@link Builder} to construct 137 */ 138 private VisualVoicemailSmsFilterSettings(Builder builder) { 139 clientPrefix = builder.mClientPrefix; 140 originatingNumbers = builder.mOriginatingNumbers; 141 destinationPort = builder.mDestinationPort; 142 } 143 144 public static final Creator<VisualVoicemailSmsFilterSettings> CREATOR = 145 new Creator<VisualVoicemailSmsFilterSettings>() { 146 @Override 147 public VisualVoicemailSmsFilterSettings createFromParcel(Parcel in) { 148 Builder builder = new Builder(); 149 builder.setClientPrefix(in.readString()); 150 builder.setOriginatingNumbers(in.createStringArrayList()); 151 builder.setDestinationPort(in.readInt()); 152 153 return builder.build(); 154 } 155 156 @Override 157 public VisualVoicemailSmsFilterSettings[] newArray(int size) { 158 return new VisualVoicemailSmsFilterSettings[size]; 159 } 160 }; 161 162 @Override 163 public int describeContents() { 164 return 0; 165 } 166 167 @Override 168 public void writeToParcel(Parcel dest, int flags) { 169 dest.writeString(clientPrefix); 170 dest.writeStringList(originatingNumbers); 171 dest.writeInt(destinationPort); 172 } 173 174 } 175