Showing contact count above the contact list
Change-Id: I5eb7632660254aa176129a01c1db490941ff521a
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 0f95779..c963b83 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -22,11 +22,9 @@
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
-import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ListView;
import android.widget.TextView;
/**
@@ -119,10 +117,42 @@
@Override
protected View createView(LayoutInflater inflater, ViewGroup container) {
View view = super.createView(inflater, container);
- getListView().addHeaderView(inflater.inflate(R.layout.total_contacts, null, false));
+ if (!isSearchResultsMode()) {
+ // In the search-results mode the count is shown in the fat header above the list
+ getListView().addHeaderView(inflater.inflate(R.layout.total_contacts, null, false));
+ }
return view;
}
+ @Override
+ protected void showCount(Cursor data) {
+ int count = data.getCount();
+ if (isSearchMode()) {
+ TextView textView = (TextView) getView().findViewById(R.id.totalContactsText);
+ // TODO
+ // if (TextUtils.isEmpty(getQueryString())) {
+ String text = getQuantityText(count, R.string.listFoundAllContactsZero,
+ R.plurals.searchFoundContacts);
+ textView.setText(text);
+ }
+ else if (isSearchResultsMode()) {
+ TextView countText = (TextView)getView().findViewById(R.id.search_results_found);
+ String text = getQuantityText(data.getCount(),
+ R.string.listFoundAllContactsZero, R.plurals.listFoundAllContacts);
+ countText.setText(text);
+ } else {
+ // TODO
+ // if (contactsListActivity.mDisplayOnlyPhones) {
+ // text = contactsListActivity.getQuantityText(count,
+ // R.string.listTotalPhoneContactsZero,
+ // R.plurals.listTotalPhoneContacts);
+ TextView textView = (TextView)getView().findViewById(R.id.totalContactsText);
+ String text = getQuantityText(count, R.string.listTotalAllContactsZero,
+ R.plurals.listTotalAllContacts);
+ textView.setText(text);
+ }
+ }
+
public void setEditMode(boolean flag) {
mEditMode = flag;
}
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 175d352..9a3bf1d 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -90,6 +90,12 @@
protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
protected abstract T createListAdapter();
+
+ /**
+ * @param position Please note that the position is already adjusted for
+ * header views, so "0" means the first list item below header
+ * views.
+ */
protected abstract void onItemClick(int position, long id);
public T getAdapter() {
@@ -105,6 +111,10 @@
((ContactsListActivity)getActivity()).setupListView(mAdapter, mListView);
}
+ public View getView() {
+ return mView;
+ }
+
public ListView getListView() {
return mListView;
}
@@ -122,32 +132,17 @@
@Override
protected void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- if (data != null && isSearchResultsMode()) {
- TextView foundContactsText = (TextView)mView.findViewById(R.id.search_results_found);
- String text = getQuantityText(data.getCount(),
- R.string.listFoundAllContactsZero, R.plurals.listFoundAllContacts);
- foundContactsText.setText(text);
-
- TextView totalContacts = (TextView) mView.findViewById(R.id.totalContactsText);
-
- int count = data.getCount();
-
- if (isSearchMode()
- && !TextUtils.isEmpty(getQueryString())) {
- text = getQuantityText(count, R.string.listFoundAllContactsZero,
- R.plurals.searchFoundContacts);
- } else {
- // TODO
-// if (contactsListActivity.mDisplayOnlyPhones) {
-// text = contactsListActivity.getQuantityText(count,
-// R.string.listTotalPhoneContactsZero, R.plurals.listTotalPhoneContacts);
-// } else {
- text = getQuantityText(count,
- R.string.listTotalAllContactsZero, R.plurals.listTotalAllContacts);
-// }
- }
- totalContacts.setText(text);
+ if (data == null) {
+ return;
}
+
+ showCount(data);
+ }
+
+ /**
+ * Shows the count of entries included in the list.
+ */
+ protected void showCount(Cursor data) {
}
protected void reloadData() {
@@ -348,7 +343,10 @@
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
hideSoftKeyboard();
- onItemClick(position, id);
+ int adjPosition = position - mListView.getHeaderViewsCount();
+ if (adjPosition >= 0) {
+ onItemClick(adjPosition, id);
+ }
}
private void hideSoftKeyboard() {
diff --git a/src/com/android/contacts/widget/PinnedHeaderListView.java b/src/com/android/contacts/widget/PinnedHeaderListView.java
index 9562714..80db26f 100644
--- a/src/com/android/contacts/widget/PinnedHeaderListView.java
+++ b/src/com/android/contacts/widget/PinnedHeaderListView.java
@@ -87,6 +87,8 @@
private OnScrollListener mOnScrollListener;
+ private boolean mHeaderViewConfigured;
+
public PinnedHeaderListView(Context context) {
super(context);
}
@@ -110,6 +112,7 @@
if (mHeaderView != null) {
setFadingEdgeLength(0);
}
+ mHeaderViewConfigured = false;
requestLayout();
}
@@ -131,6 +134,9 @@
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mHeaderView != null) {
+ if (!mHeaderViewConfigured) {
+ configureHeaderView(getFirstVisiblePosition() - getHeaderViewsCount());
+ }
measureChild(mHeaderView, widthMeasureSpec, heightMeasureSpec);
mHeaderViewWidth = mHeaderView.getMeasuredWidth();
mHeaderViewHeight = mHeaderView.getMeasuredHeight();
@@ -141,7 +147,9 @@
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (mHeaderView != null) {
- configureHeaderView(getFirstVisiblePosition() - getHeaderViewsCount());
+ if (!mHeaderViewConfigured) {
+ configureHeaderView(getFirstVisiblePosition() - getHeaderViewsCount());
+ }
mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight);
}
}
@@ -198,6 +206,7 @@
break;
}
}
+ mHeaderViewConfigured = true;
}
@Override