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