From edb2d2380214fa3a6d5416cc916f58360214d123 Mon Sep 17 00:00:00 2001
From: Tom Ouyang <ouyang@google.com>
Date: Tue, 24 Feb 2015 10:30:27 -0800
Subject: [PATCH] Check for null TextRange in
 InputLogic.unlearnWordBeingDeleted

Change-Id: Ia0df0ab740c76185f94966f59a74a6ebdd1cffe8
---
 .../inputmethod/latin/inputlogic/InputLogic.java    | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 56be23f5be..c465f6c0b9 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -1094,8 +1094,8 @@ public final class InputLogic {
                     int totalDeletedLength = 1;
                     if (mDeleteCount > Constants.DELETE_ACCELERATE_AT) {
                         // If this is an accelerated (i.e., double) deletion, then we need to
-                        // consider unlearning here too because we may have just entered the
-                        // previous word, and the next deletion will currupt it.
+                        // consider unlearning here because we may have already reached
+                        // the previous word, and will lose it after next deletion.
                         hasUnlearnedWordBeingDeleted |= unlearnWordBeingDeleted(
                                 inputTransaction.mSettingsValues, currentKeyboardScriptId);
                         sendDownUpKeyEvent(KeyEvent.KEYCODE_DEL);
@@ -1121,8 +1121,8 @@ public final class InputLogic {
                     int totalDeletedLength = lengthToDelete;
                     if (mDeleteCount > Constants.DELETE_ACCELERATE_AT) {
                         // If this is an accelerated (i.e., double) deletion, then we need to
-                        // consider unlearning here too because we may have just entered the
-                        // previous word, and the next deletion will currupt it.
+                        // consider unlearning here because we may have already reached
+                        // the previous word, and will lose it after next deletion.
                         hasUnlearnedWordBeingDeleted |= unlearnWordBeingDeleted(
                                 inputTransaction.mSettingsValues, currentKeyboardScriptId);
                         final int codePointBeforeCursorToDeleteAgain =
@@ -1166,6 +1166,11 @@ public final class InputLogic {
             final TextRange range = mConnection.getWordRangeAtCursor(
                     settingsValues.mSpacingAndPunctuations,
                     currentKeyboardScriptId);
+            if (range == null) {
+                // TODO(zivkovic): Check for bad connection before getting this far.
+                // Happens if we don't have an input connection at all.
+                return false;
+            }
             final String wordBeingDeleted = range.mWord.toString();
             if (!wordBeingDeleted.isEmpty()) {
                 unlearnWord(wordBeingDeleted, settingsValues,
-- 
GitLab