Merge "Preventing multiple instances of contact browser from launching" into honeycomb
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 617d5c7..fc476d1 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -176,6 +176,8 @@
android:label="@string/contactsList"
android:icon="@mipmap/ic_launcher_contacts"
android:theme="@style/ContactBrowserTheme"
+ android:clearTaskOnLaunch="true"
+ android:launchMode="singleTop"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -198,8 +200,9 @@
<!-- The actual list of contacts -->
<activity android:name=".activities.ContactBrowserActivity"
android:label="@string/contactsList"
- android:clearTaskOnLaunch="true"
android:theme="@style/ContactBrowserTheme"
+ android:launchMode="singleTop"
+ android:clearTaskOnLaunch="true"
>
<intent-filter>
<action android:name="com.android.contacts.action.LIST_DEFAULT" />
@@ -261,8 +264,9 @@
<activity android:name=".activities.ContactSelectionActivity"
android:label="@string/contactsList"
- android:clearTaskOnLaunch="true"
android:theme="@style/ContactPickerTheme"
+ android:launchMode="singleTop"
+ android:clearTaskOnLaunch="true"
>
<intent-filter>
<action android:name="android.intent.action.INSERT_OR_EDIT" />
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 8bdf405..2faa345 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -219,6 +219,11 @@
outState.putString(EXTRA_KEY_QUERY, mQueryString);
}
+ public void onRestoreInstanceState(Bundle savedState) {
+ mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
+ mQueryString = savedState.getString(EXTRA_KEY_QUERY);
+ }
+
@Override
public void onContactListFiltersLoaded() {
update();
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 240fb3a..4ff9e63 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -40,7 +40,6 @@
import com.android.contacts.list.OnContactsUnavailableActionListener;
import com.android.contacts.list.ProviderStatusLoader;
import com.android.contacts.list.ProviderStatusLoader.ProviderStatusListener;
-import com.android.contacts.list.StrequentContactListFragment;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.preference.ContactsPreferenceActivity;
import com.android.contacts.util.AccountSelectionUtil;
@@ -94,8 +93,6 @@
private static final int SUBACTIVITY_EDIT_CONTACT = 4;
private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 5;
- private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20;
-
private static final String KEY_SEARCH_MODE = "searchMode";
private DialogManager mDialogManager = new DialogManager(this);
@@ -147,8 +144,9 @@
if (fragment instanceof ContactBrowseListFragment) {
mListFragment = (ContactBrowseListFragment)fragment;
mListFragment.setOnContactListActionListener(new ContactBrowserActionListener());
- if (mContactListFilterController.isLoaded()) {
- mListFragment.setFilter(mContactListFilterController.getFilter());
+ if (!mHasActionBar) {
+ mListFragment.setContextMenuAdapter(
+ new ContactBrowseListContextMenuAdapter(mListFragment));
}
} else if (fragment instanceof ContactDetailFragment) {
mDetailFragment = (ContactDetailFragment)fragment;
@@ -165,10 +163,26 @@
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
- if (savedState != null) {
- mSearchMode = savedState.getBoolean(KEY_SEARCH_MODE);
- }
+ mAddContactImageView = getLayoutInflater().inflate(
+ R.layout.add_contact_menu_item, null, false);
+ View item = mAddContactImageView.findViewById(R.id.menu_item);
+ item.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ createNewContact();
+ }
+ });
+ configureContentView(true, savedState);
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ setIntent(intent);
+ configureContentView(false, null);
+ }
+
+ private void configureContentView(boolean createContentView, Bundle savedState) {
// Extract relevant information from the intent
mRequest = mIntentResolver.resolveIntent(getIntent());
if (!mRequest.isValid()) {
@@ -185,8 +199,10 @@
return;
}
- setContentView(R.layout.contact_browser);
- mContactContentDisplayed = findViewById(R.id.detail_container) != null;
+ if (createContentView) {
+ setContentView(R.layout.contact_browser);
+ mContactContentDisplayed = findViewById(R.id.detail_container) != null;
+ }
if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT
&& !mContactContentDisplayed) {
@@ -199,6 +215,7 @@
}
setTitle(mRequest.getActivityTitle());
+
mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
if (mHasActionBar) {
ActionBar actionBar = getActionBar();
@@ -206,41 +223,9 @@
mActionBarAdapter = new ActionBarAdapter(this);
mActionBarAdapter.onCreate(savedState, mRequest, actionBar);
mActionBarAdapter.setContactListFilterController(mContactListFilterController);
- // TODO: request may ask for FREQUENT - set the filter accordingly
-
- mAddContactImageView = getLayoutInflater().inflate(
- R.layout.add_contact_menu_item, null, false);
- View item = mAddContactImageView.findViewById(R.id.menu_item);
- item.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- createNewContact();
- }
- });
}
- configureFragments(true /* from request */);
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- setIntent(intent);
- if (Intent.ACTION_VIEW.equals(intent.getAction())) {
- mRequest = mIntentResolver.resolveIntent(intent);
-
- Uri uri = mRequest.getContactUri();
- if (uri == null) {
- return;
- }
-
- if (mHasActionBar) {
- mActionBarAdapter.setSearchMode(false);
- configureFragments(false /* from request */);
- }
-
- mListFragment.reloadDataAndSetSelectedUri(uri);
- }
+ configureFragments(savedState == null);
}
@Override
@@ -248,6 +233,12 @@
if (mActionBarAdapter != null) {
mActionBarAdapter.setListener(null);
}
+
+ mOptionsMenuContactsAvailable = false;
+ mOptionsMenuCustomFilterChangeable = false;
+ mOptionsMenuGroupActionsEnabled = false;
+
+ mProviderStatus = -1;
mProviderStatusLoader.setProviderStatusListener(null);
super.onPause();
}
@@ -275,7 +266,6 @@
}
private void configureFragments(boolean fromRequest) {
- boolean searchMode = mSearchMode;
if (fromRequest) {
ContactListFilter filter = null;
int actionCode = mRequest.getActionCode();
@@ -299,49 +289,35 @@
if (filter != null) {
mContactListFilterController.setContactListFilter(filter, false);
- searchMode = false;
+ mSearchMode = false;
} else if (mRequest.getActionCode() == ContactsRequest.ACTION_ALL_CONTACTS) {
mContactListFilterController.setContactListFilter(new ContactListFilter(
ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), false);
}
if (mRequest.getContactUri() != null) {
- searchMode = false;
+ mSearchMode = false;
}
} else if (mHasActionBar) {
- searchMode = mActionBarAdapter.isSearchMode();
+ mSearchMode = mActionBarAdapter.isSearchMode();
}
- boolean replaceList = mListFragment == null || (mSearchMode != searchMode);
- if (replaceList) {
- if (mListFragment != null) {
- mListFragment.setOnContactListActionListener(null);
- }
+ if (mListFragment == null) {
+ mListFragment = new DefaultContactBrowseListFragment();
+ mListFragment.setContactsRequest(mRequest);
- mSearchMode = searchMode;
-
- if (mSearchMode) {
- mListFragment = createContactSearchFragment();
- } else {
- mListFragment = createListFragment(ContactsRequest.ACTION_DEFAULT);
- if (mRequest.getContactUri() != null) {
- mListFragment.setSelectedContactUri(mRequest.getContactUri());
-
- }
- }
- }
-
- if (mSearchMode && mHasActionBar) {
- mListFragment.setQueryString(mActionBarAdapter.getQueryString());
- }
-
- if (replaceList) {
getFragmentManager().openTransaction()
.replace(R.id.list_container, mListFragment)
.commit();
}
+ if (fromRequest) {
+ configureListFragmentForRequest();
+ }
+
+ configureListFragment();
+
if (mContactContentDisplayed && mDetailFragment == null) {
mDetailFragment = new ContactDetailFragment();
getFragmentManager().openTransaction()
@@ -349,9 +325,7 @@
.commit();
}
- if (replaceList) {
- invalidateOptionsMenu();
- }
+ invalidateOptionsMenu();
}
@Override
@@ -392,96 +366,38 @@
@Override
public void onAction() {
configureFragments(false /* from request */);
+ mListFragment.setQueryString(mActionBarAdapter.getQueryString());
}
- /**
- * Creates the list fragment for the specified mode.
- */
- private ContactBrowseListFragment createListFragment(int actionCode) {
- switch (actionCode) {
- case ContactsRequest.ACTION_DEFAULT: {
- DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
- fragment.setContactsRequest(mRequest);
- fragment.setOnContactListActionListener(new ContactBrowserActionListener());
- if (!mHasActionBar) {
- fragment.setContextMenuAdapter(
- new ContactBrowseListContextMenuAdapter(fragment));
- }
- fragment.setSearchMode(mRequest.isSearchMode());
- fragment.setQueryString(mRequest.getQueryString());
- if (mRequest.isSearchMode() && mRequest.isDirectorySearchEnabled()) {
- fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
- } else {
- fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
- }
- fragment.setVisibleScrollbarEnabled(!mRequest.isSearchMode());
- fragment.setVerticalScrollbarPosition(
- mContactContentDisplayed
- ? View.SCROLLBAR_POSITION_LEFT
- : View.SCROLLBAR_POSITION_RIGHT);
- fragment.setSelectionVisible(mContactContentDisplayed);
- fragment.setQuickContactEnabled(!mContactContentDisplayed);
- fragment.setFilterEnabled(!mRequest.isSearchMode());
- fragment.setPersistentSelectionEnabled(!mRequest.isSearchMode());
- return fragment;
- }
+ private void configureListFragmentForRequest() {
+ Uri contactUri = mRequest.getContactUri();
+ if (contactUri != null) {
+ mListFragment.setSelectedContactUri(contactUri);
+ }
- case ContactsRequest.ACTION_GROUP: {
- throw new UnsupportedOperationException("Not yet implemented");
- }
+ mListFragment.setQueryString(mRequest.getQueryString());
- case ContactsRequest.ACTION_STARRED: {
- StrequentContactListFragment fragment = new StrequentContactListFragment();
- fragment.setOnContactListActionListener(new ContactBrowserActionListener());
- fragment.setFrequentlyContactedContactsIncluded(false);
- fragment.setStarredContactsIncluded(true);
- fragment.setSelectionVisible(mContactContentDisplayed);
- fragment.setQuickContactEnabled(!mContactContentDisplayed);
- return fragment;
- }
+ if (mRequest.isDirectorySearchEnabled()) {
+ mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
+ } else {
+ mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
+ }
- case ContactsRequest.ACTION_FREQUENT: {
- StrequentContactListFragment fragment = new StrequentContactListFragment();
- fragment.setOnContactListActionListener(new ContactBrowserActionListener());
- fragment.setFrequentlyContactedContactsIncluded(true);
- fragment.setStarredContactsIncluded(false);
- fragment.setSelectionVisible(mContactContentDisplayed);
- fragment.setQuickContactEnabled(!mContactContentDisplayed);
- return fragment;
- }
-
- case ContactsRequest.ACTION_STREQUENT: {
- StrequentContactListFragment fragment = new StrequentContactListFragment();
- fragment.setOnContactListActionListener(new ContactBrowserActionListener());
- fragment.setFrequentlyContactedContactsIncluded(true);
- fragment.setStarredContactsIncluded(true);
- fragment.setSelectionVisible(mContactContentDisplayed);
- fragment.setQuickContactEnabled(!mContactContentDisplayed);
- return fragment;
- }
-
- default:
- throw new IllegalStateException("Invalid action code: " + actionCode);
+ if (mContactListFilterController.isLoaded()) {
+ mListFragment.setFilter(mContactListFilterController.getFilter());
}
}
- private ContactBrowseListFragment createContactSearchFragment() {
- DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
- fragment.setOnContactListActionListener(new ContactBrowserActionListener());
- if (!mHasActionBar) {
- fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
- }
- fragment.setSearchMode(true);
- fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
- fragment.setDirectoryResultLimit(DEFAULT_DIRECTORY_RESULT_LIMIT);
- fragment.setVisibleScrollbarEnabled(false);
- fragment.setVerticalScrollbarPosition(
+ private void configureListFragment() {
+ mListFragment.setSearchMode(mSearchMode);
+
+ mListFragment.setVisibleScrollbarEnabled(!mSearchMode);
+ mListFragment.setVerticalScrollbarPosition(
mContactContentDisplayed
? View.SCROLLBAR_POSITION_LEFT
: View.SCROLLBAR_POSITION_RIGHT);
- fragment.setSelectionVisible(true);
- fragment.setQuickContactEnabled(!mContactContentDisplayed);
- return fragment;
+ mListFragment.setSelectionVisible(mContactContentDisplayed);
+ mListFragment.setQuickContactEnabled(!mContactContentDisplayed);
}
@Override
@@ -1057,6 +973,15 @@
}
}
+ @Override
+ protected void onRestoreInstanceState(Bundle inState) {
+ super.onRestoreInstanceState(inState);
+ mSearchMode = inState.getBoolean(KEY_SEARCH_MODE);
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.onRestoreInstanceState(inState);
+ }
+ }
+
private PhoneNumberInteraction getPhoneNumberCallInteraction() {
if (mPhoneNumberCallInteraction == null) {
mPhoneNumberCallInteraction = new PhoneNumberInteraction(this, false, null);
diff --git a/src/com/android/contacts/activities/ContactsFrontDoor.java b/src/com/android/contacts/activities/ContactsFrontDoor.java
index 214382d..3677cce 100644
--- a/src/com/android/contacts/activities/ContactsFrontDoor.java
+++ b/src/com/android/contacts/activities/ContactsFrontDoor.java
@@ -18,9 +18,9 @@
import com.android.contacts.ContactsActivity;
import com.android.contacts.DialtactsActivity;
+import com.android.contacts.util.PhoneCapabilityTester;
import android.content.Intent;
-import android.content.res.Configuration;
import android.os.Bundle;
public class ContactsFrontDoor extends ContactsActivity {
@@ -35,18 +35,16 @@
intent.setAction(originalIntent.getAction());
intent.setDataAndType(originalIntent.getData(), originalIntent.getType());
intent.setFlags(
- Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_FORWARD_RESULT
+ | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(EXTRA_FRONT_DOOR, true);
- // The user launched the config based front door, pick the right activity to go to
- Configuration config = getResources().getConfiguration();
- int screenLayoutSize = config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
- if (screenLayoutSize == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
- // XL screen, use two pane UI
- intent.setClass(this, ContactBrowserActivity.class);
- } else {
+ if (PhoneCapabilityTester.isPhone(this)) {
// Default to the normal dialtacts layout
intent.setClass(this, DialtactsActivity.class);
+ } else {
+ // No tabs, just a contact list
+ intent.setClass(this, ContactBrowserActivity.class);
}
startActivity(intent);
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index bea9891..3d53da8 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -51,10 +51,8 @@
private static final String KEY_SELECTED_URI = "selectedUri";
private static final String KEY_SELECTION_VERIFIED = "selectionVerified";
- private static final String KEY_FILTER_ENABLED = "filterEnabled";
private static final String KEY_FILTER = "filter";
- private static final String KEY_PERSISTENT_SELECTION_ENABLED = "persistentSelectionEnabled";
private static final String PERSISTENT_SELECTION_PREFIX = "defaultContactBrowserSelection";
/**
@@ -88,9 +86,7 @@
private long mSelectedContactId;
private boolean mSelectionVerified;
private boolean mRefreshingContactUri;
- private boolean mFilterEnabled;
private ContactListFilter mFilter;
- private boolean mPersistentSelectionEnabled;
private String mPersistentSelectionPrefix = PERSISTENT_SELECTION_PREFIX;
protected OnContactBrowserActionListener mListener;
@@ -164,8 +160,14 @@
restoreSelectedUri(false);
}
- public void setPersistentSelectionEnabled(boolean flag) {
- this.mPersistentSelectionEnabled = flag;
+ @Override
+ public void setSearchMode(boolean flag) {
+ if (isSearchMode() != flag) {
+ if (!flag) {
+ restoreSelectedUri(true);
+ }
+ super.setSearchMode(flag);
+ }
}
public void setFilter(ContactListFilter filter) {
@@ -196,14 +198,6 @@
return mFilter;
}
- public boolean isFilterEnabled() {
- return mFilterEnabled;
- }
-
- public void setFilterEnabled(boolean flag) {
- this.mFilterEnabled = flag;
- }
-
@Override
public void restoreSavedState(Bundle savedState) {
super.restoreSavedState(savedState);
@@ -212,8 +206,6 @@
return;
}
- mPersistentSelectionEnabled = savedState.getBoolean(KEY_PERSISTENT_SELECTION_ENABLED);
- mFilterEnabled = savedState.getBoolean(KEY_FILTER_ENABLED);
mFilter = savedState.getParcelable(KEY_FILTER);
mSelectedContactUri = savedState.getParcelable(KEY_SELECTED_URI);
mSelectionVerified = savedState.getBoolean(KEY_SELECTION_VERIFIED);
@@ -223,8 +215,6 @@
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putBoolean(KEY_PERSISTENT_SELECTION_ENABLED, mPersistentSelectionEnabled);
- outState.putBoolean(KEY_FILTER_ENABLED, mFilterEnabled);
outState.putParcelable(KEY_FILTER, mFilter);
outState.putParcelable(KEY_SELECTED_URI, mSelectedContactUri);
outState.putBoolean(KEY_SELECTION_VERIFIED, mSelectionVerified);
@@ -346,7 +336,8 @@
if (mSelectedContactUri.toString().startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
List<String> pathSegments = mSelectedContactUri.getPathSegments();
mSelectedContactLookupKey = Uri.encode(pathSegments.get(2));
- } else if (mSelectedContactUri.toString().startsWith(Contacts.CONTENT_URI.toString())) {
+ } else if (mSelectedContactUri.toString().startsWith(Contacts.CONTENT_URI.toString()) &&
+ mSelectedContactUri.getPathSegments().size() >= 2) {
mSelectedContactLookupKey = null;
mSelectedContactId = ContentUris.parseId(mSelectedContactUri);
} else {
@@ -371,7 +362,7 @@
return;
}
- if (mFilterEnabled && mFilter != null) {
+ if (!isSearchMode() && mFilter != null) {
adapter.setFilter(mFilter);
if (mSelectionRequired
|| mFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
@@ -578,26 +569,22 @@
}
private void saveSelectedUri(Uri contactUri) {
- if (mFilterEnabled) {
- ContactListFilter.storeToPreferences(mPrefs, mFilter);
- }
-
- if (mPersistentSelectionEnabled) {
- Editor editor = mPrefs.edit();
- if (contactUri == null) {
- editor.remove(getPersistentSelectionKey());
- } else {
- editor.putString(getPersistentSelectionKey(), contactUri.toString());
- }
- editor.apply();
- }
- }
-
- private void restoreSelectedUri(boolean willReloadData) {
- if (!mPersistentSelectionEnabled) {
+ if (isSearchMode()) {
return;
}
+ ContactListFilter.storeToPreferences(mPrefs, mFilter);
+
+ Editor editor = mPrefs.edit();
+ if (contactUri == null) {
+ editor.remove(getPersistentSelectionKey());
+ } else {
+ editor.putString(getPersistentSelectionKey(), contactUri.toString());
+ }
+ editor.apply();
+ }
+
+ private void restoreSelectedUri(boolean willReloadData) {
// The meaning of mSelectionRequired is that we need to show some
// selection other than the previous selection saved in shared preferences
if (mSelectionRequired) {
@@ -613,17 +600,13 @@
}
private void saveFilter() {
- if (mFilterEnabled) {
- ContactListFilter.storeToPreferences(mPrefs, mFilter);
- }
+ ContactListFilter.storeToPreferences(mPrefs, mFilter);
}
private void restoreFilter() {
- if (mFilterEnabled) {
- mFilter = ContactListFilter.restoreFromPreferences(mPrefs);
- if (mFilter == null) {
- mFilter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
- }
+ mFilter = ContactListFilter.restoreFromPreferences(mPrefs);
+ if (mFilter == null) {
+ mFilter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
}
}
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index 1b7c9dc..d76ad38 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -424,13 +424,11 @@
startLoading();
}
}
+ } else {
+ mDirectoryListStatus = STATUS_NOT_LOADED;
+ getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
}
}
-
-// TODO fix the empty view
-// if (mEmptyView != null && (data == null || data.getCount() == 0)) {
-// prepareEmptyView();
-// }
}
public void onLoaderReset(Loader<Cursor> loader) {
@@ -574,10 +572,24 @@
mSearchMode = flag;
setSectionHeaderDisplayEnabled(!mSearchMode);
+ if (!flag) {
+ mDirectoryListStatus = STATUS_NOT_LOADED;
+ getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
+ }
+
if (mAdapter != null) {
- mAdapter.clearPartitions();
- mAdapter.setSearchMode(flag);
mAdapter.setPinnedPartitionHeadersEnabled(flag);
+ mAdapter.setSearchMode(flag);
+
+ mAdapter.clearPartitions();
+ if (!flag) {
+ // If we are switching from search to regular display,
+ // remove all directory partitions (except the default one).
+ int count = mAdapter.getPartitionCount();
+ for (int i = count; --i >= 1;) {
+ mAdapter.removePartition(i);
+ }
+ }
mAdapter.configureDefaultPartition(false, flag);
reloadData();
}
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index 7dcca08..6b4a653 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -191,7 +191,7 @@
protected void bindView(View itemView, int partition, Cursor cursor, int position) {
final ContactListItemView view = (ContactListItemView)itemView;
- view.setHighlightedPrefix(getUpperCaseQueryString());
+ view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
if (isSelectionVisible()) {
view.setActivated(isSelectedContact(partition, cursor));
@@ -210,6 +210,8 @@
if (isSearchMode()) {
bindSearchSnippet(view, cursor);
+ } else {
+ view.setSnippet(null);
}
}
diff --git a/src/com/android/contacts/list/StrequentContactListFragment.java b/src/com/android/contacts/list/StrequentContactListFragment.java
index 393e698..b88a60d 100644
--- a/src/com/android/contacts/list/StrequentContactListFragment.java
+++ b/src/com/android/contacts/list/StrequentContactListFragment.java
@@ -25,6 +25,8 @@
/**
* Fragment containing a list of starred contacts followed by a list of frequently contacted.
*/
+
+// TODO: This class is currently unused. Bring it back as a mode of ContactBrowserListFragment
public class StrequentContactListFragment extends ContactBrowseListFragment
implements OnClickListener {
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index 660bae2..8557fd6 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -24,11 +24,8 @@
<item>LIST_ALL_CONTACTS_ACTION</item>
<item>LIST_CONTACTS_WITH_PHONES_ACTION</item>
<item>LIST_STARRED_ACTION</item>
- <item>LIST_STARRED_ACTION (filter)</item>
<item>LIST_FREQUENT_ACTION</item>
- <item>LIST_FREQUENT_ACTION (filter)</item>
<item>LIST_STREQUENT_ACTION</item>
- <item>LIST_STREQUENT_ACTION (filter)</item>
<item>ACTION_PICK: contact</item>
<item>ACTION_PICK: contact (legacy)</item>
<item>ACTION_PICK: phone</item>
@@ -36,20 +33,13 @@
<item>ACTION_PICK: postal</item>
<item>ACTION_PICK: postal (legacy)</item>
<item>ACTION_CREATE_SHORTCUT: contact</item>
- <item>ACTION_CREATE_SHORTCUT: contact (filter)</item>
<item>ACTION_CREATE_SHORTCUT: dial</item>
- <item>ACTION_CREATE_SHORTCUT: dial (filter)</item>
<item>ACTION_CREATE_SHORTCUT: message</item>
- <item>ACTION_CREATE_SHORTCUT: message (filter)</item>
<item>ACTION_GET_CONTENT: contact</item>
- <item>ACTION_GET_CONTENT: contact (filter)</item>
<item>ACTION_GET_CONTENT: contact (legacy)</item>
- <item>ACTION_GET_CONTENT: contact (filter, legacy)</item>
<item>ACTION_GET_CONTENT: phone</item>
- <item>ACTION_GET_CONTENT: phone (filter)</item>
<item>ACTION_GET_CONTENT: phone (legacy)</item>
<item>ACTION_GET_CONTENT: postal</item>
- <item>ACTION_GET_CONTENT: postal (filter)</item>
<item>ACTION_GET_CONTENT: postal (legacy)</item>
<item>ACTION_INSERT_OR_EDIT</item>
<item>ACTION_SEARCH (call button)</item>
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 66079ad..50a1f1f 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -16,7 +16,6 @@
package com.android.contacts.tests.allintents;
-import com.android.contacts.list.ContactsRequest;
import com.android.contacts.tests.R;
import com.google.android.collect.Lists;
@@ -61,74 +60,67 @@
private static final String CONTACT_LIST_ACTIVITY_CLASS_NAME =
"com.android.contacts.activities.ContactBrowserActivity";
- private static final int LIST_DEFAULT = 0;
- private static final int LIST_ALL_CONTACTS_ACTION = 1;
- private static final int LIST_CONTACTS_WITH_PHONES_ACTION = 2;
- private static final int LIST_STARRED_ACTION = 3;
- private static final int LIST_STARRED_ACTION_WITH_FILTER = 4;
- private static final int LIST_FREQUENT_ACTION = 5;
- private static final int LIST_FREQUENT_ACTION_WITH_FILTER = 6;
- private static final int LIST_STREQUENT_ACTION = 7;
- private static final int LIST_STREQUENT_ACTION_WITH_FILTER = 8;
- private static final int ACTION_PICK_CONTACT = 9;
- private static final int ACTION_PICK_CONTACT_LEGACY = 10;
- private static final int ACTION_PICK_PHONE = 11;
- private static final int ACTION_PICK_PHONE_LEGACY = 12;
- private static final int ACTION_PICK_POSTAL = 13;
- private static final int ACTION_PICK_POSTAL_LEGACY = 14;
- private static final int ACTION_CREATE_SHORTCUT_CONTACT = 15;
- private static final int ACTION_CREATE_SHORTCUT_CONTACT_FILTER = 16;
- private static final int ACTION_CREATE_SHORTCUT_DIAL = 17;
- private static final int ACTION_CREATE_SHORTCUT_DIAL_FILTER = 18;
- private static final int ACTION_CREATE_SHORTCUT_MESSAGE = 19;
- private static final int ACTION_CREATE_SHORTCUT_MESSAGE_FILTER = 20;
- private static final int ACTION_GET_CONTENT_CONTACT = 21;
- private static final int ACTION_GET_CONTENT_CONTACT_FILTER = 22;
- private static final int ACTION_GET_CONTENT_CONTACT_LEGACY = 23;
- private static final int ACTION_GET_CONTENT_CONTACT_FILTER_LEGACY = 24;
- private static final int ACTION_GET_CONTENT_PHONE = 25;
- private static final int ACTION_GET_CONTENT_PHONE_FILTER = 26;
- private static final int ACTION_GET_CONTENT_PHONE_LEGACY = 27;
- private static final int ACTION_GET_CONTENT_POSTAL = 28;
- private static final int ACTION_GET_CONTENT_POSTAL_FILTER = 29;
- private static final int ACTION_GET_CONTENT_POSTAL_LEGACY = 30;
- private static final int ACTION_INSERT_OR_EDIT = 31;
- private static final int ACTION_SEARCH_CALL = 32;
- private static final int ACTION_SEARCH_CONTACT = 33;
- private static final int ACTION_SEARCH_EMAIL = 34;
- private static final int ACTION_SEARCH_PHONE = 35;
- private static final int SEARCH_SUGGESTION_CLICKED_CALL_BUTTON = 36;
- private static final int SEARCH_SUGGESTION_CLICKED_CONTACT = 37;
- private static final int SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = 38;
- private static final int SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = 39;
- private static final int JOIN_CONTACT = 40;
+ public enum ContactsIntent {
+ LIST_DEFAULT,
+ LIST_ALL_CONTACTS_ACTION,
+ LIST_CONTACTS_WITH_PHONES_ACTION,
+ LIST_STARRED_ACTION,
+ LIST_FREQUENT_ACTION,
+ LIST_STREQUENT_ACTION,
+ ACTION_PICK_CONTACT,
+ ACTION_PICK_CONTACT_LEGACY,
+ ACTION_PICK_PHONE,
+ ACTION_PICK_PHONE_LEGACY,
+ ACTION_PICK_POSTAL,
+ ACTION_PICK_POSTAL_LEGACY,
+ ACTION_CREATE_SHORTCUT_CONTACT,
+ ACTION_CREATE_SHORTCUT_DIAL,
+ ACTION_CREATE_SHORTCUT_MESSAGE,
+ ACTION_GET_CONTENT_CONTACT,
+ ACTION_GET_CONTENT_CONTACT_LEGACY,
+ ACTION_GET_CONTENT_PHONE,
+ ACTION_GET_CONTENT_PHONE_LEGACY,
+ ACTION_GET_CONTENT_POSTAL,
+ ACTION_GET_CONTENT_POSTAL_LEGACY,
+ ACTION_INSERT_OR_EDIT,
+ ACTION_SEARCH_CALL,
+ ACTION_SEARCH_CONTACT,
+ ACTION_SEARCH_EMAIL,
+ ACTION_SEARCH_PHONE,
+ SEARCH_SUGGESTION_CLICKED_CALL_BUTTON,
+ SEARCH_SUGGESTION_CLICKED_CONTACT,
+ SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED,
+ SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED,
+ JOIN_CONTACT,
+ EDIT_CONTACT,
+ EDIT_CONTACT_LOOKUP,
+ EDIT_CONTACT_LOOKUP_ID,
+ EDIT_RAW_CONTACT,
+ EDIT_LEGACY,
+ EDIT_NEW_CONTACT,
+ EDIT_NEW_CONTACT_WITH_DATA,
+ EDIT_NEW_CONTACT_FOR_ACCOUNT,
+ EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA,
+ EDIT_NEW_RAW_CONTACT,
+ EDIT_NEW_LEGACY,
+ VIEW_CONTACT,
+ VIEW_CONTACT_LOOKUP,
+ VIEW_CONTACT_LOOKUP_ID,
+ VIEW_RAW_CONTACT,
+ VIEW_LEGACY,
+ DIAL,
+ DIAL_phone,
+ DIAL_person,
+ DIAL_voicemail,
+ CALL_BUTTON,
+ DIAL_tel,
+ VIEW_tel,
+ VIEW_calllog;
- private static final int EDIT_CONTACT = 41;
- private static final int EDIT_CONTACT_LOOKUP = 42;
- private static final int EDIT_CONTACT_LOOKUP_ID = 43;
- private static final int EDIT_RAW_CONTACT = 44;
- private static final int EDIT_LEGACY = 45;
- private static final int EDIT_NEW_CONTACT = 46;
- private static final int EDIT_NEW_CONTACT_WITH_DATA = 47;
- private static final int EDIT_NEW_CONTACT_FOR_ACCOUNT = 48;
- private static final int EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA = 49;
- private static final int EDIT_NEW_RAW_CONTACT = 50;
- private static final int EDIT_NEW_LEGACY = 51;
-
- private static final int VIEW_CONTACT = 52;
- private static final int VIEW_CONTACT_LOOKUP = 53;
- private static final int VIEW_CONTACT_LOOKUP_ID = 54;
- private static final int VIEW_RAW_CONTACT = 55;
- private static final int VIEW_LEGACY = 56;
-
- private static final int DIAL = 57;
- private static final int DIAL_phone = 58;
- private static final int DIAL_person = 59;
- private static final int DIAL_voicemail = 60;
- private static final int CALL_BUTTON = 61;
- private static final int DIAL_tel = 62;
- private static final int VIEW_tel = 63;
- private static final int VIEW_calllog = 64;
+ public static ContactsIntent get(int ordinal) {
+ return values()[ordinal];
+ }
+ }
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -141,7 +133,7 @@
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
- switch (position) {
+ switch (ContactsIntent.get(position)) {
case LIST_DEFAULT: {
startContactListActivity(
new Intent(Intent.ACTION_VIEW, Contacts.CONTENT_URI));
@@ -162,30 +154,16 @@
new Intent(UI.LIST_STARRED_ACTION, Contacts.CONTENT_URI));
break;
}
- case LIST_STARRED_ACTION_WITH_FILTER: {
- startContactListActivity(buildFilterIntent(ContactsRequest.ACTION_STARRED, false));
- break;
- }
case LIST_FREQUENT_ACTION: {
startContactListActivity(
new Intent(UI.LIST_FREQUENT_ACTION, Contacts.CONTENT_URI));
break;
}
- case LIST_FREQUENT_ACTION_WITH_FILTER: {
- startContactListActivity(
- buildFilterIntent(ContactsRequest.ACTION_FREQUENT, false));
- break;
- }
case LIST_STREQUENT_ACTION: {
startContactListActivity(
new Intent(UI.LIST_STREQUENT_ACTION, Contacts.CONTENT_URI));
break;
}
- case LIST_STREQUENT_ACTION_WITH_FILTER: {
- startContactListActivity(
- buildFilterIntent(ContactsRequest.ACTION_STREQUENT, false));
- break;
- }
case ACTION_PICK_CONTACT: {
startContactSelectionActivityForResult(
new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI));
@@ -222,12 +200,6 @@
startContactSelectionActivityForResult(intent);
break;
}
- case ACTION_CREATE_SHORTCUT_CONTACT_FILTER: {
- startContactSelectionActivityForResult(
- buildFilterIntent(ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT,
- false));
- break;
- }
case ACTION_CREATE_SHORTCUT_DIAL: {
Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
intent.setComponent(
@@ -235,12 +207,6 @@
startActivityForResult(intent, 0);
break;
}
- case ACTION_CREATE_SHORTCUT_DIAL_FILTER: {
- startContactSelectionActivityForResult(
- buildFilterIntent(ContactsRequest.ACTION_CREATE_SHORTCUT_CALL,
- false));
- break;
- }
case ACTION_CREATE_SHORTCUT_MESSAGE: {
Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
intent.setComponent(
@@ -248,11 +214,6 @@
startActivityForResult(intent, 0);
break;
}
- case ACTION_CREATE_SHORTCUT_MESSAGE_FILTER: {
- startContactSelectionActivityForResult(
- buildFilterIntent(ContactsRequest.ACTION_CREATE_SHORTCUT_CALL, false));
- break;
- }
case ACTION_GET_CONTENT_CONTACT: {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(Contacts.CONTENT_ITEM_TYPE);
@@ -265,28 +226,12 @@
startContactSelectionActivityForResult(intent);
break;
}
- case ACTION_GET_CONTENT_CONTACT_FILTER: {
- startContactSelectionActivityForResult(
- buildFilterIntent(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT, false));
- break;
- }
- case ACTION_GET_CONTENT_CONTACT_FILTER_LEGACY: {
- startContactSelectionActivityForResult(
- buildFilterIntent(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT,
- true));
- break;
- }
case ACTION_GET_CONTENT_PHONE: {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(Phone.CONTENT_ITEM_TYPE);
startContactSelectionActivityForResult(intent);
break;
}
- case ACTION_GET_CONTENT_PHONE_FILTER: {
- startContactSelectionActivityForResult(
- buildFilterIntent(ContactsRequest.ACTION_PICK_PHONE, true));
- break;
- }
case ACTION_GET_CONTENT_PHONE_LEGACY: {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(Phones.CONTENT_ITEM_TYPE);
@@ -299,11 +244,6 @@
startContactSelectionActivityForResult(intent);
break;
}
- case ACTION_GET_CONTENT_POSTAL_FILTER: {
- startContactSelectionActivityForResult(
- buildFilterIntent(ContactsRequest.ACTION_PICK_POSTAL, false));
- break;
- }
case ACTION_GET_CONTENT_POSTAL_LEGACY: {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(ContactMethods.CONTENT_POSTAL_ITEM_TYPE);
@@ -546,9 +486,9 @@
private Intent buildFilterIntent(int actionCode, boolean legacy) {
Intent intent = new Intent(UI.FILTER_CONTACTS_ACTION);
intent.putExtra(UI.FILTER_TEXT_EXTRA_KEY, "A");
- ContactsRequest request = new ContactsRequest();
- request.setActionCode(actionCode);
- intent.putExtra("originalRequest", request);
+// ContactsRequest request = new ContactsRequest();
+// request.setActionCode(actionCode);
+// intent.putExtra("originalRequest", request);
return intent;
}
@@ -627,7 +567,7 @@
@Override
public void onAccountChosen(Account account, int tag) {
- switch (tag) {
+ switch (ContactsIntent.get(tag)) {
case EDIT_NEW_CONTACT_FOR_ACCOUNT: {
final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
intent.putExtra(Insert.ACCOUNT, account);
@@ -643,6 +583,8 @@
startActivity(intent);
break;
}
+ default:
+ break;
}
}