Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c31de33 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Keyboard.Key#onReleased() should handle inside parameter.

The boolean parameter of Keyboard.Key#onReleased(boolean) has
been somehow ignored since Capcake.  With this CL, that method
starts working as documented.

Alternatively we could fix the issue when and only when the
application's targetSdkVersion >= 23.  We didn't do that because:
- Although Keyboard.Key class is a public API, it is supposed to
  be used almost only by android.inputmethodservice.KeyboardView.
  The risk of unwanted compatibility problems is low.
- Fixing that is beneficial for users because it actually fixes
  UX issue when applications/IMEs that still rely on KeyboardView
  run in Android M.
- All the fields that are related to Keyboard.Key#onReleased are
  public fields so developers can easily work around anyway.

Bug: 21446448
Change-Id: I392166c77cd9dd2c432dc4f1274312f8355de02b
parent 62974816
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -402,14 +402,24 @@ public class Keyboard {
        }

        /**
         * Changes the pressed state of the key. If it is a sticky key, it will also change the
         * toggled state of the key if the finger was release inside.
         * @param inside whether the finger was released inside the key
         * Changes the pressed state of the key.
         *
         * <p>Toggled state of the key will be flipped when all the following conditions are
         * fulfilled:</p>
         *
         * <ul>
         *     <li>This is a sticky key, that is, {@link #sticky} is {@code true}.
         *     <li>The parameter {@code inside} is {@code true}.
         *     <li>{@link Build.VERSION.SDK_INT} is greater than {@link VERSION_CODES.LOLLIPOP_MR1}.
         * </ul>
         *
         * @param inside whether the finger was released inside the key. Works only on Android M and
         * later. See the method document for details.
         * @see #onPressed()
         */
        public void onReleased(boolean inside) {
            pressed = !pressed;
            if (sticky) {
            if (sticky && inside) {
                on = !on;
            }
        }