Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7a4b9c2 authored by guanxiongliu's avatar guanxiongliu
Browse files

Loading Sip call interaction

Bug:25839064
Change-Id: I517b56af83d6652d9a8d0adc3bada40266b916d6
parent 529c9ab6
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -38,29 +38,44 @@ import java.util.List;
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<>();
        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 @@ public class CallLogInteractionsLoader extends AsyncTaskLoader<List<ContactInter
    }

    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.
+14 −4
Original line number Diff line number Diff line
@@ -342,9 +342,6 @@ public class QuickContactActivity extends ContactsActivity
    /** 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 @@ public class QuickContactActivity extends ContactsActivity
    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 @@ public class QuickContactActivity extends ContactsActivity
    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 @@ public class QuickContactActivity extends ContactsActivity
                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 @@ public class QuickContactActivity extends ContactsActivity
                    loader = new CallLogInteractionsLoader(
                            QuickContactActivity.this,
                            args.getStringArray(KEY_LOADER_EXTRA_PHONES),
                            args.getStringArray(KEY_LOADER_EXTRA_SIP_NUMBERS),
                            MAX_CALL_LOG_RETRIEVE);
            }
            return loader;