am 3d20d999
: Specify keyboard metrics with physical unit "inch" (DO NOT MERGE)
Merge commit '3d20d999025bbaab96b41d172225a39f7a1017b7' into gingerbread-plus-aosp * commit '3d20d999025bbaab96b41d172225a39f7a1017b7': Specify keyboard metrics with physical unit "inch" (DO NOT MERGE)
Before Width: | Height: | Size: 521 B After Width: | Height: | Size: 511 B |
Before Width: | Height: | Size: 783 B After Width: | Height: | Size: 760 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 747 B After Width: | Height: | Size: 730 B |
Before Width: | Height: | Size: 962 B After Width: | Height: | Size: 940 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 481 B After Width: | Height: | Size: 461 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 811 B |
Before Width: | Height: | Size: 385 B After Width: | Height: | Size: 377 B |
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 545 B |
Before Width: | Height: | Size: 813 B After Width: | Height: | Size: 806 B |
Before Width: | Height: | Size: 518 B After Width: | Height: | Size: 514 B |
Before Width: | Height: | Size: 700 B After Width: | Height: | Size: 687 B |
Before Width: | Height: | Size: 950 B After Width: | Height: | Size: 940 B |
Before Width: | Height: | Size: 358 B After Width: | Height: | Size: 355 B |
Before Width: | Height: | Size: 530 B After Width: | Height: | Size: 526 B |
|
@ -25,6 +25,7 @@
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingBottom="@dimen/keyboard_bottom_padding"
|
||||||
android:background="@drawable/keyboard_dark_background"
|
android:background="@drawable/keyboard_dark_background"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
|
|
||||||
|
|
|
@ -19,13 +19,17 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="key_height">47dip</dimen>
|
<!-- key_height + key_bottom_gap = popup_key_height -->
|
||||||
|
<dimen name="key_height">0.250in</dimen>
|
||||||
|
<dimen name="key_bottom_gap">0.020in</dimen>
|
||||||
|
<dimen name="popup_key_height">0.270in</dimen>
|
||||||
|
<dimen name="keyboard_bottom_padding">0.0in</dimen>
|
||||||
<dimen name="candidate_strip_height">38dip</dimen>
|
<dimen name="candidate_strip_height">38dip</dimen>
|
||||||
<dimen name="candidate_strip_fading_edge_length">63dip</dimen>
|
<dimen name="candidate_strip_fading_edge_length">63dip</dimen>
|
||||||
<dimen name="spacebar_vertical_correction">2dip</dimen>
|
<dimen name="spacebar_vertical_correction">2dip</dimen>
|
||||||
<!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
|
<!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
|
||||||
<!-- key_height x 1.7 -->
|
<!-- popup_key_height x 1.7 -->
|
||||||
<dimen name="mini_keyboard_slide_allowance">79.9dip</dimen>
|
<dimen name="mini_keyboard_slide_allowance">0.459in</dimen>
|
||||||
<!-- -key_height x 1.0 -->
|
<!-- popup_key_height x 1.0 -->
|
||||||
<dimen name="mini_keyboard_vertical_correction">-47dip</dimen>
|
<dimen name="mini_keyboard_vertical_correction">-0.270in</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -19,7 +19,11 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<dimen name="key_height">54dip</dimen>
|
<!-- key_height + key_bottom_gap = popup_key_height -->
|
||||||
|
<dimen name="key_height">0.290in</dimen>
|
||||||
|
<dimen name="key_bottom_gap">0.035in</dimen>
|
||||||
|
<dimen name="popup_key_height">0.325in</dimen>
|
||||||
|
<dimen name="keyboard_bottom_padding">0.06in</dimen>
|
||||||
<dimen name="bubble_pointer_offset">22dip</dimen>
|
<dimen name="bubble_pointer_offset">22dip</dimen>
|
||||||
<dimen name="candidate_strip_height">42dip</dimen>
|
<dimen name="candidate_strip_height">42dip</dimen>
|
||||||
<dimen name="candidate_strip_fading_edge_length">63dip</dimen>
|
<dimen name="candidate_strip_fading_edge_length">63dip</dimen>
|
||||||
|
@ -27,18 +31,20 @@
|
||||||
<!-- If the screen height in landscape is larger than the below value, then the keyboard
|
<!-- If the screen height in landscape is larger than the below value, then the keyboard
|
||||||
will not go into extract (fullscreen) mode. -->
|
will not go into extract (fullscreen) mode. -->
|
||||||
<dimen name="max_height_for_fullscreen">2.5in</dimen>
|
<dimen name="max_height_for_fullscreen">2.5in</dimen>
|
||||||
<dimen name="key_text_size">22sp</dimen>
|
<dimen name="key_text_size">0.13in</dimen>
|
||||||
<dimen name="key_label_text_size">14sp</dimen>
|
<dimen name="key_label_text_size">0.083in</dimen>
|
||||||
<dimen name="key_preview_offset">0dip</dimen>
|
<dimen name="key_preview_text_size_large">0.236in</dimen>
|
||||||
<dimen name="key_preview_height">80dip</dimen>
|
<dimen name="key_preview_offset">0.000in</dimen>
|
||||||
|
<!-- key_height x 1.6 -->
|
||||||
|
<dimen name="key_preview_height">0.464in</dimen>
|
||||||
<!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
|
<!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
|
||||||
<!-- key_height x 1.7 -->
|
<!-- popup_key_height x 1.7 -->
|
||||||
<dimen name="mini_keyboard_slide_allowance">91.8dip</dimen>
|
<dimen name="mini_keyboard_slide_allowance">0.553in</dimen>
|
||||||
<!-- -key_height x 1.0 -->
|
<!-- popup_key_height x 1.0 -->
|
||||||
<dimen name="mini_keyboard_vertical_correction">-54dip</dimen>
|
<dimen name="mini_keyboard_vertical_correction">-0.325in</dimen>
|
||||||
<dimen name="key_hysteresis_distance">0.05in</dimen>
|
<dimen name="key_hysteresis_distance">0.05in</dimen>
|
||||||
<!-- We use "inch", not "dip" because this value tries dealing with physical distance related
|
<!-- We use "inch", not "dip" because this value tries dealing with physical distance related
|
||||||
to user's finger. -->
|
to user's finger. -->
|
||||||
<dimen name="keyboard_vertical_correction">-0.06in</dimen>
|
<dimen name="keyboard_vertical_correction">-0.05in</dimen>
|
||||||
<dimen name="candidate_min_touchable_width">0.3in</dimen>
|
<dimen name="candidate_min_touchable_width">0.3in</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -28,10 +28,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -28,10 +28,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="a"
|
android:keyLabel="a"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="a"
|
android:keyLabel="a"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="ק"
|
android:keyLabel="ק"
|
||||||
android:horizontalGap="5%p"
|
android:horizontalGap="5%p"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="ק"
|
android:keyLabel="ק"
|
||||||
android:horizontalGap="5%p"
|
android:horizontalGap="5%p"
|
||||||
|
|
|
@ -28,10 +28,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -28,10 +28,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="й"
|
android:keyLabel="й"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="й"
|
android:keyLabel="й"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -23,10 +23,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="љ"
|
android:keyLabel="љ"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -23,10 +23,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="љ"
|
android:keyLabel="љ"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -30,10 +30,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -30,10 +30,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="9.09%p"
|
android:keyWidth="9.09%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="26.67%p"
|
android:keyWidth="26.67%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="26.67%p"
|
android:keyWidth="26.67%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="26.67%p"
|
android:keyWidth="26.67%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="26.67%p"
|
android:keyWidth="26.67%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -22,6 +22,6 @@
|
||||||
android:keyWidth="9.45%p"
|
android:keyWidth="9.45%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="0px"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/popup_key_height"
|
||||||
>
|
>
|
||||||
</Keyboard>
|
</Keyboard>
|
||||||
|
|
|
@ -22,6 +22,6 @@
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="0px"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/popup_key_height"
|
||||||
>
|
>
|
||||||
</Keyboard>
|
</Keyboard>
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,10 +22,12 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row>
|
<Row
|
||||||
|
android:rowEdgeFlags="top"
|
||||||
|
>
|
||||||
<Key
|
<Key
|
||||||
android:keyLabel="q"
|
android:keyLabel="q"
|
||||||
android:popupKeyboard="@xml/kbd_popup_template"
|
android:popupKeyboard="@xml/kbd_popup_template"
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="@dimen/key_bottom_gap"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="0px"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/popup_key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
android:rowEdgeFlags="top|bottom"
|
android:rowEdgeFlags="top|bottom"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
android:keyWidth="15%p"
|
android:keyWidth="15%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="0px"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/popup_key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
android:rowEdgeFlags="top|bottom"
|
android:rowEdgeFlags="top|bottom"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="0px"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/popup_key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
android:rowEdgeFlags="top|bottom"
|
android:rowEdgeFlags="top|bottom"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
android:keyWidth="10%p"
|
android:keyWidth="10%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="0px"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/popup_key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
android:rowEdgeFlags="top"
|
android:rowEdgeFlags="top"
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
android:keyWidth="15%p"
|
android:keyWidth="15%p"
|
||||||
android:horizontalGap="0px"
|
android:horizontalGap="0px"
|
||||||
android:verticalGap="0px"
|
android:verticalGap="0px"
|
||||||
android:keyHeight="@dimen/key_height"
|
android:keyHeight="@dimen/popup_key_height"
|
||||||
>
|
>
|
||||||
<Row
|
<Row
|
||||||
android:rowEdgeFlags="top"
|
android:rowEdgeFlags="top"
|
||||||
|
|
|
@ -90,6 +90,10 @@ public class LatinKeyboard extends Keyboard {
|
||||||
// TODO: generalize for any keyboardId
|
// TODO: generalize for any keyboardId
|
||||||
private boolean mIsBlackSym;
|
private boolean mIsBlackSym;
|
||||||
|
|
||||||
|
// TODO: remove this attribute when either Keyboard.mDefaultVerticalGap or Key.parent becomes
|
||||||
|
// non-private.
|
||||||
|
private final int mVerticalGap;
|
||||||
|
|
||||||
private static final int SHIFT_OFF = 0;
|
private static final int SHIFT_OFF = 0;
|
||||||
private static final int SHIFT_ON = 1;
|
private static final int SHIFT_ON = 1;
|
||||||
private static final int SHIFT_LOCKED = 2;
|
private static final int SHIFT_LOCKED = 2;
|
||||||
|
@ -120,9 +124,7 @@ public class LatinKeyboard extends Keyboard {
|
||||||
mRes = res;
|
mRes = res;
|
||||||
mShiftLockIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked);
|
mShiftLockIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked);
|
||||||
mShiftLockPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_shift_locked);
|
mShiftLockPreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_shift_locked);
|
||||||
mShiftLockPreviewIcon.setBounds(0, 0,
|
setDefaultBounds(mShiftLockPreviewIcon);
|
||||||
mShiftLockPreviewIcon.getIntrinsicWidth(),
|
|
||||||
mShiftLockPreviewIcon.getIntrinsicHeight());
|
|
||||||
mSpaceIcon = res.getDrawable(R.drawable.sym_keyboard_space);
|
mSpaceIcon = res.getDrawable(R.drawable.sym_keyboard_space);
|
||||||
mSpaceAutoCompletionIndicator = res.getDrawable(R.drawable.sym_keyboard_space_led);
|
mSpaceAutoCompletionIndicator = res.getDrawable(R.drawable.sym_keyboard_space_led);
|
||||||
mSpacePreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_space);
|
mSpacePreviewIcon = res.getDrawable(R.drawable.sym_keyboard_feedback_space);
|
||||||
|
@ -140,6 +142,8 @@ public class LatinKeyboard extends Keyboard {
|
||||||
|| xmlLayoutResId == R.xml.kbd_qwerty_black;
|
|| xmlLayoutResId == R.xml.kbd_qwerty_black;
|
||||||
mSpaceKeyIndex = indexOf(LatinIME.KEYCODE_SPACE);
|
mSpaceKeyIndex = indexOf(LatinIME.KEYCODE_SPACE);
|
||||||
initializeNumberHintResources(context);
|
initializeNumberHintResources(context);
|
||||||
|
// TODO remove this initialization after cleanup
|
||||||
|
mVerticalGap = super.getVerticalGap();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeNumberHintResources(Context context) {
|
private void initializeNumberHintResources(Context context) {
|
||||||
|
@ -196,6 +200,7 @@ public class LatinKeyboard extends Keyboard {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setImeOptions(Resources res, int mode, int options) {
|
void setImeOptions(Resources res, int mode, int options) {
|
||||||
|
// TODO should clean up this method
|
||||||
if (mEnterKey != null) {
|
if (mEnterKey != null) {
|
||||||
// Reset some of the rarely used attributes.
|
// Reset some of the rarely used attributes.
|
||||||
mEnterKey.popupCharacters = null;
|
mEnterKey.popupCharacters = null;
|
||||||
|
@ -247,9 +252,7 @@ public class LatinKeyboard extends Keyboard {
|
||||||
}
|
}
|
||||||
// Set the initial size of the preview icon
|
// Set the initial size of the preview icon
|
||||||
if (mEnterKey.iconPreview != null) {
|
if (mEnterKey.iconPreview != null) {
|
||||||
mEnterKey.iconPreview.setBounds(0, 0,
|
setDefaultBounds(mEnterKey.iconPreview);
|
||||||
mEnterKey.iconPreview.getIntrinsicWidth(),
|
|
||||||
mEnterKey.iconPreview.getIntrinsicHeight());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -736,6 +739,7 @@ public class LatinKeyboard extends Keyboard {
|
||||||
return textSize;
|
return textSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO LatinKey could be static class
|
||||||
class LatinKey extends Keyboard.Key {
|
class LatinKey extends Keyboard.Key {
|
||||||
|
|
||||||
// functional normal state (with properties)
|
// functional normal state (with properties)
|
||||||
|
@ -784,6 +788,8 @@ public class LatinKeyboard extends Keyboard {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean isInside(int x, int y) {
|
public boolean isInside(int x, int y) {
|
||||||
|
// TODO This should be done by parent.isInside(this, x, y)
|
||||||
|
// if Key.parent were protected.
|
||||||
boolean result = LatinKeyboard.this.isInside(this, x, y);
|
boolean result = LatinKeyboard.this.isInside(this, x, y);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -803,6 +809,15 @@ public class LatinKeyboard extends Keyboard {
|
||||||
}
|
}
|
||||||
return super.getCurrentDrawableState();
|
return super.getCurrentDrawableState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int squaredDistanceFrom(int x, int y) {
|
||||||
|
// We should count vertical gap between rows to calculate the center of this Key.
|
||||||
|
final int verticalGap = LatinKeyboard.this.mVerticalGap;
|
||||||
|
final int xDist = this.x + width / 2 - x;
|
||||||
|
final int yDist = this.y + (height + verticalGap) / 2 - y;
|
||||||
|
return xDist * xDist + yDist * yDist;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -828,8 +843,7 @@ public class LatinKeyboard extends Keyboard {
|
||||||
|
|
||||||
public SlidingLocaleDrawable(Drawable background, int width, int height) {
|
public SlidingLocaleDrawable(Drawable background, int width, int height) {
|
||||||
mBackground = background;
|
mBackground = background;
|
||||||
mBackground.setBounds(0, 0,
|
setDefaultBounds(mBackground);
|
||||||
mBackground.getIntrinsicWidth(), mBackground.getIntrinsicHeight());
|
|
||||||
mWidth = width;
|
mWidth = width;
|
||||||
mHeight = height;
|
mHeight = height;
|
||||||
mTextPaint = new TextPaint();
|
mTextPaint = new TextPaint();
|
||||||
|
@ -887,7 +901,7 @@ public class LatinKeyboard extends Keyboard {
|
||||||
canvas.drawText(mNextLanguage, diff - width / 2, baseline, paint);
|
canvas.drawText(mNextLanguage, diff - width / 2, baseline, paint);
|
||||||
canvas.drawText(mPrevLanguage, diff + width + width / 2, baseline, paint);
|
canvas.drawText(mPrevLanguage, diff + width + width / 2, baseline, paint);
|
||||||
|
|
||||||
lArrow.setBounds(0, 0, lArrow.getIntrinsicWidth(), lArrow.getIntrinsicHeight());
|
setDefaultBounds(lArrow);
|
||||||
rArrow.setBounds(width - rArrow.getIntrinsicWidth(), 0, width,
|
rArrow.setBounds(width - rArrow.getIntrinsicWidth(), 0, width,
|
||||||
rArrow.getIntrinsicHeight());
|
rArrow.getIntrinsicHeight());
|
||||||
lArrow.draw(canvas);
|
lArrow.draw(canvas);
|
||||||
|
|
|
@ -47,6 +47,7 @@ import android.widget.PopupWindow;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
@ -158,6 +159,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
// Miscellaneous constants
|
// Miscellaneous constants
|
||||||
/* package */ static final int NOT_A_KEY = -1;
|
/* package */ static final int NOT_A_KEY = -1;
|
||||||
private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable };
|
private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable };
|
||||||
|
private static final int NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL = -1;
|
||||||
|
|
||||||
// XML attribute
|
// XML attribute
|
||||||
private int mKeyTextSize;
|
private int mKeyTextSize;
|
||||||
|
@ -178,6 +180,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
// Main keyboard
|
// Main keyboard
|
||||||
private Keyboard mKeyboard;
|
private Keyboard mKeyboard;
|
||||||
private Key[] mKeys;
|
private Key[] mKeys;
|
||||||
|
// TODO this attribute should be gotten from Keyboard.
|
||||||
|
private int mKeyboardVerticalGap;
|
||||||
|
|
||||||
// Key preview popup
|
// Key preview popup
|
||||||
private TextView mPreviewText;
|
private TextView mPreviewText;
|
||||||
|
@ -237,6 +241,11 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
private final Paint mPaint;
|
private final Paint mPaint;
|
||||||
private final Rect mPadding;
|
private final Rect mPadding;
|
||||||
private final Rect mClipRegion = new Rect(0, 0, 0, 0);
|
private final Rect mClipRegion = new Rect(0, 0, 0, 0);
|
||||||
|
// This map caches key label text height in pixel as value and key label text size as map key.
|
||||||
|
private final HashMap<Integer, Integer> mTextHeightCache = new HashMap<Integer, Integer>();
|
||||||
|
// Distance from horizontal center of the key, proportional to key label text height.
|
||||||
|
private final float KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR = 0.55f;
|
||||||
|
private final String KEY_LABEL_HEIGHT_REFERENCE_CHAR = "H";
|
||||||
|
|
||||||
private final UIHandler mHandler = new UIHandler();
|
private final UIHandler mHandler = new UIHandler();
|
||||||
|
|
||||||
|
@ -465,7 +474,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
mPreviewPopup = new PopupWindow(context);
|
mPreviewPopup = new PopupWindow(context);
|
||||||
if (previewLayout != 0) {
|
if (previewLayout != 0) {
|
||||||
mPreviewText = (TextView) inflate.inflate(previewLayout, null);
|
mPreviewText = (TextView) inflate.inflate(previewLayout, null);
|
||||||
mPreviewTextSizeLarge = (int) mPreviewText.getTextSize();
|
mPreviewTextSizeLarge = (int) res.getDimension(R.dimen.key_preview_text_size_large);
|
||||||
mPreviewPopup.setContentView(mPreviewText);
|
mPreviewPopup.setContentView(mPreviewText);
|
||||||
mPreviewPopup.setBackgroundDrawable(null);
|
mPreviewPopup.setBackgroundDrawable(null);
|
||||||
} else {
|
} else {
|
||||||
|
@ -576,6 +585,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
LatinImeLogger.onSetKeyboard(keyboard);
|
LatinImeLogger.onSetKeyboard(keyboard);
|
||||||
mKeys = mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(),
|
mKeys = mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(),
|
||||||
-getPaddingTop() + mVerticalCorrection);
|
-getPaddingTop() + mVerticalCorrection);
|
||||||
|
mKeyboardVerticalGap = (int)getResources().getDimension(R.dimen.key_bottom_gap);
|
||||||
for (PointerTracker tracker : mPointerTrackers) {
|
for (PointerTracker tracker : mPointerTrackers) {
|
||||||
tracker.setKeyboard(mKeys, mKeyHysteresisDistance);
|
tracker.setKeyboard(mKeys, mKeyHysteresisDistance);
|
||||||
}
|
}
|
||||||
|
@ -720,7 +730,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
int dimensionSum = 0;
|
int dimensionSum = 0;
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
Key key = keys[i];
|
Key key = keys[i];
|
||||||
dimensionSum += Math.min(key.width, key.height) + key.gap;
|
dimensionSum += Math.min(key.width, key.height + mKeyboardVerticalGap) + key.gap;
|
||||||
}
|
}
|
||||||
if (dimensionSum < 0 || length == 0) return;
|
if (dimensionSum < 0 || length == 0) return;
|
||||||
mKeyDetector.setProximityThreshold((int) (dimensionSum * 1.4f / length));
|
mKeyDetector.setProximityThreshold((int) (dimensionSum * 1.4f / length));
|
||||||
|
@ -772,13 +782,14 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
paint.setColor(mKeyTextColor);
|
paint.setColor(mKeyTextColor);
|
||||||
boolean drawSingleKey = false;
|
boolean drawSingleKey = false;
|
||||||
if (invalidKey != null && canvas.getClipBounds(clipRegion)) {
|
if (invalidKey != null && canvas.getClipBounds(clipRegion)) {
|
||||||
// Is clipRegion completely contained within the invalidated key?
|
// TODO we should use Rect.inset and Rect.contains here.
|
||||||
if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left &&
|
// Is clipRegion completely contained within the invalidated key?
|
||||||
invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top &&
|
if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left &&
|
||||||
invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right &&
|
invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top &&
|
||||||
invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) {
|
invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right &&
|
||||||
drawSingleKey = true;
|
invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) {
|
||||||
}
|
drawSingleKey = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
|
canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
|
||||||
final int keyCount = keys.length;
|
final int keyCount = keys.length;
|
||||||
|
@ -794,8 +805,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
String label = key.label == null? null : adjustCase(key.label).toString();
|
String label = key.label == null? null : adjustCase(key.label).toString();
|
||||||
|
|
||||||
final Rect bounds = keyBackground.getBounds();
|
final Rect bounds = keyBackground.getBounds();
|
||||||
if (key.width != bounds.right ||
|
if (key.width != bounds.right || key.height != bounds.bottom) {
|
||||||
key.height != bounds.bottom) {
|
|
||||||
keyBackground.setBounds(0, 0, key.width, key.height);
|
keyBackground.setBounds(0, 0, key.width, key.height);
|
||||||
}
|
}
|
||||||
canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop);
|
canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop);
|
||||||
|
@ -804,22 +814,34 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
boolean shouldDrawIcon = true;
|
boolean shouldDrawIcon = true;
|
||||||
if (label != null) {
|
if (label != null) {
|
||||||
// For characters, use large font. For labels like "Done", use small font.
|
// For characters, use large font. For labels like "Done", use small font.
|
||||||
|
final int labelSize;
|
||||||
if (label.length() > 1 && key.codes.length < 2) {
|
if (label.length() > 1 && key.codes.length < 2) {
|
||||||
paint.setTextSize(mLabelTextSize);
|
labelSize = mLabelTextSize;
|
||||||
paint.setTypeface(Typeface.DEFAULT_BOLD);
|
paint.setTypeface(Typeface.DEFAULT_BOLD);
|
||||||
} else {
|
} else {
|
||||||
paint.setTextSize(mKeyTextSize);
|
labelSize = mKeyTextSize;
|
||||||
paint.setTypeface(mKeyTextStyle);
|
paint.setTypeface(mKeyTextStyle);
|
||||||
}
|
}
|
||||||
|
paint.setTextSize(labelSize);
|
||||||
|
|
||||||
|
Integer labelHeightValue = mTextHeightCache.get(labelSize);
|
||||||
|
final int labelHeight;
|
||||||
|
if (labelHeightValue != null) {
|
||||||
|
labelHeight = labelHeightValue;
|
||||||
|
} else {
|
||||||
|
Rect textBounds = new Rect();
|
||||||
|
paint.getTextBounds(KEY_LABEL_HEIGHT_REFERENCE_CHAR, 0, 1, textBounds);
|
||||||
|
labelHeight = textBounds.height();
|
||||||
|
mTextHeightCache.put(labelSize, labelHeight);
|
||||||
|
}
|
||||||
|
|
||||||
// Draw a drop shadow for the text
|
// Draw a drop shadow for the text
|
||||||
paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor);
|
paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor);
|
||||||
// Draw the text
|
final int centerX = (key.width + padding.left - padding.right) / 2;
|
||||||
canvas.drawText(label,
|
final int centerY = (key.height + padding.top - padding.bottom) / 2;
|
||||||
(key.width - padding.left - padding.right) / 2
|
final float baseline = centerY
|
||||||
+ padding.left,
|
+ labelHeight * KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR;
|
||||||
(key.height - padding.top - padding.bottom) / 2
|
canvas.drawText(label, centerX, baseline, paint);
|
||||||
+ (paint.getTextSize() - paint.descent()) / 2 + padding.top,
|
|
||||||
paint);
|
|
||||||
// Turn off drop shadow
|
// Turn off drop shadow
|
||||||
paint.setShadowLayer(0, 0, 0, 0);
|
paint.setShadowLayer(0, 0, 0, 0);
|
||||||
|
|
||||||
|
@ -829,15 +851,23 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
}
|
}
|
||||||
if (key.icon != null && shouldDrawIcon) {
|
if (key.icon != null && shouldDrawIcon) {
|
||||||
// Special handing for the upper-right number hint icons
|
// Special handing for the upper-right number hint icons
|
||||||
final int drawableWidth = isNumberAtEdgeOfPopupChars(key) ?
|
final int drawableWidth;
|
||||||
key.width : key.icon.getIntrinsicWidth();
|
final int drawableHeight;
|
||||||
final int drawableHeight = isNumberAtEdgeOfPopupChars(key) ?
|
final int drawableX;
|
||||||
key.height : key.icon.getIntrinsicHeight();
|
final int drawableY;
|
||||||
|
if (isNumberAtEdgeOfPopupChars(key)) {
|
||||||
final int drawableX = (key.width - padding.left - padding.right
|
drawableWidth = key.width;
|
||||||
- drawableWidth) / 2 + padding.left;
|
drawableHeight = key.height;
|
||||||
final int drawableY = (key.height - padding.top - padding.bottom
|
drawableX = 0;
|
||||||
- drawableHeight) / 2 + padding.top;
|
drawableY = NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL;
|
||||||
|
} else {
|
||||||
|
drawableWidth = key.icon.getIntrinsicWidth();
|
||||||
|
drawableHeight = key.icon.getIntrinsicHeight();
|
||||||
|
drawableX = (key.width - padding.left - padding.right - drawableWidth)
|
||||||
|
/ 2 + padding.left;
|
||||||
|
drawableY = (key.height - padding.top - padding.bottom - drawableHeight)
|
||||||
|
/ 2 + padding.top;
|
||||||
|
}
|
||||||
canvas.translate(drawableX, drawableY);
|
canvas.translate(drawableX, drawableY);
|
||||||
key.icon.setBounds(0, 0, drawableWidth, drawableHeight);
|
key.icon.setBounds(0, 0, drawableWidth, drawableHeight);
|
||||||
key.icon.draw(canvas);
|
key.icon.draw(canvas);
|
||||||
|
@ -1003,6 +1033,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx
|
||||||
if (key == null)
|
if (key == null)
|
||||||
return;
|
return;
|
||||||
mInvalidatedKey = key;
|
mInvalidatedKey = key;
|
||||||
|
// TODO we should clean up this and record key's region to use in onBufferDraw.
|
||||||
mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(),
|
mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(),
|
||||||
key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop());
|
key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop());
|
||||||
onBufferDraw();
|
onBufferDraw();
|
||||||
|
|