Merge "Revert "[Mainline]Remove PhoneFactory.addLocalLog and PhoneFactory.localLog"" into rvc-dev am: f4e9913c27 am: cbc6f56ca6

Change-Id: I0ba60c3767b165d40265b59be9a9cfe224fe5566
diff --git a/assets/carrier_list.pb b/assets/carrier_list.pb
index 44a7056..983c7bb 100644
--- a/assets/carrier_list.pb
+++ b/assets/carrier_list.pb
Binary files differ
diff --git a/assets/carrier_list.textpb b/assets/carrier_list.textpb
index a5d8050..d494c3c 100644
--- a/assets/carrier_list.textpb
+++ b/assets/carrier_list.textpb
Binary files differ
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index 81f732b..6ff16e5 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -353,20 +353,42 @@
                 type = Sms.MESSAGE_TYPE_OUTBOX;
                 break;
         }
+
+        String address = (type == Sms.MESSAGE_TYPE_INBOX)
+                ? message.getDisplayOriginatingAddress()
+                : message.getRecipientAddress();
+
+        int index = message.getIndexOnIcc();
+        if (address == null) {
+            // The status byte of an EF_SMS record may not be correct. try to read other address
+            // type again.
+            Log.e(TAG, "convertIccToSms: EF_SMS(" + index + ")=> address=null, type=" + type
+                    + ", status=" + statusOnIcc + "(may not be correct). fallback to other type.");
+            address = (type == Sms.MESSAGE_TYPE_INBOX)
+                    ? message.getRecipientAddress()
+                    : message.getDisplayOriginatingAddress();
+
+            if (address != null) {
+                // Rely on actual PDU(address) to set type again.
+                type = (type == Sms.MESSAGE_TYPE_INBOX)
+                        ? Sms.MESSAGE_TYPE_SENT
+                        : Sms.MESSAGE_TYPE_INBOX;
+                Log.d(TAG, "convertIccToSms: new type=" + type + ", address=xxxxxx");
+            } else {
+                Log.e(TAG, "convertIccToSms: no change");
+            }
+        }
+
         // N.B.: These calls must appear in the same order as the
         // columns appear in ICC_COLUMNS.
         Object[] row = new Object[13];
         row[0] = message.getServiceCenterAddress();
-        row[1] =
-                (type == Sms.MESSAGE_TYPE_INBOX)
-                        ? message.getDisplayOriginatingAddress()
-                        : message.getRecipientAddress();
-
+        row[1] = address;
         row[2] = String.valueOf(message.getMessageClass());
         row[3] = message.getDisplayMessageBody();
         row[4] = message.getTimestampMillis();
         row[5] = statusOnIcc;
-        row[6] = message.getIndexOnIcc();
+        row[6] = index;
         row[7] = message.isStatusReportMessage();
         row[8] = "sms";
         row[9] = type;
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 4966e5a..7cc518a 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -2010,7 +2010,7 @@
             int columnIndex = c.getColumnIndex(key);
             if (columnIndex != -1) {
                 String fromCursor = c.getString(columnIndex);
-                if (!TextUtils.isEmpty(fromCursor)) {
+                if (fromCursor != null) {
                     cv.put(key, fromCursor);
                 }
             }