OSDN Git Service

Saving ALL state when contact editor is evicted
authorDmitri Plotnikov <dplotnikov@google.com>
Thu, 1 Apr 2010 00:52:25 +0000 (17:52 -0700)
committerDmitri Plotnikov <dplotnikov@google.com>
Thu, 1 Apr 2010 00:52:40 +0000 (17:52 -0700)
We failed to save three of the fields in onSaveInstanceState
As a result we would be
1) unable to attach a photo to a contact
2) get an out-of-memory situation if a sync is running at the same time
3) not be able to join a contact manually if the process is interrupted

Bug: 2558867
Change-Id: I28dd605e82c12b611e9919170d6ba5d17442b8fc

src/com/android/contacts/ui/EditContactActivity.java

index 25132fb..c70cff6 100644 (file)
@@ -67,7 +67,6 @@ import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.RawContacts;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
 import android.provider.ContactsContract.Contacts.Data;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
@@ -111,6 +110,9 @@ public final class EditContactActivity extends Activity
     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";
+    private static final String KEY_CURRENT_PHOTO_FILE = "currentphotofile";
+    private static final String KEY_QUERY_SELECTION = "queryselection";
+    private static final String KEY_CONTACT_ID_FOR_JOIN = "contactidforjoin";
 
     /** The result code when view activity should close after edit returns */
     public static final int RESULT_CLOSE_VIEW_ACTIVITY = 777;
@@ -265,6 +267,11 @@ public final class EditContactActivity extends Activity
 
         outState.putLong(KEY_RAW_CONTACT_ID_REQUESTING_PHOTO, mRawContactIdRequestingPhoto);
         outState.putParcelable(KEY_VIEW_ID_GENERATOR, mViewIdGenerator);
+        if (mCurrentPhotoFile != null) {
+            outState.putString(KEY_CURRENT_PHOTO_FILE, mCurrentPhotoFile.toString());
+        }
+        outState.putString(KEY_QUERY_SELECTION, mQuerySelection);
+        outState.putLong(KEY_CONTACT_ID_FOR_JOIN, mContactIdForJoin);
         super.onSaveInstanceState(outState);
     }
 
@@ -275,6 +282,13 @@ public final class EditContactActivity extends Activity
         mRawContactIdRequestingPhoto = savedInstanceState.getLong(
                 KEY_RAW_CONTACT_ID_REQUESTING_PHOTO);
         mViewIdGenerator = savedInstanceState.getParcelable(KEY_VIEW_ID_GENERATOR);
+        String fileName = savedInstanceState.getString(KEY_CURRENT_PHOTO_FILE);
+        if (fileName != null) {
+            mCurrentPhotoFile = new File(fileName);
+        }
+        mQuerySelection = savedInstanceState.getString(KEY_QUERY_SELECTION);
+        mContactIdForJoin = savedInstanceState.getLong(KEY_CONTACT_ID_FOR_JOIN);
+
         bindEditors();
 
         super.onRestoreInstanceState(savedInstanceState);