summaryrefslogtreecommitdiff
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/contacts/ContactSaveService.java9
-rw-r--r--src/com/android/contacts/activities/CompactContactEditorActivity.java2
-rw-r--r--src/com/android/contacts/activities/ContactEditorActivity.java2
-rw-r--r--src/com/android/contacts/activities/ContactEditorBaseActivity.java19
-rw-r--r--src/com/android/contacts/editor/CompactContactEditorFragment.java8
-rw-r--r--src/com/android/contacts/editor/ContactEditorBaseFragment.java99
-rw-r--r--src/com/android/contacts/editor/ContactEditorFragment.java8
-rw-r--r--src/com/android/contacts/quickcontact/InvisibleContactUtil.java2
8 files changed, 88 insertions, 61 deletions
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 29a4a7b39..9944c77c6 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -54,6 +54,7 @@ import com.android.contacts.common.model.RawContactDelta;
import com.android.contacts.common.model.RawContactDeltaList;
import com.android.contacts.common.model.RawContactModifier;
import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.editor.ContactEditorFragment;
import com.android.contacts.util.ContactPhotoUtils;
import com.google.common.collect.Lists;
@@ -300,7 +301,7 @@ public class ContactSaveService extends IntentService {
Bundle bundle = new Bundle();
bundle.putParcelable(String.valueOf(rawContactId), updatedPhotoPath);
return createSaveContactIntent(context, state, saveModeExtraKey, saveMode, isProfile,
- callbackActivity, callbackAction, bundle);
+ callbackActivity, callbackAction, bundle, /* backPressed =*/ false);
}
/**
@@ -309,11 +310,13 @@ public class ContactSaveService extends IntentService {
* This variant is used when multiple contacts' photos may be updated, as in the
* Contact Editor.
* @param updatedPhotos maps each raw-contact's ID to the file-path of the new photo.
+ * @param backPressed whether the save was initiated as a result of a back button press
+ * or because the framework stopped the editor Activity
*/
public static Intent createSaveContactIntent(Context context, RawContactDeltaList state,
String saveModeExtraKey, int saveMode, boolean isProfile,
Class<? extends Activity> callbackActivity, String callbackAction,
- Bundle updatedPhotos) {
+ Bundle updatedPhotos, boolean backPressed) {
Intent serviceIntent = new Intent(
context, ContactSaveService.class);
serviceIntent.setAction(ContactSaveService.ACTION_SAVE_CONTACT);
@@ -333,6 +336,8 @@ public class ContactSaveService extends IntentService {
if (updatedPhotos != null) {
callbackIntent.putExtra(EXTRA_UPDATED_PHOTOS, (Parcelable) updatedPhotos);
}
+ callbackIntent.putExtra(ContactEditorFragment.INTENT_EXTRA_SAVE_BACK_PRESSED,
+ backPressed);
serviceIntent.putExtra(ContactSaveService.EXTRA_CALLBACK_INTENT, callbackIntent);
}
return serviceIntent;
diff --git a/src/com/android/contacts/activities/CompactContactEditorActivity.java b/src/com/android/contacts/activities/CompactContactEditorActivity.java
index fcbb70ee7..c45c261b3 100644
--- a/src/com/android/contacts/activities/CompactContactEditorActivity.java
+++ b/src/com/android/contacts/activities/CompactContactEditorActivity.java
@@ -60,7 +60,7 @@ public class CompactContactEditorActivity extends ContactEditorBaseActivity {
@Override
public void onBackPressed() {
if (mFragment != null) {
- mFragment.save(ContactEditor.SaveMode.CLOSE);
+ mFragment.save(ContactEditor.SaveMode.CLOSE, /* backPressed =*/ true);
}
}
}
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index a9b75d989..800a26756 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -54,7 +54,7 @@ public class ContactEditorActivity extends ContactEditorBaseActivity
@Override
public void onBackPressed() {
if (mFragment != null) {
- mFragment.save(ContactEditor.SaveMode.COMPACT);
+ mFragment.save(ContactEditor.SaveMode.COMPACT, /* backPressed =*/ true);
}
}
}
diff --git a/src/com/android/contacts/activities/ContactEditorBaseActivity.java b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
index ec2f9b67b..41b0c6b67 100644
--- a/src/com/android/contacts/activities/ContactEditorBaseActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorBaseActivity.java
@@ -153,14 +153,17 @@ abstract public class ContactEditorBaseActivity extends ContactsActivity
/**
* Saves or creates the contact based on the mode, and if successful
* finishes the activity.
+ *
+ * @param backPressed whether the save was initiated as a result of a back button press
+ * or because the framework stopped the editor Activity
*/
- boolean save(int saveMode);
+ boolean save(int saveMode, boolean backPressed);
/**
* Invoked after the contact is saved.
*/
void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
- Uri contactLookupUri, Bundle updatedPhotos);
+ Uri contactLookupUri, Bundle updatedPhotos, boolean backPressed);
/**
* Invoked after the contact is joined.
@@ -238,7 +241,9 @@ abstract public class ContactEditorBaseActivity extends ContactsActivity
ContactEditor.SaveMode.CLOSE),
intent.getBooleanExtra(ContactSaveService.EXTRA_SAVE_SUCCEEDED, false),
intent.getData(),
- (Bundle) intent.getParcelableExtra(ContactSaveService.EXTRA_UPDATED_PHOTOS));
+ (Bundle) intent.getParcelableExtra(ContactSaveService.EXTRA_UPDATED_PHOTOS),
+ intent.getBooleanExtra(ContactEditorFragment.INTENT_EXTRA_SAVE_BACK_PRESSED,
+ false));
} else if (ACTION_JOIN_COMPLETED.equals(action)) {
mFragment.onJoinCompleted(intent.getData());
}
@@ -268,11 +273,15 @@ abstract public class ContactEditorBaseActivity extends ContactsActivity
@Override
public void onSaveFinished(Intent resultIntent) {
+ final boolean backPressed = resultIntent == null ? false : resultIntent.getBooleanExtra(
+ ContactEditorBaseFragment.INTENT_EXTRA_SAVE_BACK_PRESSED, false);
if (mFinishActivityOnSaveCompleted) {
setResult(resultIntent == null ? RESULT_CANCELED : RESULT_OK, resultIntent);
} else if (resultIntent != null) {
- ImplicitIntentsUtil.startActivityInApp(ContactEditorBaseActivity.this,
- resultIntent);
+ if (backPressed) {
+ ImplicitIntentsUtil.startActivityInApp(ContactEditorBaseActivity.this,
+ resultIntent);
+ }
}
finish();
}
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index c7d7cac83..10efe1008 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -188,7 +188,7 @@ public class CompactContactEditorFragment extends ContactEditorBaseFragment impl
// If anything was left unsaved, save it now
if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
- save(SaveMode.RELOAD);
+ save(SaveMode.RELOAD, /* backPressed =*/ false);
}
}
@@ -297,12 +297,12 @@ public class CompactContactEditorFragment extends ContactEditorBaseFragment impl
}
@Override
- protected boolean doSaveAction(int saveMode) {
+ protected boolean doSaveAction(int saveMode, boolean backPressed) {
// Save contact. No need to pass the palette since we are finished editing after the save.
final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
((Activity) mContext).getClass(),
- CompactContactEditorActivity.ACTION_SAVE_COMPLETED, mUpdatedPhotos);
+ CompactContactEditorActivity.ACTION_SAVE_COMPLETED, mUpdatedPhotos, backPressed);
mContext.startService(intent);
return true;
@@ -350,7 +350,7 @@ public class CompactContactEditorFragment extends ContactEditorBaseFragment impl
mShowToastAfterSave = false;
// Save whatever is in the form
- save(SaveMode.RELOAD);
+ save(SaveMode.RELOAD, /* backPressed =*/ false);
}
// Prepare an Intent to start the expanded editor
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index 529bc4ee0..52076f78f 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -178,6 +178,12 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
public static final String SAVE_MODE_EXTRA_KEY = "saveMode";
/**
+ * Intent extra to specify whether the save was initiated as a result of a back button press
+ * or because the framework stopped the editor Activity.
+ */
+ public static final String INTENT_EXTRA_SAVE_BACK_PRESSED = "saveBackPressed";
+
+ /**
* Callbacks for Activities that host contact editors Fragments.
*/
public interface Listener {
@@ -775,7 +781,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
switch (item.getItemId()) {
case android.R.id.home:
case R.id.menu_done:
- return save(SaveMode.CLOSE);
+ return save(SaveMode.CLOSE, /* backPressed =*/ true);
case R.id.menu_discard:
return revert();
case R.id.menu_delete:
@@ -831,7 +837,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
}
mState.markRawContactsForSplitting();
- save(SaveMode.SPLIT);;
+ save(SaveMode.SPLIT, /* backPressed =*/ false);
}
private boolean doSplitContactAction() {
@@ -854,7 +860,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
return true;
}
- return save(SaveMode.JOIN);
+ return save(SaveMode.JOIN, /* backPressed =*/ false);
}
private void doPickRingtone() {
@@ -886,7 +892,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
}
@Override
- public boolean save(int saveMode) {
+ public boolean save(int saveMode, boolean backPressed) {
if (!hasValidState() || mStatus != Status.EDITING) {
return false;
}
@@ -908,7 +914,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
}
onSaveCompleted(/* hadChanges =*/ false, saveMode,
/* saveSucceeded =*/ mLookupUri != null, mLookupUri,
- /* updatedPhotos =*/ null);
+ /* updatedPhotos =*/ null, backPressed);
return true;
}
@@ -917,23 +923,24 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
// Store account as default account, only if this is a new contact
saveDefaultAccountIfNecessary();
- if (isInsert(getActivity().getIntent())
- && saveMode == SaveMode.COMPACT && mListener != null) {
+ if (isInsert(getActivity().getIntent()) && saveMode == SaveMode.COMPACT
+ && mListener != null && backPressed) {
// If we're coming back from the fully expanded editor and this is an insert, just
// pass any values entered by the user back to the compact editor without doing a save
final Intent resultIntent = EditorIntents.createCompactInsertContactIntent(
mState, getDisplayName(), getPhoneticName(), mUpdatedPhotos);
+ resultIntent.putExtra(INTENT_EXTRA_SAVE_BACK_PRESSED, backPressed);
mListener.onSaveFinished(resultIntent);
return true;
}
// Otherwise this is an edit or a back press so do an actual save
- return doSaveAction(saveMode);
+ return doSaveAction(saveMode, backPressed);
}
/**
* Persist the accumulated editor deltas.
*/
- abstract protected boolean doSaveAction(int saveMode);
+ abstract protected boolean doSaveAction(int saveMode, boolean backPressed);
//
// State accessor methods
@@ -1326,12 +1333,13 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
@Override
public void onJoinCompleted(Uri uri) {
- onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri, /* updatedPhotos =*/ null);
+ onSaveCompleted(false, SaveMode.RELOAD, uri != null, uri, /* updatedPhotos =*/ null,
+ /* backPressed =*/ false);
}
@Override
public void onSaveCompleted(boolean hadChanges, int saveMode, boolean saveSucceeded,
- Uri contactLookupUri, Bundle updatedPhotos) {
+ Uri contactLookupUri, Bundle updatedPhotos, boolean backPressed) {
if (hadChanges) {
if (saveSucceeded) {
if (saveMode != SaveMode.JOIN && mShowToastAfterSave) {
@@ -1342,36 +1350,41 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
}
}
switch (saveMode) {
- case SaveMode.CLOSE:
- case SaveMode.COMPACT:
+ case SaveMode.CLOSE: {
final Intent resultIntent;
- if (!saveSucceeded || contactLookupUri == null) {
- resultIntent = saveMode == SaveMode.COMPACT
- ? EditorIntents.createCompactInsertContactIntent(
- mState, getDisplayName(), getPhoneticName(), updatedPhotos)
- : null;
- } else {
+ if (saveSucceeded && contactLookupUri != null) {
final Uri lookupUri = maybeConvertToLegacyLookupUri(
mContext, contactLookupUri, mLookupUri);
- if (saveMode == SaveMode.CLOSE) {
- resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(lookupUri,
- QuickContactActivity.MODE_FULLY_EXPANDED);
- } else if (saveMode == SaveMode.COMPACT) {
- resultIntent = isInsert(getActivity().getIntent())
- ? EditorIntents.createCompactInsertContactIntent(
- mState, getDisplayName(), getPhoneticName(), updatedPhotos)
- : EditorIntents.createCompactEditContactIntent(
- lookupUri, getMaterialPalette(), updatedPhotos);
- } else {
- resultIntent = null;
- }
+ resultIntent = ImplicitIntentsUtil.composeQuickContactIntent(lookupUri,
+ QuickContactActivity.MODE_FULLY_EXPANDED);
+ resultIntent.putExtra(INTENT_EXTRA_SAVE_BACK_PRESSED, backPressed);
+ } else {
+ resultIntent = null;
}
-
- // It is already saved, so prevent that it is saved again
mStatus = Status.CLOSING;
if (mListener != null) mListener.onSaveFinished(resultIntent);
break;
-
+ }
+ case SaveMode.COMPACT: {
+ if (!hadChanges && !backPressed && isInsert(getActivity().getIntent())) {
+ // Reload the empty editor when the Contacts app is resumed
+ mStatus = Status.EDITING;
+ } else if (backPressed) {
+ final Uri lookupUri = maybeConvertToLegacyLookupUri(
+ mContext, contactLookupUri, mLookupUri);
+ final Intent resultIntent = isInsert(getActivity().getIntent())
+ ? EditorIntents.createCompactInsertContactIntent(
+ mState, getDisplayName(), getPhoneticName(), updatedPhotos)
+ : EditorIntents.createCompactEditContactIntent(
+ lookupUri, getMaterialPalette(), updatedPhotos);
+ resultIntent.putExtra(INTENT_EXTRA_SAVE_BACK_PRESSED, true);
+ mStatus = Status.CLOSING;
+ if (mListener != null) mListener.onSaveFinished(resultIntent);
+ } else {
+ reloadFullEditor(contactLookupUri);
+ }
+ break;
+ }
case SaveMode.RELOAD:
case SaveMode.JOIN:
if (saveSucceeded && contactLookupUri != null) {
@@ -1379,14 +1392,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
if (saveMode == SaveMode.JOIN && hasValidState()) {
showJoinAggregateActivity(contactLookupUri);
}
-
- // If this was in INSERT, we are changing into an EDIT now.
- // If it already was an EDIT, we are changing to the new Uri now
- // Either way, open the editor with all input fields displayed.
- mState = new RawContactDeltaList();
- load(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri, null);
- mStatus = Status.LOADING;
- getLoaderManager().restartLoader(LOADER_DATA, null, mDataLoaderListener);
+ reloadFullEditor(contactLookupUri);
}
break;
@@ -1401,6 +1407,13 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
}
}
+ private void reloadFullEditor(Uri contactLookupUri) {
+ mState = new RawContactDeltaList();
+ load(ContactEditorBaseActivity.ACTION_EDIT, contactLookupUri, null);
+ mStatus = Status.LOADING;
+ getLoaderManager().restartLoader(LOADER_DATA, null, mDataLoaderListener);
+ }
+
/**
* Shows a list of aggregates that can be joined into the currently viewed aggregate.
*
@@ -1536,7 +1549,7 @@ abstract public class ContactEditorBaseFragment extends Fragment implements
}
mState.setJoinWithRawContacts(rawContactIds);
- save(SaveMode.RELOAD);
+ save(SaveMode.RELOAD, /* backPressed =*/ false);
}
@Override
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 4cda73d93..e9b371503 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -118,7 +118,7 @@ public class ContactEditorFragment extends ContactEditorBaseFragment implements
// If anything was left unsaved, save it now and return to the compact editor.
if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
- save(SaveMode.COMPACT);
+ save(SaveMode.COMPACT, /* backPressed =*/ false);
}
}
@@ -133,7 +133,7 @@ public class ContactEditorFragment extends ContactEditorBaseFragment implements
public boolean onOptionsItemSelected(MenuItem item) {
// Override the home/done options to return to the compact editor
if (item.getItemId() == android.R.id.home || item.getItemId() == R.id.menu_done) {
- return save(SaveMode.COMPACT);
+ return save(SaveMode.COMPACT, /* backPressed =*/ true);
}
return super.onOptionsItemSelected(item);
}
@@ -539,7 +539,7 @@ public class ContactEditorFragment extends ContactEditorBaseFragment implements
}
@Override
- protected boolean doSaveAction(int saveMode) {
+ protected boolean doSaveAction(int saveMode, boolean backPressed) {
// Save contact and reload the compact editor after saving.
// Note, the full resolution photos Bundle must be passed to the ContactSaveService
// and then passed along in the result Intent in order for the compact editor to
@@ -548,7 +548,7 @@ public class ContactEditorFragment extends ContactEditorBaseFragment implements
Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
SAVE_MODE_EXTRA_KEY, saveMode, isEditingUserProfile(),
((Activity) mContext).getClass(), ContactEditorActivity.ACTION_SAVE_COMPLETED,
- mUpdatedPhotos);
+ mUpdatedPhotos, backPressed);
mContext.startService(intent);
// Don't try to save the same photos twice.
diff --git a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
index 3609fbcb4..de7042480 100644
--- a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
+++ b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
@@ -94,7 +94,7 @@ public class InvisibleContactUtil {
final Intent intent = ContactSaveService.createSaveContactIntent(
context,
contactDeltaList, "", 0, false, QuickContactActivity.class,
- Intent.ACTION_VIEW, null);
+ Intent.ACTION_VIEW, null, /* backPressed =*/ false);
context.startService(intent);
}