Merge "Fix a bug with multiple word insertion."

main
Jean Chalard 2013-07-25 08:34:40 +00:00 committed by Android (Google) Code Review
commit e408bbb5bf
2 changed files with 30 additions and 3 deletions

View File

@ -65,6 +65,8 @@ public class UserDictionaryAddWordContents {
private String mLocale; private String mLocale;
private final String mOldWord; private final String mOldWord;
private final String mOldShortcut; private final String mOldShortcut;
private String mSavedWord;
private String mSavedShortcut;
/* package */ UserDictionaryAddWordContents(final View view, final Bundle args) { /* package */ UserDictionaryAddWordContents(final View view, final Bundle args) {
mWordEditText = (EditText)view.findViewById(R.id.user_dictionary_add_word_text); mWordEditText = (EditText)view.findViewById(R.id.user_dictionary_add_word_text);
@ -96,6 +98,16 @@ public class UserDictionaryAddWordContents {
updateLocale(args.getString(EXTRA_LOCALE)); updateLocale(args.getString(EXTRA_LOCALE));
} }
/* package */ UserDictionaryAddWordContents(final View view,
final UserDictionaryAddWordContents oldInstanceToBeEdited) {
mWordEditText = (EditText)view.findViewById(R.id.user_dictionary_add_word_text);
mShortcutEditText = (EditText)view.findViewById(R.id.user_dictionary_add_shortcut);
mMode = MODE_EDIT;
mOldWord = oldInstanceToBeEdited.mSavedWord;
mOldShortcut = oldInstanceToBeEdited.mSavedShortcut;
updateLocale(mLocale);
}
// locale may be null, this means default locale // locale may be null, this means default locale
// It may also be the empty string, which means "all locales" // It may also be the empty string, which means "all locales"
/* package */ void updateLocale(final String locale) { /* package */ void updateLocale(final String locale) {
@ -149,6 +161,8 @@ public class UserDictionaryAddWordContents {
// If the word is somehow empty, don't insert it. // If the word is somehow empty, don't insert it.
return CODE_CANCEL; return CODE_CANCEL;
} }
mSavedWord = newWord;
mSavedShortcut = newShortcut;
// If there is no shortcut, and the word already exists in the database, then we // If there is no shortcut, and the word already exists in the database, then we
// should not insert, because either A. the word exists with no shortcut, in which // should not insert, because either A. the word exists with no shortcut, in which
// case the exact same thing we want to insert is already there, or B. the word // case the exact same thing we want to insert is already there, or B. the word

View File

@ -57,23 +57,36 @@ public class UserDictionaryAddWordFragment extends Fragment
private boolean mIsDeleting = false; private boolean mIsDeleting = false;
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true); setHasOptionsMenu(true);
// Keep the instance so that we remember mContents when configuration changes (eg rotation)
setRetainInstance(true);
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
final Bundle savedState) {
mRootView = inflater.inflate(R.layout.user_dictionary_add_word_fullscreen, null); mRootView = inflater.inflate(R.layout.user_dictionary_add_word_fullscreen, null);
mIsDeleting = false; mIsDeleting = false;
// If we have a non-null mContents object, it's the old value before a configuration
// change (eg rotation) so we need to use its values. Otherwise, read from the arguments.
if (null == mContents) { if (null == mContents) {
mContents = new UserDictionaryAddWordContents(mRootView, getArguments()); mContents = new UserDictionaryAddWordContents(mRootView, getArguments());
} else {
// We create a new mContents object to account for the new situation : a word has
// been added to the user dictionary when we started rotating, and we are now editing
// it. That means in particular if the word undergoes any change, the old version should
// be updated, so the mContents object needs to switch to EDIT mode if it was in
// INSERT mode.
mContents = new UserDictionaryAddWordContents(mRootView,
mContents /* oldInstanceToBeEdited */);
} }
return mRootView; return mRootView;
} }
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
final MenuItem actionItemAdd = menu.add(0, OPTIONS_MENU_ADD, 0, final MenuItem actionItemAdd = menu.add(0, OPTIONS_MENU_ADD, 0,
R.string.user_dict_settings_add_menu_title).setIcon(R.drawable.ic_menu_add); R.string.user_dict_settings_add_menu_title).setIcon(R.drawable.ic_menu_add);
actionItemAdd.setShowAsAction( actionItemAdd.setShowAsAction(