Search in sources :

Example 1 with Entry

use of com.android.contacts.quickcontact.ExpandingEntryCardView.Entry in project packages_apps_Contacts by AOKP.

the class QuickContactActivity method buildAboutCardEntries.

private List<List<Entry>> buildAboutCardEntries(Map<String, List<DataItem>> dataItemsMap) {
    final List<List<Entry>> aboutCardEntries = new ArrayList<>();
    for (String mimetype : SORTED_ABOUT_CARD_MIMETYPES) {
        final List<DataItem> mimeTypeItems = dataItemsMap.get(mimetype);
        if (mimeTypeItems == null) {
            continue;
        }
        // Set aboutCardTitleOut = null, since SORTED_ABOUT_CARD_MIMETYPES doesn't contain
        // the name mimetype.
        final List<Entry> aboutEntries = dataItemsToEntries(mimeTypeItems, /* aboutCardTitleOut = */
        null);
        if (aboutEntries.size() > 0) {
            aboutCardEntries.add(aboutEntries);
        }
    }
    return aboutCardEntries;
}
Also used : Entry(com.android.contacts.quickcontact.ExpandingEntryCardView.Entry) PhoneDataItem(com.android.contacts.common.model.dataitem.PhoneDataItem) EventDataItem(com.android.contacts.common.model.dataitem.EventDataItem) OrganizationDataItem(com.android.contacts.common.model.dataitem.OrganizationDataItem) RelationDataItem(com.android.contacts.common.model.dataitem.RelationDataItem) StructuredNameDataItem(com.android.contacts.common.model.dataitem.StructuredNameDataItem) NoteDataItem(com.android.contacts.common.model.dataitem.NoteDataItem) DataItem(com.android.contacts.common.model.dataitem.DataItem) SipAddressDataItem(com.android.contacts.common.model.dataitem.SipAddressDataItem) EmailDataItem(com.android.contacts.common.model.dataitem.EmailDataItem) NicknameDataItem(com.android.contacts.common.model.dataitem.NicknameDataItem) StructuredPostalDataItem(com.android.contacts.common.model.dataitem.StructuredPostalDataItem) WebsiteDataItem(com.android.contacts.common.model.dataitem.WebsiteDataItem) GroupMembershipDataItem(com.android.contacts.common.model.dataitem.GroupMembershipDataItem) ImDataItem(com.android.contacts.common.model.dataitem.ImDataItem) ArrayList(java.util.ArrayList) ColorStateList(android.content.res.ColorStateList) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) SpannableString(android.text.SpannableString)

Example 2 with Entry

use of com.android.contacts.quickcontact.ExpandingEntryCardView.Entry in project packages_apps_Contacts by AOKP.

the class QuickContactActivity method gPlusOrHangoutsDataItemsToEntries.

/**
 * G+ and Hangout entries are unique in that a single ExpandingEntryCardView.Entry consists
 * of two data items. This method attempts to build each entry using the two data items if
 * they are available. If there are more or less than two data items, a fall back is used
 * and each data item gets its own entry.
 */
