summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsatok <satok@google.com>2011-08-26 15:48:50 +0900
committersatok <satok@google.com>2011-08-26 16:00:23 +0900
commitfbedf1a3978d5dfc4a886e4c7107d4bc1923f740 (patch)
tree177a9b25b72c94b976d15cd6d1da0f622215d91f
parent2388a7ba6218f44400ee78016282cb96c02dfc54 (diff)
downloadframeworks_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.java7
-rw-r--r--services/java/com/android/server/TextServicesManagerService.java15
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);
}