summaryrefslogtreecommitdiff
path: root/java/com/android/voicemailomtp/sms
diff options
context:
space:
mode:
authorEric Erfanian <erfanian@google.com>2017-03-15 14:41:07 -0700
committerEric Erfanian <erfanian@google.com>2017-03-15 16:24:23 -0700
commitd5e47f6da5b08b13ecdfa7f1edc7e12aeb83fab9 (patch)
treeb54abbb51fb7d66e7755a1fbb5db023ff601090b /java/com/android/voicemailomtp/sms
parent30436e7e6d3f2c8755a91b2b6222b74d465a9e87 (diff)
Update Dialer source from latest green build.
* Refactor voicemail component * Add new enriched calling components Test: treehugger, manual aosp testing Change-Id: I521a0f86327d4b42e14d93927c7d613044ed5942
Diffstat (limited to 'java/com/android/voicemailomtp/sms')
-rw-r--r--java/com/android/voicemailomtp/sms/LegacyModeSmsHandler.java67
-rw-r--r--java/com/android/voicemailomtp/sms/OmtpCvvmMessageSender.java55
-rw-r--r--java/com/android/voicemailomtp/sms/OmtpMessageReceiver.java162
-rw-r--r--java/com/android/voicemailomtp/sms/OmtpMessageSender.java89
-rw-r--r--java/com/android/voicemailomtp/sms/OmtpStandardMessageSender.java119
-rw-r--r--java/com/android/voicemailomtp/sms/StatusMessage.java209
-rw-r--r--java/com/android/voicemailomtp/sms/StatusSmsFetcher.java162
-rw-r--r--java/com/android/voicemailomtp/sms/SyncMessage.java166
-rw-r--r--java/com/android/voicemailomtp/sms/Vvm3MessageSender.java56
9 files changed, 0 insertions, 1085 deletions
diff --git a/java/com/android/voicemailomtp/sms/LegacyModeSmsHandler.java b/java/com/android/voicemailomtp/sms/LegacyModeSmsHandler.java
deleted file mode 100644
index bb722bffc..000000000
--- a/java/com/android/voicemailomtp/sms/LegacyModeSmsHandler.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2016 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.voicemailomtp.sms;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.VisualVoicemailSms;
-
-import com.android.voicemailomtp.OmtpConstants;
-import com.android.voicemailomtp.OmtpVvmCarrierConfigHelper;
-import com.android.voicemailomtp.TelephonyManagerStub;
-import com.android.voicemailomtp.VvmLog;
-
-/**
- * Class ot handle voicemail SMS under legacy mode
- *
- * @see OmtpVvmCarrierConfigHelper#isLegacyModeEnabled()
- */
-public class LegacyModeSmsHandler {
-
- private static final String TAG = "LegacyModeSmsHandler";
-
- public static void handle(Context context, VisualVoicemailSms sms) {
- VvmLog.v(TAG, "processing VVM SMS on legacy mode");
- String eventType = sms.getPrefix();
- Bundle data = sms.getFields();
- PhoneAccountHandle handle = sms.getPhoneAccountHandle();
-
- if (eventType.equals(OmtpConstants.SYNC_SMS_PREFIX)) {
- SyncMessage message = new SyncMessage(data);
- VvmLog.v(TAG, "Received SYNC sms for " + handle +
- " with event " + message.getSyncTriggerEvent());
-
- switch (message.getSyncTriggerEvent()) {
- case OmtpConstants.NEW_MESSAGE:
- case OmtpConstants.MAILBOX_UPDATE:
- // The user has called into the voicemail and the new message count could
- // change.
- // For some carriers new message count could be set to 0 even if there are still
- // unread messages, to clear the message waiting indicator.
- VvmLog.v(TAG, "updating MWI");
-
- // Setting voicemail message count to non-zero will show the telephony voicemail
- // notification, and zero will clear it.
- TelephonyManagerStub.showVoicemailNotification(message.getNewMessageCount());
- break;
- default:
- break;
- }
- }
- }
-}
diff --git a/java/com/android/voicemailomtp/sms/OmtpCvvmMessageSender.java b/java/com/android/voicemailomtp/sms/OmtpCvvmMessageSender.java
deleted file mode 100644
index 63af2c13d..000000000
--- a/java/com/android/voicemailomtp/sms/OmtpCvvmMessageSender.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2015 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemailomtp.sms;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.SmsManager;
-import com.android.voicemailomtp.OmtpConstants;
-
-/**
- * An implementation of the OmtpMessageSender for T-Mobile.
- */
-public class OmtpCvvmMessageSender extends OmtpMessageSender {
- public OmtpCvvmMessageSender(Context context, PhoneAccountHandle phoneAccountHandle,
- short applicationPort, String destinationNumber) {
- super(context, phoneAccountHandle, applicationPort, destinationNumber);
- }
-
- @Override
- public void requestVvmActivation(@Nullable PendingIntent sentIntent) {
- sendCvvmMessage(OmtpConstants.ACTIVATE_REQUEST, sentIntent);
- }
-
- @Override
- public void requestVvmDeactivation(@Nullable PendingIntent sentIntent) {
- sendCvvmMessage(OmtpConstants.DEACTIVATE_REQUEST, sentIntent);
- }
-
- @Override
- public void requestVvmStatus(@Nullable PendingIntent sentIntent) {
- sendCvvmMessage(OmtpConstants.STATUS_REQUEST, sentIntent);
- }
-
- private void sendCvvmMessage(String request, PendingIntent sentIntent) {
- StringBuilder sb = new StringBuilder().append(request);
- sb.append(OmtpConstants.SMS_PREFIX_SEPARATOR);
- appendField(sb, "dt", "15");
- sendSms(sb.toString(), sentIntent);
- }
-}
diff --git a/java/com/android/voicemailomtp/sms/OmtpMessageReceiver.java b/java/com/android/voicemailomtp/sms/OmtpMessageReceiver.java
deleted file mode 100644
index c4ad2085f..000000000
--- a/java/com/android/voicemailomtp/sms/OmtpMessageReceiver.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemailomtp.sms;
-
-import android.annotation.TargetApi;
-import android.content.BroadcastReceiver;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Build.VERSION_CODES;
-import android.os.Bundle;
-import android.os.UserManager;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.VisualVoicemailSms;
-import com.android.voicemailomtp.ActivationTask;
-import com.android.voicemailomtp.OmtpConstants;
-import com.android.voicemailomtp.OmtpService;
-import com.android.voicemailomtp.OmtpVvmCarrierConfigHelper;
-import com.android.voicemailomtp.Voicemail;
-import com.android.voicemailomtp.VvmLog;
-import com.android.voicemailomtp.protocol.VisualVoicemailProtocol;
-import com.android.voicemailomtp.settings.VisualVoicemailSettingsUtil;
-import com.android.voicemailomtp.sync.OmtpVvmSyncService;
-import com.android.voicemailomtp.sync.SyncOneTask;
-import com.android.voicemailomtp.sync.SyncTask;
-import com.android.voicemailomtp.sync.VoicemailsQueryHelper;
-import com.android.voicemailomtp.utils.VoicemailDatabaseUtil;
-
-/** Receive SMS messages and send for processing by the OMTP visual voicemail source. */
-@TargetApi(VERSION_CODES.CUR_DEVELOPMENT)
-public class OmtpMessageReceiver extends BroadcastReceiver {
-
- private static final String TAG = "OmtpMessageReceiver";
-
- private Context mContext;
-
- @Override
- public void onReceive(Context context, Intent intent) {
- mContext = context;
- VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpService.EXTRA_VOICEMAIL_SMS);
- PhoneAccountHandle phone = sms.getPhoneAccountHandle();
-
- if (phone == null) {
- // This should never happen
- VvmLog.i(TAG, "Received message for null phone account");
- return;
- }
-
- if (!context.getSystemService(UserManager.class).isUserUnlocked()) {
- VvmLog.i(TAG, "Received message on locked device");
- // LegacyModeSmsHandler can handle new message notifications without storage access
- LegacyModeSmsHandler.handle(context, sms);
- // A full sync will happen after the device is unlocked, so nothing else need to be
- // done.
- return;
- }
-
- OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(mContext, phone);
- if (!VisualVoicemailSettingsUtil.isEnabled(mContext, phone)) {
- if (helper.isLegacyModeEnabled()) {
- LegacyModeSmsHandler.handle(context, sms);
- } else {
- VvmLog.i(TAG, "Received vvm message for disabled vvm source.");
- }
- return;
- }
-
- String eventType = sms.getPrefix();
- Bundle data = sms.getFields();
-
- if (eventType == null || data == null) {
- VvmLog.e(TAG, "Unparsable VVM SMS received, ignoring");
- return;
- }
-
- if (eventType.equals(OmtpConstants.SYNC_SMS_PREFIX)) {
- SyncMessage message = new SyncMessage(data);
-
- VvmLog.v(TAG, "Received SYNC sms for " + phone +
- " with event " + message.getSyncTriggerEvent());
- processSync(phone, message);
- } else if (eventType.equals(OmtpConstants.STATUS_SMS_PREFIX)) {
- VvmLog.v(TAG, "Received Status sms for " + phone);
- // If the STATUS SMS is initiated by ActivationTask the TaskSchedulerService will reject
- // the follow request. Providing the data will also prevent ActivationTask from
- // requesting another STATUS SMS. The following task will only run if the carrier
- // spontaneous send a STATUS SMS, in that case, the VVM service should be reactivated.
- ActivationTask.start(context, phone, data);
- } else {
- VvmLog.w(TAG, "Unknown prefix: " + eventType);
- VisualVoicemailProtocol protocol = helper.getProtocol();
- if (protocol == null) {
- return;
- }
- Bundle statusData = helper.getProtocol()
- .translateStatusSmsBundle(helper, eventType, data);
- if (statusData != null) {
- VvmLog.i(TAG, "Protocol recognized the SMS as STATUS, activating");
- ActivationTask.start(context, phone, data);
- }
- }
- }
-
- /**
- * A sync message has two purposes: to signal a new voicemail message, and to indicate the
- * voicemails on the server have changed remotely (usually through the TUI). Save the new
- * message to the voicemail provider if it is the former case and perform a full sync in the
- * latter case.
- *
- * @param message The sync message to extract data from.
- */
- private void processSync(PhoneAccountHandle phone, SyncMessage message) {
- switch (message.getSyncTriggerEvent()) {
- case OmtpConstants.NEW_MESSAGE:
- if (!OmtpConstants.VOICE.equals(message.getContentType())) {
- VvmLog.i(TAG, "Non-voice message of type '" + message.getContentType()
- + "' received, ignoring");
- return;
- }
-
- Voicemail.Builder builder = Voicemail.createForInsertion(
- message.getTimestampMillis(), message.getSender())
- .setPhoneAccount(phone)
- .setSourceData(message.getId())
- .setDuration(message.getLength())
- .setSourcePackage(mContext.getPackageName());
- Voicemail voicemail = builder.build();
-
- VoicemailsQueryHelper queryHelper = new VoicemailsQueryHelper(mContext);
- if (queryHelper.isVoicemailUnique(voicemail)) {
- Uri uri = VoicemailDatabaseUtil.insert(mContext, voicemail);
- voicemail = builder.setId(ContentUris.parseId(uri)).setUri(uri).build();
- SyncOneTask.start(mContext, phone, voicemail);
- }
- break;
- case OmtpConstants.MAILBOX_UPDATE:
- SyncTask.start(mContext, phone, OmtpVvmSyncService.SYNC_DOWNLOAD_ONLY);
- break;
- case OmtpConstants.GREETINGS_UPDATE:
- // Not implemented in V1
- break;
- default:
- VvmLog.e(TAG,
- "Unrecognized sync trigger event: " + message.getSyncTriggerEvent());
- break;
- }
- }
-}
diff --git a/java/com/android/voicemailomtp/sms/OmtpMessageSender.java b/java/com/android/voicemailomtp/sms/OmtpMessageSender.java
deleted file mode 100644
index 2323e4bcf..000000000
--- a/java/com/android/voicemailomtp/sms/OmtpMessageSender.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2015 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemailomtp.sms;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.SmsManager;
-import android.telephony.VisualVoicemailService;
-import com.android.voicemailomtp.OmtpConstants;
-import com.android.voicemailomtp.TelephonyManagerStub;
-import com.android.voicemailomtp.VvmLog;
-import java.io.UnsupportedEncodingException;
-import java.util.Locale;
-
-/**
- * Send client originated OMTP messages to the OMTP server.
- * <p>
- * Uses {@link PendingIntent} instead of a call back to notify when the message is
- * sent. This is primarily to keep the implementation simple and reuse what the underlying
- * {@link SmsManager} interface provides.
- * <p>
- * Provides simple APIs to send different types of mobile originated OMTP SMS to the VVM server.
- */
-public abstract class OmtpMessageSender {
- protected static final String TAG = "OmtpMessageSender";
- protected final Context mContext;
- protected final PhoneAccountHandle mPhoneAccountHandle;
- protected final short mApplicationPort;
- protected final String mDestinationNumber;
-
-
- public OmtpMessageSender(Context context, PhoneAccountHandle phoneAccountHandle,
- short applicationPort,
- String destinationNumber) {
- mContext = context;
- mPhoneAccountHandle = phoneAccountHandle;
- mApplicationPort = applicationPort;
- mDestinationNumber = destinationNumber;
- }
-
- /**
- * Sends a request to the VVM server to activate VVM for the current subscriber.
- *
- * @param sentIntent If not NULL this PendingIntent is broadcast when the message is
- * successfully sent, or failed.
- */
- public void requestVvmActivation(@Nullable PendingIntent sentIntent) {}
-
- /**
- * Sends a request to the VVM server to deactivate VVM for the current subscriber.
- *
- * @param sentIntent If not NULL this PendingIntent is broadcast when the message is
- * successfully sent, or failed.
- */
- public void requestVvmDeactivation(@Nullable PendingIntent sentIntent) {}
-
- /**
- * Send a request to the VVM server to get account status of the current subscriber.
- *
- * @param sentIntent If not NULL this PendingIntent is broadcast when the message is
- * successfully sent, or failed.
- */
- public void requestVvmStatus(@Nullable PendingIntent sentIntent) {}
-
- protected void sendSms(String text, PendingIntent sentIntent) {
- VisualVoicemailService
- .sendVisualVoicemailSms(mContext, mPhoneAccountHandle, mDestinationNumber,
- mApplicationPort, text, sentIntent);
- }
-
- protected void appendField(StringBuilder sb, String field, Object value) {
- sb.append(field).append(OmtpConstants.SMS_KEY_VALUE_SEPARATOR).append(value);
- }
-}
diff --git a/java/com/android/voicemailomtp/sms/OmtpStandardMessageSender.java b/java/com/android/voicemailomtp/sms/OmtpStandardMessageSender.java
deleted file mode 100644
index aa8374781..000000000
--- a/java/com/android/voicemailomtp/sms/OmtpStandardMessageSender.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2015 Google Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemailomtp.sms;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.SmsManager;
-import android.text.TextUtils;
-import com.android.voicemailomtp.OmtpConstants;
-
-/**
- * A implementation of the OmtpMessageSender using the standard OMTP sms protocol.
- */
-public class OmtpStandardMessageSender extends OmtpMessageSender {
- private final String mClientType;
- private final String mProtocolVersion;
- private final String mClientPrefix;
-
- /**
- * Creates a new instance of OmtpStandardMessageSender.
- *
- * @param applicationPort If set to a value > 0 then a binary sms is sent to this port number.
- * Otherwise, a standard text SMS is sent.
- * @param destinationNumber Destination number to be used.
- * @param clientType The "ct" field to be set in the MO message. This is the value used by the
- * VVM server to identify the client. Certain VVM servers require a specific agreed
- * value for this field.
- * @param protocolVersion OMTP protocol version.
- * @param clientPrefix The client prefix requested to be used by the server in its MT messages.
- */
- public OmtpStandardMessageSender(Context context, PhoneAccountHandle phoneAccountHandle,
- short applicationPort,
- String destinationNumber, String clientType, String protocolVersion,
- String clientPrefix) {
- super(context, phoneAccountHandle, applicationPort, destinationNumber);
- mClientType = clientType;
- mProtocolVersion = protocolVersion;
- mClientPrefix = clientPrefix;
- }
-
- // Activate message:
- // V1.1: Activate:pv=<value>;ct=<value>
- // V1.2: Activate:pv=<value>;ct=<value>;pt=<value>;<Clientprefix>
- // V1.3: Activate:pv=<value>;ct=<value>;pt=<value>;<Clientprefix>
- @Override
- public void requestVvmActivation(@Nullable PendingIntent sentIntent) {
- StringBuilder sb = new StringBuilder().append(OmtpConstants.ACTIVATE_REQUEST);
-
- appendProtocolVersionAndClientType(sb);
- if (TextUtils.equals(mProtocolVersion, OmtpConstants.PROTOCOL_VERSION1_2) ||
- TextUtils.equals(mProtocolVersion, OmtpConstants.PROTOCOL_VERSION1_3)) {
- appendApplicationPort(sb);
- appendClientPrefix(sb);
- }
-
- sendSms(sb.toString(), sentIntent);
- }
-
- // Deactivate message:
- // V1.1: Deactivate:pv=<value>;ct=<string>
- // V1.2: Deactivate:pv=<value>;ct=<string>
- // V1.3: Deactivate:pv=<value>;ct=<string>
- @Override
- public void requestVvmDeactivation(@Nullable PendingIntent sentIntent) {
- StringBuilder sb = new StringBuilder().append(OmtpConstants.DEACTIVATE_REQUEST);
- appendProtocolVersionAndClientType(sb);
-
- sendSms(sb.toString(), sentIntent);
- }
-
- // Status message:
- // V1.1: STATUS
- // V1.2: STATUS
- // V1.3: STATUS:pv=<value>;ct=<value>;pt=<value>;<Clientprefix>
- @Override
- public void requestVvmStatus(@Nullable PendingIntent sentIntent) {
- StringBuilder sb = new StringBuilder().append(OmtpConstants.STATUS_REQUEST);
-
- if (TextUtils.equals(mProtocolVersion, OmtpConstants.PROTOCOL_VERSION1_3)) {
- appendProtocolVersionAndClientType(sb);
- appendApplicationPort(sb);
- appendClientPrefix(sb);
- }
-
- sendSms(sb.toString(), sentIntent);
- }
-
- private void appendProtocolVersionAndClientType(StringBuilder sb) {
- sb.append(OmtpConstants.SMS_PREFIX_SEPARATOR);
- appendField(sb, OmtpConstants.PROTOCOL_VERSION, mProtocolVersion);
- sb.append(OmtpConstants.SMS_FIELD_SEPARATOR);
- appendField(sb, OmtpConstants.CLIENT_TYPE, mClientType);
- }
-
- private void appendApplicationPort(StringBuilder sb) {
- sb.append(OmtpConstants.SMS_FIELD_SEPARATOR);
- appendField(sb, OmtpConstants.APPLICATION_PORT, mApplicationPort);
- }
-
- private void appendClientPrefix(StringBuilder sb) {
- sb.append(OmtpConstants.SMS_FIELD_SEPARATOR);
- sb.append(mClientPrefix);
- }
-}
diff --git a/java/com/android/voicemailomtp/sms/StatusMessage.java b/java/com/android/voicemailomtp/sms/StatusMessage.java
deleted file mode 100644
index 3dfd4973e..000000000
--- a/java/com/android/voicemailomtp/sms/StatusMessage.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemailomtp.sms;
-
-import android.os.Bundle;
-import com.android.voicemailomtp.NeededForTesting;
-import com.android.voicemailomtp.OmtpConstants;
-import com.android.voicemailomtp.VisualVoicemailPreferences;
-import com.android.voicemailomtp.VvmLog;
-
-/**
- * Structured data representation of OMTP STATUS message.
- *
- * The getters will return null if the field was not set in the message body or it could not be
- * parsed.
- */
-public class StatusMessage {
- // NOTE: Following Status SMS fields are not yet parsed, as they do not seem
- // to be useful for initial omtp source implementation.
- // lang, g_len, vs_len, pw_len, pm, gm, vtc, vt
-
- private final String mProvisioningStatus;
- private final String mStatusReturnCode;
- private final String mSubscriptionUrl;
- private final String mServerAddress;
- private final String mTuiAccessNumber;
- private final String mClientSmsDestinationNumber;
- private final String mImapPort;
- private final String mImapUserName;
- private final String mImapPassword;
- private final String mSmtpPort;
- private final String mSmtpUserName;
- private final String mSmtpPassword;
- private final String mTuiPasswordLength;
-
- @Override
- public String toString() {
- return "StatusMessage [mProvisioningStatus=" + mProvisioningStatus
- + ", mStatusReturnCode=" + mStatusReturnCode
- + ", mSubscriptionUrl=" + mSubscriptionUrl
- + ", mServerAddress=" + mServerAddress
- + ", mTuiAccessNumber=" + mTuiAccessNumber
- + ", mClientSmsDestinationNumber=" + mClientSmsDestinationNumber
- + ", mImapPort=" + mImapPort
- + ", mImapUserName=" + mImapUserName
- + ", mImapPassword=" + VvmLog.pii(mImapPassword)
- + ", mSmtpPort=" + mSmtpPort
- + ", mSmtpUserName=" + mSmtpUserName
- + ", mSmtpPassword=" + VvmLog.pii(mSmtpPassword)
- + ", mTuiPasswordLength=" + mTuiPasswordLength + "]";
- }
-
- public StatusMessage(Bundle wrappedData) {
- mProvisioningStatus = unquote(getString(wrappedData, OmtpConstants.PROVISIONING_STATUS));
- mStatusReturnCode = getString(wrappedData, OmtpConstants.RETURN_CODE);
- mSubscriptionUrl = getString(wrappedData, OmtpConstants.SUBSCRIPTION_URL);
- mServerAddress = getString(wrappedData, OmtpConstants.SERVER_ADDRESS);
- mTuiAccessNumber = getString(wrappedData, OmtpConstants.TUI_ACCESS_NUMBER);
- mClientSmsDestinationNumber = getString(wrappedData,
- OmtpConstants.CLIENT_SMS_DESTINATION_NUMBER);
- mImapPort = getString(wrappedData, OmtpConstants.IMAP_PORT);
- mImapUserName = getString(wrappedData, OmtpConstants.IMAP_USER_NAME);
- mImapPassword = getString(wrappedData, OmtpConstants.IMAP_PASSWORD);
- mSmtpPort = getString(wrappedData, OmtpConstants.SMTP_PORT);
- mSmtpUserName = getString(wrappedData, OmtpConstants.SMTP_USER_NAME);
- mSmtpPassword = getString(wrappedData, OmtpConstants.SMTP_PASSWORD);
- mTuiPasswordLength = getString(wrappedData, OmtpConstants.TUI_PASSWORD_LENGTH);
- }
-
- private static String unquote(String string) {
- if (string.length() < 2) {
- return string;
- }
- if (string.startsWith("\"") && string.endsWith("\"")) {
- return string.substring(1, string.length() - 1);
- }
- return string;
- }
-
- /**
- * @return the subscriber's VVM provisioning status.
- */
- public String getProvisioningStatus() {
- return mProvisioningStatus;
- }
-
- /**
- * @return the return-code of the status SMS.
- */
- public String getReturnCode() {
- return mStatusReturnCode;
- }
-
- /**
- * @return the URL of the voicemail server. This is the URL to send the users to for subscribing
- * to the visual voicemail service.
- */
- @NeededForTesting
- public String getSubscriptionUrl() {
- return mSubscriptionUrl;
- }
-
- /**
- * @return the voicemail server address. Either server IP address or fully qualified domain
- * name.
- */
- public String getServerAddress() {
- return mServerAddress;
- }
-
- /**
- * @return the Telephony User Interface number to call to access voicemails directly from the
- * IVR.
- */
- @NeededForTesting
- public String getTuiAccessNumber() {
- return mTuiAccessNumber;
- }
-
- /**
- * @return the number to which client originated SMSes should be sent to.
- */
- @NeededForTesting
- public String getClientSmsDestinationNumber() {
- return mClientSmsDestinationNumber;
- }
-
- /**
- * @return the IMAP server port to talk to.
- */
- public String getImapPort() {
- return mImapPort;
- }
-
- /**
- * @return the IMAP user name to be used for authentication.
- */
- public String getImapUserName() {
- return mImapUserName;
- }
-
- /**
- * @return the IMAP password to be used for authentication.
- */
- public String getImapPassword() {
- return mImapPassword;
- }
-
- /**
- * @return the SMTP server port to talk to.
- */
- @NeededForTesting
- public String getSmtpPort() {
- return mSmtpPort;
- }
-
- /**
- * @return the SMTP user name to be used for SMTP authentication.
- */
- @NeededForTesting
- public String getSmtpUserName() {
- return mSmtpUserName;
- }
-
- /**
- * @return the SMTP password to be used for SMTP authentication.
- */
- @NeededForTesting
- public String getSmtpPassword() {
- return mSmtpPassword;
- }
-
- public String getTuiPasswordLength() {
- return mTuiPasswordLength;
- }
-
- private static String getString(Bundle bundle, String key) {
- String value = bundle.getString(key);
- if (value == null) {
- return "";
- }
- return value;
- }
-
- /**
- * Saves a StatusMessage to the {@link VisualVoicemailPreferences}. Not all fields are saved.
- */
- public VisualVoicemailPreferences.Editor putStatus(VisualVoicemailPreferences.Editor editor) {
- return editor
- .putString(OmtpConstants.IMAP_PORT, getImapPort())
- .putString(OmtpConstants.SERVER_ADDRESS, getServerAddress())
- .putString(OmtpConstants.IMAP_USER_NAME, getImapUserName())
- .putString(OmtpConstants.IMAP_PASSWORD, getImapPassword())
- .putString(OmtpConstants.TUI_PASSWORD_LENGTH, getTuiPasswordLength());
- }
-} \ No newline at end of file
diff --git a/java/com/android/voicemailomtp/sms/StatusSmsFetcher.java b/java/com/android/voicemailomtp/sms/StatusSmsFetcher.java
deleted file mode 100644
index 4e10c0e43..000000000
--- a/java/com/android/voicemailomtp/sms/StatusSmsFetcher.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.voicemailomtp.sms;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Build.VERSION_CODES;
-import android.os.Bundle;
-import android.support.annotation.MainThread;
-import android.support.annotation.Nullable;
-import android.support.annotation.WorkerThread;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.SmsManager;
-import android.telephony.VisualVoicemailSms;
-import com.android.voicemailomtp.Assert;
-import com.android.voicemailomtp.OmtpConstants;
-import com.android.voicemailomtp.OmtpService;
-import com.android.voicemailomtp.OmtpVvmCarrierConfigHelper;
-import com.android.voicemailomtp.VvmLog;
-import com.android.voicemailomtp.protocol.VisualVoicemailProtocol;
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-/** Intercepts a incoming STATUS SMS with a blocking call. */
-@SuppressWarnings("AndroidApiChecker") /* CompletableFuture is java8*/
-@TargetApi(VERSION_CODES.CUR_DEVELOPMENT)
-public class StatusSmsFetcher extends BroadcastReceiver implements Closeable {
-
- private static final String TAG = "VvmStatusSmsFetcher";
-
- private static final long STATUS_SMS_TIMEOUT_MILLIS = 60_000;
-
- private static final String ACTION_REQUEST_SENT_INTENT
- = "com.android.voicemailomtp.sms.REQUEST_SENT";
- private static final int ACTION_REQUEST_SENT_REQUEST_CODE = 0;
-
- private CompletableFuture<Bundle> mFuture = new CompletableFuture<>();
-
- private final Context mContext;
- private final PhoneAccountHandle mPhoneAccountHandle;
-
- public StatusSmsFetcher(Context context, PhoneAccountHandle phoneAccountHandle) {
- mContext = context;
- mPhoneAccountHandle = phoneAccountHandle;
- IntentFilter filter = new IntentFilter(ACTION_REQUEST_SENT_INTENT);
- filter.addAction(OmtpService.ACTION_SMS_RECEIVED);
- context.registerReceiver(this, filter);
- }
-
- @Override
- public void close() throws IOException {
- mContext.unregisterReceiver(this);
- }
-
- @WorkerThread
- @Nullable
- public Bundle get() throws InterruptedException, ExecutionException, TimeoutException,
- CancellationException {
- Assert.isNotMainThread();
- return mFuture.get(STATUS_SMS_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
- }
-
- public PendingIntent getSentIntent() {
- Intent intent = new Intent(ACTION_REQUEST_SENT_INTENT);
- intent.setPackage(mContext.getPackageName());
- // Because the receiver is registered dynamically, implicit intent must be used.
- // There should only be a single status SMS request at a time.
- return PendingIntent.getBroadcast(mContext, ACTION_REQUEST_SENT_REQUEST_CODE, intent,
- PendingIntent.FLAG_CANCEL_CURRENT);
- }
-
- @Override
- @MainThread
- public void onReceive(Context context, Intent intent) {
- Assert.isMainThread();
- if (ACTION_REQUEST_SENT_INTENT.equals(intent.getAction())) {
- int resultCode = getResultCode();
-
- if (resultCode == Activity.RESULT_OK) {
- VvmLog.d(TAG, "Request SMS successfully sent");
- return;
- }
-
- VvmLog.e(TAG, "Request SMS send failed: " + sentSmsResultToString(resultCode));
- mFuture.cancel(true);
- return;
- }
-
- VisualVoicemailSms sms = intent.getExtras().getParcelable(OmtpService.EXTRA_VOICEMAIL_SMS);
-
- if (!mPhoneAccountHandle.equals(sms.getPhoneAccountHandle())) {
- return;
- }
- String eventType = sms.getPrefix();
-
- if (eventType.equals(OmtpConstants.STATUS_SMS_PREFIX)) {
- mFuture.complete(sms.getFields());
- return;
- }
-
- if (eventType.equals(OmtpConstants.SYNC_SMS_PREFIX)) {
- return;
- }
-
- VvmLog.i(TAG, "VVM SMS with event " + eventType
- + " received, attempting to translate to STATUS SMS");
- OmtpVvmCarrierConfigHelper helper = new OmtpVvmCarrierConfigHelper(context,
- mPhoneAccountHandle);
- VisualVoicemailProtocol protocol = helper.getProtocol();
- if (protocol == null) {
- return;
- }
- Bundle translatedBundle = protocol.translateStatusSmsBundle(helper, eventType,
- sms.getFields());
-
- if (translatedBundle != null) {
- VvmLog.i(TAG, "Translated to STATUS SMS");
- mFuture.complete(translatedBundle);
- }
- }
-
- private static String sentSmsResultToString(int resultCode) {
- switch (resultCode) {
- case Activity.RESULT_OK:
- return "OK";
- case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
- return "RESULT_ERROR_GENERIC_FAILURE";
- case SmsManager.RESULT_ERROR_NO_SERVICE:
- return "RESULT_ERROR_GENERIC_FAILURE";
- case SmsManager.RESULT_ERROR_NULL_PDU:
- return "RESULT_ERROR_GENERIC_FAILURE";
- case SmsManager.RESULT_ERROR_RADIO_OFF:
- return "RESULT_ERROR_GENERIC_FAILURE";
- default:
- return "UNKNOWN CODE: " + resultCode;
- }
- }
-}
diff --git a/java/com/android/voicemailomtp/sms/SyncMessage.java b/java/com/android/voicemailomtp/sms/SyncMessage.java
deleted file mode 100644
index 89cfc0f19..000000000
--- a/java/com/android/voicemailomtp/sms/SyncMessage.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemailomtp.sms;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import com.android.voicemailomtp.NeededForTesting;
-import com.android.voicemailomtp.OmtpConstants;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-/**
- * Structured data representation of an OMTP SYNC message.
- *
- * Getters will return null if the field was not set in the message body or it could not be parsed.
- */
-public class SyncMessage {
- // Sync event that triggered this message.
- private final String mSyncTriggerEvent;
- // Total number of new messages on the server.
- private final int mNewMessageCount;
- // UID of the new message.
- private final String mMessageId;
- // Length of the message.
- private final int mMessageLength;
- // Content type (voice, video, fax...) of the new message.
- private final String mContentType;
- // Sender of the new message.
- private final String mSender;
- // Timestamp (in millis) of the new message.
- private final long mMsgTimeMillis;
-
- @Override
- public String toString() {
- return "SyncMessage [mSyncTriggerEvent=" + mSyncTriggerEvent
- + ", mNewMessageCount=" + mNewMessageCount
- + ", mMessageId=" + mMessageId
- + ", mMessageLength=" + mMessageLength
- + ", mContentType=" + mContentType
- + ", mSender=" + mSender
- + ", mMsgTimeMillis=" + mMsgTimeMillis + "]";
- }
-
- public SyncMessage(Bundle wrappedData) {
- mSyncTriggerEvent = getString(wrappedData, OmtpConstants.SYNC_TRIGGER_EVENT);
- mMessageId = getString(wrappedData, OmtpConstants.MESSAGE_UID);
- mMessageLength = getInt(wrappedData, OmtpConstants.MESSAGE_LENGTH);
- mContentType = getString(wrappedData, OmtpConstants.CONTENT_TYPE);
- mSender = getString(wrappedData, OmtpConstants.SENDER);
- mNewMessageCount = getInt(wrappedData, OmtpConstants.NUM_MESSAGE_COUNT);
- mMsgTimeMillis = parseTime(wrappedData.getString(OmtpConstants.TIME));
- }
-
- private static long parseTime(@Nullable String value) {
- if (value == null) {
- return 0L;
- }
- try {
- return new SimpleDateFormat(
- OmtpConstants.DATE_TIME_FORMAT, Locale.US)
- .parse(value).getTime();
- } catch (ParseException e) {
- return 0L;
- }
- }
- /**
- * @return the event that triggered the sync message. This is a mandatory field and must always
- * be set.
- */
- public String getSyncTriggerEvent() {
- return mSyncTriggerEvent;
- }
-
- /**
- * @return the number of new messages stored on the voicemail server.
- */
- @NeededForTesting
- public int getNewMessageCount() {
- return mNewMessageCount;
- }
-
- /**
- * @return the message ID of the new message.
- * <p>
- * Expected to be set only for
- * {@link com.android.voicemailomtp.OmtpConstants#NEW_MESSAGE}
- */
- public String getId() {
- return mMessageId;
- }
-
- /**
- * @return the content type of the new message.
- * <p>
- * Expected to be set only for
- * {@link com.android.voicemailomtp.OmtpConstants#NEW_MESSAGE}
- */
- @NeededForTesting
- public String getContentType() {
- return mContentType;
- }
-
- /**
- * @return the message length of the new message.
- * <p>
- * Expected to be set only for
- * {@link com.android.voicemailomtp.OmtpConstants#NEW_MESSAGE}
- */
- public int getLength() {
- return mMessageLength;
- }
-
- /**
- * @return the sender's phone number of the new message specified as MSISDN.
- * <p>
- * Expected to be set only for
- * {@link com.android.voicemailomtp.OmtpConstants#NEW_MESSAGE}
- */
- public String getSender() {
- return mSender;
- }
-
- /**
- * @return the timestamp as milliseconds for the new message.
- * <p>
- * Expected to be set only for
- * {@link com.android.voicemailomtp.OmtpConstants#NEW_MESSAGE}
- */
- public long getTimestampMillis() {
- return mMsgTimeMillis;
- }
-
- private static int getInt(Bundle wrappedData, String key) {
- String value = wrappedData.getString(key);
- if (value == null) {
- return 0;
- }
- try {
- return Integer.parseInt(value);
- } catch (NumberFormatException e) {
- return 0;
- }
- }
-
- private static String getString(Bundle wrappedData, String key) {
- String value = wrappedData.getString(key);
- if (value == null) {
- return "";
- }
- return value;
- }
-} \ No newline at end of file
diff --git a/java/com/android/voicemailomtp/sms/Vvm3MessageSender.java b/java/com/android/voicemailomtp/sms/Vvm3MessageSender.java
deleted file mode 100644
index 02e465967..000000000
--- a/java/com/android/voicemailomtp/sms/Vvm3MessageSender.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.voicemailomtp.sms;
-
-import android.app.PendingIntent;
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.SmsManager;
-
-public class Vvm3MessageSender extends OmtpMessageSender {
-
- /**
- * Creates a new instance of Vvm3MessageSender.
- *
- * @param applicationPort If set to a value > 0 then a binary sms is sent to this port number.
- * Otherwise, a standard text SMS is sent.
- */
- public Vvm3MessageSender(Context context, PhoneAccountHandle phoneAccountHandle,
- short applicationPort, String destinationNumber) {
- super(context, phoneAccountHandle, applicationPort, destinationNumber);
- }
-
- @Override
- public void requestVvmActivation(@Nullable PendingIntent sentIntent) {
- // Activation not supported for VVM3, send a status request instead.
- requestVvmStatus(sentIntent);
- }
-
- @Override
- public void requestVvmDeactivation(@Nullable PendingIntent sentIntent) {
- // Deactivation not supported for VVM3, do nothing
- }
-
-
- @Override
- public void requestVvmStatus(@Nullable PendingIntent sentIntent) {
- // Status message:
- // STATUS
- StringBuilder sb = new StringBuilder().append("STATUS");
- sendSms(sb.toString(), sentIntent);
- }
-}