private List<Entry> gPlusOrHangoutsDataItemsToEntries(List<DataItem> dataItems) {
    final List<Entry> entries = new ArrayList<>();
    final Map<Long, List<DataItem>> buckets = new HashMap<>();
    // Put the data items into buckets based on the raw contact id
    for (DataItem dataItem : dataItems) {
        List<DataItem> bucket = buckets.get(dataItem.getRawContactId());
        if (bucket == null) {
            bucket = new ArrayList<>();
            buckets.put(dataItem.getRawContactId(), bucket);
        }
        bucket.add(dataItem);
    }
    // entry, otherwise fall back to the normal entry.
    for (List<DataItem> bucket : buckets.values()) {
        if (bucket.size() == 2) {
            // Use the pair to build an entry
            final Entry entry = dataItemToEntry(bucket.get(0), /* secondDataItem = */
            bucket.get(1), this, mContactData, /* aboutCardName = */
            null);
            if (entry != null) {
                entries.add(entry);
            }
        } else {
            for (DataItem dataItem : bucket) {
                final Entry entry = dataItemToEntry(dataItem, /* secondDataItem = */
                null, this, mContactData, /* aboutCardName = */
                null);
                if (entry != null) {
                    entries.add(entry);
                }
            }
        }
    }
    return entries;
}
Also used : Entry(com.android.contacts.quickcontact.ExpandingEntryCardView.Entry) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) PhoneDataItem(com.android.contacts.common.model.dataitem.PhoneDataItem) EventDataItem(com.android.contacts.common.model.dataitem.EventDataItem) OrganizationDataItem(com.android.contacts.common.model.dataitem.OrganizationDataItem) RelationDataItem(com.android.contacts.common.model.dataitem.RelationDataItem) StructuredNameDataItem(com.android.contacts.common.model.dataitem.StructuredNameDataItem) NoteDataItem(com.android.contacts.common.model.dataitem.NoteDataItem) DataItem(com.android.contacts.common.model.dataitem.DataItem) SipAddressDataItem(com.android.contacts.common.model.dataitem.SipAddressDataItem) EmailDataItem(com.android.contacts.common.model.dataitem.EmailDataItem) NicknameDataItem(com.android.contacts.common.model.dataitem.NicknameDataItem) StructuredPostalDataItem(com.android.contacts.common.model.dataitem.StructuredPostalDataItem) WebsiteDataItem(com.android.contacts.common.model.dataitem.WebsiteDataItem) GroupMembershipDataItem(com.android.contacts.common.model.dataitem.GroupMembershipDataItem) ImDataItem(com.android.contacts.common.model.dataitem.ImDataItem) ArrayList(java.util.ArrayList) ColorStateList(android.content.res.ColorStateList) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList)

Example 3 with Entry

use of com.android.contacts.quickcontact.ExpandingEntryCardView.Entry in project packages_apps_Contacts by AOKP.

the class QuickContactActivity method initializeNoContactDetailCard.

/**
 * Create a card that shows "Add email" and "Add phone number" entries in grey.
 */
private void initializeNoContactDetailCard() {
    final Drawable phoneIcon = getResources().getDrawable(R.drawable.ic_phone_24dp).mutate();
    final Entry phonePromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT, phoneIcon, getString(R.string.quickcontact_add_phone_number), /* subHeader = */
    null, /* subHeaderIcon = */
    null, /* text = */
    null, /* textIcon = */
    null, /* primaryContentDescription = */
    null, getEditContactIntent(), /* alternateIcon = */
    null, /* alternateIntent = */
    null, /* alternateContentDescription = */
    null, /* shouldApplyColor = */
    true, /* isEditable = */
    false, /* EntryContextMenuInfo = */
    null, /* thirdIcon = */
    null, /* thirdIntent = */
    null, /* thirdContentDescription = */
    null, /* thirdAction = */
    Entry.ACTION_NONE, /* thirdExtras = */
    null, R.drawable.ic_phone_24dp);
    final Drawable emailIcon = getResources().getDrawable(R.drawable.ic_email_24dp).mutate();
    final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT, emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */
    null, /* subHeaderIcon = */
    null, /* text = */
    null, /* textIcon = */
    null, /* primaryContentDescription = */
    null, getEditContactIntent(), /* alternateIcon = */
    null, /* alternateIntent = */
    null, /* alternateContentDescription = */
    null, /* shouldApplyColor = */
    true, /* isEditable = */
    false, /* EntryContextMenuInfo = */
    null, /* thirdIcon = */
    null, /* thirdIntent = */
    null, /* thirdContentDescription = */
    null, /* thirdAction = */
    Entry.ACTION_NONE, /* thirdExtras = */
    null, R.drawable.ic_email_24dp);
    final List<List<Entry>> promptEntries = new ArrayList<>();
    promptEntries.add(new ArrayList<Entry>(1));
    promptEntries.add(new ArrayList<Entry>(1));
    promptEntries.get(0).add(phonePromptEntry);
    promptEntries.get(1).add(emailPromptEntry);
    final int subHeaderTextColor = getResources().getColor(R.color.quickcontact_entry_sub_header_text_color);
    final PorterDuffColorFilter greyColorFilter = new PorterDuffColorFilter(subHeaderTextColor, PorterDuff.Mode.SRC_ATOP);
    mNoContactDetailsCard.initialize(promptEntries, 2, /* isExpanded = */
    true, /* isAlwaysExpanded = */
    true, mExpandingEntryCardViewListener, mScroller);
    mNoContactDetailsCard.setVisibility(View.VISIBLE);
    mNoContactDetailsCard.setEntryHeaderColor(subHeaderTextColor);
    mNoContactDetailsCard.setColorAndFilter(subHeaderTextColor, greyColorFilter);
}
Also used : Entry(com.android.contacts.quickcontact.ExpandingEntryCardView.Entry) ColorDrawable(android.graphics.drawable.ColorDrawable) Drawable(android.graphics.drawable.Drawable) BitmapDrawable(android.graphics.drawable.BitmapDrawable) LetterTileDrawable(com.android.contacts.common.lettertiles.LetterTileDrawable) ArrayList(java.util.ArrayList) ColorStateList(android.content.res.ColorStateList) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter)

