diff options
author | satok <satok@google.com> | 2011-08-26 15:48:50 +0900 |
---|---|---|
committer | satok <satok@google.com> | 2011-08-26 16:00:23 +0900 |
commit | fbedf1a3978d5dfc4a886e4c7107d4bc1923f740 (patch) | |
tree | 177a9b25b72c94b976d15cd6d1da0f622215d91f | |
parent | 2388a7ba6218f44400ee78016282cb96c02dfc54 (diff) | |
download | frameworks_base-fbedf1a3978d5dfc4a886e4c7107d4bc1923f740.zip frameworks_base-fbedf1a3978d5dfc4a886e4c7107d4bc1923f740.tar.gz frameworks_base-fbedf1a3978d5dfc4a886e4c7107d4bc1923f740.tar.bz2 |
Fix NPE in setCurrentSpellCheckerSubtype
Change-Id: I9fce999f91dcccd2f877a0326c4f2e3ac9024f85
-rw-r--r-- | core/java/android/view/textservice/TextServicesManager.java | 7 | ||||
-rw-r--r-- | services/java/com/android/server/TextServicesManagerService.java | 15 |
2 files changed, 12 insertions, 10 deletions
diff --git a/core/java/android/view/textservice/TextServicesManager.java b/core/java/android/view/textservice/TextServicesManager.java index 89c4bcb..3e376da 100644 --- a/core/java/android/view/textservice/TextServicesManager.java +++ b/core/java/android/view/textservice/TextServicesManager.java @@ -162,10 +162,13 @@ public final class TextServicesManager { */ public void setSpellCheckerSubtype(SpellCheckerSubtype subtype) { try { + final int hashCode; if (subtype == null) { - throw new NullPointerException("SpellCheckerSubtype is null."); + hashCode = 0; + } else { + hashCode = subtype.hashCode(); } - sService.setCurrentSpellCheckerSubtype(null, subtype.hashCode()); + sService.setCurrentSpellCheckerSubtype(null, hashCode); } catch (RemoteException e) { Log.e(TAG, "Error in setSpellCheckerSubtype:" + e); } diff --git a/services/java/com/android/server/TextServicesManagerService.java b/services/java/com/android/server/TextServicesManagerService.java index 5eae456..c65f299 100644 --- a/services/java/com/android/server/TextServicesManagerService.java +++ b/services/java/com/android/server/TextServicesManagerService.java @@ -217,6 +217,9 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { return null; } final int hashCode = Integer.valueOf(subtypeHashCodeStr); + if (hashCode == 0) { + return null; + } for (int i = 0; i < sci.getSubtypeCount(); ++i) { final SpellCheckerSubtype scs = sci.getSubtypeAt(i); if (scs.hashCode() == hashCode) { @@ -416,21 +419,17 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { Slog.w(TAG, "setCurrentSpellCheckerSubtype: " + hashCode); } final SpellCheckerInfo sci = getCurrentSpellChecker(null); - if (sci == null) return; - boolean found = false; - for (int i = 0; i < sci.getSubtypeCount(); ++i) { + int tempHashCode = 0; + for (int i = 0; sci != null && i < sci.getSubtypeCount(); ++i) { if(sci.getSubtypeAt(i).hashCode() == hashCode) { - found = true; + tempHashCode = hashCode; break; } } - if (!found) { - return; - } final long ident = Binder.clearCallingIdentity(); try { Settings.Secure.putString(mContext.getContentResolver(), - Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, String.valueOf(hashCode)); + Settings.Secure.SELECTED_SPELL_CHECKER_SUBTYPE, String.valueOf(tempHashCode)); } finally { Binder.restoreCallingIdentity(ident); } |