Merge "Fix 5335993, calculate correct size of lockscreen buttons"
This commit is contained in:
@@ -144,6 +144,8 @@ public class Keyboard {
|
|||||||
/** Number of key widths from current touch point to search for nearest keys. */
|
/** Number of key widths from current touch point to search for nearest keys. */
|
||||||
private static float SEARCH_DISTANCE = 1.8f;
|
private static float SEARCH_DISTANCE = 1.8f;
|
||||||
|
|
||||||
|
private ArrayList<Row> rows = new ArrayList<Row>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Container for keys in the keyboard. All keys in a row are at the same Y-coordinate.
|
* Container for keys in the keyboard. All keys in a row are at the same Y-coordinate.
|
||||||
* Some of the key size defaults can be overridden per row from what the {@link Keyboard}
|
* Some of the key size defaults can be overridden per row from what the {@link Keyboard}
|
||||||
@@ -164,6 +166,9 @@ public class Keyboard {
|
|||||||
public int defaultHorizontalGap;
|
public int defaultHorizontalGap;
|
||||||
/** Vertical gap following this row. */
|
/** Vertical gap following this row. */
|
||||||
public int verticalGap;
|
public int verticalGap;
|
||||||
|
|
||||||
|
ArrayList<Key> mKeys = new ArrayList<Key>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edge flags for this row of keys. Possible values that can be assigned are
|
* Edge flags for this row of keys. Possible values that can be assigned are
|
||||||
* {@link Keyboard#EDGE_TOP EDGE_TOP} and {@link Keyboard#EDGE_BOTTOM EDGE_BOTTOM}
|
* {@link Keyboard#EDGE_TOP EDGE_TOP} and {@link Keyboard#EDGE_BOTTOM EDGE_BOTTOM}
|
||||||
@@ -256,7 +261,7 @@ public class Keyboard {
|
|||||||
public CharSequence text;
|
public CharSequence text;
|
||||||
/** Popup characters */
|
/** Popup characters */
|
||||||
public CharSequence popupCharacters;
|
public CharSequence popupCharacters;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flags that specify the anchoring to edges of the keyboard for detecting touch events
|
* Flags that specify the anchoring to edges of the keyboard for detecting touch events
|
||||||
* that are just out of the boundary of the key. This is a bit mask of
|
* that are just out of the boundary of the key. This is a bit mask of
|
||||||
@@ -596,11 +601,44 @@ public class Keyboard {
|
|||||||
column++;
|
column++;
|
||||||
x += key.width + key.gap;
|
x += key.width + key.gap;
|
||||||
mKeys.add(key);
|
mKeys.add(key);
|
||||||
|
row.mKeys.add(key);
|
||||||
if (x > mTotalWidth) {
|
if (x > mTotalWidth) {
|
||||||
mTotalWidth = x;
|
mTotalWidth = x;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mTotalHeight = y + mDefaultHeight;
|
mTotalHeight = y + mDefaultHeight;
|
||||||
|
rows.add(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
final void resize(int newWidth, int newHeight) {
|
||||||
|
int numRows = rows.size();
|
||||||
|
for (int rowIndex = 0; rowIndex < numRows; ++rowIndex) {
|
||||||
|
Row row = rows.get(rowIndex);
|
||||||
|
int numKeys = row.mKeys.size();
|
||||||
|
int totalGap = 0;
|
||||||
|
int totalWidth = 0;
|
||||||
|
for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) {
|
||||||
|
Key key = row.mKeys.get(keyIndex);
|
||||||
|
if (keyIndex > 0) {
|
||||||
|
totalGap += key.gap;
|
||||||
|
}
|
||||||
|
totalWidth += key.width;
|
||||||
|
}
|
||||||
|
if (totalGap + totalWidth > newWidth) {
|
||||||
|
int x = 0;
|
||||||
|
float scaleFactor = (float)(newWidth - totalGap) / totalWidth;
|
||||||
|
for (int keyIndex = 0; keyIndex < numKeys; ++keyIndex) {
|
||||||
|
Key key = row.mKeys.get(keyIndex);
|
||||||
|
key.width *= scaleFactor;
|
||||||
|
key.x = x;
|
||||||
|
x += key.width + key.gap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mTotalWidth = newWidth;
|
||||||
|
// TODO: This does not adjust the vertical placement according to the new size.
|
||||||
|
// The main problem in the previous code was horizontal placement/size, but we should
|
||||||
|
// also recalculate the vertical sizes/positions when we get this resize call.
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Key> getKeys() {
|
public List<Key> getKeys() {
|
||||||
@@ -749,7 +787,7 @@ public class Keyboard {
|
|||||||
Row currentRow = null;
|
Row currentRow = null;
|
||||||
Resources res = context.getResources();
|
Resources res = context.getResources();
|
||||||
boolean skipRow = false;
|
boolean skipRow = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int event;
|
int event;
|
||||||
while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
|
while ((event = parser.next()) != XmlResourceParser.END_DOCUMENT) {
|
||||||
@@ -759,6 +797,7 @@ public class Keyboard {
|
|||||||
inRow = true;
|
inRow = true;
|
||||||
x = 0;
|
x = 0;
|
||||||
currentRow = createRowFromXml(res, parser);
|
currentRow = createRowFromXml(res, parser);
|
||||||
|
rows.add(currentRow);
|
||||||
skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode;
|
skipRow = currentRow.mode != 0 && currentRow.mode != mKeyboardMode;
|
||||||
if (skipRow) {
|
if (skipRow) {
|
||||||
skipToEndOfRow(parser);
|
skipToEndOfRow(parser);
|
||||||
@@ -781,6 +820,7 @@ public class Keyboard {
|
|||||||
} else if (key.codes[0] == KEYCODE_ALT) {
|
} else if (key.codes[0] == KEYCODE_ALT) {
|
||||||
mModifierKeys.add(key);
|
mModifierKeys.add(key);
|
||||||
}
|
}
|
||||||
|
currentRow.mKeys.add(key);
|
||||||
} else if (TAG_KEYBOARD.equals(tag)) {
|
} else if (TAG_KEYBOARD.equals(tag)) {
|
||||||
parseKeyboardAttributes(res, parser);
|
parseKeyboardAttributes(res, parser);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -376,6 +376,7 @@ public class KeyboardView extends View implements View.OnClickListener {
|
|||||||
initGestureDetector();
|
initGestureDetector();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void initGestureDetector() {
|
private void initGestureDetector() {
|
||||||
mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
|
mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -615,6 +616,9 @@ public class KeyboardView extends View implements View.OnClickListener {
|
|||||||
@Override
|
@Override
|
||||||
public void onSizeChanged(int w, int h, int oldw, int oldh) {
|
public void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||||
super.onSizeChanged(w, h, oldw, oldh);
|
super.onSizeChanged(w, h, oldw, oldh);
|
||||||
|
if (mKeyboard != null) {
|
||||||
|
mKeyboard.resize(w, h);
|
||||||
|
}
|
||||||
// Release the buffer, if any and it will be reallocated on the next draw
|
// Release the buffer, if any and it will be reallocated on the next draw
|
||||||
mBuffer = null;
|
mBuffer = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,6 +170,7 @@
|
|||||||
<com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
|
<com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
|
||||||
android:layout_width="270dip"
|
android:layout_width="270dip"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="4dip"
|
||||||
android:layout_marginRight="4dip"
|
android:layout_marginRight="4dip"
|
||||||
android:background="#40000000"
|
android:background="#40000000"
|
||||||
android:layout_marginTop="5dip"
|
android:layout_marginTop="5dip"
|
||||||
|
|||||||
@@ -132,7 +132,7 @@
|
|||||||
<!-- Numeric keyboard -->
|
<!-- Numeric keyboard -->
|
||||||
<com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
|
<com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginLeft="4dip"
|
||||||
android:layout_marginRight="4dip"
|
android:layout_marginRight="4dip"
|
||||||
android:paddingTop="4dip"
|
android:paddingTop="4dip"
|
||||||
android:paddingBottom="4dip"
|
android:paddingBottom="4dip"
|
||||||
|
|||||||
Reference in New Issue
Block a user