Example 4 with Entry

use of com.android.contacts.quickcontact.ExpandingEntryCardView.Entry in project packages_apps_Contacts by AOKP.

the class QuickContactActivity method populateContactAndAboutCard.

private void populateContactAndAboutCard(Cp2DataCardModel cp2DataCardModel, boolean shouldAddPhoneticName) {
    mCachedCp2DataCardModel = cp2DataCardModel;
    if (mHasIntentLaunched || cp2DataCardModel == null) {
        return;
    }
    Trace.beginSection("bind contact card");
    final List<List<Entry>> contactCardEntries = cp2DataCardModel.contactCardEntries;
    final List<List<Entry>> aboutCardEntries = cp2DataCardModel.aboutCardEntries;
    final String customAboutCardName = cp2DataCardModel.customAboutCardName;
    if (contactCardEntries.size() > 0) {
        final boolean firstEntriesArePrioritizedMimeType = !TextUtils.isEmpty(mExtraPrioritizedMimeType) && mCachedCp2DataCardModel.dataItemsMap.containsKey(mExtraPrioritizedMimeType) && mCachedCp2DataCardModel.dataItemsMap.get(mExtraPrioritizedMimeType).size() != 0;
        mContactCard.initialize(contactCardEntries, /* numInitialVisibleEntries = */
        MIN_NUM_CONTACT_ENTRIES_SHOWN, /* isExpanded = */
        mContactCard.isExpanded(), /* isAlwaysExpanded = */
        false, mExpandingEntryCardViewListener, mScroller, firstEntriesArePrioritizedMimeType);
        mContactCard.setVisibility(View.VISIBLE);
    } else {
        mContactCard.setVisibility(View.GONE);
    }
    Trace.endSection();
    Trace.beginSection("bind about card");
    // Phonetic name is not a data item, so the entry needs to be created separately
    // But if mCachedCp2DataCardModel is passed to this method (e.g. returning from editor
    // without saving any changes), then it should include phoneticName and the phoneticName
    // shouldn't be changed. If this is the case, we shouldn't add it again. b/27459294
    final String phoneticName = mContactData.getPhoneticName();
    if (shouldAddPhoneticName && !TextUtils.isEmpty(phoneticName)) {
        Entry phoneticEntry = new Entry(/* viewId = */
        -1, /* icon = */
        null, getResources().getString(R.string.name_phonetic), phoneticName, /* subHeaderIcon = */
        null, /* text = */
        null, /* textIcon = */
        null, /* primaryContentDescription = */
        null, /* intent = */
        null, /* alternateIcon = */
        null, /* alternateIntent = */
        null, /* alternateContentDescription = */
        null, /* shouldApplyColor = */
        false, /* isEditable = */
        false, /* EntryContextMenuInfo = */
        new EntryContextMenuInfo(phoneticName, getResources().getString(R.string.name_phonetic), /* mimeType = */
        null, /* id = */
        -1, /* isPrimary = */
        false), /* thirdIcon = */
        null, /* thirdIntent = */
        null, /* thirdContentDescription = */
        null, /* thirdAction = */
        Entry.ACTION_NONE, /* thirdExtras = */
        null, /* iconResourceId = */
        0);
        List<Entry> phoneticList = new ArrayList<>();
        phoneticList.add(phoneticEntry);
        // Phonetic name comes after nickname. Check to see if the first entry type is nickname
        if (aboutCardEntries.size() > 0 && aboutCardEntries.get(0).get(0).getHeader().equals(getResources().getString(R.string.header_nickname_entry))) {
            aboutCardEntries.add(1, phoneticList);
        } else {
            aboutCardEntries.add(0, phoneticList);
        }
    }
    if (!TextUtils.isEmpty(customAboutCardName)) {
        mAboutCard.setTitle(customAboutCardName);
    }
    mAboutCard.initialize(aboutCardEntries, /* numInitialVisibleEntries = */
    1, /* isExpanded = */
    true, /* isAlwaysExpanded = */
    true, mExpandingEntryCardViewListener, mScroller);
    if (contactCardEntries.size() == 0 && aboutCardEntries.size() == 0) {
        initializeNoContactDetailCard();
    } else {
        mNoContactDetailsCard.setVisibility(View.GONE);
    }
    // card if it has entries. Otherwise About card visibility will be set in bindRecentData()
    if (isAllRecentDataLoaded() && aboutCardEntries.size() > 0) {
        mAboutCard.setVisibility(View.VISIBLE);
    }
    Trace.endSection();
}
Also used : EntryContextMenuInfo(com.android.contacts.quickcontact.ExpandingEntryCardView.EntryContextMenuInfo) Entry(com.android.contacts.quickcontact.ExpandingEntryCardView.Entry) ArrayList(java.util.ArrayList) ColorStateList(android.content.res.ColorStateList) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList) SpannableString(android.text.SpannableString)

