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

Commit 7763b36d authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Align key preview and mini-keyboard positions

Bug: 3004793
Change-Id: I1839e6ff3c8c66a576bfb3db9391c146ed225451
parent 4a3ffcbf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
        <item name="keyTextSize">@dimen/key_text_size</item>
        <item name="keyTextColor">#FFFFFFFF</item>
        <item name="keyPreviewLayout">@layout/key_preview</item>
        <item name="keyPreviewOffset">5dip</item>
        <item name="keyPreviewOffset">0dip</item>
        <item name="keyPreviewHeight">80dip</item>
        <item name="labelTextSize">14sp</item>
        <item name="popupLayout">@layout/keyboard_popup</item>
+22 −4
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
@@ -191,6 +192,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
    private int mPopupPreviewOffsetX;
    private int mPopupPreviewOffsetY;
    private int mWindowY;
    private int mPopupPreviewDisplayedY;

    // Popup mini keyboard
    private PopupWindow mMiniKeyboardPopup;
@@ -918,9 +920,9 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
            getLocationInWindow(mOffsetInWindow);
            mOffsetInWindow[0] += mPopupPreviewOffsetX; // Offset may be zero
            mOffsetInWindow[1] += mPopupPreviewOffsetY; // Offset may be zero
            int[] mWindowLocation = new int[2];
            getLocationOnScreen(mWindowLocation);
            mWindowY = mWindowLocation[1];
            int[] windowLocation = new int[2];
            getLocationOnScreen(windowLocation);
            mWindowY = windowLocation[1];
        }
        // Set the preview background state
        mPreviewText.getBackground().setState(
@@ -948,6 +950,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
            mPreviewPopup.showAtLocation(mMiniKeyboardParent, Gravity.NO_GRAVITY,
                    popupPreviewX, popupPreviewY);
        }
        // Record popup preview position to display mini-keyboard later at the same positon
        mPopupPreviewDisplayedY = popupPreviewY;
        mPreviewText.setVisibility(VISIBLE);
    }

@@ -1057,6 +1061,19 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
        return container;
    }

    private static boolean isOneRowKeyboard(Keyboard keyboard) {
        final List<Key> keys = keyboard.getKeys();
        if (keys.size() == 0) return false;
        final int edgeFlags = keys.get(0).edgeFlags;
        // HACK: The first key of mini keyboard which was inflated from xml and has multiple rows,
        // does not have both top and bottom edge flags on at the same time.  On the other hand,
        // the first key of mini keyboard that was created with popupCharacters must have both top
        // and bottom edge flags on.
        // When you want to use one row mini-keyboard from xml file, make sure that the row has
        // both top and bottom edge flags set.
        return (edgeFlags & Keyboard.EDGE_TOP) != 0 && (edgeFlags & Keyboard.EDGE_BOTTOM) != 0;
    }

    /**
     * Called when a key is long pressed. By default this will open any popup keyboard associated
     * with this key through the attributes popupLayout and popupCharacters.
@@ -1102,7 +1119,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
        popupY -= container.getMeasuredHeight();
        popupY += container.getPaddingBottom();
        final int x = popupX;
        final int y = popupY;
        final int y = isOneRowKeyboard(mMiniKeyboard.getKeyboard())
                ? mPopupPreviewDisplayedY : popupY;

        int adjustedX = x;
        if (x < 0) {