diff options
Diffstat (limited to 'java/com/android/contacts/common/list/ContactEntryListAdapter.java')
-rw-r--r-- | java/com/android/contacts/common/list/ContactEntryListAdapter.java | 58 |
1 files changed, 44 insertions, 14 deletions
diff --git a/java/com/android/contacts/common/list/ContactEntryListAdapter.java b/java/com/android/contacts/common/list/ContactEntryListAdapter.java index 18bbae382..7335297e0 100644 --- a/java/com/android/contacts/common/list/ContactEntryListAdapter.java +++ b/java/com/android/contacts/common/list/ContactEntryListAdapter.java @@ -26,7 +26,6 @@ import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Directory; import android.text.TextUtils; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -39,7 +38,11 @@ import com.android.contacts.common.ContactsUtils; import com.android.contacts.common.R; import com.android.contacts.common.compat.DirectoryCompat; import com.android.contacts.common.util.SearchUtil; +import com.android.dialer.common.LogUtil; import com.android.dialer.compat.CompatUtils; +import com.android.dialer.configprovider.ConfigProviderBindings; +import com.android.dialer.logging.InteractionEvent; +import com.android.dialer.logging.Logger; import java.util.HashSet; /** @@ -53,7 +56,6 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { */ public static final boolean LOCAL_INVISIBLE_DIRECTORY_ENABLED = false; - private static final String TAG = "ContactEntryListAdapter"; private int mDisplayOrder; private int mSortOrder; @@ -80,6 +82,8 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { private ContactListFilter mFilter; private boolean mDarkTheme = false; + public static final int SUGGESTIONS_LOADER_ID = 0; + /** Resource used to provide header-text for default filter. */ private CharSequence mDefaultFilterHeaderText; @@ -128,9 +132,22 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { } protected void addPartitions() { + if (ConfigProviderBindings.get(getContext()).getBoolean("p13n_ranker_should_enable", false)) { + addPartition(createSuggestionsDirectoryPartition()); + } addPartition(createDefaultDirectoryPartition()); } + protected DirectoryPartition createSuggestionsDirectoryPartition() { + DirectoryPartition partition = new DirectoryPartition(true, true); + partition.setDirectoryId(SUGGESTIONS_LOADER_ID); + partition.setDirectoryType(getContext().getString(R.string.contact_suggestions)); + partition.setPriorityDirectory(true); + partition.setPhotoSupported(true); + partition.setLabel(getContext().getString(R.string.local_suggestions_search_label)); + return partition; + } + protected DirectoryPartition createDefaultDirectoryPartition() { DirectoryPartition partition = new DirectoryPartition(true, true); partition.setDirectoryId(Directory.DEFAULT); @@ -243,6 +260,11 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { } else { mUpperCaseQueryString = SearchUtil.cleanStartAndEndOfSearchQuery(queryString.toUpperCase()); } + + // Enable default partition header if in search mode (including zero-suggest). + if (mQueryString != null) { + setDefaultPartitionHeader(true); + } } public String getUpperCaseQueryString() { @@ -354,9 +376,9 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { if (cursor.getCount() == 0) { // Directory table must have at least local directory, without which this adapter will // enter very weird state. - Log.e( - TAG, - "Directory search loader returned an empty cursor, which implies we have " + LogUtil.i( + "ContactEntryListAdapter.changeDirectories", + "directory search loader returned an empty cursor, which implies we have " + "no directory entries.", new RuntimeException()); return; @@ -529,22 +551,27 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { return false; } - /** Changes visibility parameters for the default directory partition. */ - public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) { + /** Configures visibility parameters for the directory partitions. */ + public void configurePartitionsVisibility(boolean isInSearchMode) { + for (int i = 0; i < getPartitionCount(); i++) { + setShowIfEmpty(i, false); + setHasHeader(i, isInSearchMode); + } + } + + // Sets header for the default partition. + private void setDefaultPartitionHeader(boolean setHeader) { + // Iterate in reverse here to ensure the first DEFAULT directory has header. + // Both "Suggestions" and "All Contacts" directories have DEFAULT id. int defaultPartitionIndex = -1; - int count = getPartitionCount(); - for (int i = 0; i < count; i++) { + for (int i = getPartitionCount() - 1; i >= 0; i--) { Partition partition = getPartition(i); if (partition instanceof DirectoryPartition && ((DirectoryPartition) partition).getDirectoryId() == Directory.DEFAULT) { defaultPartitionIndex = i; - break; } } - if (defaultPartitionIndex != -1) { - setShowIfEmpty(defaultPartitionIndex, showIfEmpty); - setHasHeader(defaultPartitionIndex, hasHeader); - } + setHasHeader(defaultPartitionIndex, setHeader); } @Override @@ -678,6 +705,9 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter { // mimetype here is reasonable. quickContact.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE); } + Logger.get(mContext) + .logQuickContactOnTouch( + quickContact, InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_SEARCH, true); if (photoId != 0 || photoUriColumn == -1) { getPhotoLoader().loadThumbnail(quickContact, photoId, mDarkTheme, mCircularPhotos, null); |