167ab168b78782c4de5de3f44817961468533757cTa-wei Yen/* 267ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Copyright (C) 2016 The Android Open Source Project 367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 467ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Licensed under the Apache License, Version 2.0 (the "License"); 567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * you may not use this file except in compliance with the License. 667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * You may obtain a copy of the License at 767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 867ab168b78782c4de5de3f44817961468533757cTa-wei Yen * http://www.apache.org/licenses/LICENSE-2.0 967ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 1067ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Unless required by applicable law or agreed to in writing, software 1167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * distributed under the License is distributed on an "AS IS" BASIS, 1267ab168b78782c4de5de3f44817961468533757cTa-wei Yen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * See the License for the specific language governing permissions and 1467ab168b78782c4de5de3f44817961468533757cTa-wei Yen * limitations under the License. 1567ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 1667ab168b78782c4de5de3f44817961468533757cTa-wei Yenpackage android.telephony; 1767ab168b78782c4de5de3f44817961468533757cTa-wei Yen 1867ab168b78782c4de5de3f44817961468533757cTa-wei Yenimport android.os.Parcel; 1967ab168b78782c4de5de3f44817961468533757cTa-wei Yenimport android.os.Parcelable; 2067ab168b78782c4de5de3f44817961468533757cTa-wei Yen 2167ab168b78782c4de5de3f44817961468533757cTa-wei Yenimport java.util.Collections; 2267ab168b78782c4de5de3f44817961468533757cTa-wei Yenimport java.util.List; 2367ab168b78782c4de5de3f44817961468533757cTa-wei Yen 2467ab168b78782c4de5de3f44817961468533757cTa-wei Yen/** 2567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Class to represent various settings for the visual voicemail SMS filter. When the filter is 2667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * enabled, incoming SMS matching the generalized OMTP format: 2767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 2867ab168b78782c4de5de3f44817961468533757cTa-wei Yen * <p>[clientPrefix]:[prefix]:([key]=[value];)* 2967ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 3067ab168b78782c4de5de3f44817961468533757cTa-wei Yen * <p>will be regarded as a visual voicemail SMS, and removed before reaching the SMS provider. The 3167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * intent {@link android.provider.VoicemailContract#ACTION_VOICEMAIL_SMS_RECEIVED} will then be sent 3267ab168b78782c4de5de3f44817961468533757cTa-wei Yen * to the default dialer with the information extracted from the SMS. 3367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 3467ab168b78782c4de5de3f44817961468533757cTa-wei Yen * <p>Use {@link android.telephony.VisualVoicemailSmsFilterSettings.Builder} to construct this 3567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * class. 3667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 3767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @see android.telephony.TelephonyManager#enableVisualVoicemailSmsFilter 3867ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 3967ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @hide 4067ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 4167ab168b78782c4de5de3f44817961468533757cTa-wei Yenpublic class VisualVoicemailSmsFilterSettings implements Parcelable { 4267ab168b78782c4de5de3f44817961468533757cTa-wei Yen 4367ab168b78782c4de5de3f44817961468533757cTa-wei Yen 4467ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 4567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * The visual voicemail SMS message does not have to be a data SMS, and can be directed to any 4667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * port. 4767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 4867ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @hide 4967ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 5067ab168b78782c4de5de3f44817961468533757cTa-wei Yen public static final int DESTINATION_PORT_ANY = -1; 5167ab168b78782c4de5de3f44817961468533757cTa-wei Yen 5267ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 5367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * The visual voicemail SMS message can be directed to any port, but must be a data SMS. 5467ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 5567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @hide 5667ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 5767ab168b78782c4de5de3f44817961468533757cTa-wei Yen public static final int DESTINATION_PORT_DATA_SMS = -2; 5867ab168b78782c4de5de3f44817961468533757cTa-wei Yen 5967ab168b78782c4de5de3f44817961468533757cTa-wei Yen public static final String DEFAULT_CLIENT_PREFIX = "//VVM"; 6067ab168b78782c4de5de3f44817961468533757cTa-wei Yen public static final List<String> DEFAULT_ORIGINATING_NUMBERS = Collections.emptyList(); 6167ab168b78782c4de5de3f44817961468533757cTa-wei Yen public static final int DEFAULT_DESTINATION_PORT = DESTINATION_PORT_ANY; 6267ab168b78782c4de5de3f44817961468533757cTa-wei Yen 6367ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 6467ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Builder class for {@link VisualVoicemailSmsFilterSettings} objects. 6567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 6667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @hide 6767ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 6867ab168b78782c4de5de3f44817961468533757cTa-wei Yen public static class Builder { 6967ab168b78782c4de5de3f44817961468533757cTa-wei Yen 7067ab168b78782c4de5de3f44817961468533757cTa-wei Yen private String mClientPrefix = DEFAULT_CLIENT_PREFIX; 7167ab168b78782c4de5de3f44817961468533757cTa-wei Yen private List<String> mOriginatingNumbers = DEFAULT_ORIGINATING_NUMBERS; 7267ab168b78782c4de5de3f44817961468533757cTa-wei Yen private int mDestinationPort = DEFAULT_DESTINATION_PORT; 7367ab168b78782c4de5de3f44817961468533757cTa-wei Yen 7467ab168b78782c4de5de3f44817961468533757cTa-wei Yen public VisualVoicemailSmsFilterSettings build() { 7567ab168b78782c4de5de3f44817961468533757cTa-wei Yen return new VisualVoicemailSmsFilterSettings(this); 7667ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 7767ab168b78782c4de5de3f44817961468533757cTa-wei Yen 7867ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 7967ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Sets the client prefix for the visual voicemail SMS filter. The client prefix will appear 8067ab168b78782c4de5de3f44817961468533757cTa-wei Yen * at the start of a visual voicemail SMS message, followed by a colon(:). 8167ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 8267ab168b78782c4de5de3f44817961468533757cTa-wei Yen public Builder setClientPrefix(String clientPrefix) { 8367ab168b78782c4de5de3f44817961468533757cTa-wei Yen if (clientPrefix == null) { 8467ab168b78782c4de5de3f44817961468533757cTa-wei Yen throw new IllegalArgumentException("Client prefix cannot be null"); 8567ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 8667ab168b78782c4de5de3f44817961468533757cTa-wei Yen mClientPrefix = clientPrefix; 8767ab168b78782c4de5de3f44817961468533757cTa-wei Yen return this; 8867ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 8967ab168b78782c4de5de3f44817961468533757cTa-wei Yen 9067ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 9167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Sets the originating number whitelist for the visual voicemail SMS filter. If the list is 9267ab168b78782c4de5de3f44817961468533757cTa-wei Yen * not null only the SMS messages from a number in the list can be considered as a visual 9367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * voicemail SMS. Otherwise, messages from any address will be considered. 9467ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 9567ab168b78782c4de5de3f44817961468533757cTa-wei Yen public Builder setOriginatingNumbers(List<String> originatingNumbers) { 9667ab168b78782c4de5de3f44817961468533757cTa-wei Yen if (originatingNumbers == null) { 9767ab168b78782c4de5de3f44817961468533757cTa-wei Yen throw new IllegalArgumentException("Originating numbers cannot be null"); 9867ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 9967ab168b78782c4de5de3f44817961468533757cTa-wei Yen mOriginatingNumbers = originatingNumbers; 10067ab168b78782c4de5de3f44817961468533757cTa-wei Yen return this; 10167ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 10267ab168b78782c4de5de3f44817961468533757cTa-wei Yen 10367ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 10467ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Sets the destination port for the visual voicemail SMS filter. 10567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * 10667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * @param destinationPort The destination port, or {@link #DESTINATION_PORT_ANY}, or {@link 10767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * #DESTINATION_PORT_DATA_SMS} 10867ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 10967ab168b78782c4de5de3f44817961468533757cTa-wei Yen public Builder setDestinationPort(int destinationPort) { 11067ab168b78782c4de5de3f44817961468533757cTa-wei Yen mDestinationPort = destinationPort; 11167ab168b78782c4de5de3f44817961468533757cTa-wei Yen return this; 11267ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 11367ab168b78782c4de5de3f44817961468533757cTa-wei Yen 11467ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 11567ab168b78782c4de5de3f44817961468533757cTa-wei Yen 11667ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 11767ab168b78782c4de5de3f44817961468533757cTa-wei Yen * The client prefix for the visual voicemail SMS filter. The client prefix will appear at the 11867ab168b78782c4de5de3f44817961468533757cTa-wei Yen * start of a visual voicemail SMS message, followed by a colon(:). 11967ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 12067ab168b78782c4de5de3f44817961468533757cTa-wei Yen public final String clientPrefix; 12167ab168b78782c4de5de3f44817961468533757cTa-wei Yen 12267ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 12367ab168b78782c4de5de3f44817961468533757cTa-wei Yen * The originating number whitelist for the visual voicemail SMS filter of a phone account. If 12467ab168b78782c4de5de3f44817961468533757cTa-wei Yen * the list is not null only the SMS messages from a number in the list can be considered as a 12567ab168b78782c4de5de3f44817961468533757cTa-wei Yen * visual voicemail SMS. Otherwise, messages from any address will be considered. 12667ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 12767ab168b78782c4de5de3f44817961468533757cTa-wei Yen public final List<String> originatingNumbers; 12867ab168b78782c4de5de3f44817961468533757cTa-wei Yen 12967ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 13067ab168b78782c4de5de3f44817961468533757cTa-wei Yen * The destination port for the visual voicemail SMS filter, or {@link #DESTINATION_PORT_ANY}, 13167ab168b78782c4de5de3f44817961468533757cTa-wei Yen * or {@link #DESTINATION_PORT_DATA_SMS} 13267ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 13367ab168b78782c4de5de3f44817961468533757cTa-wei Yen public final int destinationPort; 13467ab168b78782c4de5de3f44817961468533757cTa-wei Yen 13567ab168b78782c4de5de3f44817961468533757cTa-wei Yen /** 13667ab168b78782c4de5de3f44817961468533757cTa-wei Yen * Use {@link Builder} to construct 13767ab168b78782c4de5de3f44817961468533757cTa-wei Yen */ 13867ab168b78782c4de5de3f44817961468533757cTa-wei Yen private VisualVoicemailSmsFilterSettings(Builder builder) { 13967ab168b78782c4de5de3f44817961468533757cTa-wei Yen clientPrefix = builder.mClientPrefix; 14067ab168b78782c4de5de3f44817961468533757cTa-wei Yen originatingNumbers = builder.mOriginatingNumbers; 14167ab168b78782c4de5de3f44817961468533757cTa-wei Yen destinationPort = builder.mDestinationPort; 14267ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 14367ab168b78782c4de5de3f44817961468533757cTa-wei Yen 14467ab168b78782c4de5de3f44817961468533757cTa-wei Yen public static final Creator<VisualVoicemailSmsFilterSettings> CREATOR = 14567ab168b78782c4de5de3f44817961468533757cTa-wei Yen new Creator<VisualVoicemailSmsFilterSettings>() { 14667ab168b78782c4de5de3f44817961468533757cTa-wei Yen @Override 14767ab168b78782c4de5de3f44817961468533757cTa-wei Yen public VisualVoicemailSmsFilterSettings createFromParcel(Parcel in) { 14867ab168b78782c4de5de3f44817961468533757cTa-wei Yen Builder builder = new Builder(); 14967ab168b78782c4de5de3f44817961468533757cTa-wei Yen builder.setClientPrefix(in.readString()); 15067ab168b78782c4de5de3f44817961468533757cTa-wei Yen builder.setOriginatingNumbers(in.createStringArrayList()); 15167ab168b78782c4de5de3f44817961468533757cTa-wei Yen builder.setDestinationPort(in.readInt()); 15267ab168b78782c4de5de3f44817961468533757cTa-wei Yen 15367ab168b78782c4de5de3f44817961468533757cTa-wei Yen return builder.build(); 15467ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 15567ab168b78782c4de5de3f44817961468533757cTa-wei Yen 15667ab168b78782c4de5de3f44817961468533757cTa-wei Yen @Override 15767ab168b78782c4de5de3f44817961468533757cTa-wei Yen public VisualVoicemailSmsFilterSettings[] newArray(int size) { 15867ab168b78782c4de5de3f44817961468533757cTa-wei Yen return new VisualVoicemailSmsFilterSettings[size]; 15967ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 16067ab168b78782c4de5de3f44817961468533757cTa-wei Yen }; 16167ab168b78782c4de5de3f44817961468533757cTa-wei Yen 16267ab168b78782c4de5de3f44817961468533757cTa-wei Yen @Override 16367ab168b78782c4de5de3f44817961468533757cTa-wei Yen public int describeContents() { 16467ab168b78782c4de5de3f44817961468533757cTa-wei Yen return 0; 16567ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 16667ab168b78782c4de5de3f44817961468533757cTa-wei Yen 16767ab168b78782c4de5de3f44817961468533757cTa-wei Yen @Override 16867ab168b78782c4de5de3f44817961468533757cTa-wei Yen public void writeToParcel(Parcel dest, int flags) { 16967ab168b78782c4de5de3f44817961468533757cTa-wei Yen dest.writeString(clientPrefix); 17067ab168b78782c4de5de3f44817961468533757cTa-wei Yen dest.writeStringList(originatingNumbers); 17167ab168b78782c4de5de3f44817961468533757cTa-wei Yen dest.writeInt(destinationPort); 17267ab168b78782c4de5de3f44817961468533757cTa-wei Yen } 17367ab168b78782c4de5de3f44817961468533757cTa-wei Yen 17467ab168b78782c4de5de3f44817961468533757cTa-wei Yen} 175