Loading api/current.txt +3 −2 Original line number Diff line number Diff line Loading @@ -21249,9 +21249,10 @@ package android.inputmethodservice { method public final boolean switchToPreviousInputMethod(); method public void updateFullscreenMode(); method public void updateInputViewShown(); field public static final int BACK_DISPOSITION_ADJUST_NOTHING = 3; // 0x3 field public static final int BACK_DISPOSITION_DEFAULT = 0; // 0x0 field public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2 field public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1 field public static final deprecated int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2 field public static final deprecated int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1 } public class InputMethodService.InputMethodImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl { core/java/android/inputmethodservice/InputMethodService.java +122 −25 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.CallSuper; import android.annotation.DrawableRes; import android.annotation.IntDef; Loading Loading @@ -239,19 +241,89 @@ public class InputMethodService extends AbstractInputMethodService { static final boolean DEBUG = false; /** * The back button will close the input window. * Allows the system to optimize the back button affordance based on the presence of software * keyboard. * * <p>For instance, on devices that have navigation bar and software-rendered back button, the * system may use a different icon while {@link #isInputViewShown()} returns {@code true}, to * indicate that the back button has "dismiss" affordance.</p> * * <p>Note that {@link KeyEvent#KEYCODE_BACK} events continue to be sent to * {@link #onKeyDown(int, KeyEvent)} even when this mode is specified. The default * implementation of {@link #onKeyDown(int, KeyEvent)} for {@link KeyEvent#KEYCODE_BACK} does * not take this mode into account.</p> * * <p>For API level {@link android.os.Build.VERSION_CODES#O_MR1} and lower devices, this is the * only mode you can safely specify without worrying about the compatibility.</p> * * @see #setBackDisposition(int) */ public static final int BACK_DISPOSITION_DEFAULT = 0; // based on window public static final int BACK_DISPOSITION_DEFAULT = 0; /** * This input method will not consume the back key. * Deprecated flag. * * <p>To avoid compatibility issues, IME developers should not use this flag.</p> * * @deprecated on {@link android.os.Build.VERSION_CODES#P} and later devices, this flag is * handled as a synonym of {@link #BACK_DISPOSITION_DEFAULT}. On * {@link android.os.Build.VERSION_CODES#O_MR1} and prior devices, expected behavior * of this mode had not been well defined. Most likely the end result would be the * same as {@link #BACK_DISPOSITION_DEFAULT}. Either way it is not recommended to * use this mode * @see #setBackDisposition(int) */ public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // back @Deprecated public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; /** * This input method will consume the back key. * Deprecated flag. * * <p>To avoid compatibility issues, IME developers should not use this flag.</p> * * @deprecated on {@link android.os.Build.VERSION_CODES#P} and later devices, this flag is * handled as a synonym of {@link #BACK_DISPOSITION_DEFAULT}. On * {@link android.os.Build.VERSION_CODES#O_MR1} and prior devices, expected behavior * of this mode had not been well defined. In AOSP implementation running on devices * that have navigation bar, specifying this flag could change the software back * button to "Dismiss" icon no matter whether the software keyboard is shown or not, * but there would be no easy way to restore the icon state even after IME lost the * connection to the application. To avoid user confusions, do not specify this mode * anyway * @see #setBackDisposition(int) */ @Deprecated public static final int BACK_DISPOSITION_WILL_DISMISS = 2; /** * Asks the system to not adjust the back button affordance even when the software keyboard is * shown. * * <p>This mode is useful for UI modes where IME's main soft input window is used for some * supplemental UI, such as floating candidate window for languages such as Chinese and * Japanese, where users expect the back button is, or at least looks to be, handled by the * target application rather than the UI shown by the IME even while {@link #isInputViewShown()} * returns {@code true}.</p> * * <p>Note that {@link KeyEvent#KEYCODE_BACK} events continue to be sent to * {@link #onKeyDown(int, KeyEvent)} even when this mode is specified. The default * implementation of {@link #onKeyDown(int, KeyEvent)} for {@link KeyEvent#KEYCODE_BACK} does * not take this mode into account.</p> * * @see #setBackDisposition(int) */ public static final int BACK_DISPOSITION_ADJUST_NOTHING = 3; /** * Enum flag to be used for {@link #setBackDisposition(int)}. * * @hide */ public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // down @Retention(SOURCE) @IntDef(value = {BACK_DISPOSITION_DEFAULT, BACK_DISPOSITION_WILL_NOT_DISMISS, BACK_DISPOSITION_WILL_DISMISS, BACK_DISPOSITION_ADJUST_NOTHING}, prefix = "BACK_DISPOSITION_") public @interface BackDispositionMode {} /** * @hide Loading @@ -267,7 +339,7 @@ public class InputMethodService extends AbstractInputMethodService { // Min and max values for back disposition. private static final int BACK_DISPOSITION_MIN = BACK_DISPOSITION_DEFAULT; private static final int BACK_DISPOSITION_MAX = BACK_DISPOSITION_WILL_DISMISS; private static final int BACK_DISPOSITION_MAX = BACK_DISPOSITION_ADJUST_NOTHING; InputMethodManager mImm; Loading Loading @@ -331,6 +403,8 @@ public class InputMethodService extends AbstractInputMethodService { boolean mIsInputViewShown; int mStatusIcon; @BackDispositionMode int mBackDisposition; /** Loading Loading @@ -1016,7 +1090,18 @@ public class InputMethodService extends AbstractInputMethodService { return mWindow; } public void setBackDisposition(int disposition) { /** * Sets the disposition mode that indicates the expected affordance for the back button. * * <p>Keep in mind that specifying this flag does not change the the default behavior of * {@link #onKeyDown(int, KeyEvent)}. It is IME developers' responsibility for making sure that * their custom implementation of {@link #onKeyDown(int, KeyEvent)} is consistent with the mode * specified to this API.</p> * * @see #getBackDisposition() * @param disposition disposition mode to be set */ public void setBackDisposition(@BackDispositionMode int disposition) { if (disposition == mBackDisposition) { return; } Loading @@ -1029,6 +1114,13 @@ public class InputMethodService extends AbstractInputMethodService { mBackDisposition); } /** * Retrieves the current disposition mode that indicates the expected back button affordance. * * @see #setBackDisposition(int) * @return currently selected disposition mode */ @BackDispositionMode public int getBackDisposition() { return mBackDisposition; } Loading Loading @@ -1894,7 +1986,6 @@ public class InputMethodService extends AbstractInputMethodService { mInputStarted = false; mStartedInputConnection = null; mCurCompletions = null; mBackDisposition = BACK_DISPOSITION_DEFAULT; } void doStartInput(InputConnection ic, EditorInfo attribute, boolean restarting) { Loading Loading @@ -2096,25 +2187,31 @@ public class InputMethodService extends AbstractInputMethodService { return mExtractEditText; } /** * Override this to intercept key down events before they are processed by the * application. If you return true, the application will not * process the event itself. If you return false, the normal application processing * will occur as if the IME had not seen the event at all. * Called back when a {@link KeyEvent} is forwarded from the target application. * * <p>The default implementation intercepts {@link KeyEvent#KEYCODE_BACK * KeyEvent.KEYCODE_BACK} if the IME is currently shown, to * possibly hide it when the key goes up (if not canceled or long pressed). In * addition, in fullscreen mode only, it will consume DPAD movement * events to move the cursor in the extracted text view, not allowing * them to perform navigation in the underlying application. * <p>The default implementation intercepts {@link KeyEvent#KEYCODE_BACK} if the IME is * currently shown , to possibly hide it when the key goes up (if not canceled or long pressed). * In addition, in fullscreen mode only, it will consume DPAD movement events to move the cursor * in the extracted text view, not allowing them to perform navigation in the underlying * application.</p> * * <p>The default implementation does not take flags specified to * {@link #setBackDisposition(int)} into account, even on API version * {@link android.os.Build.VERSION_CODES#P} and later devices. IME developers are responsible * for making sure that their special handling for {@link KeyEvent#KEYCODE_BACK} are consistent * with the flag they specified to {@link #setBackDisposition(int)}.</p> * * @param keyCode The value in {@code event.getKeyCode()} * @param event Description of the key event * * @return {@code true} if the event is consumed by the IME and the application no longer needs * to consume it. Return {@code false} when the event should be handled as if the IME * had not seen the event at all. */ public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { if (mBackDisposition == BACK_DISPOSITION_WILL_NOT_DISMISS) { return false; } final ExtractEditText eet = getExtractEditTextIfVisible(); if (eet != null && eet.handleBackInTextActionModeIfNeeded(event)) { return true; Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +13 −4 Original line number Diff line number Diff line Loading @@ -343,11 +343,20 @@ public class NavigationBarFragment extends Fragment implements Callbacks { boolean showImeSwitcher) { boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0; int hints = mNavigationIconHints; if (imeShown && backDisposition != InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS) { switch (backDisposition) { case InputMethodService.BACK_DISPOSITION_DEFAULT: case InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS: case InputMethodService.BACK_DISPOSITION_WILL_DISMISS: if (imeShown) { hints |= NAVIGATION_HINT_BACK_ALT; } else { hints &= ~NAVIGATION_HINT_BACK_ALT; } break; case InputMethodService.BACK_DISPOSITION_ADJUST_NOTHING: hints &= ~NAVIGATION_HINT_BACK_ALT; break; } if (showImeSwitcher) { hints |= NAVIGATION_HINT_IME_SHOWN; } else { Loading Loading
api/current.txt +3 −2 Original line number Diff line number Diff line Loading @@ -21249,9 +21249,10 @@ package android.inputmethodservice { method public final boolean switchToPreviousInputMethod(); method public void updateFullscreenMode(); method public void updateInputViewShown(); field public static final int BACK_DISPOSITION_ADJUST_NOTHING = 3; // 0x3 field public static final int BACK_DISPOSITION_DEFAULT = 0; // 0x0 field public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2 field public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1 field public static final deprecated int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2 field public static final deprecated int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1 } public class InputMethodService.InputMethodImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl {
core/java/android/inputmethodservice/InputMethodService.java +122 −25 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.CallSuper; import android.annotation.DrawableRes; import android.annotation.IntDef; Loading Loading @@ -239,19 +241,89 @@ public class InputMethodService extends AbstractInputMethodService { static final boolean DEBUG = false; /** * The back button will close the input window. * Allows the system to optimize the back button affordance based on the presence of software * keyboard. * * <p>For instance, on devices that have navigation bar and software-rendered back button, the * system may use a different icon while {@link #isInputViewShown()} returns {@code true}, to * indicate that the back button has "dismiss" affordance.</p> * * <p>Note that {@link KeyEvent#KEYCODE_BACK} events continue to be sent to * {@link #onKeyDown(int, KeyEvent)} even when this mode is specified. The default * implementation of {@link #onKeyDown(int, KeyEvent)} for {@link KeyEvent#KEYCODE_BACK} does * not take this mode into account.</p> * * <p>For API level {@link android.os.Build.VERSION_CODES#O_MR1} and lower devices, this is the * only mode you can safely specify without worrying about the compatibility.</p> * * @see #setBackDisposition(int) */ public static final int BACK_DISPOSITION_DEFAULT = 0; // based on window public static final int BACK_DISPOSITION_DEFAULT = 0; /** * This input method will not consume the back key. * Deprecated flag. * * <p>To avoid compatibility issues, IME developers should not use this flag.</p> * * @deprecated on {@link android.os.Build.VERSION_CODES#P} and later devices, this flag is * handled as a synonym of {@link #BACK_DISPOSITION_DEFAULT}. On * {@link android.os.Build.VERSION_CODES#O_MR1} and prior devices, expected behavior * of this mode had not been well defined. Most likely the end result would be the * same as {@link #BACK_DISPOSITION_DEFAULT}. Either way it is not recommended to * use this mode * @see #setBackDisposition(int) */ public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // back @Deprecated public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; /** * This input method will consume the back key. * Deprecated flag. * * <p>To avoid compatibility issues, IME developers should not use this flag.</p> * * @deprecated on {@link android.os.Build.VERSION_CODES#P} and later devices, this flag is * handled as a synonym of {@link #BACK_DISPOSITION_DEFAULT}. On * {@link android.os.Build.VERSION_CODES#O_MR1} and prior devices, expected behavior * of this mode had not been well defined. In AOSP implementation running on devices * that have navigation bar, specifying this flag could change the software back * button to "Dismiss" icon no matter whether the software keyboard is shown or not, * but there would be no easy way to restore the icon state even after IME lost the * connection to the application. To avoid user confusions, do not specify this mode * anyway * @see #setBackDisposition(int) */ @Deprecated public static final int BACK_DISPOSITION_WILL_DISMISS = 2; /** * Asks the system to not adjust the back button affordance even when the software keyboard is * shown. * * <p>This mode is useful for UI modes where IME's main soft input window is used for some * supplemental UI, such as floating candidate window for languages such as Chinese and * Japanese, where users expect the back button is, or at least looks to be, handled by the * target application rather than the UI shown by the IME even while {@link #isInputViewShown()} * returns {@code true}.</p> * * <p>Note that {@link KeyEvent#KEYCODE_BACK} events continue to be sent to * {@link #onKeyDown(int, KeyEvent)} even when this mode is specified. The default * implementation of {@link #onKeyDown(int, KeyEvent)} for {@link KeyEvent#KEYCODE_BACK} does * not take this mode into account.</p> * * @see #setBackDisposition(int) */ public static final int BACK_DISPOSITION_ADJUST_NOTHING = 3; /** * Enum flag to be used for {@link #setBackDisposition(int)}. * * @hide */ public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // down @Retention(SOURCE) @IntDef(value = {BACK_DISPOSITION_DEFAULT, BACK_DISPOSITION_WILL_NOT_DISMISS, BACK_DISPOSITION_WILL_DISMISS, BACK_DISPOSITION_ADJUST_NOTHING}, prefix = "BACK_DISPOSITION_") public @interface BackDispositionMode {} /** * @hide Loading @@ -267,7 +339,7 @@ public class InputMethodService extends AbstractInputMethodService { // Min and max values for back disposition. private static final int BACK_DISPOSITION_MIN = BACK_DISPOSITION_DEFAULT; private static final int BACK_DISPOSITION_MAX = BACK_DISPOSITION_WILL_DISMISS; private static final int BACK_DISPOSITION_MAX = BACK_DISPOSITION_ADJUST_NOTHING; InputMethodManager mImm; Loading Loading @@ -331,6 +403,8 @@ public class InputMethodService extends AbstractInputMethodService { boolean mIsInputViewShown; int mStatusIcon; @BackDispositionMode int mBackDisposition; /** Loading Loading @@ -1016,7 +1090,18 @@ public class InputMethodService extends AbstractInputMethodService { return mWindow; } public void setBackDisposition(int disposition) { /** * Sets the disposition mode that indicates the expected affordance for the back button. * * <p>Keep in mind that specifying this flag does not change the the default behavior of * {@link #onKeyDown(int, KeyEvent)}. It is IME developers' responsibility for making sure that * their custom implementation of {@link #onKeyDown(int, KeyEvent)} is consistent with the mode * specified to this API.</p> * * @see #getBackDisposition() * @param disposition disposition mode to be set */ public void setBackDisposition(@BackDispositionMode int disposition) { if (disposition == mBackDisposition) { return; } Loading @@ -1029,6 +1114,13 @@ public class InputMethodService extends AbstractInputMethodService { mBackDisposition); } /** * Retrieves the current disposition mode that indicates the expected back button affordance. * * @see #setBackDisposition(int) * @return currently selected disposition mode */ @BackDispositionMode public int getBackDisposition() { return mBackDisposition; } Loading Loading @@ -1894,7 +1986,6 @@ public class InputMethodService extends AbstractInputMethodService { mInputStarted = false; mStartedInputConnection = null; mCurCompletions = null; mBackDisposition = BACK_DISPOSITION_DEFAULT; } void doStartInput(InputConnection ic, EditorInfo attribute, boolean restarting) { Loading Loading @@ -2096,25 +2187,31 @@ public class InputMethodService extends AbstractInputMethodService { return mExtractEditText; } /** * Override this to intercept key down events before they are processed by the * application. If you return true, the application will not * process the event itself. If you return false, the normal application processing * will occur as if the IME had not seen the event at all. * Called back when a {@link KeyEvent} is forwarded from the target application. * * <p>The default implementation intercepts {@link KeyEvent#KEYCODE_BACK * KeyEvent.KEYCODE_BACK} if the IME is currently shown, to * possibly hide it when the key goes up (if not canceled or long pressed). In * addition, in fullscreen mode only, it will consume DPAD movement * events to move the cursor in the extracted text view, not allowing * them to perform navigation in the underlying application. * <p>The default implementation intercepts {@link KeyEvent#KEYCODE_BACK} if the IME is * currently shown , to possibly hide it when the key goes up (if not canceled or long pressed). * In addition, in fullscreen mode only, it will consume DPAD movement events to move the cursor * in the extracted text view, not allowing them to perform navigation in the underlying * application.</p> * * <p>The default implementation does not take flags specified to * {@link #setBackDisposition(int)} into account, even on API version * {@link android.os.Build.VERSION_CODES#P} and later devices. IME developers are responsible * for making sure that their special handling for {@link KeyEvent#KEYCODE_BACK} are consistent * with the flag they specified to {@link #setBackDisposition(int)}.</p> * * @param keyCode The value in {@code event.getKeyCode()} * @param event Description of the key event * * @return {@code true} if the event is consumed by the IME and the application no longer needs * to consume it. Return {@code false} when the event should be handled as if the IME * had not seen the event at all. */ public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { if (mBackDisposition == BACK_DISPOSITION_WILL_NOT_DISMISS) { return false; } final ExtractEditText eet = getExtractEditTextIfVisible(); if (eet != null && eet.handleBackInTextActionModeIfNeeded(event)) { return true; Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +13 −4 Original line number Diff line number Diff line Loading @@ -343,11 +343,20 @@ public class NavigationBarFragment extends Fragment implements Callbacks { boolean showImeSwitcher) { boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0; int hints = mNavigationIconHints; if (imeShown && backDisposition != InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS) { switch (backDisposition) { case InputMethodService.BACK_DISPOSITION_DEFAULT: case InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS: case InputMethodService.BACK_DISPOSITION_WILL_DISMISS: if (imeShown) { hints |= NAVIGATION_HINT_BACK_ALT; } else { hints &= ~NAVIGATION_HINT_BACK_ALT; } break; case InputMethodService.BACK_DISPOSITION_ADJUST_NOTHING: hints &= ~NAVIGATION_HINT_BACK_ALT; break; } if (showImeSwitcher) { hints |= NAVIGATION_HINT_IME_SHOWN; } else { Loading