Refactor the way we track selected tab in ViewContactActivity.
Change-Id: I68ca5a7d7ea3897f2d724f465787fb9c45ffc06f
diff --git a/src/com/android/contacts/BaseContactCardActivity.java b/src/com/android/contacts/BaseContactCardActivity.java
index 2aac1a2..bd62b8a 100644
--- a/src/com/android/contacts/BaseContactCardActivity.java
+++ b/src/com/android/contacts/BaseContactCardActivity.java
@@ -74,7 +74,7 @@
protected static final int TAB_ACCOUNT_TYPE_COLUMN_INDEX = 2;
protected static final String SELECTED_RAW_CONTACT_ID_KEY = "selectedRawContact";
- protected long mSelectedRawContactId;
+ protected Long mSelectedRawContactId = null;
private static final int TOKEN_TABS = 0;
@@ -231,31 +231,24 @@
}
protected void selectInitialTab() {
- int selectedTabIndex = -1;
- if (mSelectedRawContactId > 0) {
- selectedTabIndex = getTabIndexForRawContactId(mSelectedRawContactId);
- }
- if (selectedTabIndex >= 0) {
- mTabWidget.setCurrentTab(selectedTabIndex);
- } else {
- selectDefaultTab();
- }
- }
+ int selectedTabIndex = 0;
- /**
- * Makes the default tab selection. This is called after the tabs have been
- * bound for the first time, and whenever a new intent is received. Override
- * this method if you want to customize the default tab behavior.
- */
- protected void selectDefaultTab() {
- // Select the first tab.
- mTabWidget.setCurrentTab(0);
+ if (mSelectedRawContactId != null) {
+ selectedTabIndex = getTabIndexForRawContactId(mSelectedRawContactId);
+ if (selectedTabIndex == -1) {
+ // If there was no matching tab, just select the first;
+ selectedTabIndex = 0;
+ }
+ }
+
+ mTabWidget.setCurrentTab(selectedTabIndex);
+ onTabSelectionChanged(selectedTabIndex, false);
}
@Override
public void onNewIntent(Intent newIntent) {
setIntent(newIntent);
- selectDefaultTab();
+ selectInitialTab();
mUri = newIntent.getData();
}
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index cd9802c..5efe5ca 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -200,9 +200,6 @@
//TODO Read this value from a preference
mShowSmsLinksForAllPhones = true;
- //Select the all tab to start.
- mSelectedRawContactId = ALL_CONTACTS_ID;
-
mCursor = mResolver.query(Uri.withAppendedPath(mUri, "data"),
CONTACT_PROJECTION, null, null, null);
}
@@ -305,9 +302,6 @@
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, MENU_ITEM_EDIT, 0, R.string.menu_editContact)
- .setIcon(android.R.drawable.ic_menu_edit)
- .setAlphabeticShortcut('e');
menu.add(0, MENU_ITEM_DELETE, 0, R.string.menu_deleteContact)
.setIcon(android.R.drawable.ic_menu_delete);
menu.add(0, MENU_ITEM_SPLIT_AGGREGATE, 0, R.string.menu_splitAggregate)
@@ -333,6 +327,17 @@
menu.removeItem(MENU_ITEM_SHOW_BARCODE);
}
+ // Only show the edit option if we have a selected tab.
+ if (mSelectedRawContactId != null) {
+ if (menu.findItem(MENU_ITEM_EDIT) == null) {
+ menu.add(0, MENU_ITEM_EDIT, 0, R.string.menu_editContact)
+ .setIcon(android.R.drawable.ic_menu_edit)
+ .setAlphabeticShortcut('e');
+ }
+ } else {
+ menu.removeItem(MENU_ITEM_EDIT);
+ }
+
boolean isAggregate = mRawContactIds.size() > 1;
menu.findItem(MENU_ITEM_SPLIT_AGGREGATE).setEnabled(isAggregate);
return true;
@@ -386,11 +391,15 @@
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ITEM_EDIT: {
- final int tabIndex = mTabWidget.getCurrentTab();
- long rawContactIdToEdit = getTabRawContactId(tabIndex);
+ Long rawContactIdToEdit = mSelectedRawContactId;
+ if (rawContactIdToEdit == null) {
+ // This shouldn't be possible. We only show the edit option if
+ // this value is non-null.
+ break;
+ }
if (rawContactIdToEdit == ALL_CONTACTS_ID) {
// If the "all" tab is selected, edit the next tab.
- rawContactIdToEdit = getTabRawContactId(tabIndex + 1);
+ rawContactIdToEdit = getTabRawContactId(mTabWidget.getCurrentTab() + 1);
}
Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI,
rawContactIdToEdit);
@@ -732,7 +741,8 @@
}
// This performs the tab filtering
- if (mSelectedRawContactId != entry.contactId
+ if (mSelectedRawContactId != null
+ && mSelectedRawContactId != entry.contactId
&& mSelectedRawContactId != ALL_CONTACTS_ID) {
continue;
}