diff options
| author | 2016-03-17 02:02:59 +0000 | |
|---|---|---|
| committer | 2016-03-17 02:03:00 +0000 | |
| commit | fb8aa06883faae598512c26d95c5dfeab7f213a5 (patch) | |
| tree | 6aa1755076caae6b5fb0d7be9390f832fbf49349 | |
| parent | 60dbc357844106fdebb36209c8c86504db323fb9 (diff) | |
| parent | 08ce18728cbdadbf376d2d1014daa06cf05c295a (diff) | |
Merge changes I068f8821,Ibcf12746,I169ad495 into nyc-dev
* changes:
Add more @NonNull/@Nullable to TextServicesSettings.
Remove an unnecessary int to String conversion.
Add more @NonNull/@Nullable to InputMethodSettings.
4 files changed, 68 insertions, 37 deletions
diff --git a/core/java/android/view/textservice/SpellCheckerSubtype.java b/core/java/android/view/textservice/SpellCheckerSubtype.java index df336988cf8f..35d3bf958feb 100644 --- a/core/java/android/view/textservice/SpellCheckerSubtype.java +++ b/core/java/android/view/textservice/SpellCheckerSubtype.java @@ -50,7 +50,10 @@ public final class SpellCheckerSubtype implements Parcelable { private static final String TAG = SpellCheckerSubtype.class.getSimpleName(); private static final String EXTRA_VALUE_PAIR_SEPARATOR = ","; private static final String EXTRA_VALUE_KEY_VALUE_SEPARATOR = "="; - private static final int SUBTYPE_ID_NONE = 0; + /** + * @hide + */ + public static final int SUBTYPE_ID_NONE = 0; private static final String SUBTYPE_LANGUAGE_TAG_NONE = ""; private final int mSubtypeId; diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java index 90ee05ec944b..9461ce686dbe 100644 --- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java +++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java @@ -854,7 +854,8 @@ public class InputMethodUtils { private final HashMap<String, String> mCopyOnWriteDataStore = new HashMap<>(); private boolean mCopyOnWrite = false; - private String mEnabledInputMethodsStrCache; + @NonNull + private String mEnabledInputMethodsStrCache = ""; @UserIdInt private int mCurrentUserId; private int[] mCurrentProfileIds = new int[0]; @@ -949,7 +950,7 @@ public class InputMethodUtils { // TODO: mCurrentProfileIds should be updated here. } - private void putString(final String key, final String str) { + private void putString(@NonNull final String key, @Nullable final String str) { if (mCopyOnWrite) { mCopyOnWriteDataStore.put(key, str); } else { @@ -957,12 +958,15 @@ public class InputMethodUtils { } } - private String getString(final String key) { + @Nullable + private String getString(@NonNull final String key, @Nullable final String defaultValue) { + final String result; if (mCopyOnWrite && mCopyOnWriteDataStore.containsKey(key)) { - final String result = mCopyOnWriteDataStore.get(key); - return result != null ? result : ""; + result = mCopyOnWriteDataStore.get(key); + } else { + result = Settings.Secure.getStringForUser(mResolver, key, mCurrentUserId); } - return Settings.Secure.getStringForUser(mResolver, key, mCurrentUserId); + return result != null ? result : defaultValue; } private void putInt(final String key, final int value) { @@ -1124,16 +1128,24 @@ public class InputMethodUtils { return res; } - private void putEnabledInputMethodsStr(String str) { + private void putEnabledInputMethodsStr(@Nullable String str) { if (DEBUG) { Slog.d(TAG, "putEnabledInputMethodStr: " + str); } - putString(Settings.Secure.ENABLED_INPUT_METHODS, str); - mEnabledInputMethodsStrCache = str; + if (TextUtils.isEmpty(str)) { + // OK to coalesce to null, since getEnabledInputMethodsStr() can take care of the + // empty data scenario. + putString(Settings.Secure.ENABLED_INPUT_METHODS, null); + } else { + putString(Settings.Secure.ENABLED_INPUT_METHODS, str); + } + // TODO: Update callers of putEnabledInputMethodsStr to make str @NonNull. + mEnabledInputMethodsStrCache = (str != null ? str : ""); } + @NonNull public String getEnabledInputMethodsStr() { - mEnabledInputMethodsStrCache = getString(Settings.Secure.ENABLED_INPUT_METHODS); + mEnabledInputMethodsStrCache = getString(Settings.Secure.ENABLED_INPUT_METHODS, ""); if (DEBUG) { Slog.d(TAG, "getEnabledInputMethodsStr: " + mEnabledInputMethodsStrCache + ", " + mCurrentUserId); @@ -1187,11 +1199,17 @@ public class InputMethodUtils { saveSubtypeHistory(subtypeHistory, imeId, subtypeId); } - private void putSubtypeHistoryStr(String str) { + private void putSubtypeHistoryStr(@NonNull String str) { if (DEBUG) { Slog.d(TAG, "putSubtypeHistoryStr: " + str); } - putString(Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY, str); + if (TextUtils.isEmpty(str)) { + // OK to coalesce to null, since getSubtypeHistoryStr() can take care of the empty + // data scenario. + putString(Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY, null); + } else { + putString(Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY, str); + } } public Pair<String, String> getLastInputMethodAndSubtypeLocked() { @@ -1308,8 +1326,9 @@ public class InputMethodUtils { return imsList; } + @NonNull private String getSubtypeHistoryStr() { - final String history = getString(Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY); + final String history = getString(Settings.Secure.INPUT_METHODS_SUBTYPE_HISTORY, ""); if (DEBUG) { Slog.d(TAG, "getSubtypeHistoryStr: " + history); } @@ -1332,8 +1351,9 @@ public class InputMethodUtils { putInt(Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE, subtypeId); } + @Nullable public String getSelectedInputMethod() { - final String imi = getString(Settings.Secure.DEFAULT_INPUT_METHOD); + final String imi = getString(Settings.Secure.DEFAULT_INPUT_METHOD, null); if (DEBUG) { Slog.d(TAG, "getSelectedInputMethodStr: " + imi); } diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 9b8f2d2d7d57..00a49bdb7273 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -456,6 +456,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub class SettingsObserver extends ContentObserver { int mUserId; boolean mRegistered = false; + @NonNull String mLastEnabled = ""; /** diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java index 306e9331671e..3eb20a0c580e 100644 --- a/services/core/java/com/android/server/TextServicesManagerService.java +++ b/services/core/java/com/android/server/TextServicesManagerService.java @@ -28,6 +28,7 @@ import com.android.internal.textservice.ITextServicesSessionListener; import org.xmlpull.v1.XmlPullParserException; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.ActivityManagerNative; import android.app.AppGlobals; @@ -464,9 +465,10 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { return null; } synchronized (mSpellCheckerMap) { - final String subtypeHashCodeStr = mSettings.getSelectedSpellCheckerSubtype(); + final int subtypeHashCode = + mSettings.getSelectedSpellCheckerSubtype(SpellCheckerSubtype.SUBTYPE_ID_NONE); if (DBG) { - Slog.w(TAG, "getCurrentSpellCheckerSubtype: " + subtypeHashCodeStr); + Slog.w(TAG, "getCurrentSpellCheckerSubtype: " + subtypeHashCode); } final SpellCheckerInfo sci = getCurrentSpellChecker(null); if (sci == null || sci.getSubtypeCount() == 0) { @@ -475,17 +477,12 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } return null; } - final int hashCode; - if (!TextUtils.isEmpty(subtypeHashCodeStr)) { - hashCode = Integer.valueOf(subtypeHashCodeStr); - } else { - hashCode = 0; - } - if (hashCode == 0 && !allowImplicitlySelectedSubtype) { + if (subtypeHashCode == SpellCheckerSubtype.SUBTYPE_ID_NONE + && !allowImplicitlySelectedSubtype) { return null; } String candidateLocale = null; - if (hashCode == 0) { + if (subtypeHashCode == 0) { // Spell checker language settings == "auto" final InputMethodManager imm = mContext.getSystemService(InputMethodManager.class); if (imm != null) { @@ -507,7 +504,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { SpellCheckerSubtype candidate = null; for (int i = 0; i < sci.getSubtypeCount(); ++i) { final SpellCheckerSubtype scs = sci.getSubtypeAt(i); - if (hashCode == 0) { + if (subtypeHashCode == 0) { final String scsLocale = scs.getLocale(); if (candidateLocale.equals(scsLocale)) { return scs; @@ -518,7 +515,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { candidate = scs; } } - } else if (scs.hashCode() == hashCode) { + } else if (scs.hashCode() == subtypeHashCode) { if (DBG) { Slog.w(TAG, "Return subtype " + scs.hashCode() + ", input= " + locale + ", " + scs.getLocale()); @@ -1096,12 +1093,15 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { } } - private String getString(final String key) { + @Nullable + private String getString(@NonNull final String key, @Nullable final String defaultValue) { + final String result; if (mCopyOnWrite && mCopyOnWriteDataStore.containsKey(key)) { - final String result = mCopyOnWriteDataStore.get(key); - return result != null ? result : ""; + result = mCopyOnWriteDataStore.get(key); + } else { + result = Settings.Secure.getStringForUser(mResolver, key, mCurrentUserId); } - return Settings.Secure.getStringForUser(mResolver, key, mCurrentUserId); + return result != null ? result : defaultValue; } private void putInt(final String key, final int value) { @@ -1149,24 +1149,31 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { return mCurrentUserId; } - public void putSelectedSpellChecker(String sciId) { - putString(Settings.Secure.SELECTED_SPELL_CHECKER, sciId); + public void putSelectedSpellChecker(@Nullable String sciId) { + if (TextUtils.isEmpty(sciId)) { + // OK to coalesce to null, since getSelectedSpellChecker() can take care of the + // empty data scenario. + putString(Settings.Secure.SELECTED_SPELL_CHECKER, null); + } else { + putString(Settings.Secure.SELECTED_SPELL_CHECKER, sciId); + } } public void putSelectedSpellCheckerSubtype(int hashCode) { - putString(Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, String.valueOf(hashCode)); + putInt(Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, hashCode); } public void setSpellCheckerEnabled(boolean enabled) { putBoolean(Settings.Secure.SPELL_CHECKER_ENABLED, enabled); } + @NonNull public String getSelectedSpellChecker() { - return getString(Settings.Secure.SELECTED_SPELL_CHECKER); + return getString(Settings.Secure.SELECTED_SPELL_CHECKER, ""); } - public String getSelectedSpellCheckerSubtype() { - return getString(Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE); + public int getSelectedSpellCheckerSubtype(final int defaultValue) { + return getInt(Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, defaultValue); } public boolean isSpellCheckerEnabled() { |