Home | History | Annotate | Download | only in sms
      1 /*
      2  * Copyright (C) 2015 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 com.android.phone.vvm.omtp.sms;
     17 
     18 import android.os.Bundle;
     19 import android.telecom.Log;
     20 
     21 import com.android.phone.NeededForTesting;
     22 import com.android.phone.vvm.omtp.OmtpConstants;
     23 import com.android.phone.vvm.omtp.VisualVoicemailPreferences;
     24 
     25 /**
     26  * Structured data representation of OMTP STATUS message.
     27  *
     28  * The getters will return null if the field was not set in the message body or it could not be
     29  * parsed.
     30  */
     31 public class StatusMessage {
     32     // NOTE: Following Status SMS fields are not yet parsed, as they do not seem
     33     // to be useful for initial omtp source implementation.
     34     // lang, g_len, vs_len, pw_len, pm, gm, vtc, vt
     35 
     36     private final String mProvisioningStatus;
     37     private final String mStatusReturnCode;
     38     private final String mSubscriptionUrl;
     39     private final String mServerAddress;
     40     private final String mTuiAccessNumber;
     41     private final String mClientSmsDestinationNumber;
     42     private final String mImapPort;
     43     private final String mImapUserName;
     44     private final String mImapPassword;
     45     private final String mSmtpPort;
     46     private final String mSmtpUserName;
     47     private final String mSmtpPassword;
     48     private final String mTuiPasswordLength;
     49 
     50     @Override
     51     public String toString() {
     52         return "StatusMessage [mProvisioningStatus=" + mProvisioningStatus
     53                 + ", mStatusReturnCode=" + mStatusReturnCode
     54                 + ", mSubscriptionUrl=" + mSubscriptionUrl
     55                 + ", mServerAddress=" + mServerAddress
     56                 + ", mTuiAccessNumber=" + mTuiAccessNumber
     57                 + ", mClientSmsDestinationNumber=" + mClientSmsDestinationNumber
     58                 + ", mImapPort=" + mImapPort
     59                 + ", mImapUserName=" + mImapUserName
     60                 + ", mImapPassword=" + Log.pii(mImapPassword)
     61                 + ", mSmtpPort=" + mSmtpPort
     62                 + ", mSmtpUserName=" + mSmtpUserName
     63                 + ", mSmtpPassword=" + Log.pii(mSmtpPassword)
     64                 + ", mTuiPasswordLength=" + mTuiPasswordLength + "]";
     65     }
     66 
     67     public StatusMessage(Bundle wrappedData) {
     68         mProvisioningStatus = unquote(getString(wrappedData, OmtpConstants.PROVISIONING_STATUS));
     69         mStatusReturnCode = getString(wrappedData, OmtpConstants.RETURN_CODE);
     70         mSubscriptionUrl = getString(wrappedData, OmtpConstants.SUBSCRIPTION_URL);
     71         mServerAddress = getString(wrappedData, OmtpConstants.SERVER_ADDRESS);
     72         mTuiAccessNumber = getString(wrappedData, OmtpConstants.TUI_ACCESS_NUMBER);
     73         mClientSmsDestinationNumber = getString(wrappedData,
     74                 OmtpConstants.CLIENT_SMS_DESTINATION_NUMBER);
     75         mImapPort = getString(wrappedData, OmtpConstants.IMAP_PORT);
     76         mImapUserName = getString(wrappedData, OmtpConstants.IMAP_USER_NAME);
     77         mImapPassword = getString(wrappedData, OmtpConstants.IMAP_PASSWORD);
     78         mSmtpPort = getString(wrappedData, OmtpConstants.SMTP_PORT);
     79         mSmtpUserName = getString(wrappedData, OmtpConstants.SMTP_USER_NAME);
     80         mSmtpPassword = getString(wrappedData, OmtpConstants.SMTP_PASSWORD);
     81         mTuiPasswordLength = getString(wrappedData, OmtpConstants.TUI_PASSWORD_LENGTH);
     82     }
     83 
     84     private static String unquote(String string) {
     85         if (string.length() < 2) {
     86             return string;
     87         }
     88         if (string.startsWith("\"") && string.endsWith("\"")) {
     89             return string.substring(1, string.length() - 1);
     90         }
     91         return string;
     92     }
     93 
     94     /**
     95      * @return the subscriber's VVM provisioning status.
     96      */
     97     public String getProvisioningStatus() {
     98         return mProvisioningStatus;
     99     }
    100 
    101     /**
    102      * @return the return-code of the status SMS.
    103      */
    104     public String getReturnCode() {
    105         return mStatusReturnCode;
    106     }
    107 
    108     /**
    109      * @return the URL of the voicemail server. This is the URL to send the users to for subscribing
    110      * to the visual voicemail service.
    111      */
    112     @NeededForTesting
    113     public String getSubscriptionUrl() {
    114         return mSubscriptionUrl;
    115     }
    116 
    117     /**
    118      * @return the voicemail server address. Either server IP address or fully qualified domain
    119      * name.
    120      */
    121     public String getServerAddress() {
    122         return mServerAddress;
    123     }
    124 
    125     /**
    126      * @return the Telephony User Interface number to call to access voicemails directly from the
    127      * IVR.
    128      */
    129     @NeededForTesting
    130     public String getTuiAccessNumber() {
    131         return mTuiAccessNumber;
    132     }
    133 
    134     /**
    135      * @return the number to which client originated SMSes should be sent to.
    136      */
    137     @NeededForTesting
    138     public String getClientSmsDestinationNumber() {
    139         return mClientSmsDestinationNumber;
    140     }
    141 
    142     /**
    143      * @return the IMAP server port to talk to.
    144      */
    145     public String getImapPort() {
    146         return mImapPort;
    147     }
    148 
    149     /**
    150      * @return the IMAP user name to be used for authentication.
    151      */
    152     public String getImapUserName() {
    153         return mImapUserName;
    154     }
    155 
    156     /**
    157      * @return the IMAP password to be used for authentication.
    158      */
    159     public String getImapPassword() {
    160         return mImapPassword;
    161     }
    162 
    163     /**
    164      * @return the SMTP server port to talk to.
    165      */
    166     @NeededForTesting
    167     public String getSmtpPort() {
    168         return mSmtpPort;
    169     }
    170 
    171     /**
    172      * @return the SMTP user name to be used for SMTP authentication.
    173      */
    174     @NeededForTesting
    175     public String getSmtpUserName() {
    176         return mSmtpUserName;
    177     }
    178 
    179     /**
    180      * @return the SMTP password to be used for SMTP authentication.
    181      */
    182     @NeededForTesting
    183     public String getSmtpPassword() {
    184         return mSmtpPassword;
    185     }
    186 
    187     public String getTuiPasswordLength() {
    188         return mTuiPasswordLength;
    189     }
    190 
    191     private static String getString(Bundle bundle, String key) {
    192         String value = bundle.getString(key);
    193         if (value == null) {
    194             return "";
    195         }
    196         return value;
    197     }
    198 
    199     /**
    200      * Saves a StatusMessage to the {@link VisualVoicemailPreferences}. Not all fields are saved.
    201      */
    202     public VisualVoicemailPreferences.Editor putStatus(VisualVoicemailPreferences.Editor editor) {
    203         return editor
    204                 .putString(OmtpConstants.IMAP_PORT, getImapPort())
    205                 .putString(OmtpConstants.SERVER_ADDRESS, getServerAddress())
    206                 .putString(OmtpConstants.IMAP_USER_NAME, getImapUserName())
    207                 .putString(OmtpConstants.IMAP_PASSWORD, getImapPassword())
    208                 .putString(OmtpConstants.TUI_PASSWORD_LENGTH, getTuiPasswordLength());
    209     }
    210 }