Loading tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java +94 −27 Original line number Diff line number Diff line Loading @@ -15,21 +15,25 @@ */ package com.google.android.test.handwritingime; import android.R; import android.annotation.Nullable; import android.graphics.PointF; import android.graphics.RectF; import android.inputmethodservice.InputMethodService; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.inputmethod.CursorAnchorInfo; import android.view.inputmethod.DeleteGesture; import android.view.inputmethod.HandwritingGesture; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InsertGesture; import android.view.inputmethod.SelectGesture; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.Toast; Loading @@ -39,19 +43,19 @@ public class HandwritingIme extends InputMethodService { public static final int HEIGHT_DP = 100; private static final int OP_NONE = 0; private static final int OP_SELECT = 1; private static final int OP_DELETE = 2; private static final int OP_DELETE_SPACE = 3; private static final int OP_INSERT = 4; private static final int OP_INSERT = 3; private Window mInkWindow; private InkView mInk; static final String TAG = "HandwritingIme"; private int mRichGestureMode = OP_NONE; private int mRichGestureGranularity = -1; private Spinner mRichGestureModeSpinner; private Spinner mRichGestureGranularitySpinner; private PointF mRichGestureStartPoint; Loading Loading @@ -86,13 +90,45 @@ public class HandwritingIme extends InputMethodService { switch (event.getAction()) { case MotionEvent.ACTION_UP: { if (areRichGesturesEnabled()) { Bundle bundle = new Bundle(); bundle.putInt("operation", mRichGestureMode); bundle.putFloat("left", mRichGestureStartPoint.x); bundle.putFloat("top", mRichGestureStartPoint.y); bundle.putFloat("right", event.getX()); bundle.putFloat("bottom", event.getY()); performPrivateCommand("android.widget.RichGesture", bundle); HandwritingGesture gesture = null; switch(mRichGestureMode) { case OP_SELECT: SelectGesture.Builder builder = new SelectGesture.Builder(); builder.setGranularity(mRichGestureGranularity) .setSelectionArea(new RectF(mRichGestureStartPoint.x, mRichGestureStartPoint.y, event.getX(), event.getY())) .setFallbackText("fallback text"); gesture = builder.build(); break; case OP_DELETE: DeleteGesture.Builder builder1 = new DeleteGesture.Builder(); builder1.setGranularity(mRichGestureGranularity) .setDeletionArea(new RectF(mRichGestureStartPoint.x, mRichGestureStartPoint.y, event.getX(), event.getY())) .setFallbackText("fallback text"); gesture = builder1.build(); break; case OP_INSERT: InsertGesture.Builder builder2 = new InsertGesture.Builder(); builder2.setInsertionPoint( new PointF(mRichGestureStartPoint.x, mRichGestureStartPoint.y)) .setTextToInsert(" ") .setFallbackText("fallback text"); gesture = builder2.build(); } if (gesture == null) { // This shouldn't happen Log.e(TAG, "Unrecognized gesture mode: " + mRichGestureMode); return; } InputConnection ic = getCurrentInputConnection(); if (getCurrentInputStarted() && ic != null) { ic.performHandwritingGesture(gesture, null, null); } else { // This shouldn't happen Log.e(TAG, "No active InputConnection"); } Log.d(TAG, "Sending RichGesture " + mRichGestureMode + " (Screen) Left: " + mRichGestureStartPoint.x + ", Top: " + mRichGestureStartPoint.y Loading Loading @@ -123,8 +159,15 @@ public class HandwritingIme extends InputMethodService { view.addView(inner, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, height)); view.addView(getRichGestureActionsSpinner()); inner.setBackgroundColor(getColor(R.color.abc_tint_spinner)); LinearLayout layout = new LinearLayout(this); layout.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(getRichGestureActionsSpinner()); layout.addView(getRichGestureGranularitySpinner()); view.addView(layout); inner.setBackgroundColor(getColor(R.color.holo_green_light)); return view; } Loading @@ -133,14 +176,12 @@ public class HandwritingIme extends InputMethodService { if (mRichGestureModeSpinner != null) { return mRichGestureModeSpinner; } //get the spinner from the xml. mRichGestureModeSpinner = new Spinner(this); mRichGestureModeSpinner.setPadding(100, 0, 100, 0); mRichGestureModeSpinner.setTooltipText("Handwriting IME mode"); String[] items = new String[] { "Handwriting IME - Rich gesture disabled", "Rich gesture SELECT", "Rich gesture DELETE", "Rich gesture DELETE SPACE", "Rich gesture INSERT" }; "Rich gesture DELETE", "Rich gesture INSERT" }; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Loading @@ -149,17 +190,52 @@ public class HandwritingIme extends InputMethodService { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { mRichGestureMode = position; mRichGestureGranularitySpinner.setEnabled( mRichGestureMode != OP_INSERT && mRichGestureMode != OP_NONE); Log.d(TAG, "Setting RichGesture Mode " + mRichGestureMode); } @Override public void onNothingSelected(AdapterView<?> parent) { mRichGestureMode = OP_NONE; mRichGestureGranularitySpinner.setEnabled(false); } }); mRichGestureModeSpinner.setSelection(0); // default disabled return mRichGestureModeSpinner; } private View getRichGestureGranularitySpinner() { if (mRichGestureGranularitySpinner != null) { return mRichGestureGranularitySpinner; } mRichGestureGranularitySpinner = new Spinner(this); mRichGestureGranularitySpinner.setPadding(100, 0, 100, 0); mRichGestureGranularitySpinner.setTooltipText(" Granularity"); String[] items = new String[] { "Granularity - UNDEFINED", "Granularity - WORD", "Granularity - CHARACTER"}; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mRichGestureGranularitySpinner.setAdapter(adapter); mRichGestureGranularitySpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { mRichGestureGranularity = position; Log.d(TAG, "Setting RichGesture Granularity " + mRichGestureGranularity); } @Override public void onNothingSelected(AdapterView<?> parent) { mRichGestureGranularity = 0; } }); mRichGestureGranularitySpinner.setSelection(1); return mRichGestureGranularitySpinner; } public void onPrepareStylusHandwriting() { Log.d(TAG, "onPrepareStylusHandwriting "); if (mInk == null) { Loading Loading @@ -190,15 +266,6 @@ public class HandwritingIme extends InputMethodService { return false; } boolean performPrivateCommand(String action, Bundle bundle) { if (!getCurrentInputStarted()) { Log.e(TAG, "Input hasnt started, can't performPrivateCommand"); return false; } return getCurrentInputConnection().performPrivateCommand(action, bundle); } private boolean areRichGesturesEnabled() { return mRichGestureMode != OP_NONE; } Loading tests/HandwritingIme/src/com/google/android/test/handwritingime/InkView.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import android.view.WindowManager; import android.view.WindowMetrics; class InkView extends View { private static final long FINISH_TIMEOUT = 600; private static final long FINISH_TIMEOUT = 1500; private final HandwritingIme.HandwritingFinisher mHwCanceller; private final HandwritingIme.StylusConsumer mConsumer; private final int mTopInset; Loading Loading
tests/HandwritingIme/src/com/google/android/test/handwritingime/HandwritingIme.java +94 −27 Original line number Diff line number Diff line Loading @@ -15,21 +15,25 @@ */ package com.google.android.test.handwritingime; import android.R; import android.annotation.Nullable; import android.graphics.PointF; import android.graphics.RectF; import android.inputmethodservice.InputMethodService; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.inputmethod.CursorAnchorInfo; import android.view.inputmethod.DeleteGesture; import android.view.inputmethod.HandwritingGesture; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InsertGesture; import android.view.inputmethod.SelectGesture; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.Toast; Loading @@ -39,19 +43,19 @@ public class HandwritingIme extends InputMethodService { public static final int HEIGHT_DP = 100; private static final int OP_NONE = 0; private static final int OP_SELECT = 1; private static final int OP_DELETE = 2; private static final int OP_DELETE_SPACE = 3; private static final int OP_INSERT = 4; private static final int OP_INSERT = 3; private Window mInkWindow; private InkView mInk; static final String TAG = "HandwritingIme"; private int mRichGestureMode = OP_NONE; private int mRichGestureGranularity = -1; private Spinner mRichGestureModeSpinner; private Spinner mRichGestureGranularitySpinner; private PointF mRichGestureStartPoint; Loading Loading @@ -86,13 +90,45 @@ public class HandwritingIme extends InputMethodService { switch (event.getAction()) { case MotionEvent.ACTION_UP: { if (areRichGesturesEnabled()) { Bundle bundle = new Bundle(); bundle.putInt("operation", mRichGestureMode); bundle.putFloat("left", mRichGestureStartPoint.x); bundle.putFloat("top", mRichGestureStartPoint.y); bundle.putFloat("right", event.getX()); bundle.putFloat("bottom", event.getY()); performPrivateCommand("android.widget.RichGesture", bundle); HandwritingGesture gesture = null; switch(mRichGestureMode) { case OP_SELECT: SelectGesture.Builder builder = new SelectGesture.Builder(); builder.setGranularity(mRichGestureGranularity) .setSelectionArea(new RectF(mRichGestureStartPoint.x, mRichGestureStartPoint.y, event.getX(), event.getY())) .setFallbackText("fallback text"); gesture = builder.build(); break; case OP_DELETE: DeleteGesture.Builder builder1 = new DeleteGesture.Builder(); builder1.setGranularity(mRichGestureGranularity) .setDeletionArea(new RectF(mRichGestureStartPoint.x, mRichGestureStartPoint.y, event.getX(), event.getY())) .setFallbackText("fallback text"); gesture = builder1.build(); break; case OP_INSERT: InsertGesture.Builder builder2 = new InsertGesture.Builder(); builder2.setInsertionPoint( new PointF(mRichGestureStartPoint.x, mRichGestureStartPoint.y)) .setTextToInsert(" ") .setFallbackText("fallback text"); gesture = builder2.build(); } if (gesture == null) { // This shouldn't happen Log.e(TAG, "Unrecognized gesture mode: " + mRichGestureMode); return; } InputConnection ic = getCurrentInputConnection(); if (getCurrentInputStarted() && ic != null) { ic.performHandwritingGesture(gesture, null, null); } else { // This shouldn't happen Log.e(TAG, "No active InputConnection"); } Log.d(TAG, "Sending RichGesture " + mRichGestureMode + " (Screen) Left: " + mRichGestureStartPoint.x + ", Top: " + mRichGestureStartPoint.y Loading Loading @@ -123,8 +159,15 @@ public class HandwritingIme extends InputMethodService { view.addView(inner, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, height)); view.addView(getRichGestureActionsSpinner()); inner.setBackgroundColor(getColor(R.color.abc_tint_spinner)); LinearLayout layout = new LinearLayout(this); layout.setLayoutParams(new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(getRichGestureActionsSpinner()); layout.addView(getRichGestureGranularitySpinner()); view.addView(layout); inner.setBackgroundColor(getColor(R.color.holo_green_light)); return view; } Loading @@ -133,14 +176,12 @@ public class HandwritingIme extends InputMethodService { if (mRichGestureModeSpinner != null) { return mRichGestureModeSpinner; } //get the spinner from the xml. mRichGestureModeSpinner = new Spinner(this); mRichGestureModeSpinner.setPadding(100, 0, 100, 0); mRichGestureModeSpinner.setTooltipText("Handwriting IME mode"); String[] items = new String[] { "Handwriting IME - Rich gesture disabled", "Rich gesture SELECT", "Rich gesture DELETE", "Rich gesture DELETE SPACE", "Rich gesture INSERT" }; "Rich gesture DELETE", "Rich gesture INSERT" }; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Loading @@ -149,17 +190,52 @@ public class HandwritingIme extends InputMethodService { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { mRichGestureMode = position; mRichGestureGranularitySpinner.setEnabled( mRichGestureMode != OP_INSERT && mRichGestureMode != OP_NONE); Log.d(TAG, "Setting RichGesture Mode " + mRichGestureMode); } @Override public void onNothingSelected(AdapterView<?> parent) { mRichGestureMode = OP_NONE; mRichGestureGranularitySpinner.setEnabled(false); } }); mRichGestureModeSpinner.setSelection(0); // default disabled return mRichGestureModeSpinner; } private View getRichGestureGranularitySpinner() { if (mRichGestureGranularitySpinner != null) { return mRichGestureGranularitySpinner; } mRichGestureGranularitySpinner = new Spinner(this); mRichGestureGranularitySpinner.setPadding(100, 0, 100, 0); mRichGestureGranularitySpinner.setTooltipText(" Granularity"); String[] items = new String[] { "Granularity - UNDEFINED", "Granularity - WORD", "Granularity - CHARACTER"}; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mRichGestureGranularitySpinner.setAdapter(adapter); mRichGestureGranularitySpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { mRichGestureGranularity = position; Log.d(TAG, "Setting RichGesture Granularity " + mRichGestureGranularity); } @Override public void onNothingSelected(AdapterView<?> parent) { mRichGestureGranularity = 0; } }); mRichGestureGranularitySpinner.setSelection(1); return mRichGestureGranularitySpinner; } public void onPrepareStylusHandwriting() { Log.d(TAG, "onPrepareStylusHandwriting "); if (mInk == null) { Loading Loading @@ -190,15 +266,6 @@ public class HandwritingIme extends InputMethodService { return false; } boolean performPrivateCommand(String action, Bundle bundle) { if (!getCurrentInputStarted()) { Log.e(TAG, "Input hasnt started, can't performPrivateCommand"); return false; } return getCurrentInputConnection().performPrivateCommand(action, bundle); } private boolean areRichGesturesEnabled() { return mRichGestureMode != OP_NONE; } Loading
tests/HandwritingIme/src/com/google/android/test/handwritingime/InkView.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import android.view.WindowManager; import android.view.WindowMetrics; class InkView extends View { private static final long FINISH_TIMEOUT = 600; private static final long FINISH_TIMEOUT = 1500; private final HandwritingIme.HandwritingFinisher mHwCanceller; private final HandwritingIme.StylusConsumer mConsumer; private final int mTopInset; Loading