diff options
| author | 2017-12-21 19:20:36 +0000 | |
|---|---|---|
| committer | 2017-12-21 19:20:36 +0000 | |
| commit | f9eba1a18fba240b88eeafbadf0617cb5ce1111c (patch) | |
| tree | ac0031dc4467d2d5c0b32de2a406ff31aca2fac1 | |
| parent | dee5f9a738f6b14296ee1c7ca51c3dd628186c61 (diff) | |
| parent | 2bf7f03e638448cd63b084f32d86a6fd3b746b3e (diff) | |
Merge "SMS over IMS APIs revision"
am: 2bf7f03e63
Change-Id: I7296426e1c1fc903d92e324a09598e357e75389b
| -rw-r--r-- | Android.bp | 3 | ||||
| -rw-r--r-- | telephony/java/android/telephony/SmsManager.java | 2 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/feature/SmsFeature.java | 237 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/internal/SmsImplBase.java | 260 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/internal/aidl/IImsMmTelFeature.aidl | 9 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/internal/aidl/IImsSmsListener.aidl (renamed from telephony/java/com/android/ims/internal/ISmsListener.aidl) | 12 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/internal/feature/MmTelFeature.java | 75 | ||||
| -rw-r--r-- | telephony/java/com/android/ims/internal/IImsSmsFeature.aidl | 31 |
8 files changed, 351 insertions, 278 deletions
diff --git a/Android.bp b/Android.bp index 2c1fce3fc725..eb5240e1f180 100644 --- a/Android.bp +++ b/Android.bp @@ -464,6 +464,7 @@ java_library { "telephony/java/android/telephony/ims/internal/aidl/IImsRegistrationCallback.aidl", "telephony/java/android/telephony/ims/internal/aidl/IImsServiceController.aidl", "telephony/java/android/telephony/ims/internal/aidl/IImsServiceControllerListener.aidl", + "telephony/java/android/telephony/ims/internal/aidl/IImsSmsListener.aidl", "telephony/java/android/telephony/mbms/IMbmsDownloadSessionCallback.aidl", "telephony/java/android/telephony/mbms/IMbmsStreamingSessionCallback.aidl", "telephony/java/android/telephony/mbms/IDownloadStateCallback.aidl", @@ -484,13 +485,11 @@ java_library { "telephony/java/com/android/ims/internal/IImsService.aidl", "telephony/java/com/android/ims/internal/IImsServiceController.aidl", "telephony/java/com/android/ims/internal/IImsServiceFeatureCallback.aidl", - "telephony/java/com/android/ims/internal/IImsSmsFeature.aidl", "telephony/java/com/android/ims/internal/IImsStreamMediaSession.aidl", "telephony/java/com/android/ims/internal/IImsUt.aidl", "telephony/java/com/android/ims/internal/IImsUtListener.aidl", "telephony/java/com/android/ims/internal/IImsVideoCallCallback.aidl", "telephony/java/com/android/ims/internal/IImsVideoCallProvider.aidl", - "telephony/java/com/android/ims/internal/ISmsListener.aidl", "telephony/java/com/android/ims/internal/uce/uceservice/IUceService.aidl", "telephony/java/com/android/ims/internal/uce/uceservice/IUceListener.aidl", "telephony/java/com/android/ims/internal/uce/options/IOptionsService.aidl", diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java index 6029995f2468..62b0f9bcbe3e 100644 --- a/telephony/java/android/telephony/SmsManager.java +++ b/telephony/java/android/telephony/SmsManager.java @@ -1123,6 +1123,8 @@ public final class SmsManager { // SMS send failure result codes + /** No error. {@hide}*/ + static public final int RESULT_ERROR_NONE = 0; /** Generic failure cause */ static public final int RESULT_ERROR_GENERIC_FAILURE = 1; /** Failed because radio was explicitly turned off */ diff --git a/telephony/java/android/telephony/ims/feature/SmsFeature.java b/telephony/java/android/telephony/ims/feature/SmsFeature.java deleted file mode 100644 index c1366db4a8d6..000000000000 --- a/telephony/java/android/telephony/ims/feature/SmsFeature.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright (C) 2017 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 android.telephony.ims.feature; - -import android.annotation.SystemApi; -import android.os.RemoteException; -import com.android.ims.internal.IImsSmsFeature; -import com.android.ims.internal.ISmsListener; - -/** - * Base implementation of SMS over IMS functionality. - * - * @hide - */ -public class SmsFeature extends ImsFeature { - /** - * SMS over IMS format is 3gpp. - */ - public static final int IMS_SMS_FORMAT_3GPP = 1; - - /** - * SMS over IMS format is 3gpp2. - */ - public static final int IMS_SMS_FORMAT_3GPP2 = 2; - - /** - * Message was sent successfully. - */ - public static final int SEND_STATUS_OK = 1; - - /** - * IMS provider failed to send the message and platform should not retry falling back to sending - * the message using the radio. - */ - public static final int SEND_STATUS_ERROR = 2; - - /** - * IMS provider failed to send the message and platform should retry again after setting TP-RD bit - * to high. - */ - public static final int SEND_STATUS_ERROR_RETRY = 3; - - /** - * IMS provider failed to send the message and platform should retry falling back to sending - * the message using the radio. - */ - public static final int SEND_STATUS_ERROR_FALLBACK = 4; - - /** - * Message was delivered successfully. - */ - public static final int DELIVER_STATUS_OK = 1; - - /** - * Message was not delivered. - */ - public static final int DELIVER_STATUS_ERROR = 2; - - // Lock for feature synchronization - private final Object mLock = new Object(); - private ISmsListener mSmsListener; - - private final IImsSmsFeature mIImsSmsBinder = new IImsSmsFeature.Stub() { - @Override - public void registerSmsListener(ISmsListener listener) { - synchronized (mLock) { - SmsFeature.this.registerSmsListener(listener); - } - } - - @Override - public void sendSms(int format, int messageRef, boolean retry, byte[] pdu) { - synchronized (mLock) { - SmsFeature.this.sendSms(format, messageRef, retry, pdu); - } - } - - @Override - public void acknowledgeSms(int messageRef, int result) { - synchronized (mLock) { - SmsFeature.this.acknowledgeSms(messageRef, result); - } - } - - @Override - public int getSmsFormat() { - synchronized (mLock) { - return SmsFeature.this.getSmsFormat(); - } - } - }; - - /** - * Registers a listener responsible for handling tasks like delivering messages. - - * @param listener listener to register. - * - * @hide - */ - @SystemApi - public final void registerSmsListener(ISmsListener listener) { - synchronized (mLock) { - mSmsListener = listener; - } - } - - /** - * This method will be triggered by the platform when the user attempts to send an SMS. This - * method should be implemented by the IMS providers to provide implementation of sending an SMS - * over IMS. - * - * @param format the format of the message. One of {@link #IMS_SMS_FORMAT_3GPP} or - * {@link #IMS_SMS_FORMAT_3GPP2} - * @param messageRef the message reference. - * @param retry whether it is a retry of an already attempted message or not. - * @param pdu PDUs representing the contents of the message. - */ - public void sendSms(int format, int messageRef, boolean isRetry, byte[] pdu) { - } - - /** - * This method will be triggered by the platform after {@link #deliverSms(int, byte[])} has been - * called to deliver the result to the IMS provider. It will also be triggered after - * {@link #setSentSmsResult(int, int)} has been called to provide the result of the operation. - * - * @param result Should be {@link #DELIVER_STATUS_OK} if the message was delivered successfully, - * {@link #DELIVER_STATUS_ERROR} otherwise. - * @param messageRef the message reference. - */ - public void acknowledgeSms(int messageRef, int result) { - - } - - /** - * This method should be triggered by the IMS providers when there is an incoming message. The - * platform will deliver the message to the messages database and notify the IMS provider of the - * result by calling {@link #acknowledgeSms(int)}. - * - * This method must not be called before {@link #onFeatureReady()} is called. - * - * @param format the format of the message.One of {@link #IMS_SMS_FORMAT_3GPP} or - * {@link #IMS_SMS_FORMAT_3GPP2} - * @param pdu PDUs representing the contents of the message. - * @throws IllegalStateException if called before {@link #onFeatureReady()} - */ - public final void deliverSms(int format, byte[] pdu) throws IllegalStateException { - // TODO: Guard against NPE/ Check if feature is ready and thrown an exception - // otherwise. - try { - mSmsListener.deliverSms(format, pdu); - } catch (RemoteException e) { - } - } - - /** - * This method should be triggered by the IMS providers to pass the result of the sent message - * to the platform. - * - * This method must not be called before {@link #onFeatureReady()} is called. - * - * @param messageRef the message reference. - * @param result One of {@link #SEND_STATUS_OK}, {@link #SEND_STATUS_ERROR}, - * {@link #SEND_STATUS_ERROR_RETRY}, {@link #SEND_STATUS_ERROR_FALLBACK} - * @throws IllegalStateException if called before {@link #onFeatureReady()} - */ - public final void setSentSmsResult(int messageRef, int result) throws IllegalStateException { - // TODO: Guard against NPE/ Check if feature is ready and thrown an exception - // otherwise. - try { - mSmsListener.setSentSmsResult(messageRef, result); - } catch (RemoteException e) { - } - } - - /** - * Sets the status report of the sent message. - * - * @param format Should be {@link #IMS_SMS_FORMAT_3GPP} or {@link #IMS_SMS_FORMAT_3GPP2} - * @param pdu PDUs representing the content of the status report. - * @throws IllegalStateException if called before {@link #onFeatureReady()} - */ - public final void setSentSmsStatusReport(int format, byte[] pdu) { - // TODO: Guard against NPE/ Check if feature is ready and thrown an exception - // otherwise. - try { - mSmsListener.setSentSmsStatusReport(format, pdu); - } catch (RemoteException e) { - } - } - - /** - * Returns the SMS format. Default is {@link #IMS_SMS_FORMAT_3GPP} unless overridden by IMS - * Provider. - * - * @return sms format. - */ - public int getSmsFormat() { - return IMS_SMS_FORMAT_3GPP; - } - - /** - * {@inheritDoc} - */ - public void onFeatureReady() { - - } - - /** - * {@inheritDoc} - */ - @Override - public void onFeatureRemoved() { - - } - - /** - * @hide - */ - @Override - public final IImsSmsFeature getBinder() { - return mIImsSmsBinder; - } -}
\ No newline at end of file diff --git a/telephony/java/android/telephony/ims/internal/SmsImplBase.java b/telephony/java/android/telephony/ims/internal/SmsImplBase.java new file mode 100644 index 000000000000..47414cf73b95 --- /dev/null +++ b/telephony/java/android/telephony/ims/internal/SmsImplBase.java @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2017 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 android.telephony.ims.internal; + +import android.annotation.IntDef; +import android.annotation.SystemApi; +import android.os.RemoteException; +import android.telephony.SmsManager; +import android.telephony.SmsMessage; +import android.telephony.ims.internal.aidl.IImsSmsListener; +import android.telephony.ims.internal.feature.MmTelFeature; +import android.util.Log; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Base implementation for SMS over IMS. + * + * Any service wishing to provide SMS over IMS should extend this class and implement all methods + * that the service supports. + * @hide + */ +public class SmsImplBase { + private static final String LOG_TAG = "SmsImplBase"; + + @IntDef({ + SEND_STATUS_OK, + SEND_STATUS_ERROR, + SEND_STATUS_ERROR_RETRY, + SEND_STATUS_ERROR_FALLBACK + }) + @Retention(RetentionPolicy.SOURCE) + public @interface SendStatusResult {} + /** + * Message was sent successfully. + */ + public static final int SEND_STATUS_OK = 1; + + /** + * IMS provider failed to send the message and platform should not retry falling back to sending + * the message using the radio. + */ + public static final int SEND_STATUS_ERROR = 2; + + /** + * IMS provider failed to send the message and platform should retry again after setting TP-RD bit + * to high. + */ + public static final int SEND_STATUS_ERROR_RETRY = 3; + + /** + * IMS provider failed to send the message and platform should retry falling back to sending + * the message using the radio. + */ + public static final int SEND_STATUS_ERROR_FALLBACK = 4; + + @IntDef({ + DELIVER_STATUS_OK, + DELIVER_STATUS_ERROR + }) + @Retention(RetentionPolicy.SOURCE) + public @interface DeliverStatusResult {} + /** + * Message was delivered successfully. + */ + public static final int DELIVER_STATUS_OK = 1; + + /** + * Message was not delivered. + */ + public static final int DELIVER_STATUS_ERROR = 2; + + @IntDef({ + STATUS_REPORT_STATUS_OK, + STATUS_REPORT_STATUS_ERROR + }) + @Retention(RetentionPolicy.SOURCE) + public @interface StatusReportResult {} + + /** + * Status Report was set successfully. + */ + public static final int STATUS_REPORT_STATUS_OK = 1; + + /** + * Error while setting status report. + */ + public static final int STATUS_REPORT_STATUS_ERROR = 2; + + + // Lock for feature synchronization + private final Object mLock = new Object(); + private IImsSmsListener mListener; + + /** + * Registers a listener responsible for handling tasks like delivering messages. + * + * @param listener listener to register. + * + * @hide + */ + public final void registerSmsListener(IImsSmsListener listener) { + synchronized (mLock) { + mListener = listener; + } + } + + /** + * This method will be triggered by the platform when the user attempts to send an SMS. This + * method should be implemented by the IMS providers to provide implementation of sending an SMS + * over IMS. + * + * @param smsc the Short Message Service Center address. + * @param format the format of the message. Valid values are {@link SmsMessage#FORMAT_3GPP} and + * {@link SmsMessage#FORMAT_3GPP2}. + * @param messageRef the message reference. + * @param isRetry whether it is a retry of an already attempted message or not. + * @param pdu PDUs representing the contents of the message. + */ + public void sendSms(int messageRef, String format, String smsc, boolean isRetry, byte[] pdu) { + // Base implementation returns error. Should be overridden. + try { + onSendSmsResult(messageRef, SEND_STATUS_ERROR, SmsManager.RESULT_ERROR_GENERIC_FAILURE); + } catch (RemoteException e) { + Log.e(LOG_TAG, "Can not send sms: " + e.getMessage()); + } + } + + /** + * This method will be triggered by the platform after {@link #onSmsReceived(String, byte[])} has + * been called to deliver the result to the IMS provider. + * + * @param result result of delivering the message. Valid values are defined in + * {@link DeliverStatusResult} + * @param messageRef the message reference or -1 of unavailable. + */ + public void acknowledgeSms(int messageRef, @DeliverStatusResult int result) { + + } + + /** + * This method will be triggered by the platform after + * {@link #onSmsStatusReportReceived(int, int, byte[])} has been called to provide the result to + * the IMS provider. + * + * @param result result of delivering the message. Valid values are defined in + * {@link StatusReportResult} + * @param messageRef the message reference or -1 of unavailable. + */ + public void acknowledgeSmsReport(int messageRef, @StatusReportResult int result) { + + } + + /** + * This method should be triggered by the IMS providers when there is an incoming message. The + * platform will deliver the message to the messages database and notify the IMS provider of the + * result by calling {@link #acknowledgeSms(int, int)}. + * + * This method must not be called before {@link MmTelFeature#onFeatureReady()} is called. + * + * @param format the format of the message. Valid values are {@link SmsMessage#FORMAT_3GPP} and + * {@link SmsMessage#FORMAT_3GPP2}. + * @param pdu PDUs representing the contents of the message. + * @throws IllegalStateException if called before {@link MmTelFeature#onFeatureReady()} + */ + public final void onSmsReceived(String format, byte[] pdu) throws IllegalStateException { + synchronized (mLock) { + if (mListener == null) { + throw new IllegalStateException("Feature not ready."); + } + try { + mListener.onSmsReceived(format, pdu); + acknowledgeSms(-1, DELIVER_STATUS_OK); + } catch (RemoteException e) { + Log.e(LOG_TAG, "Can not deliver sms: " + e.getMessage()); + acknowledgeSms(-1, DELIVER_STATUS_ERROR); + } + } + } + + /** + * This method should be triggered by the IMS providers to pass the result of the sent message + * to the platform. + * + * This method must not be called before {@link MmTelFeature#onFeatureReady()} is called. + * + * @param messageRef the message reference. Should be between 0 and 255 per TS.123.040 + * @param status result of sending the SMS. Valid values are defined in {@link SendStatusResult} + * @param reason reason in case status is failure. Valid values are: + * {@link SmsManager#RESULT_ERROR_NONE}, + * {@link SmsManager#RESULT_ERROR_GENERIC_FAILURE}, + * {@link SmsManager#RESULT_ERROR_RADIO_OFF}, + * {@link SmsManager#RESULT_ERROR_NULL_PDU}, + * {@link SmsManager#RESULT_ERROR_NO_SERVICE}, + * {@link SmsManager#RESULT_ERROR_LIMIT_EXCEEDED}, + * {@link SmsManager#RESULT_ERROR_SHORT_CODE_NOT_ALLOWED}, + * {@link SmsManager#RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED} + * @throws IllegalStateException if called before {@link MmTelFeature#onFeatureReady()} + * @throws RemoteException if the connection to the framework is not available. If this happens + * attempting to send the SMS should be aborted. + */ + public final void onSendSmsResult(int messageRef, @SendStatusResult int status, int reason) + throws IllegalStateException, RemoteException { + synchronized (mLock) { + if (mListener == null) { + throw new IllegalStateException("Feature not ready."); + } + mListener.onSendSmsResult(messageRef, status, reason); + } + } + + /** + * Sets the status report of the sent message. + * + * @param messageRef the message reference. + * @param format the format of the message. Valid values are {@link SmsMessage#FORMAT_3GPP} and + * {@link SmsMessage#FORMAT_3GPP2}. + * @param pdu PDUs representing the content of the status report. + * @throws IllegalStateException if called before {@link MmTelFeature#onFeatureReady()} + */ + public final void onSmsStatusReportReceived(int messageRef, String format, byte[] pdu) { + synchronized (mLock) { + if (mListener == null) { + throw new IllegalStateException("Feature not ready."); + } + try { + mListener.onSmsStatusReportReceived(messageRef, format, pdu); + } catch (RemoteException e) { + Log.e(LOG_TAG, "Can not process sms status report: " + e.getMessage()); + acknowledgeSmsReport(messageRef, STATUS_REPORT_STATUS_ERROR); + } + } + } + + /** + * Returns the SMS format. Default is {@link SmsMessage#FORMAT_3GPP} unless overridden by IMS + * Provider. + * + * @return the format of the message. Valid values are {@link SmsMessage#FORMAT_3GPP} and + * {@link SmsMessage#FORMAT_3GPP2}. + */ + public String getSmsFormat() { + return SmsMessage.FORMAT_3GPP; + } + +} diff --git a/telephony/java/android/telephony/ims/internal/aidl/IImsMmTelFeature.aidl b/telephony/java/android/telephony/ims/internal/aidl/IImsMmTelFeature.aidl index 712578117e44..d97668675094 100644 --- a/telephony/java/android/telephony/ims/internal/aidl/IImsMmTelFeature.aidl +++ b/telephony/java/android/telephony/ims/internal/aidl/IImsMmTelFeature.aidl @@ -18,6 +18,7 @@ package android.telephony.ims.internal.aidl; import android.os.Message; import android.telephony.ims.internal.aidl.IImsMmTelListener; +import android.telephony.ims.internal.aidl.IImsSmsListener; import android.telephony.ims.internal.aidl.IImsCapabilityCallback; import android.telephony.ims.internal.aidl.IImsCallSessionListener; import android.telephony.ims.internal.feature.CapabilityChangeRequest; @@ -30,7 +31,7 @@ import com.android.ims.internal.IImsRegistrationListener; import com.android.ims.internal.IImsUt; /** - * See MmTelFeature for more information. + * See SmsImplBase for more information. * {@hide} */ interface IImsMmTelFeature { @@ -49,4 +50,10 @@ interface IImsMmTelFeature { IImsCapabilityCallback c); oneway void queryCapabilityConfiguration(int capability, int radioTech, IImsCapabilityCallback c); + // SMS APIs + void setSmsListener(IImsSmsListener l); + oneway void sendSms(int messageRef, String format, String smsc, boolean retry, in byte[] pdu); + oneway void acknowledgeSms(int messageRef, int result); + oneway void acknowledgeSmsReport(int messageRef, int result); + String getSmsFormat(); } diff --git a/telephony/java/com/android/ims/internal/ISmsListener.aidl b/telephony/java/android/telephony/ims/internal/aidl/IImsSmsListener.aidl index 1266f040885a..468629ae0343 100644 --- a/telephony/java/com/android/ims/internal/ISmsListener.aidl +++ b/telephony/java/android/telephony/ims/internal/aidl/IImsSmsListener.aidl @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.android.ims.internal; +package android.telephony.ims.internal.aidl; /** - * See SmsFeature for more information. + * See MMTelFeature for more information. * {@hide} */ -interface ISmsListener { - void setSentSmsResult(in int messageRef, in int result); - void setSentSmsStatusReport(in int format, in byte[] pdu); - void deliverSms(in int format, in byte[] pdu); +interface IImsSmsListener { + void onSendSmsResult(in int messageRef, in int status, in int reason); + void onSmsStatusReportReceived(in int messageRef, in String format, in byte[] pdu); + void onSmsReceived(in String format, in byte[] pdu); }
\ No newline at end of file diff --git a/telephony/java/android/telephony/ims/internal/feature/MmTelFeature.java b/telephony/java/android/telephony/ims/internal/feature/MmTelFeature.java index f183a57e77fc..2f350c86a6f6 100644 --- a/telephony/java/android/telephony/ims/internal/feature/MmTelFeature.java +++ b/telephony/java/android/telephony/ims/internal/feature/MmTelFeature.java @@ -21,11 +21,15 @@ import android.os.Message; import android.os.RemoteException; import android.telecom.TelecomManager; import android.telephony.ims.internal.ImsCallSessionListener; +import android.telephony.ims.internal.SmsImplBase; +import android.telephony.ims.internal.SmsImplBase.DeliverStatusResult; +import android.telephony.ims.internal.SmsImplBase.StatusReportResult; import android.telephony.ims.internal.aidl.IImsCallSessionListener; import android.telephony.ims.internal.aidl.IImsCapabilityCallback; import android.telephony.ims.internal.aidl.IImsMmTelFeature; import android.telephony.ims.internal.aidl.IImsMmTelListener; import android.telephony.ims.internal.stub.ImsRegistrationImplBase; +import android.telephony.ims.internal.aidl.IImsSmsListener; import android.telephony.ims.stub.ImsEcbmImplBase; import android.telephony.ims.stub.ImsMultiEndpointImplBase; import android.telephony.ims.stub.ImsUtImplBase; @@ -64,6 +68,11 @@ public class MmTelFeature extends ImsFeature { } @Override + public void setSmsListener(IImsSmsListener l) throws RemoteException { + MmTelFeature.this.setSmsListener(l); + } + + @Override public int getFeatureState() throws RemoteException { synchronized (mLock) { return MmTelFeature.this.getFeatureState(); @@ -143,6 +152,34 @@ public class MmTelFeature extends ImsFeature { IImsCapabilityCallback c) { queryCapabilityConfigurationInternal(capability, radioTech, c); } + + @Override + public void sendSms(int messageRef, String format, String smsc, boolean retry, byte[] pdu) { + synchronized (mLock) { + MmTelFeature.this.sendSms(messageRef, format, smsc, retry, pdu); + } + } + + @Override + public void acknowledgeSms(int messageRef, int result) { + synchronized (mLock) { + MmTelFeature.this.acknowledgeSms(messageRef, result); + } + } + + @Override + public void acknowledgeSmsReport(int messageRef, int result) { + synchronized (mLock) { + MmTelFeature.this.acknowledgeSmsReport(messageRef, result); + } + } + + @Override + public String getSmsFormat() { + synchronized (mLock) { + return MmTelFeature.this.getSmsFormat(); + } + } }; /** @@ -171,7 +208,8 @@ public class MmTelFeature extends ImsFeature { value = { CAPABILITY_TYPE_VOICE, CAPABILITY_TYPE_VIDEO, - CAPABILITY_TYPE_UT + CAPABILITY_TYPE_UT, + CAPABILITY_TYPE_SMS }) @Retention(RetentionPolicy.SOURCE) public @interface MmTelCapability {} @@ -191,6 +229,11 @@ public class MmTelFeature extends ImsFeature { */ public static final int CAPABILITY_TYPE_UT = 1 << 2; + /** + * This MmTelFeature supports SMS (IR.92) + */ + public static final int CAPABILITY_TYPE_SMS = 1 << 3; + @Override public final void addCapabilities(@MmTelCapability int capabilities) { super.addCapabilities(capabilities); @@ -239,6 +282,10 @@ public class MmTelFeature extends ImsFeature { } } + private void setSmsListener(IImsSmsListener listener) { + getSmsImplementation().registerSmsListener(listener); + } + private void queryCapabilityConfigurationInternal(int capability, int radioTech, IImsCapabilityCallback c) { boolean enabled = queryCapabilityConfiguration(capability, radioTech); @@ -400,6 +447,32 @@ public class MmTelFeature extends ImsFeature { // Base Implementation - Should be overridden } + private void sendSms(int messageRef, String format, String smsc, boolean isRetry, byte[] pdu) { + getSmsImplementation().sendSms(messageRef, format, smsc, isRetry, pdu); + } + + private void acknowledgeSms(int messageRef, @DeliverStatusResult int result) { + getSmsImplementation().acknowledgeSms(messageRef, result); + } + + private void acknowledgeSmsReport(int messageRef, @StatusReportResult int result) { + getSmsImplementation().acknowledgeSmsReport(messageRef, result); + } + + private String getSmsFormat() { + return getSmsImplementation().getSmsFormat(); + } + + /** + * Must be overridden by IMS Provider to be able to support SMS over IMS. Otherwise a default + * non-functional implementation is returned. + * + * @return an instance of {@link SmsImplBase} which should be implemented by the IMS Provider. + */ + protected SmsImplBase getSmsImplementation() { + return new SmsImplBase(); + } + /**{@inheritDoc}*/ @Override public void onFeatureRemoved() { diff --git a/telephony/java/com/android/ims/internal/IImsSmsFeature.aidl b/telephony/java/com/android/ims/internal/IImsSmsFeature.aidl deleted file mode 100644 index 506812882ef5..000000000000 --- a/telephony/java/com/android/ims/internal/IImsSmsFeature.aidl +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2017 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.ims.internal; - -import com.android.ims.internal.ISmsListener; - -/** - * See SmsFeature for more information. - * - * {@hide} - */ -interface IImsSmsFeature { - void registerSmsListener(in ISmsListener listener); - void sendSms(in int format, in int messageRef, in boolean retry, in byte[] pdu); - void acknowledgeSms(in int messageRef, in int result); - int getSmsFormat(); -}
\ No newline at end of file |