Making list preserve selection when contact deleted
Bug: 3349070
Change-Id: Ifefd83525dd8da7b491bf4f5efae9d9e660caaa9
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 1385c8b..b47c7db 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -52,6 +52,7 @@
private static final String KEY_SELECTED_URI = "selectedUri";
private static final String KEY_SELECTION_VERIFIED = "selectionVerified";
private static final String KEY_FILTER = "filter";
+ private static final String KEY_LAST_SELECTED_POSITION = "lastSelected";
private static final String PERSISTENT_SELECTION_PREFIX = "defaultContactBrowserSelection";
@@ -85,6 +86,7 @@
private String mSelectedContactLookupKey;
private long mSelectedContactId;
private boolean mSelectionVerified;
+ private int mLastSelectedPosition = -1;
private boolean mRefreshingContactUri;
private ContactListFilter mFilter;
private String mPersistentSelectionPrefix = PERSISTENT_SELECTION_PREFIX;
@@ -186,6 +188,7 @@
Log.v(TAG, "New filter: " + filter);
mFilter = filter;
+ mLastSelectedPosition = -1;
saveFilter();
if (restoreSelectedUri) {
mSelectedContactUri = null;
@@ -209,6 +212,7 @@
mFilter = savedState.getParcelable(KEY_FILTER);
mSelectedContactUri = savedState.getParcelable(KEY_SELECTED_URI);
mSelectionVerified = savedState.getBoolean(KEY_SELECTION_VERIFIED);
+ mLastSelectedPosition = savedState.getInt(KEY_LAST_SELECTED_POSITION);
parseSelectedContactUri();
}
@@ -218,6 +222,7 @@
outState.putParcelable(KEY_FILTER, mFilter);
outState.putParcelable(KEY_SELECTED_URI, mSelectedContactUri);
outState.putBoolean(KEY_SELECTION_VERIFIED, mSelectionVerified);
+ outState.putInt(KEY_LAST_SELECTED_POSITION, mLastSelectedPosition);
}
protected void refreshSelectedContactUri() {
@@ -427,7 +432,9 @@
mSelectedContactDirectoryId, mSelectedContactLookupKey, mSelectedContactId);
int selectedPosition = adapter.getSelectedContactPosition();
- if (selectedPosition == -1) {
+ if (selectedPosition != -1) {
+ mLastSelectedPosition = selectedPosition;
+ } else {
if (mSelectionRequired) {
mSelectionRequired = false;
notifyInvalidSelection();
@@ -485,8 +492,16 @@
}
protected void selectDefaultContact() {
- Uri firstContactUri = getAdapter().getFirstContactUri();
- setSelectedContactUri(firstContactUri, false, mSmoothScrollRequested, false, false);
+ Uri contactUri = null;
+ if (mLastSelectedPosition != -1) {
+ contactUri = getAdapter().getContactUri(mLastSelectedPosition);
+ }
+
+ if (contactUri == null) {
+ contactUri = getAdapter().getFirstContactUri();
+ }
+
+ setSelectedContactUri(contactUri, false, mSmoothScrollRequested, false, false);
}
protected void requestSelectionToScreen() {