Fix emoji recent key behavior
Bug: 10538430 Change-Id: I91e03a8e7914628cdc8e57c124c95e5e6e8ea2a6main
parent
0b4d75c2fa
commit
e7ed5cae44
|
@ -580,10 +580,18 @@ public final class EmojiKeyboardView extends LinearLayout implements OnTabChange
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCurrentCategoryId(final int categoryId, final boolean force) {
|
private void setCurrentCategoryId(final int categoryId, final boolean force) {
|
||||||
if (mEmojiCategory.getCurrentCategoryId() == categoryId && !force) {
|
final int oldCategoryId = mEmojiCategory.getCurrentCategoryId();
|
||||||
|
if (oldCategoryId == categoryId && !force) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (oldCategoryId == CATEGORY_ID_RECENTS) {
|
||||||
|
// Needs to save pending updates for recent keys when we get out of the recents
|
||||||
|
// category because we don't want to move the recent emojis around while the user
|
||||||
|
// is in the recents category.
|
||||||
|
mEmojiKeyboardAdapter.flushPendingRecentKeys();
|
||||||
|
}
|
||||||
|
|
||||||
mEmojiCategory.setCurrentCategoryId(categoryId);
|
mEmojiCategory.setCurrentCategoryId(categoryId);
|
||||||
final int newTabId = mEmojiCategory.getTabIdFromCategoryId(categoryId);
|
final int newTabId = mEmojiCategory.getTabIdFromCategoryId(categoryId);
|
||||||
final int newCategoryPageId = mEmojiCategory.getPageIdFromCategoryId(categoryId);
|
final int newCategoryPageId = mEmojiCategory.getPageIdFromCategoryId(categoryId);
|
||||||
|
@ -612,8 +620,18 @@ public final class EmojiKeyboardView extends LinearLayout implements OnTabChange
|
||||||
mRecentsKeyboard = mEmojiCategory.getKeyboard(CATEGORY_ID_RECENTS, 0);
|
mRecentsKeyboard = mEmojiCategory.getKeyboard(CATEGORY_ID_RECENTS, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void flushPendingRecentKeys() {
|
||||||
|
mRecentsKeyboard.flushPendingRecentKeys();
|
||||||
|
final KeyboardView recentKeyboardView =
|
||||||
|
mActiveKeyboardView.get(mEmojiCategory.getRecentTabId());
|
||||||
|
if (recentKeyboardView != null) {
|
||||||
|
recentKeyboardView.invalidateAllKeys();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void addRecentKey(final Key key) {
|
public void addRecentKey(final Key key) {
|
||||||
if (mEmojiCategory.isInRecentTab()) {
|
if (mEmojiCategory.isInRecentTab()) {
|
||||||
|
mRecentsKeyboard.addPendingKey(key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mRecentsKeyboard.addKeyFirst(key);
|
mRecentsKeyboard.addKeyFirst(key);
|
||||||
|
|
|
@ -39,6 +39,7 @@ public class DynamicGridKeyboard extends Keyboard {
|
||||||
private static final String TAG = DynamicGridKeyboard.class.getSimpleName();
|
private static final String TAG = DynamicGridKeyboard.class.getSimpleName();
|
||||||
private static final int TEMPLATE_KEY_CODE_0 = 0x30;
|
private static final int TEMPLATE_KEY_CODE_0 = 0x30;
|
||||||
private static final int TEMPLATE_KEY_CODE_1 = 0x31;
|
private static final int TEMPLATE_KEY_CODE_1 = 0x31;
|
||||||
|
private final Object mLock = new Object();
|
||||||
|
|
||||||
private final SharedPreferences mPrefs;
|
private final SharedPreferences mPrefs;
|
||||||
private final int mLeftPadding;
|
private final int mLeftPadding;
|
||||||
|
@ -48,6 +49,7 @@ public class DynamicGridKeyboard extends Keyboard {
|
||||||
private final int mMaxKeyCount;
|
private final int mMaxKeyCount;
|
||||||
private final boolean mIsRecents;
|
private final boolean mIsRecents;
|
||||||
private final ArrayDeque<GridKey> mGridKeys = CollectionUtils.newArrayDeque();
|
private final ArrayDeque<GridKey> mGridKeys = CollectionUtils.newArrayDeque();
|
||||||
|
private final ArrayDeque<Key> mPendingKeys = CollectionUtils.newArrayDeque();
|
||||||
|
|
||||||
private Key[] mCachedGridKeys;
|
private Key[] mCachedGridKeys;
|
||||||
|
|
||||||
|
@ -74,6 +76,21 @@ public class DynamicGridKeyboard extends Keyboard {
|
||||||
throw new RuntimeException("Can't find template key: code=" + code);
|
throw new RuntimeException("Can't find template key: code=" + code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addPendingKey(final Key usedKey) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
mPendingKeys.addLast(usedKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void flushPendingRecentKeys() {
|
||||||
|
synchronized (mLock) {
|
||||||
|
while (!mPendingKeys.isEmpty()) {
|
||||||
|
addKey(mPendingKeys.pollFirst(), true);
|
||||||
|
}
|
||||||
|
saveRecentKeys();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void addKeyFirst(final Key usedKey) {
|
public void addKeyFirst(final Key usedKey) {
|
||||||
addKey(usedKey, true);
|
addKey(usedKey, true);
|
||||||
if (mIsRecents) {
|
if (mIsRecents) {
|
||||||
|
@ -89,7 +106,7 @@ public class DynamicGridKeyboard extends Keyboard {
|
||||||
if (usedKey == null) {
|
if (usedKey == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
synchronized (mGridKeys) {
|
synchronized (mLock) {
|
||||||
mCachedGridKeys = null;
|
mCachedGridKeys = null;
|
||||||
final GridKey key = new GridKey(usedKey);
|
final GridKey key = new GridKey(usedKey);
|
||||||
while (mGridKeys.remove(key)) {
|
while (mGridKeys.remove(key)) {
|
||||||
|
@ -167,7 +184,7 @@ public class DynamicGridKeyboard extends Keyboard {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Key[] getKeys() {
|
public Key[] getKeys() {
|
||||||
synchronized (mGridKeys) {
|
synchronized (mLock) {
|
||||||
if (mCachedGridKeys != null) {
|
if (mCachedGridKeys != null) {
|
||||||
return mCachedGridKeys;
|
return mCachedGridKeys;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue