From 89fe1f50881180730e451cbe6ec4d1f8dc67acf1 Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Wed, 15 May 2013 18:53:56 +0900 Subject: [PATCH] Add a method to work around apps broken by recorrection Bug: 8944307 Change-Id: I8986622554f30aaf4f595099c4ab5652b75c972c --- .../compat/AppWorkaroundsHelper.java | 29 +++++++++++++++++++ .../compat/AppWorkaroundsUtils.java | 7 +++++ .../android/inputmethod/latin/LatinIME.java | 4 +++ 3 files changed, 40 insertions(+) create mode 100644 java/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java diff --git a/java/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java b/java/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java new file mode 100644 index 000000000..21535e421 --- /dev/null +++ b/java/src/com/android/inputmethod/compat/AppWorkaroundsHelper.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.compat; + +import android.content.pm.PackageInfo; + +public class AppWorkaroundsHelper { + private AppWorkaroundsHelper() { + // This helper class is not publicly instantiable. + } + + public static boolean evaluateIsBrokenByRecorrection(final PackageInfo info) { + return false; + } +} diff --git a/java/src/com/android/inputmethod/compat/AppWorkaroundsUtils.java b/java/src/com/android/inputmethod/compat/AppWorkaroundsUtils.java index 5594ccba5..7e9e2e37b 100644 --- a/java/src/com/android/inputmethod/compat/AppWorkaroundsUtils.java +++ b/java/src/com/android/inputmethod/compat/AppWorkaroundsUtils.java @@ -24,9 +24,16 @@ import android.os.Build.VERSION_CODES; */ public class AppWorkaroundsUtils { private PackageInfo mPackageInfo; // May be null + private boolean mIsBrokenByRecorrection = false; public void setPackageInfo(final PackageInfo packageInfo) { mPackageInfo = packageInfo; + mIsBrokenByRecorrection = AppWorkaroundsHelper.evaluateIsBrokenByRecorrection( + packageInfo); + } + + public boolean isBrokenByRecorrection() { + return mIsBrokenByRecorrection; } public boolean isBeforeJellyBean() { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 93495956d..c464a7067 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -2450,6 +2450,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen * do nothing. */ private void restartSuggestionsOnWordTouchedByCursor() { + // HACK: We may want to special-case some apps that exhibit bad behavior in case of + // recorrection. This is a temporary, stopgap measure that will be removed later. + // TODO: remove this. + if (mAppWorkAroundsUtils.isBrokenByRecorrection()) return; // If the cursor is not touching a word, or if there is a selection, return right away. if (mLastSelectionStart != mLastSelectionEnd) return; // If we don't know the cursor location, return.