Release and register current key when emoji palette is hidden

Bug: 13290802
Change-Id: Ib087152f8bd47a5c81901377291e4223ee4a49ec
main
Tadashi G. Takaoka 2014-05-24 03:01:48 +09:00
parent db21267b78
commit 0380421bf7
3 changed files with 18 additions and 9 deletions

View File

@ -102,7 +102,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
} }
final Key key = getKey(e); final Key key = getKey(e);
if (key != null && key != mCurrentKey) { if (key != null && key != mCurrentKey) {
releaseCurrentKey(); releaseCurrentKey(false /* withKeyRegistering */);
} }
return true; return true;
} }
@ -119,7 +119,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
return mKeyDetector.detectHitKey(x, y); return mKeyDetector.detectHitKey(x, y);
} }
public void releaseCurrentKey() { public void releaseCurrentKey(final boolean withKeyRegistering) {
mHandler.removeCallbacks(mPendingKeyDown); mHandler.removeCallbacks(mPendingKeyDown);
mPendingKeyDown = null; mPendingKeyDown = null;
final Key currentKey = mCurrentKey; final Key currentKey = mCurrentKey;
@ -128,13 +128,16 @@ final class EmojiPageKeyboardView extends KeyboardView implements
} }
currentKey.onReleased(); currentKey.onReleased();
invalidateKey(currentKey); invalidateKey(currentKey);
if (withKeyRegistering) {
mListener.onReleaseKey(currentKey);
}
mCurrentKey = null; mCurrentKey = null;
} }
@Override @Override
public boolean onDown(final MotionEvent e) { public boolean onDown(final MotionEvent e) {
final Key key = getKey(e); final Key key = getKey(e);
releaseCurrentKey(); releaseCurrentKey(false /* withKeyRegistering */);
mCurrentKey = key; mCurrentKey = key;
if (key == null) { if (key == null) {
return false; return false;
@ -163,7 +166,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
final Key key = getKey(e); final Key key = getKey(e);
final Runnable pendingKeyDown = mPendingKeyDown; final Runnable pendingKeyDown = mPendingKeyDown;
final Key currentKey = mCurrentKey; final Key currentKey = mCurrentKey;
releaseCurrentKey(); releaseCurrentKey(false /* withKeyRegistering */);
if (key == null) { if (key == null) {
return false; return false;
} }
@ -189,14 +192,14 @@ final class EmojiPageKeyboardView extends KeyboardView implements
@Override @Override
public boolean onScroll(final MotionEvent e1, final MotionEvent e2, final float distanceX, public boolean onScroll(final MotionEvent e1, final MotionEvent e2, final float distanceX,
final float distanceY) { final float distanceY) {
releaseCurrentKey(); releaseCurrentKey(false /* withKeyRegistering */);
return false; return false;
} }
@Override @Override
public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float velocityX, public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float velocityX,
final float velocityY) { final float velocityY) {
releaseCurrentKey(); releaseCurrentKey(false /* withKeyRegistering */);
return false; return false;
} }

View File

@ -68,13 +68,18 @@ final class EmojiPalettesAdapter extends PagerAdapter {
} }
public void onPageScrolled() { public void onPageScrolled() {
releaseCurrentKey(false /* withKeyRegistering */);
}
public void releaseCurrentKey(final boolean withKeyRegistering) {
// Make sure the delayed key-down event (highlight effect and haptic feedback) will be // Make sure the delayed key-down event (highlight effect and haptic feedback) will be
// canceled. // canceled.
final EmojiPageKeyboardView currentKeyboardView = final EmojiPageKeyboardView currentKeyboardView =
mActiveKeyboardViews.get(mActivePosition); mActiveKeyboardViews.get(mActivePosition);
if (currentKeyboardView != null) { if (currentKeyboardView == null) {
currentKeyboardView.releaseCurrentKey(); return;
} }
currentKeyboardView.releaseCurrentKey(withKeyRegistering);
} }
@Override @Override
@ -90,7 +95,7 @@ final class EmojiPalettesAdapter extends PagerAdapter {
} }
final EmojiPageKeyboardView oldKeyboardView = mActiveKeyboardViews.get(mActivePosition); final EmojiPageKeyboardView oldKeyboardView = mActiveKeyboardViews.get(mActivePosition);
if (oldKeyboardView != null) { if (oldKeyboardView != null) {
oldKeyboardView.releaseCurrentKey(); oldKeyboardView.releaseCurrentKey(false /* withKeyRegistering */);
oldKeyboardView.deallocateMemory(); oldKeyboardView.deallocateMemory();
} }
mActivePosition = position; mActivePosition = position;

View File

@ -380,6 +380,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
} }
public void stopEmojiPalettes() { public void stopEmojiPalettes() {
mEmojiPalettesAdapter.releaseCurrentKey(true /* withKeyRegistering */);
mEmojiPalettesAdapter.flushPendingRecentKeys(); mEmojiPalettesAdapter.flushPendingRecentKeys();
mEmojiPager.setAdapter(null); mEmojiPager.setAdapter(null);
} }