SMS over IMS bug fixes
Sukanya Rajkhowa [Wed, 30 Oct 2013 04:06:08 +0000 (21:06 -0700)]
This change includes the following:
1) SMS over IMS remaining patches which address review comments

2) Fix for Bug:11378993
For MT SMS over IMS, if an application uses the createFromPdu(byte[] pdu) API
instead of createFromPdu(byte[] pdu,String format) API, we first try to create
SmsMessage from raw PDU with the format of active phone. That either returns a
valid SmsMessage object or throws a RuntimeException causing the correct format
to be used the next time. If GsmSmsAddress is not valid, we should throw
a RuntimeException which is handled by createFromPdu(byte[] pdu)

3) Fix for Bug:11424054
Register for ICC changes and handle new SMS on ICC

Bug: 11378993, 11424054
Change-Id: I94bcfcf93d8205c2916997091617899c6ebdd5e5

19 files changed:
src/java/android/telephony/SmsManager.java
src/java/android/telephony/SmsMessage.java
src/java/com/android/internal/telephony/BaseCommands.java
src/java/com/android/internal/telephony/CommandsInterface.java
src/java/com/android/internal/telephony/IccSmsInterfaceManager.java
src/java/com/android/internal/telephony/ImsSMSDispatcher.java
src/java/com/android/internal/telephony/PhoneBase.java
src/java/com/android/internal/telephony/RIL.java
src/java/com/android/internal/telephony/SMSDispatcher.java
src/java/com/android/internal/telephony/cdma/CDMALTEPhone.java
src/java/com/android/internal/telephony/cdma/CDMAPhone.java
src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java
src/java/com/android/internal/telephony/cdma/SmsMessage.java
src/java/com/android/internal/telephony/gsm/GSMPhone.java
src/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java
src/java/com/android/internal/telephony/gsm/SmsMessage.java
src/java/com/android/internal/telephony/sip/SipCommandInterface.java
src/java/com/android/internal/telephony/test/SimulatedCommands.java
tests/telephonytests/src/com/android/internal/telephony/gsm/UsimDataDownloadCommands.java

