Make sure that Toast is always shown by Meta-Space.

It turns out that my previous CL [1] does not always show Toast when
Meta-Space is hit multiple times in a short period.  With this CL, we
attempt to make sure that the Toast is shown every time when Meta-Space
rotates the current IME subtype.

This CL also removes a rule that we do not show Toast when the IME
window has InputMethodService.IME_VISIBLE bit as it turns out to be
confusing.  In Android N, we just provide a consistent behavior
no matter the IME window is visible or not.

 [1]: If3fe17adbffe4c1125783fc77fed3cfe78fc7933
      ebda7d7ae1

Bug: 27547054
Bug: 28127795
Change-Id: I551c51cd672dba6e7693d23cb181007f51b0de9d
This commit is contained in:
Yohei Yukawa
2016-04-12 01:19:31 -07:00
parent e544d408c0
commit b2f901ab22

View File

@@ -2966,16 +2966,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
return;
}
setInputMethodLocked(nextSubtype.mImi.getId(), nextSubtype.mSubtypeId);
if (mSubtypeSwitchedByShortCutToast != null) {
mSubtypeSwitchedByShortCutToast.cancel();
mSubtypeSwitchedByShortCutToast = null;
}
if ((mImeWindowVis & InputMethodService.IME_VISIBLE) != 0) {
// IME window is shown. The user should be able to visually understand that the
// subtype is changed in most of cases. To avoid UI overlap, we do not show a toast
// in this case.
return;
}
final InputMethodInfo newInputMethodInfo = mMethodMap.get(mCurMethodId);
if (newInputMethodInfo == null) {
return;
@@ -2983,8 +2973,12 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
final CharSequence toastText = InputMethodUtils.getImeAndSubtypeDisplayName(mContext,
newInputMethodInfo, mCurrentSubtype);
if (!TextUtils.isEmpty(toastText)) {
mSubtypeSwitchedByShortCutToast = Toast.makeText(mContext, toastText.toString(),
Toast.LENGTH_SHORT);
if (mSubtypeSwitchedByShortCutToast == null) {
mSubtypeSwitchedByShortCutToast = Toast.makeText(mContext, toastText,
Toast.LENGTH_SHORT);
} else {
mSubtypeSwitchedByShortCutToast.setText(toastText);
}
mSubtypeSwitchedByShortCutToast.show();
}
}