Expose SMS Apis through ImsServiceProxy.
am: f8800daead

Change-Id: I1f9de1edc5a0694912dad5aa0d42ffa2bb47a763
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 6482ba4..48a3165 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -45,6 +45,8 @@
 import com.android.ims.internal.IImsRegistration;
 import com.android.ims.internal.IImsRegistrationCallback;
 import com.android.ims.internal.IImsRegistrationListener;
+import com.android.ims.internal.IImsServiceController;
+import com.android.ims.internal.IImsSmsListener;
 import com.android.ims.internal.IImsUt;
 import com.android.ims.internal.ImsCallSession;
 import com.android.internal.annotations.VisibleForTesting;
@@ -2399,6 +2401,50 @@
         return mEcbm;
     }
 
+    public void sendSms(int token, int messageRef, String format, String smsc, boolean isRetry,
+            byte[] pdu) throws ImsException {
+        try {
+            mImsServiceProxy.sendSms(token, messageRef, format, smsc, isRetry, pdu);
+        } catch (RemoteException e) {
+            throw new ImsException("sendSms()", e, ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
+        }
+    }
+
+    public void acknowledgeSms(int token, int messageRef, int result) throws ImsException {
+        try {
+            mImsServiceProxy.acknowledgeSms(token, messageRef, result);
+        } catch (RemoteException e) {
+            throw new ImsException("acknowledgeSms()", e,
+                    ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
+        }
+    }
+
+    public void acknowledgeSmsReport(int token, int messageRef, int result) throws  ImsException{
+        try {
+            mImsServiceProxy.acknowledgeSmsReport(token, messageRef, result);
+        } catch (RemoteException e) {
+            throw new ImsException("acknowledgeSmsReport()", e,
+                    ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
+        }
+    }
+
+    public String getSmsFormat() throws ImsException{
+        try {
+            return mImsServiceProxy.getSmsFormat();
+        } catch (RemoteException e) {
+            throw new ImsException("getSmsFormat()", e,
+                    ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
+        }
+    }
+
+    public void setSmsListener(IImsSmsListener listener) throws ImsException {
+        try {
+            mImsServiceProxy.setSmsListener(listener);
+        } catch (RemoteException e) {
+            throw new ImsException("setSmsListener()", e,
+                    ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
+        }
+    }
     /**
      * Gets the Multi-Endpoint interface to subscribe to multi-enpoint notifications..
      *
diff --git a/src/java/com/android/ims/ImsServiceProxy.java b/src/java/com/android/ims/ImsServiceProxy.java
index a2df36b..153c5f5 100644
--- a/src/java/com/android/ims/ImsServiceProxy.java
+++ b/src/java/com/android/ims/ImsServiceProxy.java
@@ -25,6 +25,8 @@
 import android.telephony.Rlog;
 import android.telephony.TelephonyManager;
 import android.telephony.ims.feature.ImsFeature;
+import android.telephony.SmsMessage;
+import android.telephony.ims.internal.SmsImplBase;
 import android.util.Log;
 
 import com.android.ims.internal.IImsCallSession;
@@ -36,6 +38,7 @@
 import com.android.ims.internal.IImsRegistration;
 import com.android.ims.internal.IImsRegistrationListener;
 import com.android.ims.internal.IImsServiceFeatureCallback;
+import com.android.ims.internal.IImsSmsListener;
 import com.android.ims.internal.IImsUt;
 
 /**
@@ -336,6 +339,45 @@
         mStatusCallback = c;
     }
 
+    public void sendSms(int token, int messageRef, String format, String smsc, boolean isRetry,
+            byte[] pdu) throws RemoteException {
+        synchronized (mLock) {
+            checkServiceIsReady();
+            getServiceInterface(mBinder).sendSms(token, messageRef, format, smsc, isRetry,
+                    pdu);
+        }
+    }
+
+    public void acknowledgeSms(int token, int messageRef,
+            @SmsImplBase.SendStatusResult int result) throws RemoteException {
+        synchronized (mLock) {
+            checkServiceIsReady();
+            getServiceInterface(mBinder).acknowledgeSms(token, messageRef, result);
+        }
+    }
+
+    public void acknowledgeSmsReport(int token, int messageRef,
+            @SmsImplBase.StatusReportResult int result) throws RemoteException {
+        synchronized (mLock) {
+            checkServiceIsReady();
+            getServiceInterface(mBinder).acknowledgeSmsReport(token, messageRef, result);
+        }
+    }
+
+    public String getSmsFormat() throws RemoteException {
+        synchronized (mLock) {
+            checkServiceIsReady();
+            return getServiceInterface(mBinder).getSmsFormat();
+        }
+    }
+
+    public void setSmsListener(IImsSmsListener listener) throws RemoteException {
+        synchronized (mLock) {
+            checkServiceIsReady();
+            getServiceInterface(mBinder).setSmsListener(listener);
+        }
+    }
+
     /**
      * @return Returns true if the ImsService is ready to take commands, false otherwise. If this
      * method returns false, it doesn't mean that the Binder connection is not available (use