index 3a86328..b73cb49 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2008 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
index 85687fe..12d6949 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2008 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
index c4536d0..ca3d761 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
index a83a6c3..ce7f6f3 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -111,13 +110,15 @@ public interface CommandsInterface {
     RadioState getRadioState();
 
     /**
-     * response.obj.result is an int[2]
+     * response.obj.result is an int[3]
      *
-     * response.obj.result[0] is registration state
+     * response.obj.result[0] is IMS registration state
      *                        0 - Not registered
      *                        1 - Registered
-     * response.obj.result[1] is of type const RIL_IMS_SMS_Format,
-     *                        corresponds to sms format used for SMS over IMS.
+     * response.obj.result[1] is bitmap of supported services
+     *                        & 0x1 - SMS supported
+     * response.obj.result[2 ] is of type RILConstants.GSM_PHONE or
+     *                                    RILConstants.CDMA_PHONE
      */
     void getImsRegistrationState(Message result);
 
index 88fbfc9..1572a4e 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2008 The Android Open Source Project
- * Copyright (c) 2013, The Linux Foundation. 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.
@@ -90,8 +89,7 @@ public class IccSmsInterfaceManager extends ISms.Stub {
                     ar = (AsyncResult)msg.obj;
                     synchronized (mLock) {
                         if (ar.exception == null) {
-                            mSms  = (List<SmsRawData>)
-                                    buildValidRawData((ArrayList<byte[]>) ar.result);
+                            mSms = buildValidRawData((ArrayList<byte[]>) ar.result);
                             //Mark SMS as read after importing it from card.
                             markMessagesAsRead((ArrayList<byte[]>) ar.result);
                         } else {
@@ -160,10 +158,6 @@ public class IccSmsInterfaceManager extends ISms.Stub {
         }
     }
 
-    public void dispose() {
-        mDispatcher.dispose();
-    }
-
     protected void updatePhoneObject(PhoneBase phone) {
         mPhone = phone;
         mDispatcher.updatePhoneObject(phone);
index d49b974..07bce94 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -42,8 +41,9 @@ public final class ImsSMSDispatcher extends SMSDispatcher {
     private SMSDispatcher mCdmaDispatcher;
     private SMSDispatcher mGsmDispatcher;
 
-    GsmInboundSmsHandler mGsmInboundSmsHandler;
-    CdmaInboundSmsHandler mCdmaInboundSmsHandler;
+    private GsmInboundSmsHandler mGsmInboundSmsHandler;
+    private CdmaInboundSmsHandler mCdmaInboundSmsHandler;
+
 
     /** true if IMS is registered and sms is supported, false otherwise.*/
     private boolean mIms = false;
@@ -51,19 +51,17 @@ public final class ImsSMSDispatcher extends SMSDispatcher {
 
     public ImsSMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor,
             SmsUsageMonitor usageMonitor) {
-        super(phone, usageMonitor);
+        super(phone, usageMonitor, null);
         Rlog.d(TAG, "ImsSMSDispatcher created");
 
-        // Create dispatchers, inbound SMS handlers and broadcast
-        // undelivered messages in raw table.
-        mCdmaDispatcher = new CdmaSMSDispatcher(phone,
-                storageMonitor, usageMonitor, this);
+        // Create dispatchers, inbound SMS handlers and
+        // broadcast undelivered messages in raw table.
+        mCdmaDispatcher = new CdmaSMSDispatcher(phone, usageMonitor, this);
         mGsmInboundSmsHandler = GsmInboundSmsHandler.makeInboundSmsHandler(phone.getContext(),
                 storageMonitor, phone);
         mCdmaInboundSmsHandler = CdmaInboundSmsHandler.makeInboundSmsHandler(phone.getContext(),
                 storageMonitor, phone, (CdmaSMSDispatcher) mCdmaDispatcher);
-        mGsmDispatcher = new GsmSMSDispatcher(phone,
-                storageMonitor, usageMonitor, this, mGsmInboundSmsHandler);
+        mGsmDispatcher = new GsmSMSDispatcher(phone, usageMonitor, this, mGsmInboundSmsHandler);
         Thread broadcastThread = new Thread(new SmsBroadcastUndelivered(phone.getContext(),
                 mGsmInboundSmsHandler, mCdmaInboundSmsHandler));
         broadcastThread.start();
index 0ec5152..3e5bc4a 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2007 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
index b189df1..824e191 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -1269,7 +1268,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
             Message result) {
         RILRequest rr = RILRequest.obtain(RIL_REQUEST_IMS_SEND_SMS, result);
 
-        rr.mParcel.writeInt(1); //RIL_IMS_SMS_Format.FORMAT_3GPP
+        rr.mParcel.writeInt(RILConstants.GSM_PHONE);
         rr.mParcel.writeByte((byte)retry);
         rr.mParcel.writeInt(messageRef);
 
@@ -1284,7 +1283,7 @@ public final class RIL extends BaseCommands implements CommandsInterface {
     sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message result) {
         RILRequest rr = RILRequest.obtain(RIL_REQUEST_IMS_SEND_SMS, result);
 
-        rr.mParcel.writeInt(2); //RIL_IMS_SMS_Format.FORMAT_3GPP2
+        rr.mParcel.writeInt(RILConstants.CDMA_PHONE);
         rr.mParcel.writeByte((byte)retry);
         rr.mParcel.writeInt(messageRef);
 
index 64af435..9cd5b70 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -59,6 +58,7 @@ import android.widget.TextView;
 
 import com.android.internal.R;
 import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails;
+import com.android.internal.telephony.ImsSMSDispatcher;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -128,7 +128,6 @@ public abstract class SMSDispatcher extends Handler {
     protected final Context mContext;
     protected final ContentResolver mResolver;
     protected final CommandsInterface mCi;
-    protected SmsStorageMonitor mStorageMonitor;
     protected final TelephonyManager mTelephonyManager;
 
     /** Maximum number of times to retry sending a failed SMS. */
@@ -151,6 +150,8 @@ public abstract class SMSDispatcher extends Handler {
     /** Outgoing message counter. Shared by all dispatchers. */
     private SmsUsageMonitor mUsageMonitor;
 
+    private ImsSMSDispatcher mImsSMSDispatcher;
+
     /** Number of outgoing SmsTrackers waiting for user confirmation. */
     private int mPendingTrackerCount;
 
@@ -170,8 +171,10 @@ public abstract class SMSDispatcher extends Handler {
      * @param phone the Phone to use
      * @param usageMonitor the SmsUsageMonitor to use
      */
-    protected SMSDispatcher(PhoneBase phone, SmsUsageMonitor usageMonitor) {
+    protected SMSDispatcher(PhoneBase phone, SmsUsageMonitor usageMonitor,
+            ImsSMSDispatcher imsSMSDispatcher) {
         mPhone = phone;
+        mImsSMSDispatcher = imsSMSDispatcher;
         mContext = phone.getContext();
         mResolver = mContext.getContentResolver();
         mCi = phone.mCi;
@@ -211,7 +214,6 @@ public abstract class SMSDispatcher extends Handler {
 
     protected void updatePhoneObject(PhoneBase phone) {
         mPhone = phone;
-        mStorageMonitor = phone.mSmsStorageMonitor;
         mUsageMonitor = phone.mSmsUsageMonitor;
         Rlog.d(TAG, "Active phone changed to " + mPhone.getPhoneName() );
     }
@@ -944,7 +946,14 @@ public abstract class SMSDispatcher extends Handler {
      *
      * @param tracker holds the SMS message to send
      */
-    public abstract void sendRetrySms(SmsTracker tracker);
+    public void sendRetrySms(SmsTracker tracker) {
+        // re-routing to ImsSMSDispatcher
+        if (mImsSMSDispatcher != null) {
+            mImsSMSDispatcher.sendRetrySms(tracker);
+        } else {
+            Rlog.e(TAG, mImsSMSDispatcher + " is null. Retry failed");
+        }
+    }
 
     /**
      * Send the multi-part SMS based on multipart Sms tracker
@@ -1059,7 +1068,7 @@ public abstract class SMSDispatcher extends Handler {
         }
     }
 
-    protected SmsTracker SmsTrackerFactory(HashMap<String, Object> data, PendingIntent sentIntent,
+    protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
             PendingIntent deliveryIntent, String format) {
         // Get calling app package name via UID from Binder call
         PackageManager pm = mContext.getPackageManager();
@@ -1081,7 +1090,7 @@ public abstract class SMSDispatcher extends Handler {
         return new SmsTracker(data, sentIntent, deliveryIntent, appInfo, destAddr, format);
     }
 
-    protected HashMap SmsTrackerMapFactory(String destAddr, String scAddr,
+    protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr,
             String text, SmsMessageBase.SubmitPduBase pdu) {
         HashMap<String, Object> map = new HashMap<String, Object>();
         map.put("destAddr", destAddr);
@@ -1092,12 +1101,12 @@ public abstract class SMSDispatcher extends Handler {
         return map;
     }
 
-    protected HashMap SmsTrackerMapFactory(String destAddr, String scAddr,
+    protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr,
             int destPort, byte[] data, SmsMessageBase.SubmitPduBase pdu) {
         HashMap<String, Object> map = new HashMap<String, Object>();
         map.put("destAddr", destAddr);
         map.put("scAddr", scAddr);
-        map.put("destPort", Integer.valueOf(destPort));
+        map.put("destPort", destPort);
         map.put("data", data);
         map.put("smsc", pdu.encodedScAddress);
         map.put("pdu", pdu.encodedMessage);
@@ -1189,7 +1198,21 @@ public abstract class SMSDispatcher extends Handler {
         }
     }
 
-    public abstract boolean isIms();
+    public boolean isIms() {
+        if (mImsSMSDispatcher != null) {
+            return mImsSMSDispatcher.isIms();
+        } else {
+            Rlog.e(TAG, mImsSMSDispatcher + " is null");
+            return false;
+        }
+    }
 
-    public abstract String getImsSmsFormat();
+    public String getImsSmsFormat() {
+        if (mImsSMSDispatcher != null) {
+            return mImsSMSDispatcher.getImsSmsFormat();
+        } else {
+            Rlog.e(TAG, mImsSMSDispatcher + " is null");
+            return null;
+        }
+    }
 }
index 1f9368a..c0b7c4a 100644 (file)
@@ -1,6 +1,5 @@
 /* 
- * Copyrigh (C) 2011 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+ * Copyright (C) 2011 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.
index e0de106..1a27dda 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
index 147a310..f168180 100755 (executable)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2008 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -28,12 +27,11 @@ import android.telephony.Rlog;
 import android.telephony.SmsManager;
 
 import com.android.internal.telephony.GsmAlphabet;
-import com.android.internal.telephony.SmsConstants;
+import com.android.internal.telephony.ImsSMSDispatcher;
 import com.android.internal.telephony.PhoneBase;
 import com.android.internal.telephony.SMSDispatcher;
-import com.android.internal.telephony.ImsSMSDispatcher;
+import com.android.internal.telephony.SmsConstants;
 import com.android.internal.telephony.SmsHeader;
-import com.android.internal.telephony.SmsStorageMonitor;
 import com.android.internal.telephony.SmsUsageMonitor;
 import com.android.internal.telephony.TelephonyProperties;
 import com.android.internal.telephony.cdma.sms.UserData;
@@ -43,15 +41,18 @@ import java.util.HashMap;
 public class CdmaSMSDispatcher extends SMSDispatcher {
     private static final String TAG = "CdmaSMSDispatcher";
     private static final boolean VDBG = false;
-    private ImsSMSDispatcher mImsSMSDispatcher;
 
-    public CdmaSMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor,
-            SmsUsageMonitor usageMonitor, ImsSMSDispatcher imsSMSDispatcher) {
-        super(phone, usageMonitor);
-        mImsSMSDispatcher = imsSMSDispatcher;
+    public CdmaSMSDispatcher(PhoneBase phone, SmsUsageMonitor usageMonitor,
+            ImsSMSDispatcher imsSMSDispatcher) {
+        super(phone, usageMonitor, imsSMSDispatcher);
         Rlog.d(TAG, "CdmaSMSDispatcher created");
     }
 
+    @Override
+    protected String getFormat() {
+        return SmsConstants.FORMAT_3GPP2;
+    }
+
     /**
      * Send the SMS status report to the dispatcher thread to process.
      * @param sms the CDMA SMS message containing the status report
@@ -71,10 +72,6 @@ public class CdmaSMSDispatcher extends SMSDispatcher {
         }
     }
 
-    protected String getFormat() {
-        return SmsConstants.FORMAT_3GPP2;
-    }
-
     /**
      * Called from parent class to handle status report from {@code CdmaInboundSmsHandler}.
      * @param sms the CDMA SMS message to process
@@ -106,8 +103,8 @@ public class CdmaSMSDispatcher extends SMSDispatcher {
             byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
         SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(
                 scAddr, destAddr, destPort, data, (deliveryIntent != null));
-        HashMap map =  SmsTrackerMapFactory(destAddr, scAddr, destPort, data, pdu);
-        SmsTracker tracker = SmsTrackerFactory(map, sentIntent, deliveryIntent,
+        HashMap map = getSmsTrackerMap(destAddr, scAddr, destPort, data, pdu);
+        SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent,
                 getFormat());
         sendSubmitPdu(tracker);
     }
@@ -118,8 +115,8 @@ public class CdmaSMSDispatcher extends SMSDispatcher {
             PendingIntent sentIntent, PendingIntent deliveryIntent) {
         SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(
                 scAddr, destAddr, text, (deliveryIntent != null), null);
-        HashMap map =  SmsTrackerMapFactory(destAddr, scAddr, text, pdu);
-        SmsTracker tracker = SmsTrackerFactory(map, sentIntent,
+        HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu);
+        SmsTracker tracker = getSmsTracker(map, sentIntent,
                 deliveryIntent, getFormat());
         sendSubmitPdu(tracker);
     }
@@ -153,9 +150,9 @@ public class CdmaSMSDispatcher extends SMSDispatcher {
         SmsMessage.SubmitPdu submitPdu = SmsMessage.getSubmitPdu(destinationAddress,
                 uData, (deliveryIntent != null) && lastPart);
 
-        HashMap map =  SmsTrackerMapFactory(destinationAddress, scAddress,
+        HashMap map = getSmsTrackerMap(destinationAddress, scAddress,
                 message, submitPdu);
-        SmsTracker tracker = SmsTrackerFactory(map, sentIntent,
+        SmsTracker tracker = getSmsTracker(map, sentIntent,
                 deliveryIntent, getFormat());
         sendSubmitPdu(tracker);
     }
@@ -205,20 +202,4 @@ public class CdmaSMSDispatcher extends SMSDispatcher {
             tracker.mImsRetry++;
         }
     }
-
-    @Override
-    public void sendRetrySms(SmsTracker tracker) {
-        //re-routing to ImsSMSDispatcher
-        mImsSMSDispatcher.sendRetrySms(tracker);
-    }
-
-    @Override
-    public boolean isIms() {
-        return mImsSMSDispatcher.isIms();
-    }
-
-    @Override
-    public String getImsSmsFormat() {
-        return mImsSMSDispatcher.getImsSmsFormat();
-    }
 }
index 6f202c1..c3aef21 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2008 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
index f80d822..e7a20ab 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -123,8 +122,6 @@ public class GSMPhone extends PhoneBase {
     private String mImeiSv;
     private String mVmNumber;
 
-    GsmInboundSmsHandler mGsmInboundSmsHandler;
-
     // Create Cfu (Call forward unconditional) so that dialling number &
     // mOnComplete (Message object passed by client) can be packed &
     // given as a single Cfu object as user data to RIL.
index 4520d70..345abba 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -28,11 +27,11 @@ import android.provider.Telephony.Sms.Intents;
 import android.telephony.Rlog;
 
 import com.android.internal.telephony.GsmAlphabet;
+import com.android.internal.telephony.ImsSMSDispatcher;
+import com.android.internal.telephony.InboundSmsHandler;
 import com.android.internal.telephony.PhoneBase;
 import com.android.internal.telephony.SMSDispatcher;
 import com.android.internal.telephony.SmsConstants;
-import com.android.internal.telephony.ImsSMSDispatcher;
-import com.android.internal.telephony.InboundSmsHandler;
 import com.android.internal.telephony.SmsHeader;
 import com.android.internal.telephony.SmsStorageMonitor;
 import com.android.internal.telephony.SmsUsageMonitor;
@@ -51,7 +50,6 @@ import java.util.concurrent.atomic.AtomicReference;
 public final class GsmSMSDispatcher extends SMSDispatcher {
     private static final String TAG = "GsmSMSDispatcher";
     private static final boolean VDBG = false;
-    private ImsSMSDispatcher mImsSMSDispatcher;
     protected UiccController mUiccController = null;
     private AtomicReference<IccRecords> mIccRecords = new AtomicReference<IccRecords>();
     private AtomicReference<UiccCardApplication> mUiccApplication =
@@ -61,13 +59,14 @@ public final class GsmSMSDispatcher extends SMSDispatcher {
     /** Status report received */
     private static final int EVENT_NEW_SMS_STATUS_REPORT = 100;
 
-    public GsmSMSDispatcher(PhoneBase phone, SmsStorageMonitor storageMonitor,
-            SmsUsageMonitor usageMonitor, ImsSMSDispatcher imsSMSDispatcher,
+    public GsmSMSDispatcher(PhoneBase phone, SmsUsageMonitor usageMonitor,
+            ImsSMSDispatcher imsSMSDispatcher,
             GsmInboundSmsHandler gsmInboundSmsHandler) {
-        super(phone, usageMonitor);
+        super(phone, usageMonitor, imsSMSDispatcher);
         mCi.setOnSmsStatus(this, EVENT_NEW_SMS_STATUS_REPORT, null);
-        mImsSMSDispatcher = imsSMSDispatcher;
         mGsmInboundSmsHandler = gsmInboundSmsHandler;
+        mUiccController = UiccController.getInstance();
+        mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null);
         Rlog.d(TAG, "GsmSMSDispatcher created");
     }
 
@@ -75,6 +74,7 @@ public final class GsmSMSDispatcher extends SMSDispatcher {
     public void dispose() {
         super.dispose();
         mCi.unSetOnSmsStatus(this);
+        mUiccController.unregisterForIccChanged(this);
     }
 
     @Override
@@ -155,8 +155,8 @@ public final class GsmSMSDispatcher extends SMSDispatcher {
         SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(
                 scAddr, destAddr, destPort, data, (deliveryIntent != null));
         if (pdu != null) {
-            HashMap map =  SmsTrackerMapFactory(destAddr, scAddr, destPort, data, pdu);
-            SmsTracker tracker = SmsTrackerFactory(map, sentIntent, deliveryIntent,
+            HashMap map = getSmsTrackerMap(destAddr, scAddr, destPort, data, pdu);
+            SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent,
                     getFormat());
             sendRawPdu(tracker);
         } else {
@@ -171,8 +171,8 @@ public final class GsmSMSDispatcher extends SMSDispatcher {
         SmsMessage.SubmitPdu pdu = SmsMessage.getSubmitPdu(
                 scAddr, destAddr, text, (deliveryIntent != null));
         if (pdu != null) {
-            HashMap map =  SmsTrackerMapFactory(destAddr, scAddr, text, pdu);
-            SmsTracker tracker = SmsTrackerFactory(map, sentIntent, deliveryIntent,
+            HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu);
+            SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent,
                     getFormat());
             sendRawPdu(tracker);
         } else {
@@ -196,9 +196,9 @@ public final class GsmSMSDispatcher extends SMSDispatcher {
                 message, deliveryIntent != null, SmsHeader.toByteArray(smsHeader),
                 encoding, smsHeader.languageTable, smsHeader.languageShiftTable);
         if (pdu != null) {
-            HashMap map =  SmsTrackerMapFactory(destinationAddress, scAddress,
+            HashMap map =  getSmsTrackerMap(destinationAddress, scAddress,
                     message, pdu);
-            SmsTracker tracker = SmsTrackerFactory(map, sentIntent,
+            SmsTracker tracker = getSmsTracker(map, sentIntent,
                     deliveryIntent, getFormat());
             sendRawPdu(tracker);
         } else {
@@ -263,12 +263,6 @@ public final class GsmSMSDispatcher extends SMSDispatcher {
         }
     }
 
-    @Override
-    public void sendRetrySms(SmsTracker tracker) {
-        //re-routing to ImsSMSDispatcher
-        mImsSMSDispatcher.sendRetrySms(tracker);
-    }
-
     protected UiccCardApplication getUiccCardApplication() {
         return mUiccController.getUiccCardApplication(UiccController.APP_FAM_3GPP);
     }
@@ -300,14 +294,4 @@ public final class GsmSMSDispatcher extends SMSDispatcher {
             }
         }
     }
-
-    @Override
-    public boolean isIms() {
-        return mImsSMSDispatcher.isIms();
-    }
-
-    @Override
-    public String getImsSmsFormat() {
-        return mImsSMSDispatcher.getImsSmsFormat();
-    }
 }
index 6d5ecd9..48d76c5 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
@@ -558,8 +557,9 @@ public class SmsMessage extends SmsMessageBase {
             try {
                 ret = new GsmSmsAddress(mPdu, mCur, lengthBytes);
             } catch (ParseException e) {
-                Rlog.e(LOG_TAG, e.getMessage());
                 ret = null;
+                //This is caught by createFromPdu(byte[] pdu)
+                throw new RuntimeException(e.getMessage());
             }
 
             mCur += lengthBytes;
index ae1b110..42a3ff6 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2010 The Android Open Source Project
- * Copyright (c) 2012-13, The Linux Foundation. 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.
index c7164b7..8e886bb 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2006 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.
index d9dfe72..bb944ae 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Copyright (C) 2011 The Android Open Source Project
- * Copyright (c) 2012-2013, The Linux Foundation. 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.