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;