Example 5 with Entry

use of com.android.contacts.quickcontact.ExpandingEntryCardView.Entry in project packages_apps_Contacts by AOKP.

the class QuickContactActivity method generateDataModelFromContact.

/**
 * Builds the {@link DataItem}s Map out of the Contact.
 * @param data The contact to build the data from.
 * @return A pair containing a list of data items sorted within mimetype and sorted
 *  amongst mimetype. The map goes from mimetype string to the sorted list of data items within
 *  mimetype
 */
private Cp2DataCardModel generateDataModelFromContact(Contact data) {
    Trace.beginSection("Build data items map");
    final Map<String, List<DataItem>> dataItemsMap = new HashMap<>();
    final ResolveCache cache = ResolveCache.getInstance(this);
    for (RawContact rawContact : data.getRawContacts()) {
        for (DataItem dataItem : rawContact.getDataItems()) {
            dataItem.setRawContactId(rawContact.getId());
            final String mimeType = dataItem.getMimeType();
            if (mimeType == null)
                continue;
            final AccountType accountType = rawContact.getAccountType(this);
            final DataKind dataKind = AccountTypeManager.getInstance(this).getKindOrFallback(accountType, mimeType);
            if (dataKind == null)
                continue;
            dataItem.setDataKind(dataKind);
            final boolean hasData = !TextUtils.isEmpty(dataItem.buildDataString(this, dataKind));
            if (isMimeExcluded(mimeType) || !hasData)
                continue;
            List<DataItem> dataItemListByType = dataItemsMap.get(mimeType);
            if (dataItemListByType == null) {
                dataItemListByType = new ArrayList<>();
                dataItemsMap.put(mimeType, dataItemListByType);
            }
            dataItemListByType.add(dataItem);
        }
    }
    Trace.endSection();
    Trace.beginSection("sort within mimetypes");
    /*
         * Sorting is a multi part step. The end result is to a have a sorted list of the most
         * used data items, one per mimetype. Then, within each mimetype, the list of data items
         * for that type is also sorted, based off of {super primary, primary, times used} in that
         * order.
         */
    final List<List<DataItem>> dataItemsList = new ArrayList<>();
    for (List<DataItem> mimeTypeDataItems : dataItemsMap.values()) {
        // Remove duplicate data items
        Collapser.collapseList(mimeTypeDataItems, this);
        // Sort within mimetype
        Collections.sort(mimeTypeDataItems, mWithinMimeTypeDataItemComparator);
        // Add to the list of data item lists
        dataItemsList.add(mimeTypeDataItems);
    }
    Trace.endSection();
    Trace.beginSection("sort amongst mimetypes");
    // Sort amongst mimetypes to bubble up the top data items for the contact card
    Collections.sort(dataItemsList, mAmongstMimeTypeDataItemComparator);
    Trace.endSection();
    Trace.beginSection("cp2 data items to entries");
    final List<List<Entry>> contactCardEntries = new ArrayList<>();
    final List<List<Entry>> aboutCardEntries = buildAboutCardEntries(dataItemsMap);
    final MutableString aboutCardName = new MutableString();
    for (int i = 0; i < dataItemsList.size(); ++i) {
        final List<DataItem> dataItemsByMimeType = dataItemsList.get(i);
        final DataItem topDataItem = dataItemsByMimeType.get(0);
        if (SORTED_ABOUT_CARD_MIMETYPES.contains(topDataItem.getMimeType())) {
            // About card mimetypes are built in buildAboutCardEntries, skip here
            continue;
        } else {
            List<Entry> contactEntries = dataItemsToEntries(dataItemsList.get(i), aboutCardName);
            if (contactEntries.size() > 0) {
                contactCardEntries.add(contactEntries);
            }
        }
    }
    Trace.endSection();
    final Cp2DataCardModel dataModel = new Cp2DataCardModel();
    dataModel.customAboutCardName = aboutCardName.value;
    dataModel.aboutCardEntries = aboutCardEntries;
    dataModel.contactCardEntries = contactCardEntries;
    dataModel.dataItemsMap = dataItemsMap;
    return dataModel;
}
Also used : ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) PhoneDataItem(com.android.contacts.common.model.dataitem.PhoneDataItem) EventDataItem(com.android.contacts.common.model.dataitem.EventDataItem) OrganizationDataItem(com.android.contacts.common.model.dataitem.OrganizationDataItem) RelationDataItem(com.android.contacts.common.model.dataitem.RelationDataItem) StructuredNameDataItem(com.android.contacts.common.model.dataitem.StructuredNameDataItem) NoteDataItem(com.android.contacts.common.model.dataitem.NoteDataItem) DataItem(com.android.contacts.common.model.dataitem.DataItem) SipAddressDataItem(com.android.contacts.common.model.dataitem.SipAddressDataItem) EmailDataItem(com.android.contacts.common.model.dataitem.EmailDataItem) NicknameDataItem(com.android.contacts.common.model.dataitem.NicknameDataItem) StructuredPostalDataItem(com.android.contacts.common.model.dataitem.StructuredPostalDataItem) WebsiteDataItem(com.android.contacts.common.model.dataitem.WebsiteDataItem) GroupMembershipDataItem(com.android.contacts.common.model.dataitem.GroupMembershipDataItem) ImDataItem(com.android.contacts.common.model.dataitem.ImDataItem) DataKind(com.android.contacts.common.model.dataitem.DataKind) ArrayList(java.util.ArrayList) SpannableString(android.text.SpannableString) AccountType(com.android.contacts.common.model.account.AccountType) Entry(com.android.contacts.quickcontact.ExpandingEntryCardView.Entry) RawContact(com.android.contacts.common.model.RawContact) ColorStateList(android.content.res.ColorStateList) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList)

