remove popup animation causing perceived lag during digitation

This commit is contained in:
dslul 2020-09-06 09:15:03 +02:00
parent 48b9ac9967
commit 6de199cbcf
2 changed files with 10 additions and 83 deletions

View file

@ -483,11 +483,11 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
locatePreviewPlacerView(); locatePreviewPlacerView();
getLocationInWindow(mOriginCoords); getLocationInWindow(mOriginCoords);
mKeyPreviewChoreographer.placeAndShowKeyPreview(key, keyboard.mIconsSet, getKeyDrawParams(), mKeyPreviewChoreographer.placeAndShowKeyPreview(key, keyboard.mIconsSet, getKeyDrawParams(),
getWidth(), mOriginCoords, mDrawingPreviewPlacerView, isHardwareAccelerated()); getWidth(), mOriginCoords, mDrawingPreviewPlacerView);
} }
private void dismissKeyPreviewWithoutDelay(@Nonnull final Key key) { private void dismissKeyPreviewWithoutDelay(@Nonnull final Key key) {
mKeyPreviewChoreographer.dismissKeyPreview(key, false /* withAnimation */); mKeyPreviewChoreographer.dismissKeyPreview(key);
invalidateKey(key); invalidateKey(key);
} }
@ -507,7 +507,7 @@ public final class MainKeyboardView extends KeyboardView implements DrawingProxy
private void dismissKeyPreview(@Nonnull final Key key) { private void dismissKeyPreview(@Nonnull final Key key) {
if (isHardwareAccelerated()) { if (isHardwareAccelerated()) {
mKeyPreviewChoreographer.dismissKeyPreview(key, true /* withAnimation */); mKeyPreviewChoreographer.dismissKeyPreview(key);
return; return;
} }
// TODO: Implement preference option to control key preview method and duration. // TODO: Implement preference option to control key preview method and duration.

View file

@ -16,8 +16,6 @@
package org.dslul.openboard.inputmethod.keyboard.internal; package org.dslul.openboard.inputmethod.keyboard.internal;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -68,7 +66,7 @@ public final class KeyPreviewChoreographer {
return mShowingKeyPreviewViews.containsKey(key); return mShowingKeyPreviewViews.containsKey(key);
} }
public void dismissKeyPreview(final Key key, final boolean withAnimation) { public void dismissKeyPreview(final Key key) {
if (key == null) { if (key == null) {
return; return;
} }
@ -76,19 +74,8 @@ public final class KeyPreviewChoreographer {
if (keyPreviewView == null) { if (keyPreviewView == null) {
return; return;
} }
final Object tag = keyPreviewView.getTag(); // Dismiss preview
if (withAnimation) {
if (tag instanceof KeyPreviewAnimators) {
final KeyPreviewAnimators animators = (KeyPreviewAnimators)tag;
animators.startDismiss();
return;
}
}
// Dismiss preview without animation.
mShowingKeyPreviewViews.remove(key); mShowingKeyPreviewViews.remove(key);
if (tag instanceof Animator) {
((Animator)tag).cancel();
}
keyPreviewView.setTag(null); keyPreviewView.setTag(null);
keyPreviewView.setVisibility(View.INVISIBLE); keyPreviewView.setVisibility(View.INVISIBLE);
mFreeKeyPreviewViews.add(keyPreviewView); mFreeKeyPreviewViews.add(keyPreviewView);
@ -96,11 +83,11 @@ public final class KeyPreviewChoreographer {
public void placeAndShowKeyPreview(final Key key, final KeyboardIconsSet iconsSet, public void placeAndShowKeyPreview(final Key key, final KeyboardIconsSet iconsSet,
final KeyDrawParams drawParams, final int keyboardViewWidth, final int[] keyboardOrigin, final KeyDrawParams drawParams, final int keyboardViewWidth, final int[] keyboardOrigin,
final ViewGroup placerView, final boolean withAnimation) { final ViewGroup placerView) {
final KeyPreviewView keyPreviewView = getKeyPreviewView(key, placerView); final KeyPreviewView keyPreviewView = getKeyPreviewView(key, placerView);
placeKeyPreview( placeKeyPreview(
key, keyPreviewView, iconsSet, drawParams, keyboardViewWidth, keyboardOrigin); key, keyPreviewView, iconsSet, drawParams, keyboardViewWidth, keyboardOrigin);
showKeyPreview(key, keyPreviewView, withAnimation); showKeyPreview(key, keyPreviewView);
} }
private void placeKeyPreview(final Key key, final KeyPreviewView keyPreviewView, private void placeKeyPreview(final Key key, final KeyPreviewView keyPreviewView,
@ -141,69 +128,9 @@ public final class KeyPreviewChoreographer {
keyPreviewView.setPivotY(previewHeight); keyPreviewView.setPivotY(previewHeight);
} }
void showKeyPreview(final Key key, final KeyPreviewView keyPreviewView, void showKeyPreview(final Key key, final KeyPreviewView keyPreviewView) {
final boolean withAnimation) {
if (!withAnimation) {
keyPreviewView.setVisibility(View.VISIBLE); keyPreviewView.setVisibility(View.VISIBLE);
mShowingKeyPreviewViews.put(key, keyPreviewView); mShowingKeyPreviewViews.put(key, keyPreviewView);
return;
} }
// Show preview with animation.
final Animator showUpAnimator = createShowUpAnimator(key, keyPreviewView);
final Animator dismissAnimator = createDismissAnimator(key, keyPreviewView);
final KeyPreviewAnimators animators = new KeyPreviewAnimators(
showUpAnimator, dismissAnimator);
keyPreviewView.setTag(animators);
animators.startShowUp();
}
public Animator createShowUpAnimator(final Key key, final KeyPreviewView keyPreviewView) {
final Animator showUpAnimator = mParams.createShowUpAnimator(keyPreviewView);
showUpAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(final Animator animator) {
showKeyPreview(key, keyPreviewView, false /* withAnimation */);
}
});
return showUpAnimator;
}
private Animator createDismissAnimator(final Key key, final KeyPreviewView keyPreviewView) {
final Animator dismissAnimator = mParams.createDismissAnimator(keyPreviewView);
dismissAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(final Animator animator) {
dismissKeyPreview(key, false /* withAnimation */);
}
});
return dismissAnimator;
}
private static class KeyPreviewAnimators extends AnimatorListenerAdapter {
private final Animator mShowUpAnimator;
private final Animator mDismissAnimator;
public KeyPreviewAnimators(final Animator showUpAnimator, final Animator dismissAnimator) {
mShowUpAnimator = showUpAnimator;
mDismissAnimator = dismissAnimator;
}
public void startShowUp() {
mShowUpAnimator.start();
}
public void startDismiss() {
if (mShowUpAnimator.isRunning()) {
mShowUpAnimator.addListener(this);
return;
}
mDismissAnimator.start();
}
@Override
public void onAnimationEnd(final Animator animator) {
mDismissAnimator.start();
}
}
} }