Fixes in selection management
Specifically, after creating a new contact that contact
would not get selected. Also, after deleting a contact
the default contact would get selected, but the selection
would not get shown in the detail panel.
Change-Id: Ia4d078d22f257419c9fa9c590dc6e0083be3d457
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 4f1f353..c202615 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -238,7 +238,7 @@
configureFragments(false /* from request */);
}
- mListFragment.setSelectedContactUri(uri);
+ mListFragment.reloadDataAndSetSelectedUri(uri);
}
}
@@ -609,8 +609,8 @@
public void onInvalidSelection() {
ContactListFilter filter =
new ContactListFilter(ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
+ mListFragment.setFilter(filter, false);
mContactListFilterController.setContactListFilter(filter, true);
- mListFragment.setFilter(filter);
}
}
@@ -945,7 +945,7 @@
case SUBACTIVITY_NEW_CONTACT: {
if (resultCode == RESULT_OK) {
mRequest.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT);
- mListFragment.setSelectedContactUri(data.getData());
+ mListFragment.reloadDataAndSetSelectedUri(data.getData());
}
break;
}
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 636f74c..82658a4 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -1182,6 +1182,10 @@
@Override
public void onLoadFinished(Loader<ContactLoader.Result> loader, ContactLoader.Result data) {
+ if (!((ContactLoader)loader).getLookupUri().equals(mLookupUri)) {
+ return;
+ }
+
if (data != ContactLoader.Result.NOT_FOUND && data != ContactLoader.Result.ERROR) {
mContactData = data;
} else {
@@ -1198,6 +1202,7 @@
public void onLoaderReset(Loader<ContactLoader.Result> loader) {
mContactData = null;
+ bindData();
}
};
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 3d227cc..a53fce7 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -124,7 +124,14 @@
return;
}
- onContactUriQueryFinished(Contacts.getLookupUri(contactId, lookupKey));
+ Uri uri;
+ if (contactId != 0 && lookupKey != null) {
+ uri = Contacts.getLookupUri(contactId, lookupKey);
+ } else {
+ uri = null;
+ }
+
+ onContactUriQueryFinished(uri);
}
}
@@ -160,6 +167,10 @@
}
public void setFilter(ContactListFilter filter) {
+ setFilter(filter, true);
+ }
+
+ public void setFilter(ContactListFilter filter, boolean restoreSelectedUri) {
if (mFilter == null && filter == null) {
return;
}
@@ -172,8 +183,10 @@
mFilter = filter;
saveFilter();
- mSelectedContactUri = null;
- restoreSelectedUri(true);
+ if (restoreSelectedUri) {
+ mSelectedContactUri = null;
+ restoreSelectedUri(true);
+ }
reloadData();
}
@@ -494,6 +507,11 @@
super.startLoading();
}
+ public void reloadDataAndSetSelectedUri(Uri uri) {
+ setSelectedContactUri(uri, true, true, true, true);
+ reloadData();
+ }
+
@Override
public void reloadData() {
if (mStartedLoading) {