Loading Sip call interaction

Bug:25839064
Change-Id: I517b56af83d6652d9a8d0adc3bada40266b916d6
diff --git a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
index 4277a27..edecca0 100644
--- a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
@@ -38,29 +38,44 @@
 public class CallLogInteractionsLoader extends AsyncTaskLoader<List<ContactInteraction>> {
 
     private final String[] mPhoneNumbers;
+    private final String[] mSipNumbers;
     private final int mMaxToRetrieve;
     private List<ContactInteraction> mData;
 
-    public CallLogInteractionsLoader(Context context, String[] phoneNumbers,
+    public CallLogInteractionsLoader(Context context, String[] phoneNumbers, String[] sipNumbers,
             int maxToRetrieve) {
         super(context);
         mPhoneNumbers = phoneNumbers;
+        mSipNumbers = sipNumbers;
         mMaxToRetrieve = maxToRetrieve;
     }
 
     @Override
     public List<ContactInteraction> loadInBackground() {
+        final boolean isPhoneNumbersEmpty = mPhoneNumbers == null || mPhoneNumbers.length <= 0;
+        final boolean isSipNumbersEmpty = mSipNumbers == null || mSipNumbers.length <= 0;
         if (!PermissionsUtil.hasPhonePermissions(getContext())
                 || !getContext().getPackageManager()
                         .hasSystemFeature(PackageManager.FEATURE_TELEPHONY)
-                || mPhoneNumbers == null || mPhoneNumbers.length <= 0 || mMaxToRetrieve <= 0) {
+                || (isPhoneNumbersEmpty && isSipNumbersEmpty) || mMaxToRetrieve <= 0) {
             return Collections.emptyList();
         }
 
         final List<ContactInteraction> interactions = new ArrayList<>();
-        for (String number : mPhoneNumbers) {
-            interactions.addAll(getCallLogInteractions(number));
+        if (!isPhoneNumbersEmpty) {
+            for (String number : mPhoneNumbers) {
+                final String normalizedNumber = PhoneNumberUtilsCompat.normalizeNumber(number);
+                if (!TextUtils.isEmpty(normalizedNumber)) {
+                    interactions.addAll(getCallLogInteractions(normalizedNumber));
+                }
+            }
         }
+        if (!isSipNumbersEmpty) {
+            for (String number : mSipNumbers) {
+                interactions.addAll(getCallLogInteractions(number));
+            }
+        }
+
         // Sort the call log interactions by date for duplicate removal
         Collections.sort(interactions, new Comparator<ContactInteraction>() {
             @Override
@@ -107,13 +122,8 @@
     }
 
     private List<ContactInteraction> getCallLogInteractions(String phoneNumber) {
-        final String normalizedNumber = PhoneNumberUtilsCompat.normalizeNumber(phoneNumber);
-        // If the number contains only symbols, we can skip it
-        if (TextUtils.isEmpty(normalizedNumber)) {
-            return Collections.emptyList();
-        }
         final Uri uri = Uri.withAppendedPath(Calls.CONTENT_FILTER_URI,
-                Uri.encode(normalizedNumber));
+                Uri.encode(phoneNumber));
         // Append the LIMIT clause onto the ORDER BY clause. This won't cause crashes as long
         // as we don't also set the {@link android.provider.CallLog.Calls.LIMIT_PARAM_KEY} that
         // becomes available in KK.
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 5469c2e..31af581 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -342,9 +342,6 @@
     /** Id for the background contact loader */
     private static final int LOADER_CONTACT_ID = 0;
 
-    private static final String KEY_LOADER_EXTRA_PHONES =
-            QuickContactActivity.class.getCanonicalName() + ".KEY_LOADER_EXTRA_PHONES";
-
     /** Id for the background Sms Loader */
     private static final int LOADER_SMS_ID = 1;
     private static final int MAX_SMS_RETRIEVE = 3;
@@ -366,7 +363,10 @@
     private static final int MIN_NUM_CONTACT_ENTRIES_SHOWN = 3;
     private static final int MIN_NUM_COLLAPSED_RECENT_ENTRIES_SHOWN = 3;
     private static final int CARD_ENTRY_ID_EDIT_CONTACT = -2;
-
+    private static final String KEY_LOADER_EXTRA_PHONES =
+            QuickContactActivity.class.getCanonicalName() + ".KEY_LOADER_EXTRA_PHONES";
+    private static final String KEY_LOADER_EXTRA_SIP_NUMBERS =
+            QuickContactActivity.class.getCanonicalName() + ".KEY_LOADER_EXTRA_SIP_NUMBERS";
 
     private static final int[] mRecentLoaderIds = new int[]{
         LOADER_SMS_ID,
@@ -1284,6 +1284,7 @@
     private void startInteractionLoaders(Cp2DataCardModel cp2DataCardModel) {
         final Map<String, List<DataItem>> dataItemsMap = cp2DataCardModel.dataItemsMap;
         final List<DataItem> phoneDataItems = dataItemsMap.get(Phone.CONTENT_ITEM_TYPE);
+        final List<DataItem> sipCallDataItems = dataItemsMap.get(SipAddress.CONTENT_ITEM_TYPE);
         if (phoneDataItems != null && phoneDataItems.size() == 1) {
             mOnlyOnePhoneNumber = true;
         }
@@ -1294,8 +1295,16 @@
                 phoneNumbers[i] = ((PhoneDataItem) phoneDataItems.get(i)).getNumber();
             }
         }
+        String[] sipNumbers = null;
+        if (sipCallDataItems != null) {
+            sipNumbers = new String[sipCallDataItems.size()];
+            for (int i = 0; i < sipCallDataItems.size(); ++i) {
+                sipNumbers[i] = ((SipAddressDataItem) sipCallDataItems.get(i)).getSipAddress();
+            }
+        }
         final Bundle phonesExtraBundle = new Bundle();
         phonesExtraBundle.putStringArray(KEY_LOADER_EXTRA_PHONES, phoneNumbers);
+        phonesExtraBundle.putStringArray(KEY_LOADER_EXTRA_SIP_NUMBERS, sipNumbers);
 
         Trace.beginSection("start sms loader");
         getLoaderManager().initLoader(
@@ -2494,6 +2503,7 @@
                     loader = new CallLogInteractionsLoader(
                             QuickContactActivity.this,
                             args.getStringArray(KEY_LOADER_EXTRA_PHONES),
+                            args.getStringArray(KEY_LOADER_EXTRA_SIP_NUMBERS),
                             MAX_CALL_LOG_RETRIEVE);
             }
             return loader;