Fixing search in the contact shortcut maker
Change-Id: Ie32c35b01d3fcf7c5b4858c5d46268dc659c63d7
diff --git a/res/menu/search.xml b/res/menu/search.xml
new file mode 100644
index 0000000..4e2e8e3
--- /dev/null
+++ b/res/menu/search.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item
+ android:id="@+id/menu_search"
+ android:icon="@android:drawable/ic_menu_search"
+ android:title="@string/menu_search" />
+
+</menu>
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 683fea4..093aec6 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -88,7 +88,6 @@
private static final int SUBACTIVITY_VIEW_CONTACT = 2;
private static final int SUBACTIVITY_DISPLAY_GROUP = 3;
private static final int SUBACTIVITY_SEARCH = 4;
- protected static final int SUBACTIVITY_FILTER = 5;
private static final String[] RAW_CONTACTS_PROJECTION = new String[] {
RawContacts._ID, //0
@@ -260,6 +259,7 @@
ContactPickerFragment fragment = new ContactPickerFragment();
fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+ fragment.setSearchMode(mRequest.isSearchMode());
mListFragment = fragment;
break;
}
@@ -267,7 +267,7 @@
case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
- fragment.setCreateContactEnabled(true);
+ fragment.setCreateContactEnabled(!mRequest.isSearchMode());
fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
mListFragment = fragment;
break;
@@ -276,8 +276,9 @@
case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
ContactPickerFragment fragment = new ContactPickerFragment();
fragment.setOnContactPickerActionListener(new ContactPickerActionListener());
- fragment.setCreateContactEnabled(true);
+ fragment.setCreateContactEnabled(!mRequest.isSearchMode());
fragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
+ fragment.setSearchMode(mRequest.isSearchMode());
fragment.setShortcutRequested(true);
mListFragment = fragment;
break;
@@ -326,6 +327,7 @@
default:
throw new IllegalStateException("Invalid action code: " + mActionCode);
}
+ mListFragment.setContactsRequest(mRequest);
}
private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
@@ -453,19 +455,26 @@
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
- // TODO what other actions need the menu?
+ MenuInflater inflater = getMenuInflater();
if (mActionCode == ContactsRequest.ACTION_DEFAULT ||
mActionCode == ContactsRequest.ACTION_STREQUENT) {
- MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.list, menu);
+ return true;
+ } else if (!mListFragment.isSearchMode()) {
+ inflater.inflate(R.menu.search, menu);
+ return true;
+ } else {
+ return false;
}
- return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
- menu.findItem(R.id.menu_display_groups).setVisible(
- mActionCode == ContactsRequest.ACTION_DEFAULT);
+ MenuItem displayGroups = menu.findItem(R.id.menu_display_groups);
+ if (displayGroups != null) {
+ displayGroups.setVisible(
+ mActionCode == ContactsRequest.ACTION_DEFAULT);
+ }
return true;
}
@@ -513,14 +522,7 @@
if (globalSearch) {
super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
} else {
-// if (!mSearchMode && (mMode & MODE_MASK_NO_FILTER) == 0) {
-// if ((mMode & MODE_MASK_PICKER) != 0) {
-// ContactsSearchManager.startSearchForResult(this, initialQuery,
-// SUBACTIVITY_FILTER, null);
-// } else {
- ContactsSearchManager.startSearch(this, initialQuery, mRequest);
-// }
-// }
+ mListFragment.startSearch(initialQuery);
}
}
@@ -722,16 +724,17 @@
AccountSelectionUtil.doImport(this, resId, (size == 1 ? accountList.get(0) : null));
}
-// @Override
-// protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-// switch (requestCode) {
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ switch (requestCode) {
// case SUBACTIVITY_NEW_CONTACT:
// if (resultCode == RESULT_OK) {
-//// returnPickerResult(null, data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME),
-//// data.getData());
+// returnPickerResult(null, data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME),
+// data.getData());
+// setRe
// }
// break;
-//
+
// case SUBACTIVITY_VIEW_CONTACT:
// if (resultCode == RESULT_OK) {
// mAdapter.notifyDataSetChanged();
@@ -743,20 +746,23 @@
//// mJustCreated = true;
// break;
//
-// case SUBACTIVITY_FILTER:
+ case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_FILTER:
// case SUBACTIVITY_SEARCH:
-// // Pass through results of filter or search UI
-// if (resultCode == RESULT_OK) {
-// setResult(RESULT_OK, data);
-// finish();
-// } else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
+ // Pass through results of filter or search UI
+ if (resultCode == RESULT_OK) {
+ setResult(RESULT_OK, data);
+ finish();
+ }
+
+// TODO fix or remove multipicker code
+// else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
// // Finish the activity if the sub activity was canceled as back key is used
// // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
// finish();
// }
// break;
-// }
-// }
+ }
+ }
@Override
public boolean onContextItemSelected(MenuItem item) {
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 44c50af..8c2abb3 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -19,6 +19,7 @@
import com.android.contacts.ContactEntryListView;
import com.android.contacts.ContactListEmptyView;
import com.android.contacts.ContactPhotoLoader;
+import com.android.contacts.ContactsSearchManager;
import com.android.contacts.R;
import com.android.contacts.ui.ContactsPreferences;
import com.android.contacts.widget.ContextMenuAdapter;
@@ -76,6 +77,7 @@
extends LoaderManagingFragment<Cursor>
implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener {
+ public static final int ACTIVITY_REQUEST_CODE_FILTER = 1;
private static final String TAG = "ContactEntryListFragment";
@@ -122,6 +124,8 @@
*/
private boolean mInitialLoadComplete;
+ private ContactsRequest mRequest;
+
private static final class DirectoryQuery {
public static final Uri URI = Directory.CONTENT_URI;
public static final String ORDER_BY = Directory._ID;
@@ -170,6 +174,20 @@
protected void onInitializeLoaders() {
}
+ /**
+ * Returns the parsed intent that started the activity hosting this fragment.
+ */
+ public ContactsRequest getContactsRequest() {
+ return mRequest;
+ }
+
+ /**
+ * Sets a parsed intent that started the activity hosting this fragment.
+ */
+ public void setContactsRequest(ContactsRequest request) {
+ mRequest = request;
+ }
+
@Override
public void onStart() {
if (mContactsPrefs == null) {
@@ -939,6 +957,14 @@
return telephonyManager.hasIccCard();
}
+ /**
+ * Processes a user request to start search. This may be triggered by the
+ * search key, a menu item or some other user action.
+ */
+ public void startSearch(String initialQuery) {
+ ContactsSearchManager.startSearch(getActivity(), initialQuery, mRequest);
+ }
+
// TODO integrate into picker fragments
// protected Uri buildCallingPackageUri(Uri uri) {
// String callingPackage = getContext().getCallingPackage();
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 2907603..c3a50a0 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.list;
+import com.android.contacts.ContactsSearchManager;
import com.android.contacts.R;
import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
@@ -38,6 +39,8 @@
public ContactPickerFragment() {
setPhotoLoaderEnabled(true);
+ setSectionHeaderDisplayEnabled(true);
+ setAizyEnabled(true);
}
public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
@@ -68,10 +71,6 @@
}
}
- public boolean isSearchAllContactsItemPosition(int position) {
- return isSearchMode() && position == getAdapter().getCount() - 1;
- }
-
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0 && !isSearchMode() && mCreateContactEnabled) {
@@ -83,21 +82,17 @@
@Override
protected void onItemClick(int position, long id) {
- if (isSearchAllContactsItemPosition(position)) {
- mListener.onSearchAllContactsAction((String)null);
+ Uri uri;
+ if (isLegacyCompatibilityMode()) {
+ uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
} else {
- Uri uri;
- if (isLegacyCompatibilityMode()) {
- uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
- } else {
- uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
- }
- if (mShortcutRequested) {
- ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
- builder.createContactShortcutIntent(uri);
- } else {
- mListener.onPickContactAction(uri);
- }
+ uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
+ }
+ if (mShortcutRequested) {
+ ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
+ builder.createContactShortcutIntent(uri);
+ } else {
+ mListener.onPickContactAction(uri);
}
}
@@ -120,7 +115,11 @@
@Override
protected void configureAdapter() {
super.configureAdapter();
+
ContactEntryListAdapter adapter = getAdapter();
+ if (adapter instanceof DefaultContactListAdapter) {
+ ((DefaultContactListAdapter)adapter).setVisibleContactsOnly(true);
+ }
// If "Create new contact" is shown, don't display the empty list UI
adapter.setEmptyListEnabled(!isCreateContactEnabled());
@@ -128,13 +127,7 @@
@Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
- if (isSearchMode()) {
- return inflater.inflate(R.layout.contacts_search_content, null);
- } else if (isSearchResultsMode()) {
- return inflater.inflate(R.layout.contacts_list_search_results, null);
- } else {
- return inflater.inflate(R.layout.contacts_list_content, null);
- }
+ return inflater.inflate(R.layout.contacts_list_content, null);
}
@Override
@@ -167,4 +160,10 @@
public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
mListener.onShortcutIntentCreated(shortcutIntent);
}
+
+ @Override
+ public void startSearch(String initialQuery) {
+ ContactsSearchManager.startSearchForResult(getActivity(), initialQuery,
+ ACTIVITY_REQUEST_CODE_FILTER, getContactsRequest());
+ }
}