Aggregations

Entry (com.android.contacts.quickcontact.ExpandingEntryCardView.Entry)6 ColorStateList (android.content.res.ColorStateList)5 ImmutableList (com.google.common.collect.ImmutableList)5 ArrayList (java.util.ArrayList)5 List (java.util.List)5 SpannableString (android.text.SpannableString)4 EmailDataItem (com.android.contacts.common.model.dataitem.EmailDataItem)4 EventDataItem (com.android.contacts.common.model.dataitem.EventDataItem)4 GroupMembershipDataItem (com.android.contacts.common.model.dataitem.GroupMembershipDataItem)4 ImDataItem (com.android.contacts.common.model.dataitem.ImDataItem)4 NicknameDataItem (com.android.contacts.common.model.dataitem.NicknameDataItem)4 NoteDataItem (com.android.contacts.common.model.dataitem.NoteDataItem)4 OrganizationDataItem (com.android.contacts.common.model.dataitem.OrganizationDataItem)4 PhoneDataItem (com.android.contacts.common.model.dataitem.PhoneDataItem)4 RelationDataItem (com.android.contacts.common.model.dataitem.RelationDataItem)4 SipAddressDataItem (com.android.contacts.common.model.dataitem.SipAddressDataItem)4 StructuredNameDataItem (com.android.contacts.common.model.dataitem.StructuredNameDataItem)4 StructuredPostalDataItem (com.android.contacts.common.model.dataitem.StructuredPostalDataItem)4 WebsiteDataItem (com.android.contacts.common.model.dataitem.WebsiteDataItem)4 DataItem (com.android.contacts.common.model.dataitem.DataItem)3