aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/LatinIME.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod/latin/LatinIME.java')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java48
1 files changed, 47 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 25a5de250..c2d9f965f 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -30,6 +30,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.graphics.Color;
import android.inputmethodservice.InputMethodService;
import android.media.AudioManager;
import android.os.Debug;
@@ -53,7 +54,9 @@ import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.accessibility.AccessibilityUtils;
import com.android.inputmethod.annotations.UsedForTesting;
+import com.android.inputmethod.compat.EditorInfoCompatUtils;
import com.android.inputmethod.compat.InputMethodServiceCompatUtils;
+import com.android.inputmethod.compat.InputMethodSubtypeCompatUtils;
import com.android.inputmethod.compat.ViewOutlineProviderCompatUtils;
import com.android.inputmethod.compat.ViewOutlineProviderCompatUtils.InsetsUpdater;
import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
@@ -175,8 +178,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private static final int MSG_WAIT_FOR_DICTIONARY_LOAD = 8;
private static final int MSG_DEALLOCATE_MEMORY = 9;
private static final int MSG_RESUME_SUGGESTIONS_FOR_START_INPUT = 10;
+ private static final int MSG_SWITCH_LANGUAGE_AUTOMATICALLY = 11;
// Update this when adding new messages
- private static final int MSG_LAST = MSG_RESUME_SUGGESTIONS_FOR_START_INPUT;
+ private static final int MSG_LAST = MSG_SWITCH_LANGUAGE_AUTOMATICALLY;
private static final int ARG1_NOT_GESTURE_INPUT = 0;
private static final int ARG1_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT = 1;
@@ -270,6 +274,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
case MSG_DEALLOCATE_MEMORY:
latinIme.deallocateMemory();
break;
+ case MSG_SWITCH_LANGUAGE_AUTOMATICALLY:
+ latinIme.switchLanguage((InputMethodSubtype)msg.obj);
+ break;
}
}
@@ -388,6 +395,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
obtainMessage(MSG_UPDATE_TAIL_BATCH_INPUT_COMPLETED, suggestedWords).sendToTarget();
}
+ public void postSwitchLanguage(final InputMethodSubtype subtype) {
+ obtainMessage(MSG_SWITCH_LANGUAGE_AUTOMATICALLY, subtype).sendToTarget();
+ }
+
// Working variables for the following methods.
private boolean mIsOrientationChanging;
private boolean mPendingSuccessiveImsCallback;
@@ -794,6 +805,19 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
void onStartInputInternal(final EditorInfo editorInfo, final boolean restarting) {
super.onStartInput(editorInfo, restarting);
+
+ // If the primary hint language does not match the current subtype language, then try
+ // to switch to the primary hint language.
+ // TODO: Support all the locales in EditorInfo#hintLocales.
+ final Locale primaryHintLocale = EditorInfoCompatUtils.getPrimaryHintLocale(editorInfo);
+ if (primaryHintLocale == null) {
+ return;
+ }
+ final InputMethodSubtype newSubtype = mRichImm.findSubtypeByLocale(primaryHintLocale);
+ if (newSubtype == null || newSubtype.equals(mRichImm.getCurrentSubtype().getRawSubtype())) {
+ return;
+ }
+ mHandler.postSwitchLanguage(newSubtype);
}
@SuppressWarnings("deprecation")
@@ -968,12 +992,19 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
@Override
+ public void onWindowShown() {
+ super.onWindowShown();
+ setNavigationBarVisibility(isInputViewShown());
+ }
+
+ @Override
public void onWindowHidden() {
super.onWindowHidden();
final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
if (mainKeyboardView != null) {
mainKeyboardView.closing();
}
+ setNavigationBarVisibility(false);
}
void onFinishInputInternal() {
@@ -1293,6 +1324,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
return mOptionsDialog != null && mOptionsDialog.isShowing();
}
+ public void switchLanguage(final InputMethodSubtype subtype) {
+ final IBinder token = getWindow().getWindow().getAttributes().token;
+ mRichImm.setInputMethodAndSubtype(token, subtype);
+ }
+
// TODO: Revise the language switch key behavior to make it much smarter and more reasonable.
public void switchToNextSubtype() {
final IBinder token = getWindow().getWindow().getAttributes().token;
@@ -1650,6 +1686,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// Hooks for hardware keyboard
@Override
public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) {
+ if (mEmojiAltPhysicalKeyDetector == null) {
+ mEmojiAltPhysicalKeyDetector = new EmojiAltPhysicalKeyDetector(
+ getApplicationContext().getResources());
+ }
+ mEmojiAltPhysicalKeyDetector.onKeyDown(keyEvent);
if (!ProductionFlags.IS_HARDWARE_KEYBOARD_SUPPORTED) {
return super.onKeyDown(keyCode, keyEvent);
}
@@ -1865,4 +1906,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
return mRichImm.shouldOfferSwitchingToNextInputMethod(token, fallbackValue);
}
+
+ private void setNavigationBarVisibility(final boolean visible) {
+ // Color.BLACK is ignored and default IME navigation bar color is used.
+ getWindow().getWindow().setNavigationBarColor(visible ? Color.BLACK : Color.TRANSPARENT);
+ }
}