diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java index e52ab7ae9a7..627e7c66d76 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java @@ -21,6 +21,9 @@ import com.android.settings.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.os.Message; +import android.os.Messenger; +import android.os.RemoteException; import android.view.View; public class UserDictionaryAddWordActivity extends Activity { @@ -30,6 +33,9 @@ public class UserDictionaryAddWordActivity extends Activity { public static final String MODE_EDIT_ACTION = "com.android.settings.USER_DICTIONARY_EDIT"; public static final String MODE_INSERT_ACTION = "com.android.settings.USER_DICTIONARY_INSERT"; + private static final int CODE_WORD_ADDED = 0; + private static final int CODE_CANCEL = 1; + private UserDictionaryAddWordContents mContents; @Override @@ -67,12 +73,29 @@ public class UserDictionaryAddWordActivity extends Activity { mContents.saveStateIntoBundle(outState); } + private void reportBackToCaller(final Bundle result) { + final Intent senderIntent = getIntent(); + final Object listener = senderIntent.getExtras().get("listener"); + if (!(listener instanceof Messenger)) return; // This will work if listener is null too. + final Messenger messenger = (Messenger)listener; + + final Message m = Message.obtain(); + m.obj = result; + m.what = (null != result) ? CODE_WORD_ADDED : CODE_CANCEL; + try { + messenger.send(m); + } catch (RemoteException e) { + // Couldn't report back, but there is nothing we can do to fix it + } + } + public void onClickCancel(final View v) { + reportBackToCaller(null); finish(); } public void onClickConfirm(final View v) { - mContents.apply(this); + reportBackToCaller(mContents.apply(this)); finish(); } } diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java index e46b19ce58b..f28b4e503a2 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java @@ -43,6 +43,8 @@ public class UserDictionaryAddWordContents { public static final String EXTRA_WORD = "word"; public static final String EXTRA_SHORTCUT = "shortcut"; public static final String EXTRA_LOCALE = "locale"; + public static final String EXTRA_ORIGINAL_WORD = "originalWord"; + public static final String EXTRA_ORIGINAL_SHORTCUT = "originalShortcut"; public static final int MODE_EDIT = 0; public static final int MODE_INSERT = 1; @@ -82,9 +84,13 @@ public class UserDictionaryAddWordContents { /* package */ void saveStateIntoBundle(final Bundle outState) { outState.putString(EXTRA_WORD, mWordEditText.getText().toString()); + outState.putString(EXTRA_ORIGINAL_WORD, mOldWord); if (null != mShortcutEditText) { outState.putString(EXTRA_SHORTCUT, mShortcutEditText.getText().toString()); } + if (null != mOldShortcut) { + outState.putString(EXTRA_ORIGINAL_SHORTCUT, mOldShortcut); + } outState.putString(EXTRA_LOCALE, mLocale); } @@ -97,7 +103,7 @@ public class UserDictionaryAddWordContents { // If we are in add mode, nothing was added, so we don't need to do anything. } - /* package */ void apply(final Context context) { + /* package */ Bundle apply(final Context context) { final ContentResolver resolver = context.getContentResolver(); if (MODE_EDIT == mMode && !TextUtils.isEmpty(mOldWord)) { // Mode edit: remove the old entry. @@ -117,13 +123,13 @@ public class UserDictionaryAddWordContents { } if (TextUtils.isEmpty(newWord)) { // If the word is somehow empty, don't insert it. - return; + return null; } // 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 // case the exact same thing we want to insert is already there, or B. the word // exists with at least one shortcut, in which case it has priority on our word. - if (hasWord(newWord, context)) return; + if (hasWord(newWord, context)) return null; // Disallow duplicates. If the same word with no shortcut is defined, remove it; if // the same word with the same shortcut is defined, remove it; but we don't mind if @@ -139,6 +145,10 @@ public class UserDictionaryAddWordContents { UserDictionary.Words.addWord(context, newWord.toString(), FREQUENCY_FOR_USER_DICTIONARY_ADDS, newShortcut, TextUtils.isEmpty(mLocale) ? null : Utils.createLocaleFromString(mLocale)); + + final Bundle returnValues = new Bundle(); + saveStateIntoBundle(returnValues); + return returnValues; } private static final String[] HAS_WORD_PROJECTION = { UserDictionary.Words.WORD };