summaryrefslogtreecommitdiffstats
path: root/src/com/android/contacts/editor/ContactEditorBaseFragment.java
diff options
context:
space:
mode:
authorWalter Jang <wjang@google.com>2015-05-22 09:38:42 -0700
committerWalter Jang <wjang@google.com>2015-05-27 10:00:51 -0700
commit3e76408e47ca135c092b5eee73ae49d8697b0a10 (patch)
treeb4bef74fc3e4af59260125288f818c32c60fa7a9 /src/com/android/contacts/editor/ContactEditorBaseFragment.java
parent117082633dd4f358816a1daed08bdf9e5aaa8e3c (diff)
downloadpackages_apps_Contacts-3e76408e47ca135c092b5eee73ae49d8697b0a10.tar.gz
packages_apps_Contacts-3e76408e47ca135c092b5eee73ae49d8697b0a10.tar.bz2
packages_apps_Contacts-3e76408e47ca135c092b5eee73ae49d8697b0a10.zip
Distinguish between editor back button presses and framework stopage
We carry whether the editor fragment is being stopped because of a back button press or because the framework stopped the hosting Activity all the way through the various editor fragment callbacks and the ContactSaveService because it is not until ContactEditorBaseActivity.onSaveFinished where we start the next Intent -- starting it causes a "flash" if recents is clicked and follwed by an immediate starting of the next editor Activity, which is the bug that was filed. With this change, we only use the ContactSaveService resultIntent to go back to the compact editor on back presses. The expected behavior/tested scenarios are described at go/b21198041 Bug 21198041 Bug 19624360 Change-Id: Ic350e12aa447cff81747e003f504f25100bd5c60
Diffstat (limited to 'src/com/android/contacts/editor/ContactEditorBaseFragment.java')
-rw-r--r--src/com/android/contacts/editor/ContactEditorBaseFragment.java99
1 files changed, 56 insertions, 43 deletions
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