From fbedf1a3978d5dfc4a886e4c7107d4bc1923f740 Mon Sep 17 00:00:00 2001 From: satok Date: Fri, 26 Aug 2011 15:48:50 +0900 Subject: Fix NPE in setCurrentSpellCheckerSubtype Change-Id: I9fce999f91dcccd2f877a0326c4f2e3ac9024f85 --- .../android/view/textservice/TextServicesManager.java | 7 +++++-- .../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); } -- cgit v1.1