Preserving detail URI on orientation change
Change-Id: Ia84cd323398e9503f9fe883db792ef388565124d
diff --git a/src/com/android/contacts/activities/ContactListActivity.java b/src/com/android/contacts/activities/ContactListActivity.java
index c483d0b..7b8eccc 100644
--- a/src/com/android/contacts/activities/ContactListActivity.java
+++ b/src/com/android/contacts/activities/ContactListActivity.java
@@ -98,8 +98,6 @@
private NavigationBar mNavigationBar;
private int mMode = -1;
- public Uri mSelectedContactLookupUri;
-
public ContactListActivity() {
mIntentResolver = new ContactsIntentResolver(this);
}
@@ -109,6 +107,14 @@
if (fragment instanceof ContactBrowseListFragment) {
mListFragment = (ContactBrowseListFragment)fragment;
mListFragment.setOnContactListActionListener(new ContactBrowserActionListener());
+ } else if (fragment instanceof ContactNoneFragment) {
+ mEmptyFragment = (ContactNoneFragment)fragment;
+ } else if (fragment instanceof ContactDetailFragment) {
+ mDetailFragment = (ContactDetailFragment)fragment;
+ mDetailFragment.setListener(mDetailFragmentListener);
+ } else if (fragment instanceof ContactEditorFragment) {
+ mEditorFragment = (ContactEditorFragment)fragment;
+ mEditorFragment.setListener(mEditorFragmentListener);
}
}
@@ -186,6 +192,7 @@
mNavigationBar = new NavigationBar(this);
mNavigationBar.onCreate(savedState, mRequest);
+ mNavigationBar.setListener(this);
ActionBar actionBar = getActionBar();
View navBarView = mNavigationBar.onCreateView(getLayoutInflater());
@@ -195,9 +202,10 @@
configureListFragment();
}
- setupContactDetailFragment();
+ if (mEmptyFragment == null && mDetailFragment == null && mEditorFragment == null) {
+ setupContactDetailFragment(null);
+ }
- mNavigationBar.setListener(this);
}
@Override
@@ -264,22 +272,21 @@
}
}
- private void setupContactDetailFragment() {
+ private void setupContactDetailFragment(Uri contactLookupUri) {
// No editor here
closeEditorFragment();
- if (mSelectedContactLookupUri != null) {
+ if (contactLookupUri != null) {
// Already showing? Nothing to do
if (mDetailFragment != null) {
- mDetailFragment.loadUri(mSelectedContactLookupUri);
+ mDetailFragment.loadUri(contactLookupUri);
return;
}
closeEmptyFragment();
mDetailFragment = new ContactDetailFragment();
- mDetailFragment.setListener(mDetailFragmentListener);
- mDetailFragment.loadUri(mSelectedContactLookupUri);
+ mDetailFragment.loadUri(contactLookupUri);
// Nothing showing yet? Create (this happens during Activity-Startup)
openFragmentTransaction()
@@ -304,7 +311,6 @@
if (mEditorFragment != null) return;
mEditorFragment = new ContactEditorFragment();
- mEditorFragment.setListener(mEditorFragmentListener);
// Nothing showing yet? Create (this happens during Activity-Startup)
openFragmentTransaction()
@@ -410,8 +416,7 @@
private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
public void onViewContactAction(Uri contactLookupUri) {
if (mTwoPaneLayout) {
- mSelectedContactLookupUri = contactLookupUri;
- setupContactDetailFragment();
+ setupContactDetailFragment(contactLookupUri);
} else {
startActivity(new Intent(Intent.ACTION_VIEW, contactLookupUri));
}
diff --git a/src/com/android/contacts/views/detail/ContactDetailFragment.java b/src/com/android/contacts/views/detail/ContactDetailFragment.java
index cb6eba6..a7319f5 100644
--- a/src/com/android/contacts/views/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/views/detail/ContactDetailFragment.java
@@ -95,6 +95,8 @@
implements OnCreateContextMenuListener, OnItemClickListener {
private static final String TAG = "ContactDetailFragment";
+ private static final String KEY_LOOKUP_URI = "lookupUri";
+
private static final int MENU_ITEM_MAKE_DEFAULT = 3;
private static final int LOADER_DETAILS = 1;
@@ -164,6 +166,24 @@
}
@Override
+ public void onCreate(Bundle savedState) {
+ super.onCreate(savedState);
+
+ if (savedState != null) {
+ mLookupUri = savedState.getParcelable(KEY_LOOKUP_URI);
+ if (mLookupUri != null) {
+ loadUri(mLookupUri);
+ }
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putParcelable(KEY_LOOKUP_URI, mLookupUri);
+ }
+
+ @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
final View view = inflater.inflate(R.layout.contact_detail_fragment, container, false);
@@ -811,6 +831,7 @@
menu.findItem(R.id.menu_share).setEnabled(!mAllRestricted);
}
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_edit: {
@@ -866,6 +887,7 @@
if (mListener != null) mListener.onDialogRequested(id, null);
}
+ @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info;
try {
@@ -957,6 +979,7 @@
}
}
+ @Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ITEM_MAKE_DEFAULT: {
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index d6baa9c..8fd8473 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -104,6 +104,8 @@
private static final int LOADER_DATA = 1;
+ private static final String KEY_URI = "uri";
+ private static final String KEY_ACTION = "action";
private static final String KEY_EDIT_STATE = "state";
private static final String KEY_RAW_CONTACT_ID_REQUESTING_PHOTO = "photorequester";
private static final String KEY_VIEW_ID_GENERATOR = "viewidgenerator";
@@ -212,7 +214,13 @@
@Override
public void onCreate(Bundle savedState) {
- // TODO: Currently savedState is always null (framework issue). Test once this is fixed
+ if (savedState != null) {
+ // Restore mUri before calling super.onCreate so that onInitializeLoaders
+ // would already have a uri and an action to work with
+ mUri = savedState.getParcelable(KEY_URI);
+ mAction = savedState.getString(KEY_ACTION);
+ }
+
super.onCreate(savedState);
if (savedState == null) {
@@ -1287,6 +1295,9 @@
@Override
public void onSaveInstanceState(Bundle outState) {
+ outState.putParcelable(KEY_URI, mUri);
+ outState.putString(KEY_ACTION, mAction);
+
if (hasValidState()) {
// Store entities with modifications
outState.putParcelable(KEY_EDIT_STATE, mState);
@@ -1303,6 +1314,7 @@
super.onSaveInstanceState(outState);
}
+ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Ignore failed requests
if (resultCode != Activity.RESULT_OK) return;