blob: 17f26115f38badd4022c72a83b95d322a5687d67 [file] [log] [blame]
/*
* Copyright (C) 2018 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.internal.telephony.util;
import com.android.internal.telephony.ImsSmsDispatcher;
import com.android.internal.telephony.cdma.CdmaSMSDispatcher;
import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.SmsMessageBase;
import com.android.internal.telephony.SmsHeader;
import com.android.internal.telephony.gsm.GsmSMSDispatcher;
/**
* Utilities used by {@link com.android.internal.telephony.SMSDispatcher}'s subclasses.
*
* These methods can not be moved to {@link CdmaSMSDispatcher} and {@link GsmSMSDispatcher} because
* they also need to be called from {@link ImsSmsDispatcher} and the utilities will invoke the cdma
* or gsm version of the method based on the format.
*/
public final class SMSDispatcherUtil {
// Prevent instantiation.
private SMSDispatcherUtil() {}
/**
* Trigger the proper implementation for getting submit pdu for text sms based on format.
*
* @param isCdma true if cdma format should be used.
* @param scAddr is the service center address or null to use the current default SMSC
* @param destAddr the address to send the message to
* @param message the body of the message.
* @param statusReportRequested whether or not a status report is requested.
* @param smsHeader message header.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPdu(boolean isCdma, String scAddr,
String destAddr, String message, boolean statusReportRequested, SmsHeader smsHeader) {
if (isCdma) {
return getSubmitPduCdma(scAddr, destAddr, message, statusReportRequested, smsHeader);
} else {
return getSubmitPduGsm(scAddr, destAddr, message, statusReportRequested);
}
}
/**
* Trigger the proper implementation for getting submit pdu for text sms based on format.
*
* @param isCdma true if cdma format should be used.
* @param scAddr is the service center address or null to use the current default SMSC
* @param destAddr the address to send the message to
* @param message the body of the message.
* @param statusReportRequested whether or not a status report is requested.
* @param smsHeader message header.
* @param priority Priority level of the message
* Refer specification See 3GPP2 C.S0015-B, v2.0, table 4.5.9-1
* ---------------------------------
* PRIORITY | Level of Priority
* ---------------------------------
* '00' | Normal
* '01' | Interactive
* '10' | Urgent
* '11' | Emergency
* ----------------------------------
* Any Other values included Negative considered as Invalid Priority Indicator of the message.
* @param validityPeriod Validity Period of the message in mins.
* Refer specification 3GPP TS 23.040 V6.8.1 section 9.2.3.12.1.
* Validity Period(Minimum) -> 5 mins
* Validity Period(Maximum) -> 635040 mins(i.e.63 weeks).
* Any Other values included Negative considered as Invalid Validity Period of the message.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPdu(boolean isCdma, String scAddr,
String destAddr, String message, boolean statusReportRequested, SmsHeader smsHeader,
int priority, int validityPeriod) {
if (isCdma) {
return getSubmitPduCdma(scAddr, destAddr, message, statusReportRequested, smsHeader,
priority);
} else {
return getSubmitPduGsm(scAddr, destAddr, message, statusReportRequested,
validityPeriod);
}
}
/**
* Gsm implementation for
* {@link #getSubmitPdu(boolean, String, String, String, boolean)}
*
* @param scAddr is the service center address or null to use the current default SMSC
* @param destAddr the address to send the message to
* @param message the body of the message.
* @param statusReportRequested whether or not a status report is requested.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPduGsm(String scAddr, String destAddr,
String message, boolean statusReportRequested) {
return com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(scAddr, destAddr, message,
statusReportRequested);
}
/**
* Gsm implementation for
* {@link #getSubmitPdu(boolean, String, String, String, boolean, int)}
*
* @param scAddr is the service center address or null to use the current default SMSC
* @param destAddr the address to send the message to
* @param message the body of the message.
* @param statusReportRequested whether or not a status report is requested.
* @param validityPeriod Validity Period of the message in mins.
* Refer specification 3GPP TS 23.040 V6.8.1 section 9.2.3.12.1.
* Validity Period(Minimum) -> 5 mins
* Validity Period(Maximum) -> 635040 mins(i.e.63 weeks).
* Any Other values included Negative considered as Invalid Validity Period of the message.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPduGsm(String scAddr, String destAddr,
String message, boolean statusReportRequested, int validityPeriod) {
return com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(scAddr, destAddr, message,
statusReportRequested, validityPeriod);
}
/**
* Cdma implementation for
* {@link #getSubmitPdu(boolean, String, String, String, boolean, SmsHeader)}
*
* @param scAddr is the service center address or null to use the current default SMSC
* @param destAddr the address to send the message to
* @param message the body of the message.
* @param statusReportRequested whether or not a status report is requested.
* @param smsHeader message header.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPduCdma(String scAddr, String destAddr,
String message, boolean statusReportRequested, SmsHeader smsHeader) {
return com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu(scAddr, destAddr,
message, statusReportRequested, smsHeader);
}
/**
* Cdma implementation for
* {@link #getSubmitPdu(boolean, String, String, String, boolean, SmsHeader)}
*
* @param scAddr is the service center address or null to use the current default SMSC
* @param destAddr the address to send the message to
* @param message the body of the message.
* @param statusReportRequested whether or not a status report is requested.
* @param smsHeader message header.
* @param priority Priority level of the message
* Refer specification See 3GPP2 C.S0015-B, v2.0, table 4.5.9-1
* ---------------------------------
* PRIORITY | Level of Priority
* ---------------------------------
* '00' | Normal
* '01' | Interactive
* '10' | Urgent
* '11' | Emergency
* ----------------------------------
* Any Other values included Negative considered as Invalid Priority Indicator of the message.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPduCdma(String scAddr, String destAddr,
String message, boolean statusReportRequested, SmsHeader smsHeader, int priority) {
return com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu(scAddr, destAddr,
message, statusReportRequested, smsHeader, priority);
}
/**
* Trigger the proper implementation for getting submit pdu for data sms based on format.
*
* @param isCdma true if cdma format should be used.
* @param destAddr the address to send the message to
* @param scAddr is the service center address or null to use the current default SMSC
* @param destPort the port to deliver the message to
* @param message the body of the message to send
* @param statusReportRequested whether or not a status report is requested.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPdu(boolean isCdma, String scAddr,
String destAddr, int destPort, byte[] message, boolean statusReportRequested) {
if (isCdma) {
return getSubmitPduCdma(scAddr, destAddr, destPort, message, statusReportRequested);
} else {
return getSubmitPduGsm(scAddr, destAddr, destPort, message, statusReportRequested);
}
}
/**
* Cdma implementation of {@link #getSubmitPdu(boolean, String, String, int, byte[], boolean)}
* @param destAddr the address to send the message to
* @param scAddr is the service center address or null to use the current default SMSC
* @param destPort the port to deliver the message to
* @param message the body of the message to send
* @param statusReportRequested whether or not a status report is requested.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPduCdma(String scAddr, String destAddr,
int destPort, byte[] message, boolean statusReportRequested) {
return com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu(scAddr, destAddr,
destPort, message, statusReportRequested);
}
/**
* Gsm implementation of {@link #getSubmitPdu(boolean, String, String, int, byte[], boolean)}
*
* @param destAddr the address to send the message to
* @param scAddr is the service center address or null to use the current default SMSC
* @param destPort the port to deliver the message to
* @param message the body of the message to send
* @param statusReportRequested whether or not a status report is requested.
* @return the submit pdu.
*/
public static SmsMessageBase.SubmitPduBase getSubmitPduGsm(String scAddr, String destAddr,
int destPort, byte[] message, boolean statusReportRequested) {
return com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(scAddr, destAddr,
destPort, message, statusReportRequested);
}
/**
* Calculate the number of septets needed to encode the message. This function should only be
* called for individual segments of multipart message.
*
* @param isCdma true if cdma format should be used.
* @param messageBody the message to encode
* @param use7bitOnly ignore (but still count) illegal characters if true
* @return TextEncodingDetails
*/
public static TextEncodingDetails calculateLength(boolean isCdma, CharSequence messageBody,
boolean use7bitOnly) {
if (isCdma) {
return calculateLengthCdma(messageBody, use7bitOnly);
} else {
return calculateLengthGsm(messageBody, use7bitOnly);
}
}
/**
* Gsm implementation for {@link #calculateLength(boolean, CharSequence, boolean)}
*
* @param messageBody the message to encode
* @param use7bitOnly ignore (but still count) illegal characters if true
* @return TextEncodingDetails
*/
public static TextEncodingDetails calculateLengthGsm(CharSequence messageBody,
boolean use7bitOnly) {
return com.android.internal.telephony.gsm.SmsMessage.calculateLength(messageBody,
use7bitOnly);
}
/**
* Cdma implementation for {@link #calculateLength(boolean, CharSequence, boolean)}
*
* @param messageBody the message to encode
* @param use7bitOnly ignore (but still count) illegal characters if true
* @return TextEncodingDetails
*/
public static TextEncodingDetails calculateLengthCdma(CharSequence messageBody,
boolean use7bitOnly) {
return com.android.internal.telephony.cdma.SmsMessage.calculateLength(messageBody,
use7bitOnly, false);
}
}