Remove workaround code of placing DrawingPreviewPlacerView
This CL divides MainKeyboardView.locatePreviewPlacerView method into two methods. One is installing DrawingPreviewPlacerView to the window as Frontmost view. Another is telling the location of MainKeyboardView to DrawingPreviewPlacerView. Thus we can eliminate workaround code to deal with transient states in orientation change. Change-Id: Ia5d8f28dfb5213d27aa218c72d838a3c3be5a527
This commit is contained in:
parent
b6c70f4ed3
commit
0c01fc6f1c
4 changed files with 30 additions and 27 deletions
|
@ -30,7 +30,6 @@ import android.graphics.Typeface;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.DisplayMetrics;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
@ -428,21 +427,11 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
|
||||||
}
|
}
|
||||||
|
|
||||||
private void locatePreviewPlacerView() {
|
private void locatePreviewPlacerView() {
|
||||||
if (mDrawingPreviewPlacerView.getParent() != null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final int width = getWidth();
|
|
||||||
final int height = getHeight();
|
|
||||||
if (width == 0 || height == 0) {
|
|
||||||
// In transient state.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
getLocationInWindow(mOriginCoords);
|
getLocationInWindow(mOriginCoords);
|
||||||
final DisplayMetrics dm = getResources().getDisplayMetrics();
|
mDrawingPreviewPlacerView.setKeyboardViewGeometry(mOriginCoords, getWidth(), getHeight());
|
||||||
if (CoordinateUtils.y(mOriginCoords) < dm.heightPixels / 4) {
|
|
||||||
// In transient state.
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void installPreviewPlacerView() {
|
||||||
final View rootView = getRootView();
|
final View rootView = getRootView();
|
||||||
if (rootView == null) {
|
if (rootView == null) {
|
||||||
Log.w(TAG, "Cannot find root view");
|
Log.w(TAG, "Cannot find root view");
|
||||||
|
@ -452,10 +441,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
|
||||||
// Note: It'd be very weird if we get null by android.R.id.content.
|
// Note: It'd be very weird if we get null by android.R.id.content.
|
||||||
if (windowContentView == null) {
|
if (windowContentView == null) {
|
||||||
Log.w(TAG, "Cannot find android.R.id.content view to add DrawingPreviewPlacerView");
|
Log.w(TAG, "Cannot find android.R.id.content view to add DrawingPreviewPlacerView");
|
||||||
} else {
|
return;
|
||||||
windowContentView.addView(mDrawingPreviewPlacerView);
|
|
||||||
mDrawingPreviewPlacerView.setKeyboardViewGeometry(mOriginCoords, width, height);
|
|
||||||
}
|
}
|
||||||
|
windowContentView.addView(mDrawingPreviewPlacerView);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -576,6 +564,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
|
||||||
@Override
|
@Override
|
||||||
protected void onAttachedToWindow() {
|
protected void onAttachedToWindow() {
|
||||||
super.onAttachedToWindow();
|
super.onAttachedToWindow();
|
||||||
|
installPreviewPlacerView();
|
||||||
// Notify the ResearchLogger (development only diagnostics) that the keyboard view has
|
// Notify the ResearchLogger (development only diagnostics) that the keyboard view has
|
||||||
// been attached. This is needed to properly show the splash screen, which requires that
|
// been attached. This is needed to properly show the splash screen, which requires that
|
||||||
// the window token of the KeyboardView be non-null.
|
// the window token of the KeyboardView be non-null.
|
||||||
|
|
|
@ -29,25 +29,37 @@ import com.android.inputmethod.keyboard.PointerTracker;
|
||||||
public abstract class AbstractDrawingPreview {
|
public abstract class AbstractDrawingPreview {
|
||||||
private final View mDrawingView;
|
private final View mDrawingView;
|
||||||
private boolean mPreviewEnabled;
|
private boolean mPreviewEnabled;
|
||||||
|
private boolean mHasValidGeometry;
|
||||||
|
|
||||||
protected AbstractDrawingPreview(final View drawingView) {
|
protected AbstractDrawingPreview(final View drawingView) {
|
||||||
mDrawingView = drawingView;
|
mDrawingView = drawingView;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final View getDrawingView() {
|
protected final View getDrawingView() {
|
||||||
return mDrawingView;
|
return mDrawingView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected final boolean isPreviewEnabled() {
|
||||||
|
return mPreviewEnabled && mHasValidGeometry;
|
||||||
|
}
|
||||||
|
|
||||||
public final void setPreviewEnabled(final boolean enabled) {
|
public final void setPreviewEnabled(final boolean enabled) {
|
||||||
mPreviewEnabled = enabled;
|
mPreviewEnabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPreviewEnabled() {
|
/**
|
||||||
return mPreviewEnabled;
|
* Set {@link MainKeyboardView} geometry and position in the {@link SoftInputWindow}.
|
||||||
}
|
* The class that is overriding this method must call this super implementation.
|
||||||
|
*
|
||||||
public void setKeyboardGeometry(final int[] originCoords, final int width, final int height) {
|
* @param originCoords the top-left coordinates of the {@link MainKeyboardView} in
|
||||||
// Default implementation is empty.
|
* {@link SoftInputWindow} coordinate-system. This is unused but has a point in an
|
||||||
|
* extended class, such as {@link GestureTrailsDrawingPreview}.
|
||||||
|
* @param width the width of {@link MainKeyboardView}.
|
||||||
|
* @param height the height of {@link MainKeyboardView}.
|
||||||
|
*/
|
||||||
|
public void setKeyboardViewGeometry(final int[] originCoords, final int width,
|
||||||
|
final int height) {
|
||||||
|
mHasValidGeometry = (width > 0 && height > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void onDeallocateMemory();
|
public abstract void onDeallocateMemory();
|
||||||
|
|
|
@ -55,7 +55,7 @@ public final class DrawingPreviewPlacerView extends RelativeLayout {
|
||||||
CoordinateUtils.copy(mKeyboardViewOrigin, originCoords);
|
CoordinateUtils.copy(mKeyboardViewOrigin, originCoords);
|
||||||
final int count = mPreviews.size();
|
final int count = mPreviews.size();
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
mPreviews.get(i).setKeyboardGeometry(originCoords, width, height);
|
mPreviews.get(i).setKeyboardViewGeometry(originCoords, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,9 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setKeyboardGeometry(final int[] originCoords, final int width, final int height) {
|
public void setKeyboardViewGeometry(final int[] originCoords, final int width,
|
||||||
|
final int height) {
|
||||||
|
super.setKeyboardViewGeometry(originCoords, width, height);
|
||||||
mOffscreenOffsetY = (int)(height
|
mOffscreenOffsetY = (int)(height
|
||||||
* GestureStrokeRecognitionPoints.EXTRA_GESTURE_TRAIL_AREA_ABOVE_KEYBOARD_RATIO);
|
* GestureStrokeRecognitionPoints.EXTRA_GESTURE_TRAIL_AREA_ABOVE_KEYBOARD_RATIO);
|
||||||
mOffscreenWidth = width;
|
mOffscreenWidth = width;
|
||||||
|
|
Loading…
Reference in a new issue